From: Rob Herring <robherring2@gmail.com>
To: linux-arm-kernel@lists.infradead.org
Subject: Re: [RFC PATCH 05/10] sh: intc: remove dependency on NR_IRQS
Date: Tue, 17 Jan 2012 16:24:38 +0000 [thread overview]
Message-ID: <4F15A0C6.9000901@gmail.com> (raw)
In-Reply-To: <CABMQnV+e90OdoK+bMQ16H1PLtBRt9n=QxdCCOT=SZN060Ys+cw@mail.gmail.com>
On 01/16/2012 11:09 PM, Nobuhiro Iwamatsu wrote:
> 2012/1/17 Rob Herring <robherring2@gmail.com>:
>> On 01/16/2012 07:54 PM, Nobuhiro Iwamatsu wrote:
>>> Hi,
>>>
>>> 2012/1/14 Rob Herring <robherring2@gmail.com>:
>>>> From: Rob Herring <rob.herring@calxeda.com>
>>>>
>>>> SH intc has a compile time dependency on NR_IRQS. Make this dependency a
>>>> local define so that shmobile (and ARM in general) can have run-time
>>>> NR_IRQS setting. SH has NR_IRQS set to 512 and shmobile has NR_IRQS set to
>>>> 1024, so we are using the maximum.
>>>>
>>>> Signed-off-by: Rob Herring <rob.herring@calxeda.com>
>>>> ---
>>>> drivers/sh/intc/balancing.c | 2 +-
>>>> drivers/sh/intc/core.c | 2 +-
>>>> drivers/sh/intc/handle.c | 2 +-
>>>> drivers/sh/intc/internals.h | 9 +++++++++
>>>> drivers/sh/intc/virq.c | 2 +-
>>>> 5 files changed, 13 insertions(+), 4 deletions(-)
>>>>
>>>> diff --git a/drivers/sh/intc/balancing.c b/drivers/sh/intc/balancing.c
>>>> index cec7a96..bc78080 100644
>>>> --- a/drivers/sh/intc/balancing.c
>>>> +++ b/drivers/sh/intc/balancing.c
>>>> @@ -9,7 +9,7 @@
>>>> */
>>>> #include "internals.h"
>>>>
>>>> -static unsigned long dist_handle[NR_IRQS];
>>>> +static unsigned long dist_handle[INTC_NR_IRQS];
>>>>
>>>> void intc_balancing_enable(unsigned int irq)
>>>> {
>>>> diff --git a/drivers/sh/intc/core.c b/drivers/sh/intc/core.c
>>>> index e53e449..2fde897 100644
>>>> --- a/drivers/sh/intc/core.c
>>>> +++ b/drivers/sh/intc/core.c
>>>> @@ -42,7 +42,7 @@ unsigned int nr_intc_controllers;
>>>> * - this needs to be at least 2 for 5-bit priorities on 7780
>>>> */
>>>> static unsigned int default_prio_level = 2; /* 2 - 16 */
>>>> -static unsigned int intc_prio_level[NR_IRQS]; /* for now */
>>>> +static unsigned int intc_prio_level[INTC_NR_IRQS]; /* for now */
>>>>
>>>> unsigned int intc_get_dfl_prio_level(void)
>>>> {
>>>> diff --git a/drivers/sh/intc/handle.c b/drivers/sh/intc/handle.c
>>>> index 057ce56..f461d53 100644
>>>> --- a/drivers/sh/intc/handle.c
>>>> +++ b/drivers/sh/intc/handle.c
>>>> @@ -13,7 +13,7 @@
>>>> #include <linux/spinlock.h>
>>>> #include "internals.h"
>>>>
>>>> -static unsigned long ack_handle[NR_IRQS];
>>>> +static unsigned long ack_handle[INTC_NR_IRQS];
>>>>
>>>> static intc_enum __init intc_grp_id(struct intc_desc *desc,
>>>> intc_enum enum_id)
>>>> diff --git a/drivers/sh/intc/internals.h b/drivers/sh/intc/internals.h
>>>> index b0e9155..469f092 100644
>>>> --- a/drivers/sh/intc/internals.h
>>>> +++ b/drivers/sh/intc/internals.h
>>>> @@ -6,6 +6,15 @@
>>>> #include <linux/radix-tree.h>
>>>> #include <linux/device.h>
>>>>
>>>> +#define INTC_NR_IRQS 1024
>>>
>>> On SH, INTC_NR_IRQS ( NR_IRQS ) is using to by arch/sh/kernel/machvec.c.
>>> And, this is defined by arch/sh/include/asm/irq.h.
>>> You need to remove or rename from these.
>>>
>>
>> machvec.c will still pickup NR_IRQS from arch/sh/include/asm/irq.h, so
>> there is no change there. The value here is increased from 512 for SH to
>> 1024, but that should not have any functional impact only array storage
>> space. Where it is used is a bit of a hack as the comment indicates. The
>> only other easy way to fix it I see is with an #ifdef CONFIG_SH or
>> CONFIG_ARM here. I welcome patches if you've got better ideas.
>>
>
> I also cared about the problem from which array increases in SH.
> Since drivers/sh/intc/internals.h is referred to only from intc function,
> it needs to define INTC_NR_IRQS as other places.
>
> How is it that defines by Kconfig?
> I created a patch on your patch. Could you give comment?
>
> Best regards,
> Nobuhiro
>
> ------
> diff --git a/arch/sh/include/asm/irq.h b/arch/sh/include/asm/irq.h
> index 45d08b6..9278bb0 100644
> --- a/arch/sh/include/asm/irq.h
> +++ b/arch/sh/include/asm/irq.h
> @@ -9,7 +9,6 @@
> * advised to cap this at the hard limit that they're interested in
> * through the machvec.
> */
> -#define NR_IRQS 512
> #define NR_IRQS_LEGACY 8 /* Legacy external IRQ0-7 */
>
> /*
> diff --git a/arch/sh/kernel/machvec.c b/arch/sh/kernel/machvec.c
> index 3d722e4..e6b12b4 100644
> --- a/arch/sh/kernel/machvec.c
> +++ b/arch/sh/kernel/machvec.c
> @@ -123,5 +123,5 @@ void __init sh_mv_setup(void)
> mv_set(mem_init);
>
> if (!sh_mv.mv_nr_irqs)
> - sh_mv.mv_nr_irqs = NR_IRQS;
> + sh_mv.mv_nr_irqs = CONFIG_SH_NR_IRQS;
> }
> diff --git a/drivers/sh/intc/Kconfig b/drivers/sh/intc/Kconfig
> index c88cbcc..38d51f1 100644
> --- a/drivers/sh/intc/Kconfig
> +++ b/drivers/sh/intc/Kconfig
> @@ -33,3 +33,9 @@ config INTC_MAPPING_DEBUG
> between system IRQs and the per-controller id tables.
>
> If in doubt, say N.
> +
> +config SH_NR_IRQS
> + int
> + depends on ARCH_SHMOBILE || SUPERH
> + default 1024 if ARCH_SHMOBILE
> + default 512 if SUPERH
> diff --git a/drivers/sh/intc/internals.h b/drivers/sh/intc/internals.h
> index 469f092..076c286 100644
> --- a/drivers/sh/intc/internals.h
> +++ b/drivers/sh/intc/internals.h
> @@ -6,7 +6,7 @@
> #include <linux/radix-tree.h>
> #include <linux/device.h>
>
> -#define INTC_NR_IRQS 1024
> +#define INTC_NR_IRQS CONFIG_SH_NR_IRQS
>
> #ifndef evt2irq
> #define evt2irq(evt) (((evt) >> 5) - 16)
>
If we went this route I wonder if it would be better for this to be more
generic and have CONFIG_NR_IRQS like powerpc. However, I don't see
having CONFIG_NR_IRQS as being that useful in the SPARSE_IRQ case. Plus
it would be a much more invasive. I think I'll just add this to
linux/sh_intc.h:
#ifdef CONFIG_SUPERH
#define INTC_NR_IRQS 512
#else
#define INTC_NR_IRQS 1024
#endif
Rob
WARNING: multiple messages have this Message-ID (diff)
From: robherring2@gmail.com (Rob Herring)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH 05/10] sh: intc: remove dependency on NR_IRQS
Date: Tue, 17 Jan 2012 10:24:38 -0600 [thread overview]
Message-ID: <4F15A0C6.9000901@gmail.com> (raw)
In-Reply-To: <CABMQnV+e90OdoK+bMQ16H1PLtBRt9n=QxdCCOT=SZN060Ys+cw@mail.gmail.com>
On 01/16/2012 11:09 PM, Nobuhiro Iwamatsu wrote:
> 2012/1/17 Rob Herring <robherring2@gmail.com>:
>> On 01/16/2012 07:54 PM, Nobuhiro Iwamatsu wrote:
>>> Hi,
>>>
>>> 2012/1/14 Rob Herring <robherring2@gmail.com>:
>>>> From: Rob Herring <rob.herring@calxeda.com>
>>>>
>>>> SH intc has a compile time dependency on NR_IRQS. Make this dependency a
>>>> local define so that shmobile (and ARM in general) can have run-time
>>>> NR_IRQS setting. SH has NR_IRQS set to 512 and shmobile has NR_IRQS set to
>>>> 1024, so we are using the maximum.
>>>>
>>>> Signed-off-by: Rob Herring <rob.herring@calxeda.com>
>>>> ---
>>>> drivers/sh/intc/balancing.c | 2 +-
>>>> drivers/sh/intc/core.c | 2 +-
>>>> drivers/sh/intc/handle.c | 2 +-
>>>> drivers/sh/intc/internals.h | 9 +++++++++
>>>> drivers/sh/intc/virq.c | 2 +-
>>>> 5 files changed, 13 insertions(+), 4 deletions(-)
>>>>
>>>> diff --git a/drivers/sh/intc/balancing.c b/drivers/sh/intc/balancing.c
>>>> index cec7a96..bc78080 100644
>>>> --- a/drivers/sh/intc/balancing.c
>>>> +++ b/drivers/sh/intc/balancing.c
>>>> @@ -9,7 +9,7 @@
>>>> */
>>>> #include "internals.h"
>>>>
>>>> -static unsigned long dist_handle[NR_IRQS];
>>>> +static unsigned long dist_handle[INTC_NR_IRQS];
>>>>
>>>> void intc_balancing_enable(unsigned int irq)
>>>> {
>>>> diff --git a/drivers/sh/intc/core.c b/drivers/sh/intc/core.c
>>>> index e53e449..2fde897 100644
>>>> --- a/drivers/sh/intc/core.c
>>>> +++ b/drivers/sh/intc/core.c
>>>> @@ -42,7 +42,7 @@ unsigned int nr_intc_controllers;
>>>> * - this needs to be at least 2 for 5-bit priorities on 7780
>>>> */
>>>> static unsigned int default_prio_level = 2; /* 2 - 16 */
>>>> -static unsigned int intc_prio_level[NR_IRQS]; /* for now */
>>>> +static unsigned int intc_prio_level[INTC_NR_IRQS]; /* for now */
>>>>
>>>> unsigned int intc_get_dfl_prio_level(void)
>>>> {
>>>> diff --git a/drivers/sh/intc/handle.c b/drivers/sh/intc/handle.c
>>>> index 057ce56..f461d53 100644
>>>> --- a/drivers/sh/intc/handle.c
>>>> +++ b/drivers/sh/intc/handle.c
>>>> @@ -13,7 +13,7 @@
>>>> #include <linux/spinlock.h>
>>>> #include "internals.h"
>>>>
>>>> -static unsigned long ack_handle[NR_IRQS];
>>>> +static unsigned long ack_handle[INTC_NR_IRQS];
>>>>
>>>> static intc_enum __init intc_grp_id(struct intc_desc *desc,
>>>> intc_enum enum_id)
>>>> diff --git a/drivers/sh/intc/internals.h b/drivers/sh/intc/internals.h
>>>> index b0e9155..469f092 100644
>>>> --- a/drivers/sh/intc/internals.h
>>>> +++ b/drivers/sh/intc/internals.h
>>>> @@ -6,6 +6,15 @@
>>>> #include <linux/radix-tree.h>
>>>> #include <linux/device.h>
>>>>
>>>> +#define INTC_NR_IRQS 1024
>>>
>>> On SH, INTC_NR_IRQS ( NR_IRQS ) is using to by arch/sh/kernel/machvec.c.
>>> And, this is defined by arch/sh/include/asm/irq.h.
>>> You need to remove or rename from these.
>>>
>>
>> machvec.c will still pickup NR_IRQS from arch/sh/include/asm/irq.h, so
>> there is no change there. The value here is increased from 512 for SH to
>> 1024, but that should not have any functional impact only array storage
>> space. Where it is used is a bit of a hack as the comment indicates. The
>> only other easy way to fix it I see is with an #ifdef CONFIG_SH or
>> CONFIG_ARM here. I welcome patches if you've got better ideas.
>>
>
> I also cared about the problem from which array increases in SH.
> Since drivers/sh/intc/internals.h is referred to only from intc function,
> it needs to define INTC_NR_IRQS as other places.
>
> How is it that defines by Kconfig?
> I created a patch on your patch. Could you give comment?
>
> Best regards,
> Nobuhiro
>
> ------
> diff --git a/arch/sh/include/asm/irq.h b/arch/sh/include/asm/irq.h
> index 45d08b6..9278bb0 100644
> --- a/arch/sh/include/asm/irq.h
> +++ b/arch/sh/include/asm/irq.h
> @@ -9,7 +9,6 @@
> * advised to cap this at the hard limit that they're interested in
> * through the machvec.
> */
> -#define NR_IRQS 512
> #define NR_IRQS_LEGACY 8 /* Legacy external IRQ0-7 */
>
> /*
> diff --git a/arch/sh/kernel/machvec.c b/arch/sh/kernel/machvec.c
> index 3d722e4..e6b12b4 100644
> --- a/arch/sh/kernel/machvec.c
> +++ b/arch/sh/kernel/machvec.c
> @@ -123,5 +123,5 @@ void __init sh_mv_setup(void)
> mv_set(mem_init);
>
> if (!sh_mv.mv_nr_irqs)
> - sh_mv.mv_nr_irqs = NR_IRQS;
> + sh_mv.mv_nr_irqs = CONFIG_SH_NR_IRQS;
> }
> diff --git a/drivers/sh/intc/Kconfig b/drivers/sh/intc/Kconfig
> index c88cbcc..38d51f1 100644
> --- a/drivers/sh/intc/Kconfig
> +++ b/drivers/sh/intc/Kconfig
> @@ -33,3 +33,9 @@ config INTC_MAPPING_DEBUG
> between system IRQs and the per-controller id tables.
>
> If in doubt, say N.
> +
> +config SH_NR_IRQS
> + int
> + depends on ARCH_SHMOBILE || SUPERH
> + default 1024 if ARCH_SHMOBILE
> + default 512 if SUPERH
> diff --git a/drivers/sh/intc/internals.h b/drivers/sh/intc/internals.h
> index 469f092..076c286 100644
> --- a/drivers/sh/intc/internals.h
> +++ b/drivers/sh/intc/internals.h
> @@ -6,7 +6,7 @@
> #include <linux/radix-tree.h>
> #include <linux/device.h>
>
> -#define INTC_NR_IRQS 1024
> +#define INTC_NR_IRQS CONFIG_SH_NR_IRQS
>
> #ifndef evt2irq
> #define evt2irq(evt) (((evt) >> 5) - 16)
>
If we went this route I wonder if it would be better for this to be more
generic and have CONFIG_NR_IRQS like powerpc. However, I don't see
having CONFIG_NR_IRQS as being that useful in the SPARSE_IRQ case. Plus
it would be a much more invasive. I think I'll just add this to
linux/sh_intc.h:
#ifdef CONFIG_SUPERH
#define INTC_NR_IRQS 512
#else
#define INTC_NR_IRQS 1024
#endif
Rob
next prev parent reply other threads:[~2012-01-17 16:24 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-13 16:34 [RFC PATCH 00/10] Make mach/irqs.h optional Rob Herring
2012-01-13 16:34 ` Rob Herring
2012-01-13 16:34 ` [RFC PATCH 01/10] rtc: sa1100: include mach/irqs.h instead of asm/irq.h Rob Herring
2012-01-13 16:34 ` Rob Herring
2012-01-13 16:43 ` Russell King - ARM Linux
2012-01-13 16:43 ` Russell King - ARM Linux
2012-01-13 16:58 ` Rob Herring
2012-01-13 16:58 ` Rob Herring
2012-01-13 20:46 ` Nicolas Pitre
2012-01-13 20:46 ` Nicolas Pitre
2012-01-13 21:45 ` Russell King - ARM Linux
2012-01-13 21:45 ` Russell King - ARM Linux
2012-01-13 22:26 ` Nicolas Pitre
2012-01-13 22:26 ` Nicolas Pitre
2012-01-13 23:21 ` Rob Herring
2012-01-13 23:21 ` Rob Herring
2012-01-13 23:51 ` Nicolas Pitre
2012-01-13 23:51 ` Nicolas Pitre
2012-01-13 16:34 ` [RFC PATCH 02/10] sound: pxa2xx-ac97: include mach/irqs.h directly Rob Herring
2012-01-13 16:34 ` Rob Herring
2012-01-13 16:34 ` [RFC PATCH 03/10] ARM: mc146818rtc: remove unnecessary include of mach/irqs.h Rob Herring
2012-01-13 16:34 ` Rob Herring
2012-01-13 16:52 ` Russell King - ARM Linux
2012-01-13 16:52 ` Russell King - ARM Linux
2012-01-13 16:34 ` [RFC PATCH 04/10] ARM: it8152: explicitly include mach/irqs.h Rob Herring
2012-01-13 16:34 ` Rob Herring
2012-01-13 22:02 ` Rob Herring
2012-01-13 22:02 ` Rob Herring
2012-01-13 22:36 ` Nicolas Pitre
2012-01-13 22:36 ` Nicolas Pitre
2012-01-13 16:34 ` [RFC PATCH 05/10] sh: intc: remove dependency on NR_IRQS Rob Herring
2012-01-13 16:34 ` Rob Herring
2012-01-17 1:54 ` Nobuhiro Iwamatsu
2012-01-17 1:54 ` Nobuhiro Iwamatsu
2012-01-17 2:37 ` Rob Herring
2012-01-17 2:37 ` Rob Herring
2012-01-17 5:09 ` Nobuhiro Iwamatsu
2012-01-17 5:09 ` Nobuhiro Iwamatsu
2012-01-17 16:24 ` Rob Herring [this message]
2012-01-17 16:24 ` Rob Herring
2012-01-19 3:44 ` Nobuhiro Iwamatsu
2012-01-19 3:44 ` Nobuhiro Iwamatsu
2012-01-13 16:34 ` [RFC PATCH 06/10] ARM: mmp: remove NR_IRQS Rob Herring
2012-01-13 16:34 ` Rob Herring
2012-01-13 20:30 ` Nicolas Pitre
2012-01-13 20:30 ` Nicolas Pitre
2012-01-13 16:34 ` [RFC PATCH 07/10] ARM: pxa: " Rob Herring
2012-01-13 16:34 ` Rob Herring
2012-01-13 16:34 ` [RFC PATCH 08/10] ARM: shmobile: " Rob Herring
2012-01-13 16:34 ` Rob Herring
2012-01-13 16:34 ` [RFC PATCH 09/10] ARM: only include mach/irqs.h for !SPARSE_IRQ Rob Herring
2012-01-13 16:34 ` Rob Herring
2012-01-13 16:34 ` [RFC PATCH 10/10] ARM: highbank: select SPARSE_IRQ and remove irqs.h Rob Herring
2012-01-13 16:34 ` Rob Herring
2012-01-13 17:42 ` [RFC PATCH 00/10] Make mach/irqs.h optional Jamie Iles
2012-01-13 17:42 ` Jamie Iles
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=4F15A0C6.9000901@gmail.com \
--to=robherring2@gmail.com \
--cc=linux-arm-kernel@lists.infradead.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.