From: Marc Zyngier <marc.zyngier@arm.com>
To: Tomasz Nowicki <tomasz.nowicki@linaro.org>,
Thomas Gleixner <tglx@linutronix.de>,
Jiang Liu <jiang.liu@linux.intel.com>,
Jason Cooper <jason@lakedaemon.net>,
"Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org,
Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
Hanjun Guo <hanjun.guo@linaro.org>,
Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com>,
Graeme Gregory <graeme@xora.org.uk>,
Jake Oshins <jakeo@microsoft.com>
Subject: Re: [PATCH v3 2/8] genirq: irqdomain: Remove irqdomain dependency on struct device_node
Date: Tue, 15 Sep 2015 13:22:22 +0100 [thread overview]
Message-ID: <55F80D7E.9090208@arm.com> (raw)
In-Reply-To: <55F7F9E2.3070105@linaro.org>
On 15/09/15 11:58, Tomasz Nowicki wrote:
> On 14.09.2015 18:44, Marc Zyngier wrote:
>> struct device_node is very much DT specific, and the original authors
>> of the irqdomain subsystem recognized that tie, and went as far as
>> mentionning that this could be replaced by some "void *token",
>> should another firmware infrastructure be using it.
>>
>> As we move ACPI on arm64 towards this model too, it makes a lot of sense
>> to perform that particular move.
>>
>> We replace "struct device_node *of_node" with "void *domain_token", which
>> is a benign enough transformation. A non DT user of irqdomain can now
>> identify its domains using this pointer.
>>
>> Also, in order to prevent the introduction of sideband type information,
>> only DT is allowed to store a valid kernel pointer in domain_token
>> (a pointer that passes the virt_addr_valid() test will be considered
>> as a valid device_node).
>>
>> non-DT users that wish to store valid pointers in domain_token are
>> required to use another structure such as an IDR.
>>
>> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
>> ---
>> include/linux/irqdomain.h | 68 +++++++++++++++++++-----------------
>> kernel/irq/irqdomain.c | 89 ++++++++++++++++++++++++++++++++++-------------
>> 2 files changed, 101 insertions(+), 56 deletions(-)
>>
[...]
>> -struct irq_domain *__irq_domain_add(struct device_node *of_node, int size,
>> +struct irq_domain *__irq_domain_add(void *domain_token, int size,
>> irq_hw_number_t hwirq_max, int direct_max,
>> const struct irq_domain_ops *ops,
>> void *host_data)
>> {
>> + struct device_node *of_node;
>> struct irq_domain *domain;
>>
>> + of_node = irq_domain_token_to_of_node(domain_token);
>> domain = kzalloc_node(sizeof(*domain) + (sizeof(unsigned int) * size),
>> GFP_KERNEL, of_node_to_nid(of_node));
>
> While we are here, do you think it makes sense to abstract
> of_node_to_nid as well? Then we would really remove device_node
> dependency for irqdomain.
Not quite sure yet. I've decided to completely ignore the whole NUMA
thing for the time being. This is a performance issue, not a
functionality problem.
Once we have something that actually makes sense, we can have a look.
M.
--
Jazz is not dead. It just smells funny...
WARNING: multiple messages have this Message-ID (diff)
From: marc.zyngier@arm.com (Marc Zyngier)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 2/8] genirq: irqdomain: Remove irqdomain dependency on struct device_node
Date: Tue, 15 Sep 2015 13:22:22 +0100 [thread overview]
Message-ID: <55F80D7E.9090208@arm.com> (raw)
In-Reply-To: <55F7F9E2.3070105@linaro.org>
On 15/09/15 11:58, Tomasz Nowicki wrote:
> On 14.09.2015 18:44, Marc Zyngier wrote:
>> struct device_node is very much DT specific, and the original authors
>> of the irqdomain subsystem recognized that tie, and went as far as
>> mentionning that this could be replaced by some "void *token",
>> should another firmware infrastructure be using it.
>>
>> As we move ACPI on arm64 towards this model too, it makes a lot of sense
>> to perform that particular move.
>>
>> We replace "struct device_node *of_node" with "void *domain_token", which
>> is a benign enough transformation. A non DT user of irqdomain can now
>> identify its domains using this pointer.
>>
>> Also, in order to prevent the introduction of sideband type information,
>> only DT is allowed to store a valid kernel pointer in domain_token
>> (a pointer that passes the virt_addr_valid() test will be considered
>> as a valid device_node).
>>
>> non-DT users that wish to store valid pointers in domain_token are
>> required to use another structure such as an IDR.
>>
>> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
>> ---
>> include/linux/irqdomain.h | 68 +++++++++++++++++++-----------------
>> kernel/irq/irqdomain.c | 89 ++++++++++++++++++++++++++++++++++-------------
>> 2 files changed, 101 insertions(+), 56 deletions(-)
>>
[...]
>> -struct irq_domain *__irq_domain_add(struct device_node *of_node, int size,
>> +struct irq_domain *__irq_domain_add(void *domain_token, int size,
>> irq_hw_number_t hwirq_max, int direct_max,
>> const struct irq_domain_ops *ops,
>> void *host_data)
>> {
>> + struct device_node *of_node;
>> struct irq_domain *domain;
>>
>> + of_node = irq_domain_token_to_of_node(domain_token);
>> domain = kzalloc_node(sizeof(*domain) + (sizeof(unsigned int) * size),
>> GFP_KERNEL, of_node_to_nid(of_node));
>
> While we are here, do you think it makes sense to abstract
> of_node_to_nid as well? Then we would really remove device_node
> dependency for irqdomain.
Not quite sure yet. I've decided to completely ignore the whole NUMA
thing for the time being. This is a performance issue, not a
functionality problem.
Once we have something that actually makes sense, we can have a look.
M.
--
Jazz is not dead. It just smells funny...
next prev parent reply other threads:[~2015-09-15 12:22 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-14 16:43 [PATCH v3 0/8] Making the generic ACPI GSI layer irqdomain aware Marc Zyngier
2015-09-14 16:43 ` Marc Zyngier
2015-09-14 16:43 ` Marc Zyngier
2015-09-14 16:44 ` [PATCH v3 1/8] genirq: irqdomain: Use an accessor for the of_node field Marc Zyngier
2015-09-14 16:44 ` Marc Zyngier
2015-09-14 16:44 ` Marc Zyngier
2015-09-14 16:44 ` [PATCH v3 2/8] genirq: irqdomain: Remove irqdomain dependency on struct device_node Marc Zyngier
2015-09-14 16:44 ` Marc Zyngier
2015-09-14 16:44 ` Marc Zyngier
2015-09-14 23:15 ` Rafael J. Wysocki
2015-09-14 23:15 ` Rafael J. Wysocki
2015-09-15 9:18 ` Marc Zyngier
2015-09-15 9:18 ` Marc Zyngier
2015-09-16 1:53 ` Rafael J. Wysocki
2015-09-16 1:53 ` Rafael J. Wysocki
2015-09-16 7:49 ` Marc Zyngier
2015-09-16 7:49 ` Marc Zyngier
2015-09-16 9:00 ` Thomas Gleixner
2015-09-16 9:00 ` Thomas Gleixner
2015-09-16 12:57 ` Rafael J. Wysocki
2015-09-16 12:57 ` Rafael J. Wysocki
2015-09-15 10:58 ` Tomasz Nowicki
2015-09-15 10:58 ` Tomasz Nowicki
2015-09-15 12:04 ` Thomas Gleixner
2015-09-15 12:04 ` Thomas Gleixner
2015-09-15 12:08 ` Tomasz Nowicki
2015-09-15 12:08 ` Tomasz Nowicki
2015-09-15 12:22 ` Marc Zyngier [this message]
2015-09-15 12:22 ` Marc Zyngier
2015-09-14 16:44 ` [PATCH v3 3/8] genirq: irqdomain: Allow a domain to be identified with non-DT data Marc Zyngier
2015-09-14 16:44 ` Marc Zyngier
2015-09-14 16:44 ` Marc Zyngier
2015-09-14 16:44 ` [PATCH v3 4/8] genirq: irqdomain: Add irq_create_acpi_mapping Marc Zyngier
2015-09-14 16:44 ` Marc Zyngier
2015-09-14 16:44 ` Marc Zyngier
2015-09-14 16:44 ` [PATCH v3 5/8] acpi: gsi: Always perform an irq domain lookup Marc Zyngier
2015-09-14 16:44 ` Marc Zyngier
2015-09-14 16:44 ` Marc Zyngier
2015-09-14 16:44 ` [PATCH v3 6/8] acpi: gsi: Add acpi_set_irq_model to initialize the GSI layer Marc Zyngier
2015-09-14 16:44 ` Marc Zyngier
2015-09-14 16:44 ` Marc Zyngier
2015-09-14 16:44 ` [PATCH v3 7/8] irqchip: GIC: Switch ACPI support to stacked domains Marc Zyngier
2015-09-14 16:44 ` Marc Zyngier
2015-09-14 16:44 ` Marc Zyngier
2015-09-14 16:44 ` [PATCH v3 8/8] acpi: gsi: Cleanup acpi_register_gsi Marc Zyngier
2015-09-14 16:44 ` Marc Zyngier
2015-09-14 16:44 ` Marc Zyngier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55F80D7E.9090208@arm.com \
--to=marc.zyngier@arm.com \
--cc=Suravee.Suthikulpanit@amd.com \
--cc=graeme@xora.org.uk \
--cc=hanjun.guo@linaro.org \
--cc=jakeo@microsoft.com \
--cc=jason@lakedaemon.net \
--cc=jiang.liu@linux.intel.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lorenzo.pieralisi@arm.com \
--cc=rjw@rjwysocki.net \
--cc=tglx@linutronix.de \
--cc=tomasz.nowicki@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.