mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [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 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

* 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

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®