* [RFC PATCH 0/5] sparc64: drop deprecated irq features
@ 2011-01-21 22:24 Sam Ravnborg
2011-01-21 22:26 ` [PATCH 1/5] sparc64: fix direct access to irq_desc Sam Ravnborg
` (5 more replies)
0 siblings, 6 replies; 8+ messages in thread
From: Sam Ravnborg @ 2011-01-21 22:24 UTC (permalink / raw)
To: sparclinux, David Miller, Thomas Gleixner; +Cc: lkml
This set of patches update sparc64 so no deprecated genirq
features are used.
I did this mainly to understand the genirq stuff better.
Originally I looked into sparc64 code and was confused
because it used deprecated stuff. So the logical step
was to update sparc64 to avoid the deprecated stuff.
So I did so and the result follows.
This is an RFC because:
- This is not yet tested
- I expect a (trivial) conflict when we get Thomas'
__DO_irq stuff merged
- I expect to get some feedback that needs to be addressed
I made one conceptual change.
irq_handler_data was previously assinged to irq_data.chip_data.
This is changed so it uses irq_data.handler_data
Looking into kernel/irq/* this looked OK.
I plan to do some testing within the next week.
I looked at integrating struct virt_irq_table[] as
chip_data in irq_data.
But the way the virt_irq_alloc() function is used did not
make this bovious how to do so. So I played safe and did
not try to do so.
Any comments aprreciated.
If there are more features from genirq we could use let me
know and I may look at it.
And if something just looks wrong please say so too.
Sam
Sam Ravnborg (5):
sparc64: fix direct access to irq_desc
sparc: in handler_irq() rename irq parameter to pil
sparc64: all pointers to irq_handler_data renamed to handler_data
sparc64: use {get,set}_irq_data for handler_data
sparc64: use up-to-data genirq functions
arch/sparc/Kconfig | 2 -
arch/sparc/kernel/irq_32.c | 20 ++--
arch/sparc/kernel/irq_64.c | 197 ++++++++++++++++++++---------------------
arch/sparc/kernel/sun4d_irq.c | 18 ++--
4 files changed, 117 insertions(+), 120 deletions(-)
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/5] sparc64: fix direct access to irq_desc
2011-01-21 22:24 [RFC PATCH 0/5] sparc64: drop deprecated irq features Sam Ravnborg
@ 2011-01-21 22:26 ` Sam Ravnborg
2011-01-21 22:26 ` [PATCH 2/5] sparc: in handler_irq() rename irq parameter to pil Sam Ravnborg
` (4 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Sam Ravnborg @ 2011-01-21 22:26 UTC (permalink / raw)
To: David S. Miller, Thomas Gleixner; +Cc: sparclinux, lkml, Sam Ravnborg
GENERIC_HARDIRQS_NO_DEPRECATED require us to access data via irq_data
No functional changes as data has same layout due to use of union
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
arch/sparc/kernel/irq_64.c | 14 +++++++-------
1 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c
index 830d70a..ee67dae 100644
--- a/arch/sparc/kernel/irq_64.c
+++ b/arch/sparc/kernel/irq_64.c
@@ -190,7 +190,7 @@ int show_interrupts(struct seq_file *p, void *v)
for_each_online_cpu(j)
seq_printf(p, "%10u ", kstat_irqs_cpu(i, j));
#endif
- seq_printf(p, " %9s", irq_desc[i].chip->name);
+ seq_printf(p, " %9s", irq_desc[i].irq_data.chip->name);
seq_printf(p, " %s", action->name);
for (action=action->next; action; action = action->next)
@@ -284,7 +284,7 @@ static void sun4u_irq_enable(unsigned int virt_irq)
unsigned int tid;
cpuid = irq_choose_cpu(virt_irq,
- irq_desc[virt_irq].affinity);
+ irq_desc[virt_irq].irq_data.affinity);
imap = data->imap;
tid = sun4u_compute_tid(imap, cpuid);
@@ -360,7 +360,7 @@ static void sun4v_irq_enable(unsigned int virt_irq)
{
unsigned int ino = virt_irq_table[virt_irq].dev_ino;
unsigned long cpuid = irq_choose_cpu(virt_irq,
- irq_desc[virt_irq].affinity);
+ irq_desc[virt_irq].irq_data.affinity);
int err;
err = sun4v_intr_settarget(ino, cpuid);
@@ -423,7 +423,7 @@ static void sun4v_virq_enable(unsigned int virt_irq)
unsigned long cpuid, dev_handle, dev_ino;
int err;
- cpuid = irq_choose_cpu(virt_irq, irq_desc[virt_irq].affinity);
+ cpuid = irq_choose_cpu(virt_irq, irq_desc[virt_irq].irq_data.affinity);
dev_handle = virt_irq_table[virt_irq].dev_handle;
dev_ino = virt_irq_table[virt_irq].dev_ino;
@@ -798,9 +798,9 @@ void fixup_irqs(void)
raw_spin_lock_irqsave(&irq_desc[irq].lock, flags);
if (irq_desc[irq].action &&
!(irq_desc[irq].status & IRQ_PER_CPU)) {
- if (irq_desc[irq].chip->set_affinity)
- irq_desc[irq].chip->set_affinity(irq,
- irq_desc[irq].affinity);
+ if (irq_desc[irq].irq_data.chip->set_affinity)
+ irq_desc[irq].irq_data.chip->set_affinity(irq,
+ irq_desc[irq].irq_data.affinity);
}
raw_spin_unlock_irqrestore(&irq_desc[irq].lock, flags);
}
--
1.6.0.6
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/5] sparc: in handler_irq() rename irq parameter to pil
2011-01-21 22:24 [RFC PATCH 0/5] sparc64: drop deprecated irq features Sam Ravnborg
2011-01-21 22:26 ` [PATCH 1/5] sparc64: fix direct access to irq_desc Sam Ravnborg
@ 2011-01-21 22:26 ` Sam Ravnborg
2011-01-21 22:26 ` [PATCH 3/5] sparc64: all pointers to irq_handler_data renamed to handler_data Sam Ravnborg
` (3 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Sam Ravnborg @ 2011-01-21 22:26 UTC (permalink / raw)
To: David S. Miller, Thomas Gleixner; +Cc: sparclinux, lkml, Sam Ravnborg
The generic irq support uses "irq" to identify the
virtual irq number. To avoid confusion rename the
argument to handler_irq() to pil to match the
name of the parameter in the PCR register.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
arch/sparc/kernel/irq_32.c | 20 ++++++++++----------
arch/sparc/kernel/irq_64.c | 4 ++--
arch/sparc/kernel/sun4d_irq.c | 18 +++++++++---------
3 files changed, 21 insertions(+), 21 deletions(-)
diff --git a/arch/sparc/kernel/irq_32.c b/arch/sparc/kernel/irq_32.c
index 5ad6e5c..07c3e39 100644
--- a/arch/sparc/kernel/irq_32.c
+++ b/arch/sparc/kernel/irq_32.c
@@ -320,7 +320,7 @@ void unexpected_irq(int irq, void *dev_id, struct pt_regs * regs)
panic("bogus interrupt received");
}
-void handler_irq(int irq, struct pt_regs * regs)
+void handler_irq(int pil, struct pt_regs * regs)
{
struct pt_regs *old_regs;
struct irqaction * action;
@@ -331,23 +331,23 @@ void handler_irq(int irq, struct pt_regs * regs)
old_regs = set_irq_regs(regs);
irq_enter();
- disable_pil_irq(irq);
+ disable_pil_irq(pil);
#ifdef CONFIG_SMP
/* Only rotate on lower priority IRQs (scsi, ethernet, etc.). */
- if((sparc_cpu_model==sun4m) && (irq < 10))
+ if((sparc_cpu_model==sun4m) && (pil < 10))
smp4m_irq_rotate(cpu);
#endif
- action = sparc_irq[irq].action;
- sparc_irq[irq].flags |= SPARC_IRQ_INPROGRESS;
- kstat_cpu(cpu).irqs[irq]++;
+ action = sparc_irq[pil].action;
+ sparc_irq[pil].flags |= SPARC_IRQ_INPROGRESS;
+ kstat_cpu(cpu).irqs[pil]++;
do {
if (!action || !action->handler)
- unexpected_irq(irq, NULL, regs);
- action->handler(irq, action->dev_id);
+ unexpected_irq(pil, NULL, regs);
+ action->handler(pil, action->dev_id);
action = action->next;
} while (action);
- sparc_irq[irq].flags &= ~SPARC_IRQ_INPROGRESS;
- enable_pil_irq(irq);
+ sparc_irq[pil].flags &= ~SPARC_IRQ_INPROGRESS;
+ enable_pil_irq(pil);
irq_exit();
set_irq_regs(old_regs);
}
diff --git a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c
index ee67dae..d4d1233 100644
--- a/arch/sparc/kernel/irq_64.c
+++ b/arch/sparc/kernel/irq_64.c
@@ -714,13 +714,13 @@ void ack_bad_irq(unsigned int virt_irq)
void *hardirq_stack[NR_CPUS];
void *softirq_stack[NR_CPUS];
-void __irq_entry handler_irq(int irq, struct pt_regs *regs)
+void __irq_entry handler_irq(int pil, struct pt_regs *regs)
{
unsigned long pstate, bucket_pa;
struct pt_regs *old_regs;
void *orig_sp;
- clear_softint(1 << irq);
+ clear_softint(1 << pil);
old_regs = set_irq_regs(regs);
irq_enter();
diff --git a/arch/sparc/kernel/sun4d_irq.c b/arch/sparc/kernel/sun4d_irq.c
index e11b461..3af649e 100644
--- a/arch/sparc/kernel/sun4d_irq.c
+++ b/arch/sparc/kernel/sun4d_irq.c
@@ -205,28 +205,28 @@ out_unlock:
extern void unexpected_irq(int, void *, struct pt_regs *);
-void sun4d_handler_irq(int irq, struct pt_regs * regs)
+void sun4d_handler_irq(int pil, struct pt_regs * regs)
{
struct pt_regs *old_regs;
struct irqaction * action;
int cpu = smp_processor_id();
/* SBUS IRQ level (1 - 7) */
- int sbusl = pil_to_sbus[irq];
+ int sbusl = pil_to_sbus[pil];
/* FIXME: Is this necessary?? */
cc_get_ipen();
- cc_set_iclr(1 << irq);
+ cc_set_iclr(1 << pil);
old_regs = set_irq_regs(regs);
irq_enter();
- kstat_cpu(cpu).irqs[irq]++;
+ kstat_cpu(cpu).irqs[pil]++;
if (!sbusl) {
- action = *(irq + irq_action);
+ action = *(pil + irq_action);
if (!action)
- unexpected_irq(irq, NULL, regs);
+ unexpected_irq(pil, NULL, regs);
do {
- action->handler(irq, action->dev_id);
+ action->handler(pil, action->dev_id);
action = action->next;
} while (action);
} else {
@@ -251,9 +251,9 @@ void sun4d_handler_irq(int irq, struct pt_regs * regs)
action = actionp->action;
if (!action)
- unexpected_irq(irq, NULL, regs);
+ unexpected_irq(pil, NULL, regs);
do {
- action->handler(irq, action->dev_id);
+ action->handler(pil, action->dev_id);
action = action->next;
} while (action);
release_sbi(SBI2DEVID(sbino), slot);
--
1.6.0.6
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/5] sparc64: all pointers to irq_handler_data renamed to handler_data
2011-01-21 22:24 [RFC PATCH 0/5] sparc64: drop deprecated irq features Sam Ravnborg
2011-01-21 22:26 ` [PATCH 1/5] sparc64: fix direct access to irq_desc Sam Ravnborg
2011-01-21 22:26 ` [PATCH 2/5] sparc: in handler_irq() rename irq parameter to pil Sam Ravnborg
@ 2011-01-21 22:26 ` Sam Ravnborg
2011-01-21 22:26 ` [PATCH 4/5] sparc64: use {get,set}_irq_data for handler_data Sam Ravnborg
` (2 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Sam Ravnborg @ 2011-01-21 22:26 UTC (permalink / raw)
To: David S. Miller, Thomas Gleixner; +Cc: sparclinux, lkml, Sam Ravnborg
In preparation of moving to use irq_data.handler_data rename
all pointers to irq_handler_data "handler_data".
This will also prevent name clash when we introduce the
new irq methods.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
arch/sparc/kernel/irq_64.c | 78 ++++++++++++++++++++++----------------------
1 files changed, 39 insertions(+), 39 deletions(-)
diff --git a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c
index d4d1233..a763f9a 100644
--- a/arch/sparc/kernel/irq_64.c
+++ b/arch/sparc/kernel/irq_64.c
@@ -277,15 +277,15 @@ static int irq_choose_cpu(unsigned int virt_irq, const struct cpumask *affinity)
static void sun4u_irq_enable(unsigned int virt_irq)
{
- struct irq_handler_data *data = get_irq_chip_data(virt_irq);
+ struct irq_handler_data *handler_data = get_irq_chip_data(virt_irq);
- if (likely(data)) {
+ if (likely(handler_data)) {
unsigned long cpuid, imap, val;
unsigned int tid;
cpuid = irq_choose_cpu(virt_irq,
irq_desc[virt_irq].irq_data.affinity);
- imap = data->imap;
+ imap = handler_data->imap;
tid = sun4u_compute_tid(imap, cpuid);
@@ -294,21 +294,21 @@ static void sun4u_irq_enable(unsigned int virt_irq)
IMAP_AID_SAFARI | IMAP_NID_SAFARI);
val |= tid | IMAP_VALID;
upa_writeq(val, imap);
- upa_writeq(ICLR_IDLE, data->iclr);
+ upa_writeq(ICLR_IDLE, handler_data->iclr);
}
}
static int sun4u_set_affinity(unsigned int virt_irq,
const struct cpumask *mask)
{
- struct irq_handler_data *data = get_irq_chip_data(virt_irq);
+ struct irq_handler_data *handler_data = get_irq_chip_data(virt_irq);
- if (likely(data)) {
+ if (likely(handler_data)) {
unsigned long cpuid, imap, val;
unsigned int tid;
cpuid = irq_choose_cpu(virt_irq, mask);
- imap = data->imap;
+ imap = handler_data->imap;
tid = sun4u_compute_tid(imap, cpuid);
@@ -317,7 +317,7 @@ static int sun4u_set_affinity(unsigned int virt_irq,
IMAP_AID_SAFARI | IMAP_NID_SAFARI);
val |= tid | IMAP_VALID;
upa_writeq(val, imap);
- upa_writeq(ICLR_IDLE, data->iclr);
+ upa_writeq(ICLR_IDLE, handler_data->iclr);
}
return 0;
@@ -346,14 +346,14 @@ static void sun4u_irq_disable(unsigned int virt_irq)
static void sun4u_irq_eoi(unsigned int virt_irq)
{
- struct irq_handler_data *data = get_irq_chip_data(virt_irq);
+ struct irq_handler_data *handler_data = get_irq_chip_data(virt_irq);
struct irq_desc *desc = irq_desc + virt_irq;
if (unlikely(desc->status & (IRQ_DISABLED|IRQ_INPROGRESS)))
return;
- if (likely(data))
- upa_writeq(ICLR_IDLE, data->iclr);
+ if (likely(handler_data))
+ upa_writeq(ICLR_IDLE, handler_data->iclr);
}
static void sun4v_irq_enable(unsigned int virt_irq)
@@ -530,10 +530,10 @@ static struct irq_chip sun4v_virq = {
static void pre_flow_handler(unsigned int virt_irq,
struct irq_desc *desc)
{
- struct irq_handler_data *data = get_irq_chip_data(virt_irq);
+ struct irq_handler_data *handler_data = get_irq_chip_data(virt_irq);
unsigned int ino = virt_irq_table[virt_irq].dev_ino;
- data->pre_handler(ino, data->arg1, data->arg2);
+ handler_data->pre_handler(ino, handler_data->arg1, handler_data->arg2);
handle_fasteoi_irq(virt_irq, desc);
}
@@ -542,12 +542,12 @@ void irq_install_pre_handler(int virt_irq,
void (*func)(unsigned int, void *, void *),
void *arg1, void *arg2)
{
- struct irq_handler_data *data = get_irq_chip_data(virt_irq);
+ struct irq_handler_data *handler_data = get_irq_chip_data(virt_irq);
struct irq_desc *desc = irq_desc + virt_irq;
- data->pre_handler = func;
- data->arg1 = arg1;
- data->arg2 = arg2;
+ handler_data->pre_handler = func;
+ handler_data->arg1 = arg1;
+ handler_data->arg2 = arg2;
desc->handle_irq = pre_flow_handler;
}
@@ -555,7 +555,7 @@ void irq_install_pre_handler(int virt_irq,
unsigned int build_irq(int inofixup, unsigned long iclr, unsigned long imap)
{
struct ino_bucket *bucket;
- struct irq_handler_data *data;
+ struct irq_handler_data *handler_data;
unsigned int virt_irq;
int ino;
@@ -573,19 +573,19 @@ unsigned int build_irq(int inofixup, unsigned long iclr, unsigned long imap)
"IVEC");
}
- data = get_irq_chip_data(virt_irq);
- if (unlikely(data))
+ handler_data = get_irq_chip_data(virt_irq);
+ if (unlikely(handler_data))
goto out;
- data = kzalloc(sizeof(struct irq_handler_data), GFP_ATOMIC);
- if (unlikely(!data)) {
+ handler_data = kzalloc(sizeof(struct irq_handler_data), GFP_ATOMIC);
+ if (unlikely(!handler_data)) {
prom_printf("IRQ: kzalloc(irq_handler_data) failed.\n");
prom_halt();
}
- set_irq_chip_data(virt_irq, data);
+ set_irq_chip_data(virt_irq, handler_data);
- data->imap = imap;
- data->iclr = iclr;
+ handler_data->imap = imap;
+ handler_data->iclr = iclr;
out:
return virt_irq;
@@ -595,7 +595,7 @@ static unsigned int sun4v_build_common(unsigned long sysino,
struct irq_chip *chip)
{
struct ino_bucket *bucket;
- struct irq_handler_data *data;
+ struct irq_handler_data *handler_data;
unsigned int virt_irq;
BUG_ON(tlb_type != hypervisor);
@@ -610,23 +610,23 @@ static unsigned int sun4v_build_common(unsigned long sysino,
"IVEC");
}
- data = get_irq_chip_data(virt_irq);
- if (unlikely(data))
+ handler_data = get_irq_chip_data(virt_irq);
+ if (unlikely(handler_data))
goto out;
- data = kzalloc(sizeof(struct irq_handler_data), GFP_ATOMIC);
- if (unlikely(!data)) {
+ handler_data = kzalloc(sizeof(struct irq_handler_data), GFP_ATOMIC);
+ if (unlikely(!handler_data)) {
prom_printf("IRQ: kzalloc(irq_handler_data) failed.\n");
prom_halt();
}
- set_irq_chip_data(virt_irq, data);
+ set_irq_chip_data(virt_irq, handler_data);
/* Catch accidental accesses to these things. IMAP/ICLR handling
* is done by hypervisor calls on sun4v platforms, not by direct
* register accesses.
*/
- data->imap = ~0UL;
- data->iclr = ~0UL;
+ handler_data->imap = ~0UL;
+ handler_data->iclr = ~0UL;
out:
return virt_irq;
@@ -641,7 +641,7 @@ unsigned int sun4v_build_irq(u32 devhandle, unsigned int devino)
unsigned int sun4v_build_virq(u32 devhandle, unsigned int devino)
{
- struct irq_handler_data *data;
+ struct irq_handler_data *handler_data;
unsigned long hv_err, cookie;
struct ino_bucket *bucket;
struct irq_desc *desc;
@@ -669,8 +669,8 @@ unsigned int sun4v_build_virq(u32 devhandle, unsigned int devino)
handle_fasteoi_irq,
"IVEC");
- data = kzalloc(sizeof(struct irq_handler_data), GFP_ATOMIC);
- if (unlikely(!data))
+ handler_data = kzalloc(sizeof(struct irq_handler_data), GFP_ATOMIC);
+ if (unlikely(!handler_data))
return 0;
/* In order to make the LDC channel startup sequence easier,
@@ -680,14 +680,14 @@ unsigned int sun4v_build_virq(u32 devhandle, unsigned int devino)
desc = irq_desc + virt_irq;
desc->status |= IRQ_NOAUTOEN;
- set_irq_chip_data(virt_irq, data);
+ set_irq_chip_data(virt_irq, handler_data);
/* Catch accidental accesses to these things. IMAP/ICLR handling
* is done by hypervisor calls on sun4v platforms, not by direct
* register accesses.
*/
- data->imap = ~0UL;
- data->iclr = ~0UL;
+ handler_data->imap = ~0UL;
+ handler_data->iclr = ~0UL;
cookie = ~__pa(bucket);
hv_err = sun4v_vintr_set_cookie(devhandle, devino, cookie);
--
1.6.0.6
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 4/5] sparc64: use {get,set}_irq_data for handler_data
2011-01-21 22:24 [RFC PATCH 0/5] sparc64: drop deprecated irq features Sam Ravnborg
` (2 preceding siblings ...)
2011-01-21 22:26 ` [PATCH 3/5] sparc64: all pointers to irq_handler_data renamed to handler_data Sam Ravnborg
@ 2011-01-21 22:26 ` Sam Ravnborg
2011-01-21 22:26 ` [PATCH 5/5] sparc64: use up-to-data genirq functions Sam Ravnborg
2011-01-21 22:55 ` [RFC PATCH 0/5] sparc64: drop deprecated irq features David Miller
5 siblings, 0 replies; 8+ messages in thread
From: Sam Ravnborg @ 2011-01-21 22:26 UTC (permalink / raw)
To: David S. Miller, Thomas Gleixner; +Cc: sparclinux, lkml, Sam Ravnborg
{get,set}_irq_data uses the member "handler_data" in irq_data
which fits the nae of the datatype
The change has no functional impact and cosmetic only
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
arch/sparc/kernel/irq_64.c | 20 ++++++++++----------
1 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c
index a763f9a..b07fc79 100644
--- a/arch/sparc/kernel/irq_64.c
+++ b/arch/sparc/kernel/irq_64.c
@@ -277,7 +277,7 @@ static int irq_choose_cpu(unsigned int virt_irq, const struct cpumask *affinity)
static void sun4u_irq_enable(unsigned int virt_irq)
{
- struct irq_handler_data *handler_data = get_irq_chip_data(virt_irq);
+ struct irq_handler_data *handler_data = get_irq_data(virt_irq);
if (likely(handler_data)) {
unsigned long cpuid, imap, val;
@@ -301,7 +301,7 @@ static void sun4u_irq_enable(unsigned int virt_irq)
static int sun4u_set_affinity(unsigned int virt_irq,
const struct cpumask *mask)
{
- struct irq_handler_data *handler_data = get_irq_chip_data(virt_irq);
+ struct irq_handler_data *handler_data = get_irq_data(virt_irq);
if (likely(handler_data)) {
unsigned long cpuid, imap, val;
@@ -346,7 +346,7 @@ static void sun4u_irq_disable(unsigned int virt_irq)
static void sun4u_irq_eoi(unsigned int virt_irq)
{
- struct irq_handler_data *handler_data = get_irq_chip_data(virt_irq);
+ struct irq_handler_data *handler_data = get_irq_data(virt_irq);
struct irq_desc *desc = irq_desc + virt_irq;
if (unlikely(desc->status & (IRQ_DISABLED|IRQ_INPROGRESS)))
@@ -530,7 +530,7 @@ static struct irq_chip sun4v_virq = {
static void pre_flow_handler(unsigned int virt_irq,
struct irq_desc *desc)
{
- struct irq_handler_data *handler_data = get_irq_chip_data(virt_irq);
+ struct irq_handler_data *handler_data = get_irq_data(virt_irq);
unsigned int ino = virt_irq_table[virt_irq].dev_ino;
handler_data->pre_handler(ino, handler_data->arg1, handler_data->arg2);
@@ -542,7 +542,7 @@ void irq_install_pre_handler(int virt_irq,
void (*func)(unsigned int, void *, void *),
void *arg1, void *arg2)
{
- struct irq_handler_data *handler_data = get_irq_chip_data(virt_irq);
+ struct irq_handler_data *handler_data = get_irq_data(virt_irq);
struct irq_desc *desc = irq_desc + virt_irq;
handler_data->pre_handler = func;
@@ -573,7 +573,7 @@ unsigned int build_irq(int inofixup, unsigned long iclr, unsigned long imap)
"IVEC");
}
- handler_data = get_irq_chip_data(virt_irq);
+ handler_data = get_irq_data(virt_irq);
if (unlikely(handler_data))
goto out;
@@ -582,7 +582,7 @@ unsigned int build_irq(int inofixup, unsigned long iclr, unsigned long imap)
prom_printf("IRQ: kzalloc(irq_handler_data) failed.\n");
prom_halt();
}
- set_irq_chip_data(virt_irq, handler_data);
+ set_irq_data(virt_irq, handler_data);
handler_data->imap = imap;
handler_data->iclr = iclr;
@@ -610,7 +610,7 @@ static unsigned int sun4v_build_common(unsigned long sysino,
"IVEC");
}
- handler_data = get_irq_chip_data(virt_irq);
+ handler_data = get_irq_data(virt_irq);
if (unlikely(handler_data))
goto out;
@@ -619,7 +619,7 @@ static unsigned int sun4v_build_common(unsigned long sysino,
prom_printf("IRQ: kzalloc(irq_handler_data) failed.\n");
prom_halt();
}
- set_irq_chip_data(virt_irq, handler_data);
+ set_irq_data(virt_irq, handler_data);
/* Catch accidental accesses to these things. IMAP/ICLR handling
* is done by hypervisor calls on sun4v platforms, not by direct
@@ -680,7 +680,7 @@ unsigned int sun4v_build_virq(u32 devhandle, unsigned int devino)
desc = irq_desc + virt_irq;
desc->status |= IRQ_NOAUTOEN;
- set_irq_chip_data(virt_irq, handler_data);
+ set_irq_data(virt_irq, handler_data);
/* Catch accidental accesses to these things. IMAP/ICLR handling
* is done by hypervisor calls on sun4v platforms, not by direct
--
1.6.0.6
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 5/5] sparc64: use up-to-data genirq functions
2011-01-21 22:24 [RFC PATCH 0/5] sparc64: drop deprecated irq features Sam Ravnborg
` (3 preceding siblings ...)
2011-01-21 22:26 ` [PATCH 4/5] sparc64: use {get,set}_irq_data for handler_data Sam Ravnborg
@ 2011-01-21 22:26 ` Sam Ravnborg
2011-01-21 22:55 ` [RFC PATCH 0/5] sparc64: drop deprecated irq features David Miller
5 siblings, 0 replies; 8+ messages in thread
From: Sam Ravnborg @ 2011-01-21 22:26 UTC (permalink / raw)
To: David S. Miller, Thomas Gleixner; +Cc: sparclinux, lkml, Sam Ravnborg
Drop all uses of deprecated genirq features
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
---
arch/sparc/Kconfig | 2 +
arch/sparc/kernel/irq_64.c | 119 ++++++++++++++++++++++----------------------
2 files changed, 62 insertions(+), 59 deletions(-)
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig
index 45d9c87..7990a3c 100644
--- a/arch/sparc/Kconfig
+++ b/arch/sparc/Kconfig
@@ -50,6 +50,8 @@ config SPARC64
select RTC_DRV_STARFIRE
select HAVE_PERF_EVENTS
select PERF_USE_VMALLOC
+ select HAVE_GENERIC_HARDIRQS
+ select GENERIC_HARDIRQS_NO_DEPRECATED
config ARCH_DEFCONFIG
string
diff --git a/arch/sparc/kernel/irq_64.c b/arch/sparc/kernel/irq_64.c
index b07fc79..f356e4c 100644
--- a/arch/sparc/kernel/irq_64.c
+++ b/arch/sparc/kernel/irq_64.c
@@ -275,16 +275,15 @@ static int irq_choose_cpu(unsigned int virt_irq, const struct cpumask *affinity)
real_hard_smp_processor_id()
#endif
-static void sun4u_irq_enable(unsigned int virt_irq)
+static void sun4u_irq_enable(struct irq_data *data)
{
- struct irq_handler_data *handler_data = get_irq_data(virt_irq);
+ struct irq_handler_data *handler_data = data->handler_data;
if (likely(handler_data)) {
unsigned long cpuid, imap, val;
unsigned int tid;
- cpuid = irq_choose_cpu(virt_irq,
- irq_desc[virt_irq].irq_data.affinity);
+ cpuid = irq_choose_cpu(data->irq, data->affinity);
imap = handler_data->imap;
tid = sun4u_compute_tid(imap, cpuid);
@@ -298,16 +297,16 @@ static void sun4u_irq_enable(unsigned int virt_irq)
}
}
-static int sun4u_set_affinity(unsigned int virt_irq,
- const struct cpumask *mask)
+static int sun4u_set_affinity(struct irq_data *data,
+ const struct cpumask *mask, bool force)
{
- struct irq_handler_data *handler_data = get_irq_data(virt_irq);
+ struct irq_handler_data *handler_data = data->handler_data;
if (likely(handler_data)) {
unsigned long cpuid, imap, val;
unsigned int tid;
- cpuid = irq_choose_cpu(virt_irq, mask);
+ cpuid = irq_choose_cpu(data->irq, mask);
imap = handler_data->imap;
tid = sun4u_compute_tid(imap, cpuid);
@@ -340,14 +339,14 @@ static int sun4u_set_affinity(unsigned int virt_irq,
* sees that, it also hooks up a default ->shutdown method which
* invokes ->mask() which we do not want. See irq_chip_set_defaults().
*/
-static void sun4u_irq_disable(unsigned int virt_irq)
+static void sun4u_irq_disable(struct irq_data *data)
{
}
-static void sun4u_irq_eoi(unsigned int virt_irq)
+static void sun4u_irq_eoi(struct irq_data *data)
{
- struct irq_handler_data *handler_data = get_irq_data(virt_irq);
- struct irq_desc *desc = irq_desc + virt_irq;
+ struct irq_handler_data *handler_data = data->handler_data;
+ struct irq_desc *desc = irq_desc + data->irq;
if (unlikely(desc->status & (IRQ_DISABLED|IRQ_INPROGRESS)))
return;
@@ -356,11 +355,10 @@ static void sun4u_irq_eoi(unsigned int virt_irq)
upa_writeq(ICLR_IDLE, handler_data->iclr);
}
-static void sun4v_irq_enable(unsigned int virt_irq)
+static void sun4v_irq_enable(struct irq_data *data)
{
- unsigned int ino = virt_irq_table[virt_irq].dev_ino;
- unsigned long cpuid = irq_choose_cpu(virt_irq,
- irq_desc[virt_irq].irq_data.affinity);
+ unsigned int ino = virt_irq_table[data->irq].dev_ino;
+ unsigned long cpuid = irq_choose_cpu(data->irq, data->affinity);
int err;
err = sun4v_intr_settarget(ino, cpuid);
@@ -377,11 +375,11 @@ static void sun4v_irq_enable(unsigned int virt_irq)
ino, err);
}
-static int sun4v_set_affinity(unsigned int virt_irq,
- const struct cpumask *mask)
+static int sun4v_set_affinity(struct irq_data *data,
+ const struct cpumask *mask, bool force)
{
- unsigned int ino = virt_irq_table[virt_irq].dev_ino;
- unsigned long cpuid = irq_choose_cpu(virt_irq, mask);
+ unsigned int ino = virt_irq_table[data->irq].dev_ino;
+ unsigned long cpuid = irq_choose_cpu(data->irq, mask);
int err;
err = sun4v_intr_settarget(ino, cpuid);
@@ -392,9 +390,9 @@ static int sun4v_set_affinity(unsigned int virt_irq,
return 0;
}
-static void sun4v_irq_disable(unsigned int virt_irq)
+static void sun4v_irq_disable(struct irq_data *data)
{
- unsigned int ino = virt_irq_table[virt_irq].dev_ino;
+ unsigned int ino = virt_irq_table[data->irq].dev_ino;
int err;
err = sun4v_intr_setenabled(ino, HV_INTR_DISABLED);
@@ -403,10 +401,10 @@ static void sun4v_irq_disable(unsigned int virt_irq)
"err(%d)\n", ino, err);
}
-static void sun4v_irq_eoi(unsigned int virt_irq)
+static void sun4v_irq_eoi(struct irq_data *data)
{
- unsigned int ino = virt_irq_table[virt_irq].dev_ino;
- struct irq_desc *desc = irq_desc + virt_irq;
+ unsigned int ino = virt_irq_table[data->irq].dev_ino;
+ struct irq_desc *desc = irq_desc + data->irq;
int err;
if (unlikely(desc->status & (IRQ_DISABLED|IRQ_INPROGRESS)))
@@ -418,15 +416,15 @@ static void sun4v_irq_eoi(unsigned int virt_irq)
"err(%d)\n", ino, err);
}
-static void sun4v_virq_enable(unsigned int virt_irq)
+static void sun4v_virq_enable(struct irq_data *data)
{
unsigned long cpuid, dev_handle, dev_ino;
int err;
- cpuid = irq_choose_cpu(virt_irq, irq_desc[virt_irq].irq_data.affinity);
+ cpuid = irq_choose_cpu(data->irq, data->affinity);
- dev_handle = virt_irq_table[virt_irq].dev_handle;
- dev_ino = virt_irq_table[virt_irq].dev_ino;
+ dev_handle = virt_irq_table[data->irq].dev_handle;
+ dev_ino = virt_irq_table[data->irq].dev_ino;
err = sun4v_vintr_set_target(dev_handle, dev_ino, cpuid);
if (err != HV_EOK)
@@ -447,16 +445,16 @@ static void sun4v_virq_enable(unsigned int virt_irq)
dev_handle, dev_ino, err);
}
-static int sun4v_virt_set_affinity(unsigned int virt_irq,
- const struct cpumask *mask)
+static int sun4v_virt_set_affinity(struct irq_data *data,
+ const struct cpumask *mask, bool force)
{
unsigned long cpuid, dev_handle, dev_ino;
int err;
- cpuid = irq_choose_cpu(virt_irq, mask);
+ cpuid = irq_choose_cpu(data->irq, mask);
- dev_handle = virt_irq_table[virt_irq].dev_handle;
- dev_ino = virt_irq_table[virt_irq].dev_ino;
+ dev_handle = virt_irq_table[data->irq].dev_handle;
+ dev_ino = virt_irq_table[data->irq].dev_ino;
err = sun4v_vintr_set_target(dev_handle, dev_ino, cpuid);
if (err != HV_EOK)
@@ -467,13 +465,13 @@ static int sun4v_virt_set_affinity(unsigned int virt_irq,
return 0;
}
-static void sun4v_virq_disable(unsigned int virt_irq)
+static void sun4v_virq_disable(struct irq_data *data)
{
unsigned long dev_handle, dev_ino;
int err;
- dev_handle = virt_irq_table[virt_irq].dev_handle;
- dev_ino = virt_irq_table[virt_irq].dev_ino;
+ dev_handle = virt_irq_table[data->irq].dev_handle;
+ dev_ino = virt_irq_table[data->irq].dev_ino;
err = sun4v_vintr_set_valid(dev_handle, dev_ino,
HV_INTR_DISABLED);
@@ -483,17 +481,17 @@ static void sun4v_virq_disable(unsigned int virt_irq)
dev_handle, dev_ino, err);
}
-static void sun4v_virq_eoi(unsigned int virt_irq)
+static void sun4v_virq_eoi(struct irq_data *data)
{
- struct irq_desc *desc = irq_desc + virt_irq;
+ struct irq_desc *desc = irq_desc + data->irq;
unsigned long dev_handle, dev_ino;
int err;
if (unlikely(desc->status & (IRQ_DISABLED|IRQ_INPROGRESS)))
return;
- dev_handle = virt_irq_table[virt_irq].dev_handle;
- dev_ino = virt_irq_table[virt_irq].dev_ino;
+ dev_handle = virt_irq_table[data->irq].dev_handle;
+ dev_ino = virt_irq_table[data->irq].dev_ino;
err = sun4v_vintr_set_state(dev_handle, dev_ino,
HV_INTR_STATE_IDLE);
@@ -504,27 +502,27 @@ static void sun4v_virq_eoi(unsigned int virt_irq)
}
static struct irq_chip sun4u_irq = {
- .name = "sun4u",
- .enable = sun4u_irq_enable,
- .disable = sun4u_irq_disable,
- .eoi = sun4u_irq_eoi,
- .set_affinity = sun4u_set_affinity,
+ .name = "sun4u",
+ .irq_enable = sun4u_irq_enable,
+ .irq_disable = sun4u_irq_disable,
+ .irq_eoi = sun4u_irq_eoi,
+ .irq_set_affinity = sun4u_set_affinity,
};
static struct irq_chip sun4v_irq = {
- .name = "sun4v",
- .enable = sun4v_irq_enable,
- .disable = sun4v_irq_disable,
- .eoi = sun4v_irq_eoi,
- .set_affinity = sun4v_set_affinity,
+ .name = "sun4v",
+ .irq_enable = sun4v_irq_enable,
+ .irq_disable = sun4v_irq_disable,
+ .irq_eoi = sun4v_irq_eoi,
+ .irq_set_affinity = sun4v_set_affinity,
};
static struct irq_chip sun4v_virq = {
- .name = "vsun4v",
- .enable = sun4v_virq_enable,
- .disable = sun4v_virq_disable,
- .eoi = sun4v_virq_eoi,
- .set_affinity = sun4v_virt_set_affinity,
+ .name = "vsun4v",
+ .irq_enable = sun4v_virq_enable,
+ .irq_disable = sun4v_virq_disable,
+ .irq_eoi = sun4v_virq_eoi,
+ .irq_set_affinity = sun4v_virt_set_affinity,
};
static void pre_flow_handler(unsigned int virt_irq,
@@ -798,9 +796,12 @@ void fixup_irqs(void)
raw_spin_lock_irqsave(&irq_desc[irq].lock, flags);
if (irq_desc[irq].action &&
!(irq_desc[irq].status & IRQ_PER_CPU)) {
- if (irq_desc[irq].irq_data.chip->set_affinity)
- irq_desc[irq].irq_data.chip->set_affinity(irq,
- irq_desc[irq].irq_data.affinity);
+ struct irq_data *data = irq_get_irq_data(irq);
+
+ if (data->chip->irq_set_affinity)
+ data->chip->irq_set_affinity(data,
+ data->affinity,
+ false);
}
raw_spin_unlock_irqrestore(&irq_desc[irq].lock, flags);
}
--
1.6.0.6
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC PATCH 0/5] sparc64: drop deprecated irq features
2011-01-21 22:24 [RFC PATCH 0/5] sparc64: drop deprecated irq features Sam Ravnborg
` (4 preceding siblings ...)
2011-01-21 22:26 ` [PATCH 5/5] sparc64: use up-to-data genirq functions Sam Ravnborg
@ 2011-01-21 22:55 ` David Miller
2011-01-21 23:03 ` Sam Ravnborg
5 siblings, 1 reply; 8+ messages in thread
From: David Miller @ 2011-01-21 22:55 UTC (permalink / raw)
To: sam; +Cc: sparclinux, tglx, linux-kernel
From: Sam Ravnborg <sam@ravnborg.org>
Date: Fri, 21 Jan 2011 23:24:51 +0100
> Sam Ravnborg (5):
> sparc64: fix direct access to irq_desc
> sparc: in handler_irq() rename irq parameter to pil
> sparc64: all pointers to irq_handler_data renamed to handler_data
> sparc64: use {get,set}_irq_data for handler_data
> sparc64: use up-to-data genirq functions
I did a sanity build and boot of these changes against Linus current
tree and it seems to work fine on my Niagara-2+ machine.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC PATCH 0/5] sparc64: drop deprecated irq features
2011-01-21 22:55 ` [RFC PATCH 0/5] sparc64: drop deprecated irq features David Miller
@ 2011-01-21 23:03 ` Sam Ravnborg
0 siblings, 0 replies; 8+ messages in thread
From: Sam Ravnborg @ 2011-01-21 23:03 UTC (permalink / raw)
To: David Miller; +Cc: sparclinux, tglx, linux-kernel
On Fri, Jan 21, 2011 at 02:55:27PM -0800, David Miller wrote:
> From: Sam Ravnborg <sam@ravnborg.org>
> Date: Fri, 21 Jan 2011 23:24:51 +0100
>
> > Sam Ravnborg (5):
> > sparc64: fix direct access to irq_desc
> > sparc: in handler_irq() rename irq parameter to pil
> > sparc64: all pointers to irq_handler_data renamed to handler_data
> > sparc64: use {get,set}_irq_data for handler_data
> > sparc64: use up-to-data genirq functions
>
> I did a sanity build and boot of these changes against Linus current
> tree and it seems to work fine on my Niagara-2+ machine.
Thanks!
I will repost an updated serie when I have tested it locally too.
Sam
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2011-01-21 23:03 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-21 22:24 [RFC PATCH 0/5] sparc64: drop deprecated irq features Sam Ravnborg
2011-01-21 22:26 ` [PATCH 1/5] sparc64: fix direct access to irq_desc Sam Ravnborg
2011-01-21 22:26 ` [PATCH 2/5] sparc: in handler_irq() rename irq parameter to pil Sam Ravnborg
2011-01-21 22:26 ` [PATCH 3/5] sparc64: all pointers to irq_handler_data renamed to handler_data Sam Ravnborg
2011-01-21 22:26 ` [PATCH 4/5] sparc64: use {get,set}_irq_data for handler_data Sam Ravnborg
2011-01-21 22:26 ` [PATCH 5/5] sparc64: use up-to-data genirq functions Sam Ravnborg
2011-01-21 22:55 ` [RFC PATCH 0/5] sparc64: drop deprecated irq features David Miller
2011-01-21 23:03 ` Sam Ravnborg
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®