* [PATCH 1/2] irqchip/pruss-intc: Use match data directly @ 2026-09-03 18:52 Andrew Davis 2026-09-03 18:52 ` [PATCH 2/2] irqchip/pruss-intc: Use scoped lock guard and devm_mutex_init Andrew Davis 2026-09-05 14:02 ` [PATCH 1/2] irqchip/pruss-intc: Use match data directly Radu Rendec 0 siblings, 2 replies; 4+ messages in thread From: Andrew Davis @ 2026-09-03 18:52 UTC (permalink / raw) To: Thomas Gleixner, Radu Rendec, linux-kernel; +Cc: Andrew Davis The match data is fetched before the instance data is available, but it is not used until after. Skip the temporary variable and fetch the match data after it has a place to be stored. Signed-off-by: Andrew Davis <afd@ti.com> --- drivers/irqchip/irq-pruss-intc.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/drivers/irqchip/irq-pruss-intc.c b/drivers/irqchip/irq-pruss-intc.c index 81078d56f38dc..cc3a7c21c2904 100644 --- a/drivers/irqchip/irq-pruss-intc.c +++ b/drivers/irqchip/irq-pruss-intc.c @@ -516,24 +516,21 @@ static const char * const irq_names[MAX_NUM_HOST_IRQS] = { static int pruss_intc_probe(struct platform_device *pdev) { - const struct pruss_intc_match_data *data; struct device *dev = &pdev->dev; struct pruss_intc *intc; struct pruss_host_irq_data *host_data; int i, irq, ret; u8 max_system_events, irqs_reserved = 0; - data = of_device_get_match_data(dev); - if (!data) - return -ENODEV; - - max_system_events = data->num_system_events; - intc = devm_kzalloc(dev, sizeof(*intc), GFP_KERNEL); if (!intc) return -ENOMEM; - intc->soc_config = data; + intc->soc_config = of_device_get_match_data(dev); + if (!intc->soc_config) + return -ENODEV; + max_system_events = intc->soc_config->num_system_events; + intc->dev = dev; platform_set_drvdata(pdev, intc); -- 2.39.2 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 2/2] irqchip/pruss-intc: Use scoped lock guard and devm_mutex_init 2026-09-03 18:52 [PATCH 1/2] irqchip/pruss-intc: Use match data directly Andrew Davis @ 2026-09-03 18:52 ` Andrew Davis 2026-09-05 16:01 ` Radu Rendec 2026-09-05 14:02 ` [PATCH 1/2] irqchip/pruss-intc: Use match data directly Radu Rendec 1 sibling, 1 reply; 4+ messages in thread From: Andrew Davis @ 2026-09-03 18:52 UTC (permalink / raw) To: Thomas Gleixner, Radu Rendec, linux-kernel; +Cc: Andrew Davis Scoped locking simplifies the return path in a spot, and removes a couple lines in another couple spots. The devm mutex init will call mutex_destroy() for us on remove, which only really matters when CONFIG_DEBUG_MUTEXES is set, but it is nice to do anyway. Signed-off-by: Andrew Davis <afd@ti.com> --- drivers/irqchip/irq-pruss-intc.c | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/drivers/irqchip/irq-pruss-intc.c b/drivers/irqchip/irq-pruss-intc.c index cc3a7c21c2904..5a3e9e5bccbea 100644 --- a/drivers/irqchip/irq-pruss-intc.c +++ b/drivers/irqchip/irq-pruss-intc.c @@ -181,7 +181,7 @@ static void pruss_intc_map(struct pruss_intc *intc, unsigned long hwirq) u8 ch, host, reg_idx; u32 val; - mutex_lock(&intc->lock); + guard(mutex)(&intc->lock); intc->event_channel[hwirq].ref_count++; @@ -206,8 +206,6 @@ static void pruss_intc_map(struct pruss_intc *intc, unsigned long hwirq) dev_dbg(dev, "mapped system_event = %lu channel = %d host = %d", hwirq, ch, host); - - mutex_unlock(&intc->lock); } /** @@ -224,7 +222,7 @@ static void pruss_intc_unmap(struct pruss_intc *intc, unsigned long hwirq) u8 ch, host, reg_idx; u32 val; - mutex_lock(&intc->lock); + guard(mutex)(&intc->lock); ch = intc->event_channel[hwirq].value; host = intc->channel_host[ch].value; @@ -251,8 +249,6 @@ static void pruss_intc_unmap(struct pruss_intc *intc, unsigned long hwirq) dev_dbg(intc->dev, "unmapped system_event = %lu channel = %d host = %d\n", hwirq, ch, host); - - mutex_unlock(&intc->lock); } static void pruss_intc_init(struct pruss_intc *intc) @@ -376,17 +372,15 @@ static int pruss_intc_validate_mapping(struct pruss_intc *intc, int event, int channel, int host) { struct device *dev = intc->dev; - int ret = 0; - mutex_lock(&intc->lock); + guard(mutex)(&intc->lock); /* check if sysevent already assigned */ if (intc->event_channel[event].ref_count > 0 && intc->event_channel[event].value != channel) { dev_err(dev, "event %d (req. ch %d) already assigned to channel %d\n", event, channel, intc->event_channel[event].value); - ret = -EBUSY; - goto unlock; + return -EBUSY; } /* check if channel already assigned */ @@ -394,16 +388,13 @@ static int pruss_intc_validate_mapping(struct pruss_intc *intc, int event, intc->channel_host[channel].value != host) { dev_err(dev, "channel %d (req. host %d) already assigned to host %d\n", channel, host, intc->channel_host[channel].value); - ret = -EBUSY; - goto unlock; + return -EBUSY; } intc->event_channel[event].value = channel; intc->channel_host[channel].value = host; -unlock: - mutex_unlock(&intc->lock); - return ret; + return 0; } static int @@ -550,7 +541,9 @@ static int pruss_intc_probe(struct platform_device *pdev) pruss_intc_init(intc); - mutex_init(&intc->lock); + ret = devm_mutex_init(dev, &intc->lock); + if (ret) + return ret; intc->domain = irq_domain_create_linear(dev_fwnode(dev), max_system_events, &pruss_intc_irq_domain_ops, intc); -- 2.39.2 ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] irqchip/pruss-intc: Use scoped lock guard and devm_mutex_init 2026-09-03 18:52 ` [PATCH 2/2] irqchip/pruss-intc: Use scoped lock guard and devm_mutex_init Andrew Davis @ 2026-09-05 16:01 ` Radu Rendec 0 siblings, 0 replies; 4+ messages in thread From: Radu Rendec @ 2026-09-05 16:01 UTC (permalink / raw) To: Andrew Davis, Thomas Gleixner, linux-kernel On Thu, 2026-09-03 at 13:52 -0500, Andrew Davis wrote: > Scoped locking simplifies the return path in a spot, and removes > a couple lines in another couple spots. The devm mutex init will > call mutex_destroy() for us on remove, which only really matters > when CONFIG_DEBUG_MUTEXES is set, but it is nice to do anyway. > > Signed-off-by: Andrew Davis <afd@ti.com> > --- > drivers/irqchip/irq-pruss-intc.c | 25 +++++++++---------------- > 1 file changed, 9 insertions(+), 16 deletions(-) > > diff --git a/drivers/irqchip/irq-pruss-intc.c b/drivers/irqchip/irq-pruss-intc.c > index cc3a7c21c2904..5a3e9e5bccbea 100644 > --- a/drivers/irqchip/irq-pruss-intc.c > +++ b/drivers/irqchip/irq-pruss-intc.c > @@ -181,7 +181,7 @@ static void pruss_intc_map(struct pruss_intc *intc, unsigned long hwirq) > u8 ch, host, reg_idx; > u32 val; > > - mutex_lock(&intc->lock); > + guard(mutex)(&intc->lock); > > intc->event_channel[hwirq].ref_count++; > > @@ -206,8 +206,6 @@ static void pruss_intc_map(struct pruss_intc *intc, unsigned long hwirq) > > dev_dbg(dev, "mapped system_event = %lu channel = %d host = %d", > hwirq, ch, host); > - > - mutex_unlock(&intc->lock); > } > > /** > @@ -224,7 +222,7 @@ static void pruss_intc_unmap(struct pruss_intc *intc, unsigned long hwirq) > u8 ch, host, reg_idx; > u32 val; > > - mutex_lock(&intc->lock); > + guard(mutex)(&intc->lock); > > ch = intc->event_channel[hwirq].value; > host = intc->channel_host[ch].value; > @@ -251,8 +249,6 @@ static void pruss_intc_unmap(struct pruss_intc *intc, unsigned long hwirq) > > dev_dbg(intc->dev, "unmapped system_event = %lu channel = %d host = %d\n", > hwirq, ch, host); > - > - mutex_unlock(&intc->lock); > } > > static void pruss_intc_init(struct pruss_intc *intc) > @@ -376,17 +372,15 @@ static int pruss_intc_validate_mapping(struct pruss_intc *intc, int event, > int channel, int host) > { > struct device *dev = intc->dev; > - int ret = 0; > > - mutex_lock(&intc->lock); > + guard(mutex)(&intc->lock); > > /* check if sysevent already assigned */ > if (intc->event_channel[event].ref_count > 0 && > intc->event_channel[event].value != channel) { > dev_err(dev, "event %d (req. ch %d) already assigned to channel %d\n", > event, channel, intc->event_channel[event].value); > - ret = -EBUSY; > - goto unlock; > + return -EBUSY; > } > > /* check if channel already assigned */ > @@ -394,16 +388,13 @@ static int pruss_intc_validate_mapping(struct pruss_intc *intc, int event, > intc->channel_host[channel].value != host) { > dev_err(dev, "channel %d (req. host %d) already assigned to host %d\n", > channel, host, intc->channel_host[channel].value); > - ret = -EBUSY; > - goto unlock; > + return -EBUSY; > } > > intc->event_channel[event].value = channel; > intc->channel_host[channel].value = host; > > -unlock: > - mutex_unlock(&intc->lock); > - return ret; > + return 0; > } > > static int > @@ -550,7 +541,9 @@ static int pruss_intc_probe(struct platform_device *pdev) > > pruss_intc_init(intc); > > - mutex_init(&intc->lock); > + ret = devm_mutex_init(dev, &intc->lock); > + if (ret) > + return ret; > > intc->domain = irq_domain_create_linear(dev_fwnode(dev), max_system_events, > &pruss_intc_irq_domain_ops, intc); Reviewed-by: Radu Rendec <radu@rendec.net> ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] irqchip/pruss-intc: Use match data directly 2026-09-03 18:52 [PATCH 1/2] irqchip/pruss-intc: Use match data directly Andrew Davis 2026-09-03 18:52 ` [PATCH 2/2] irqchip/pruss-intc: Use scoped lock guard and devm_mutex_init Andrew Davis @ 2026-09-05 14:02 ` Radu Rendec 1 sibling, 0 replies; 4+ messages in thread From: Radu Rendec @ 2026-09-05 14:02 UTC (permalink / raw) To: Andrew Davis, Thomas Gleixner, linux-kernel On Thu, 2026-09-03 at 13:52 -0500, Andrew Davis wrote: > The match data is fetched before the instance data is available, but it is > not used until after. Skip the temporary variable and fetch the match data > after it has a place to be stored. > > Signed-off-by: Andrew Davis <afd@ti.com> > --- > drivers/irqchip/irq-pruss-intc.c | 13 +++++-------- > 1 file changed, 5 insertions(+), 8 deletions(-) > > diff --git a/drivers/irqchip/irq-pruss-intc.c b/drivers/irqchip/irq-pruss-intc.c > index 81078d56f38dc..cc3a7c21c2904 100644 > --- a/drivers/irqchip/irq-pruss-intc.c > +++ b/drivers/irqchip/irq-pruss-intc.c > @@ -516,24 +516,21 @@ static const char * const irq_names[MAX_NUM_HOST_IRQS] = { > > static int pruss_intc_probe(struct platform_device *pdev) > { > - const struct pruss_intc_match_data *data; > struct device *dev = &pdev->dev; > struct pruss_intc *intc; > struct pruss_host_irq_data *host_data; > int i, irq, ret; > u8 max_system_events, irqs_reserved = 0; > > - data = of_device_get_match_data(dev); > - if (!data) > - return -ENODEV; > - > - max_system_events = data->num_system_events; > - > intc = devm_kzalloc(dev, sizeof(*intc), GFP_KERNEL); > if (!intc) > return -ENOMEM; > > - intc->soc_config = data; > + intc->soc_config = of_device_get_match_data(dev); > + if (!intc->soc_config) > + return -ENODEV; > + max_system_events = intc->soc_config->num_system_events; > + > intc->dev = dev; > platform_set_drvdata(pdev, intc); > Reviewed-by: Radu Rendec <radu@rendec.net> ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-09-05 16:01 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2026-09-03 18:52 [PATCH 1/2] irqchip/pruss-intc: Use match data directly Andrew Davis 2026-09-03 18:52 ` [PATCH 2/2] irqchip/pruss-intc: Use scoped lock guard and devm_mutex_init Andrew Davis 2026-09-05 16:01 ` Radu Rendec 2026-09-05 14:02 ` [PATCH 1/2] irqchip/pruss-intc: Use match data directly Radu Rendec
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®