* [PATCH v2 -next 0/2] Fix a bug and commit a code optimization @ 2022-07-19 6:36 Xu Qiang 2022-07-19 6:36 ` [PATCH v2 -next 1/2] irqdomain: Fix an issue where the Linux IRQ number is not stored Xu Qiang 2022-07-19 6:36 ` [PATCH v2 -next 2/2] irqdomain: Replace revmap_direct_max_irq field with hwirq_max field Xu Qiang 0 siblings, 2 replies; 7+ messages in thread From: Xu Qiang @ 2022-07-19 6:36 UTC (permalink / raw) To: maz, tglx; +Cc: linux-kernel, xuqiang36, weiyongjun1, guohanjun 1.Patch#1 fix an issue where the Linux IRQ number is not stored; 2.Patch#2 submit a code optimization to replace revmap_direct_max_irq field with hwirq_max field; v2: 1. Modify the commit log to make it easier for developers to understand in patch#1; 2. Modify a compile warning in Patch#2; Xu Qiang (2): irqdomain: Fix an issue where the Linux IRQ number is not stored irqdomain: Replace revmap_direct_max_irq field with hwirq_max field kernel/irq/irqdomain.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) -- 2.17.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 -next 1/2] irqdomain: Fix an issue where the Linux IRQ number is not stored 2022-07-19 6:36 [PATCH v2 -next 0/2] Fix a bug and commit a code optimization Xu Qiang @ 2022-07-19 6:36 ` Xu Qiang 2022-07-19 13:55 ` [irqchip: irq/irqchip-next] irqdomain: Report irq number for NOMAP domains irqchip-bot for Xu Qiang 2022-07-19 6:36 ` [PATCH v2 -next 2/2] irqdomain: Replace revmap_direct_max_irq field with hwirq_max field Xu Qiang 1 sibling, 1 reply; 7+ messages in thread From: Xu Qiang @ 2022-07-19 6:36 UTC (permalink / raw) To: maz, tglx; +Cc: linux-kernel, xuqiang36, weiyongjun1, guohanjun When using a NOMAP domain, __irq_resolve_mapping() doesn't store the Linux IRQ number at the address optionally provided by the caller. While this isn't a huge deal (the returned value is guaranteed to the hwirq that was passed as a parameter), let's honour the letter of the API by writing the expected value. Fixes: d22558dd0a6c (“irqdomain: Introduce irq_resolve_mapping()”) Signed-off-by: Xu Qiang <xuqiang36@huawei.com> --- kernel/irq/irqdomain.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index d5ce96510549..481abb885d61 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -910,6 +910,8 @@ struct irq_desc *__irq_resolve_mapping(struct irq_domain *domain, data = irq_domain_get_irq_data(domain, hwirq); if (data && data->hwirq == hwirq) desc = irq_data_to_desc(data); + if (irq && desc) + *irq = hwirq; } return desc; -- 2.17.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [irqchip: irq/irqchip-next] irqdomain: Report irq number for NOMAP domains 2022-07-19 6:36 ` [PATCH v2 -next 1/2] irqdomain: Fix an issue where the Linux IRQ number is not stored Xu Qiang @ 2022-07-19 13:55 ` irqchip-bot for Xu Qiang 0 siblings, 0 replies; 7+ messages in thread From: irqchip-bot for Xu Qiang @ 2022-07-19 13:55 UTC (permalink / raw) To: linux-kernel; +Cc: Xu Qiang, Marc Zyngier, tglx The following commit has been merged into the irq/irqchip-next branch of irqchip: Commit-ID: 6f194c99f466147148cc08452718b46664112548 Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms/6f194c99f466147148cc08452718b46664112548 Author: Xu Qiang <xuqiang36@huawei.com> AuthorDate: Tue, 19 Jul 2022 06:36:40 Committer: Marc Zyngier <maz@kernel.org> CommitterDate: Tue, 19 Jul 2022 14:51:13 +01:00 irqdomain: Report irq number for NOMAP domains When using a NOMAP domain, __irq_resolve_mapping() doesn't store the Linux IRQ number at the address optionally provided by the caller. While this isn't a huge deal (the returned value is guaranteed to the hwirq that was passed as a parameter), let's honour the letter of the API by writing the expected value. Fixes: d22558dd0a6c (“irqdomain: Introduce irq_resolve_mapping()”) Signed-off-by: Xu Qiang <xuqiang36@huawei.com> [maz: commit message] Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20220719063641.56541-2-xuqiang36@huawei.com --- kernel/irq/irqdomain.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index d5ce965..481abb8 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -910,6 +910,8 @@ struct irq_desc *__irq_resolve_mapping(struct irq_domain *domain, data = irq_domain_get_irq_data(domain, hwirq); if (data && data->hwirq == hwirq) desc = irq_data_to_desc(data); + if (irq && desc) + *irq = hwirq; } return desc; ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 -next 2/2] irqdomain: Replace revmap_direct_max_irq field with hwirq_max field 2022-07-19 6:36 [PATCH v2 -next 0/2] Fix a bug and commit a code optimization Xu Qiang 2022-07-19 6:36 ` [PATCH v2 -next 1/2] irqdomain: Fix an issue where the Linux IRQ number is not stored Xu Qiang @ 2022-07-19 6:36 ` Xu Qiang 2022-07-19 10:23 ` Marc Zyngier 2022-07-19 13:55 ` [irqchip: irq/irqchip-next] irqdomain: Use hwirq_max instead of revmap_size for NOMAP domains irqchip-bot for Xu Qiang 1 sibling, 2 replies; 7+ messages in thread From: Xu Qiang @ 2022-07-19 6:36 UTC (permalink / raw) To: maz, tglx; +Cc: linux-kernel, xuqiang36, weiyongjun1, guohanjun In commit "4f86a06e2d6e irqdomain: Make normal and nomap irqdomains exclusive", use revmap_size field instead of revmap_direct_max_irq. revmap_size field originally indicates the maximum hwirq of linear Mapping. This results in revmap_size having two different layers of meaning that can be confusing. This patch optimization point is to solve this confusion point. During direct mapping, the values of hwirq_max and revmap_direct_max_irq are the same and have the same meanings. They both indicate the maximum hwirq supported by direct Mapping. The optimization method is to delete revmap_direct_max_irq field and use hwirq_max instead of revmap_direct_max_irq. Signed-off-by: Xu Qiang <xuqiang36@huawei.com> --- kernel/irq/irqdomain.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index 481abb885d61..8fe1da9614ee 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -147,7 +147,8 @@ struct irq_domain *__irq_domain_add(struct fwnode_handle *fwnode, unsigned int s static atomic_t unknown_domains; if (WARN_ON((size && direct_max) || - (!IS_ENABLED(CONFIG_IRQ_DOMAIN_NOMAP) && direct_max))) + (!IS_ENABLED(CONFIG_IRQ_DOMAIN_NOMAP) && direct_max) || + (direct_max && (direct_max != hwirq_max)))) return NULL; domain = kzalloc_node(struct_size(domain, revmap, size), @@ -219,7 +220,6 @@ struct irq_domain *__irq_domain_add(struct fwnode_handle *fwnode, unsigned int s domain->hwirq_max = hwirq_max; if (direct_max) { - size = direct_max; domain->flags |= IRQ_DOMAIN_FLAG_NO_MAP; } @@ -650,9 +650,9 @@ unsigned int irq_create_direct_mapping(struct irq_domain *domain) pr_debug("create_direct virq allocation failed\n"); return 0; } - if (virq >= domain->revmap_size) { - pr_err("ERROR: no free irqs available below %i maximum\n", - domain->revmap_size); + if (virq >= domain->hwirq_max) { + pr_err("ERROR: no free irqs available below %lu maximum\n", + domain->hwirq_max); irq_free_desc(virq); return 0; } @@ -906,7 +906,7 @@ struct irq_desc *__irq_resolve_mapping(struct irq_domain *domain, return desc; if (irq_domain_is_nomap(domain)) { - if (hwirq < domain->revmap_size) { + if (hwirq < domain->hwirq_max) { data = irq_domain_get_irq_data(domain, hwirq); if (data && data->hwirq == hwirq) desc = irq_data_to_desc(data); -- 2.17.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 -next 2/2] irqdomain: Replace revmap_direct_max_irq field with hwirq_max field 2022-07-19 6:36 ` [PATCH v2 -next 2/2] irqdomain: Replace revmap_direct_max_irq field with hwirq_max field Xu Qiang @ 2022-07-19 10:23 ` Marc Zyngier 2022-07-19 13:44 ` xuqiang (M) 2022-07-19 13:55 ` [irqchip: irq/irqchip-next] irqdomain: Use hwirq_max instead of revmap_size for NOMAP domains irqchip-bot for Xu Qiang 1 sibling, 1 reply; 7+ messages in thread From: Marc Zyngier @ 2022-07-19 10:23 UTC (permalink / raw) To: Xu Qiang; +Cc: tglx, linux-kernel, weiyongjun1, guohanjun On Tue, 19 Jul 2022 07:36:41 +0100, Xu Qiang <xuqiang36@huawei.com> wrote: > > In commit "4f86a06e2d6e irqdomain: Make normal and nomap irqdomains exclusive", > use revmap_size field instead of revmap_direct_max_irq. revmap_size field > originally indicates the maximum hwirq of linear Mapping. This results in > revmap_size having two different layers of meaning that can be confusing. > > This patch optimization point is to solve this confusion point. During > direct mapping, the values of hwirq_max and revmap_direct_max_irq are the same > and have the same meanings. They both indicate the maximum hwirq supported by > direct Mapping. The optimization method is to delete revmap_direct_max_irq > field and use hwirq_max instead of revmap_direct_max_irq. > > Signed-off-by: Xu Qiang <xuqiang36@huawei.com> You keep referencing revmap_direct_max_irq, which is long gone. How about instead: <commit> NOMAP irq domains use the revmap_size field to indicate the maximum hwirq number the domain accepts. This is a bit confusing as revmap_size is usually used to indicate the size of the revmap array, which a NOMAP domain doesn't have. Instead, use the hwirq_max field which has the correct semantics, and keep revmap_size to 0 for a NOMAP domain. </commit> If you agree with this, please say so (no need to respin for this). Thanks, M. -- Without deviation from the norm, progress is not possible. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 -next 2/2] irqdomain: Replace revmap_direct_max_irq field with hwirq_max field 2022-07-19 10:23 ` Marc Zyngier @ 2022-07-19 13:44 ` xuqiang (M) 0 siblings, 0 replies; 7+ messages in thread From: xuqiang (M) @ 2022-07-19 13:44 UTC (permalink / raw) To: Marc Zyngier; +Cc: tglx, linux-kernel, weiyongjun (A), Guohanjun (Hanjun Guo) 在 2022/7/19 18:24, Marc Zyngier 写道: > On Tue, 19 Jul 2022 07:36:41 +0100, > Xu Qiang <xuqiang36@huawei.com> wrote: >> In commit "4f86a06e2d6e irqdomain: Make normal and nomap irqdomains exclusive", >> use revmap_size field instead of revmap_direct_max_irq. revmap_size field >> originally indicates the maximum hwirq of linear Mapping. This results in >> revmap_size having two different layers of meaning that can be confusing. >> >> This patch optimization point is to solve this confusion point. During >> direct mapping, the values of hwirq_max and revmap_direct_max_irq are the same >> and have the same meanings. They both indicate the maximum hwirq supported by >> direct Mapping. The optimization method is to delete revmap_direct_max_irq >> field and use hwirq_max instead of revmap_direct_max_irq. >> >> Signed-off-by: Xu Qiang <xuqiang36@huawei.com> > You keep referencing revmap_direct_max_irq, which is long gone. > > How about instead: > > <commit> > NOMAP irq domains use the revmap_size field to indicate the maximum > hwirq number the domain accepts. This is a bit confusing as > revmap_size is usually used to indicate the size of the revmap array, > which a NOMAP domain doesn't have. > > Instead, use the hwirq_max field which has the correct semantics, and > keep revmap_size to 0 for a NOMAP domain. > </commit> > > If you agree with this, please say so (no need to respin for this). Yes, I agree. Thanks, Xu. > > Thanks, > > M. > ^ permalink raw reply [flat|nested] 7+ messages in thread
* [irqchip: irq/irqchip-next] irqdomain: Use hwirq_max instead of revmap_size for NOMAP domains 2022-07-19 6:36 ` [PATCH v2 -next 2/2] irqdomain: Replace revmap_direct_max_irq field with hwirq_max field Xu Qiang 2022-07-19 10:23 ` Marc Zyngier @ 2022-07-19 13:55 ` irqchip-bot for Xu Qiang 1 sibling, 0 replies; 7+ messages in thread From: irqchip-bot for Xu Qiang @ 2022-07-19 13:55 UTC (permalink / raw) To: linux-kernel; +Cc: Xu Qiang, Marc Zyngier, tglx The following commit has been merged into the irq/irqchip-next branch of irqchip: Commit-ID: ef50cd57a73a8bbfad403e5e2edb3309611f58ad Gitweb: https://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms/ef50cd57a73a8bbfad403e5e2edb3309611f58ad Author: Xu Qiang <xuqiang36@huawei.com> AuthorDate: Tue, 19 Jul 2022 06:36:41 Committer: Marc Zyngier <maz@kernel.org> CommitterDate: Tue, 19 Jul 2022 14:51:56 +01:00 irqdomain: Use hwirq_max instead of revmap_size for NOMAP domains NOMAP irq domains use the revmap_size field to indicate the maximum hwirq number the domain accepts. This is a bit confusing as revmap_size is usually used to indicate the size of the revmap array, which a NOMAP domain doesn't have. Instead, use the hwirq_max field which has the correct semantics, and keep revmap_size to 0 for a NOMAP domain. Signed-off-by: Xu Qiang <xuqiang36@huawei.com> [maz: commit message] Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20220719063641.56541-3-xuqiang36@huawei.com --- kernel/irq/irqdomain.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index 481abb8..8fe1da9 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -147,7 +147,8 @@ struct irq_domain *__irq_domain_add(struct fwnode_handle *fwnode, unsigned int s static atomic_t unknown_domains; if (WARN_ON((size && direct_max) || - (!IS_ENABLED(CONFIG_IRQ_DOMAIN_NOMAP) && direct_max))) + (!IS_ENABLED(CONFIG_IRQ_DOMAIN_NOMAP) && direct_max) || + (direct_max && (direct_max != hwirq_max)))) return NULL; domain = kzalloc_node(struct_size(domain, revmap, size), @@ -219,7 +220,6 @@ struct irq_domain *__irq_domain_add(struct fwnode_handle *fwnode, unsigned int s domain->hwirq_max = hwirq_max; if (direct_max) { - size = direct_max; domain->flags |= IRQ_DOMAIN_FLAG_NO_MAP; } @@ -650,9 +650,9 @@ unsigned int irq_create_direct_mapping(struct irq_domain *domain) pr_debug("create_direct virq allocation failed\n"); return 0; } - if (virq >= domain->revmap_size) { - pr_err("ERROR: no free irqs available below %i maximum\n", - domain->revmap_size); + if (virq >= domain->hwirq_max) { + pr_err("ERROR: no free irqs available below %lu maximum\n", + domain->hwirq_max); irq_free_desc(virq); return 0; } @@ -906,7 +906,7 @@ struct irq_desc *__irq_resolve_mapping(struct irq_domain *domain, return desc; if (irq_domain_is_nomap(domain)) { - if (hwirq < domain->revmap_size) { + if (hwirq < domain->hwirq_max) { data = irq_domain_get_irq_data(domain, hwirq); if (data && data->hwirq == hwirq) desc = irq_data_to_desc(data); ^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-07-19 14:19 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-07-19 6:36 [PATCH v2 -next 0/2] Fix a bug and commit a code optimization Xu Qiang 2022-07-19 6:36 ` [PATCH v2 -next 1/2] irqdomain: Fix an issue where the Linux IRQ number is not stored Xu Qiang 2022-07-19 13:55 ` [irqchip: irq/irqchip-next] irqdomain: Report irq number for NOMAP domains irqchip-bot for Xu Qiang 2022-07-19 6:36 ` [PATCH v2 -next 2/2] irqdomain: Replace revmap_direct_max_irq field with hwirq_max field Xu Qiang 2022-07-19 10:23 ` Marc Zyngier 2022-07-19 13:44 ` xuqiang (M) 2022-07-19 13:55 ` [irqchip: irq/irqchip-next] irqdomain: Use hwirq_max instead of revmap_size for NOMAP domains irqchip-bot for Xu Qiang
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).