[PATCH v1 1/2] irqdomain: Unify checks for bus_token

Andy Shevchenko posted 2 patches 1 year, 5 months ago
[PATCH v1 1/2] irqdomain: Unify checks for bus_token
Posted by Andy Shevchenko 1 year, 5 months ago
The code uses if (bus_token) and if (bus_token == DOMAIN_BUS_ANY).
Since bus_token is enum, the later is more robust against changes.
Unify all checks to follow the latter variant.

Fixes: 0b21add71bd9 ("irqdomain: Handle domain bus token in irq_domain_create()")
Fixes: 1bf2c9282927 ("irqdomain: Cleanup domain name allocation")
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 kernel/irq/irqdomain.c | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
index 01001eb615ec..18d253e10e87 100644
--- a/kernel/irq/irqdomain.c
+++ b/kernel/irq/irqdomain.c
@@ -130,8 +130,10 @@ EXPORT_SYMBOL_GPL(irq_domain_free_fwnode);
 
 static int alloc_name(struct irq_domain *domain, char *base, enum irq_domain_bus_token bus_token)
 {
-	domain->name = bus_token ? kasprintf(GFP_KERNEL, "%s-%d", base, bus_token) :
-				   kasprintf(GFP_KERNEL, "%s", base);
+	if (bus_token == DOMAIN_BUS_ANY)
+		domain->name = kasprintf(GFP_KERNEL, "%s", base);
+	else
+		domain->name = kasprintf(GFP_KERNEL, "%s-%d", base, bus_token);
 	if (!domain->name)
 		return -ENOMEM;
 
@@ -146,8 +148,10 @@ static int alloc_fwnode_name(struct irq_domain *domain, const struct fwnode_hand
 	const char *suf = suffix ? : "";
 	char *name;
 
-	name = bus_token ? kasprintf(GFP_KERNEL, "%pfw-%s%s%d", fwnode, suf, sep, bus_token) :
-			   kasprintf(GFP_KERNEL, "%pfw-%s", fwnode, suf);
+	if (bus_token == DOMAIN_BUS_ANY)
+		name = kasprintf(GFP_KERNEL, "%pfw-%s", fwnode, suf);
+	else
+		name = kasprintf(GFP_KERNEL, "%pfw-%s%s%d", fwnode, suf, sep, bus_token);
 	if (!name)
 		return -ENOMEM;
 
@@ -166,11 +170,13 @@ static int alloc_unknown_name(struct irq_domain *domain, enum irq_domain_bus_tok
 	static atomic_t unknown_domains;
 	int id = atomic_inc_return(&unknown_domains);
 
-	domain->name = bus_token ? kasprintf(GFP_KERNEL, "unknown-%d-%d", id, bus_token) :
-				   kasprintf(GFP_KERNEL, "unknown-%d", id);
-
+	if (bus_token == DOMAIN_BUS_ANY)
+		domain->name = kasprintf(GFP_KERNEL, "unknown-%d", id);
+	else
+		domain->name = kasprintf(GFP_KERNEL, "unknown-%d-%d", id, bus_token);
 	if (!domain->name)
 		return -ENOMEM;
+
 	domain->flags |= IRQ_DOMAIN_NAME_ALLOCATED;
 	return 0;
 }
@@ -200,7 +206,7 @@ static int irq_domain_set_name(struct irq_domain *domain, const struct irq_domai
 			return alloc_name(domain, fwid->name, bus_token);
 		default:
 			domain->name = fwid->name;
-			if (bus_token)
+			if (bus_token != DOMAIN_BUS_ANY)
 				return alloc_name(domain, fwid->name, bus_token);
 		}
 
-- 
2.43.0.rc1.1336.g36b5255a03ac
Re: [PATCH v1 1/2] irqdomain: Unify checks for bus_token
Posted by Matti Vaittinen 1 year, 5 months ago
On 8/12/24 22:29, Andy Shevchenko wrote:
> The code uses if (bus_token) and if (bus_token == DOMAIN_BUS_ANY).
> Since bus_token is enum, the later is more robust against changes.
> Unify all checks to follow the latter variant.

I don't really have a strong opinion on this but for me the
if (bus_token) reads better. Te bus_token is either set (and set to 
something else but zero), or not. This logic is nicely reflected by the 
check 'if (bus_token)'. Still, I suppose the 'DOMAIN_BUS_ANY' is for a 
reason, and some people indeed claim that consistency matters ;)

> Fixes: 0b21add71bd9 ("irqdomain: Handle domain bus token in irq_domain_create()")
> Fixes: 1bf2c9282927 ("irqdomain: Cleanup domain name allocation")
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
>   kernel/irq/irqdomain.c | 22 ++++++++++++++--------
>   1 file changed, 14 insertions(+), 8 deletions(-)
> 
> diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
> index 01001eb615ec..18d253e10e87 100644
> --- a/kernel/irq/irqdomain.c
> +++ b/kernel/irq/irqdomain.c
> @@ -130,8 +130,10 @@ EXPORT_SYMBOL_GPL(irq_domain_free_fwnode);
>   
>   static int alloc_name(struct irq_domain *domain, char *base, enum irq_domain_bus_token bus_token)
>   {
> -	domain->name = bus_token ? kasprintf(GFP_KERNEL, "%s-%d", base, bus_token) :
> -				   kasprintf(GFP_KERNEL, "%s", base);
> +	if (bus_token == DOMAIN_BUS_ANY)
> +		domain->name = kasprintf(GFP_KERNEL, "%s", base);
> +	else
> +		domain->name = kasprintf(GFP_KERNEL, "%s-%d", base, bus_token);

You could do:
	domain->name = bus_token == DOMAIN_BUS_ANY ? kasprintf(...
to squeeze this a bit more compact (and to maintain the previous style) 
- but my personal preference is to not have a ternary. Well, again 
nothing I would have a really strong opinion.

Anyways, the logic looks solid to me so, FWIW:

Reviewed-by: Matti Vaittinen <mazziesaccount@gmail.com>

Yours,
	-- Matti

-- 
Matti Vaittinen
Linux kernel developer at ROHM Semiconductors
Oulu Finland

~~ When things go utterly wrong vim users can always type :help! ~~
Re: [PATCH v1 1/2] irqdomain: Unify checks for bus_token
Posted by Thomas Gleixner 1 year, 5 months ago
On Mon, Aug 12 2024 at 22:29, Andy Shevchenko wrote:
> The code uses if (bus_token) and if (bus_token == DOMAIN_BUS_ANY).
> Since bus_token is enum, the later is more robust against changes.
> Unify all checks to follow the latter variant.
>
> Fixes: 0b21add71bd9 ("irqdomain: Handle domain bus token in irq_domain_create()")
> Fixes: 1bf2c9282927 ("irqdomain: Cleanup domain name allocation")

I'm fine with the change per se, but what does this fix? It's correct
code, no?
Re: [PATCH v1 1/2] irqdomain: Unify checks for bus_token
Posted by Andy Shevchenko 1 year, 5 months ago
On Tue, Aug 13, 2024 at 10:32:44AM +0200, Thomas Gleixner wrote:
> On Mon, Aug 12 2024 at 22:29, Andy Shevchenko wrote:
> > The code uses if (bus_token) and if (bus_token == DOMAIN_BUS_ANY).
> > Since bus_token is enum, the later is more robust against changes.
> > Unify all checks to follow the latter variant.
> >
> > Fixes: 0b21add71bd9 ("irqdomain: Handle domain bus token in irq_domain_create()")
> > Fixes: 1bf2c9282927 ("irqdomain: Cleanup domain name allocation")
> 
> I'm fine with the change per se, but what does this fix? It's correct
> code, no?

Technically yes, it's correct code as long as nobody touches the mentioned enum.
It fixes the style and makes it robust against the changes.

-- 
With Best Regards,
Andy Shevchenko
[tip: irq/core] irqdomain: Clarify checks for bus_token
Posted by tip-bot2 for Andy Shevchenko 1 year, 5 months ago
The following commit has been merged into the irq/core branch of tip:

Commit-ID:     c0ece64497992473aabbcbb007e2afecc8d750a2
Gitweb:        https://git.kernel.org/tip/c0ece64497992473aabbcbb007e2afecc8d750a2
Author:        Andy Shevchenko <andriy.shevchenko@linux.intel.com>
AuthorDate:    Mon, 12 Aug 2024 22:29:39 +03:00
Committer:     Thomas Gleixner <tglx@linutronix.de>
CommitterDate: Tue, 13 Aug 2024 10:40:09 +02:00

irqdomain: Clarify checks for bus_token

The code uses if (bus_token) and if (bus_token == DOMAIN_BUS_ANY).

Since bus_token is an enum, the latter is more robust against changes.

Convert all !bus_token checks to explicitely check for DOMAIN_BUS_ANY.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/all/20240812193101.1266625-2-andriy.shevchenko@linux.intel.com

---
 kernel/irq/irqdomain.c | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
index 01001eb..18d253e 100644
--- a/kernel/irq/irqdomain.c
+++ b/kernel/irq/irqdomain.c
@@ -130,8 +130,10 @@ EXPORT_SYMBOL_GPL(irq_domain_free_fwnode);
 
 static int alloc_name(struct irq_domain *domain, char *base, enum irq_domain_bus_token bus_token)
 {
-	domain->name = bus_token ? kasprintf(GFP_KERNEL, "%s-%d", base, bus_token) :
-				   kasprintf(GFP_KERNEL, "%s", base);
+	if (bus_token == DOMAIN_BUS_ANY)
+		domain->name = kasprintf(GFP_KERNEL, "%s", base);
+	else
+		domain->name = kasprintf(GFP_KERNEL, "%s-%d", base, bus_token);
 	if (!domain->name)
 		return -ENOMEM;
 
@@ -146,8 +148,10 @@ static int alloc_fwnode_name(struct irq_domain *domain, const struct fwnode_hand
 	const char *suf = suffix ? : "";
 	char *name;
 
-	name = bus_token ? kasprintf(GFP_KERNEL, "%pfw-%s%s%d", fwnode, suf, sep, bus_token) :
-			   kasprintf(GFP_KERNEL, "%pfw-%s", fwnode, suf);
+	if (bus_token == DOMAIN_BUS_ANY)
+		name = kasprintf(GFP_KERNEL, "%pfw-%s", fwnode, suf);
+	else
+		name = kasprintf(GFP_KERNEL, "%pfw-%s%s%d", fwnode, suf, sep, bus_token);
 	if (!name)
 		return -ENOMEM;
 
@@ -166,11 +170,13 @@ static int alloc_unknown_name(struct irq_domain *domain, enum irq_domain_bus_tok
 	static atomic_t unknown_domains;
 	int id = atomic_inc_return(&unknown_domains);
 
-	domain->name = bus_token ? kasprintf(GFP_KERNEL, "unknown-%d-%d", id, bus_token) :
-				   kasprintf(GFP_KERNEL, "unknown-%d", id);
-
+	if (bus_token == DOMAIN_BUS_ANY)
+		domain->name = kasprintf(GFP_KERNEL, "unknown-%d", id);
+	else
+		domain->name = kasprintf(GFP_KERNEL, "unknown-%d-%d", id, bus_token);
 	if (!domain->name)
 		return -ENOMEM;
+
 	domain->flags |= IRQ_DOMAIN_NAME_ALLOCATED;
 	return 0;
 }
@@ -200,7 +206,7 @@ static int irq_domain_set_name(struct irq_domain *domain, const struct irq_domai
 			return alloc_name(domain, fwid->name, bus_token);
 		default:
 			domain->name = fwid->name;
-			if (bus_token)
+			if (bus_token != DOMAIN_BUS_ANY)
 				return alloc_name(domain, fwid->name, bus_token);
 		}