* [parisc-linux] [PATCH] Remove irq_region_ops
@ 2004-12-30 18:45 Matthew Wilcox
2004-12-30 19:48 ` Joel Soete
0 siblings, 1 reply; 3+ messages in thread
From: Matthew Wilcox @ 2004-12-30 18:45 UTC (permalink / raw)
To: parisc-linux
This patch switches us to use the generic hw_interrupt_type instead
of irq_region_ops. We don't use much of it yet; in particular these
ops are still per-region instead of per-interrupt, but this is only the
first step.
Using hw_interrupt_type requires us to pass only one parameter to the
enable and disable ops instead of the current two. So much of the
code in the disable_irq() and enable_irq() functions needed to move
to the callees that needed the additional argument.
Also, we can only use one name for each interrupt type, so we can't say
"This is a Lasi interrupt, that is a Wax interrupt". They're all "GSC
ASIC" now. I also renamed some of the 'busdev' stuff. All devices are
on a bus; it's not an informative name.
I deleted some checking code that is now obvious couldn't've been tripped.
Some of the includes changed a bit to reflect i386 more closely, and
__syscall_count and __ksoftirqd_task are gone from irq_cpustat_t on most
other arches.
Tested on a 725, mostly with Lasi-based devices. It'd be nice if someone
tested this on an IOSAPIC-based machine (eg a500/b2000/n4000/j7000/c8000)
I'd like to commit this soon and move onto step 2.
Index: arch/parisc/kernel/irq.c
===================================================================
RCS file: /var/cvs/linux-2.6/arch/parisc/kernel/irq.c,v
retrieving revision 1.18
diff -u -p -r1.18 irq.c
--- arch/parisc/kernel/irq.c 6 Dec 2004 14:35:23 -0000 1.18
+++ arch/parisc/kernel/irq.c 30 Dec 2004 18:18:38 -0000
@@ -68,7 +68,7 @@ static void cpu_set_eiem(void *info)
set_eiem((unsigned long) info);
}
-static inline void disable_cpu_irq(void *unused, int irq)
+static inline void disable_cpu_irq(unsigned int irq)
{
unsigned long eirr_bit = EIEM_MASK(irq);
@@ -76,7 +76,7 @@ static inline void disable_cpu_irq(void
on_each_cpu(cpu_set_eiem, (void *) cpu_eiem, 1, 1);
}
-static void enable_cpu_irq(void *unused, int irq)
+static void enable_cpu_irq(unsigned int irq)
{
unsigned long eirr_bit = EIEM_MASK(irq);
@@ -105,16 +105,17 @@ struct irqaction cpu_irq_actions[IRQ_PER
#endif
};
+static struct hw_interrupt_type cpu_interrupt_type = {
+ .typename = "CPU",
+ .disable = disable_cpu_irq,
+ .enable = enable_cpu_irq,
+};
struct irq_region cpu0_irq_region = {
- .ops = {
- .disable_irq = disable_cpu_irq,
- .enable_irq = enable_cpu_irq,
- },
+ .type = &cpu_interrupt_type,
.data = {
- .dev = &cpu_data[0],
- .name = "PARISC-CPU",
- .irqbase = IRQ_FROM_REGION(CPU_IRQ_REGION),
+ .dev = &cpu_data[0],
+ .irqbase = IRQ_FROM_REGION(CPU_IRQ_REGION),
},
.action = cpu_irq_actions,
};
@@ -139,8 +140,8 @@ void disable_irq(int irq)
IRQ_REGION(irq), IRQ_OFFSET(irq), cpu_eiem));
irq = irq_canonicalize(irq);
region = irq_region[IRQ_REGION(irq)];
- if (region->ops.disable_irq)
- region->ops.disable_irq(region->data.dev, IRQ_OFFSET(irq));
+ if (region->type->disable)
+ region->type->disable(irq);
else
BUG();
}
@@ -155,8 +156,8 @@ void enable_irq(int irq)
irq = irq_canonicalize(irq);
region = irq_region[IRQ_REGION(irq)];
- if (region->ops.enable_irq)
- region->ops.enable_irq(region->data.dev, IRQ_OFFSET(irq));
+ if (region->type->enable)
+ region->type->enable(irq);
else
BUG();
}
@@ -205,8 +206,7 @@ int show_interrupts(struct seq_file *p,
#endif
seq_printf(p, "%10u ", kstat_cpu(j).irqs[irq_no]);
- seq_printf(p, " %14s",
- region->data.name ? region->data.name : "N/A");
+ seq_printf(p, " %14s", region->type->typename);
#ifndef PARISC_IRQ_CR16_COUNTS
seq_printf(p, " %s", action->name);
@@ -471,11 +471,10 @@ static inline int find_free_region(void)
}
-/*****
+/**
* alloc_irq_region - allocate/init a new IRQ region
* @count: number of IRQs in this region.
- * @ops: function table with request/release/mask/unmask/etc.. entries.
- * @name: name of region owner for /proc/interrupts output.
+ * @type: function table with enable/disable/etc.. entries.
* @dev: private data to associate with the new IRQ region.
*
* Every IRQ must become a MMIO write to the CPU's EIRR in
@@ -485,8 +484,8 @@ static inline int find_free_region(void)
* IRQ regions virtualize IRQs (eg EISA or PCI host bus controllers)
* for line based devices.
*/
-struct irq_region *alloc_irq_region( int count, struct irq_region_ops *ops,
- const char *name, void *dev)
+struct irq_region *alloc_irq_region(int count, struct hw_interrupt_type *type,
+ void *dev)
{
struct irq_region *region;
int index;
@@ -506,10 +505,9 @@ struct irq_region *alloc_irq_region( int
count = IRQ_PER_REGION;
}
- /* ditto for enable/disable */
- if( (ops->disable_irq || ops->enable_irq) &&
- !(ops->disable_irq && ops->enable_irq) )
- return NULL;
+ if ((type->disable && !type->enable) ||
+ (!type->disable && type->enable))
+ return NULL;
region = kmalloc(sizeof(*region), GFP_ATOMIC);
if (!region)
@@ -523,9 +521,8 @@ struct irq_region *alloc_irq_region( int
}
memset(region->action, 0, count * sizeof(*region->action));
- region->ops = *ops;
+ region->type = type;
region->data.irqbase = IRQ_FROM_REGION(index);
- region->data.name = name;
region->data.dev = dev;
irq_region[index] = region;
@@ -707,7 +704,7 @@ unsigned long probe_irq_on(void)
action = region->action + i;
if (!action->handler) {
region->data.status[i] |= IRQ_AUTODETECT | IRQ_WAITING;
- region->ops.enable_irq(region->data.dev,i);
+ region->type->enable(i);
}
spin_unlock_irq(&irq_lock);
}
@@ -732,7 +729,7 @@ unsigned long probe_irq_on(void)
/* It triggered already - consider it spurious. */
if (!(status & IRQ_WAITING)) {
region->data.status[i] = status & ~IRQ_AUTODETECT;
- region->ops.disable_irq(region->data.dev,i);
+ region->type->disable(i);
} else
if (i < BITS_PER_LONG)
val |= (1 << i);
@@ -792,7 +789,7 @@ int probe_irq_off(unsigned long val)
irq_found = i;
nr_irqs++;
}
- region->ops.disable_irq(region->data.dev,i);
+ region->type->disable(i);
region->data.status[i] = status & ~IRQ_AUTODETECT;
}
spin_unlock_irq(&irq_lock);
Index: drivers/parisc/dino.c
===================================================================
RCS file: /var/cvs/linux-2.6/drivers/parisc/dino.c,v
retrieving revision 1.21
diff -u -p -r1.21 dino.c
--- drivers/parisc/dino.c 6 Dec 2004 14:35:23 -0000 1.21
+++ drivers/parisc/dino.c 30 Dec 2004 18:18:40 -0000
@@ -298,30 +298,24 @@ struct pci_port_ops dino_port_ops = {
.outl = dino_out32
};
-static void
-dino_disable_irq(void *irq_dev, int irq)
+static void dino_disable_irq(unsigned int irq_handle)
{
- struct dino_device *dino_dev = DINO_DEV(irq_dev);
+ struct irq_region *region = irq_region[IRQ_REGION(irq_handle)];
+ struct dino_device *dino_dev = region->data.dev;
+ int irq = IRQ_OFFSET(irq_handle);
DBG(KERN_WARNING "%s(0x%p, %d)\n", __FUNCTION__, irq_dev, irq);
- if (NULL == irq_dev || irq > DINO_IRQS || irq < 0) {
- printk(KERN_WARNING "%s(0x%lx, %d) - not a dino irq?\n",
- __FUNCTION__, (long) irq_dev, irq);
- BUG();
- } else {
- /*
- ** Clear the matching bit in the IMR register
- */
- dino_dev->imr &= ~(DINO_MASK_IRQ(irq));
- gsc_writel(dino_dev->imr, dino_dev->hba.base_addr+DINO_IMR);
- }
+ /* Clear the matching bit in the IMR register */
+ dino_dev->imr &= ~(DINO_MASK_IRQ(irq));
+ gsc_writel(dino_dev->imr, dino_dev->hba.base_addr+DINO_IMR);
}
-static void
-dino_enable_irq(void *irq_dev, int irq)
+static void dino_enable_irq(unsigned int irq_handle)
{
- struct dino_device *dino_dev = DINO_DEV(irq_dev);
+ struct irq_region *region = irq_region[IRQ_REGION(irq_handle)];
+ struct dino_device *dino_dev = region->data.dev;
+ int irq = IRQ_OFFSET(irq_handle);
u32 tmp;
DBG(KERN_WARNING "%s(0x%p, %d)\n", __FUNCTION__, irq_dev, irq);
@@ -334,13 +328,6 @@ dino_enable_irq(void *irq_dev, int irq)
*/
gsc_readl(dino_dev->hba.base_addr+DINO_IPR);
- if (irq > DINO_IRQS) {
- printk(KERN_WARNING "%s(): %d not a dino irq?\n",
- __FUNCTION__, irq);
- BUG();
- return;
- }
-
/* set the matching bit in the IMR register */
dino_dev->imr |= DINO_MASK_IRQ(irq); /* used in dino_isr() */
gsc_writel( dino_dev->imr, dino_dev->hba.base_addr+DINO_IMR);
@@ -363,9 +350,10 @@ dino_enable_irq(void *irq_dev, int irq)
}
-static struct irq_region_ops dino_irq_ops = {
- .disable_irq = dino_disable_irq,
- .enable_irq = dino_enable_irq,
+static struct hw_interrupt_type dino_interrupt_type = {
+ .typename = "Dino",
+ .disable = dino_disable_irq,
+ .enable = dino_enable_irq,
};
@@ -842,8 +830,8 @@ static int __init dino_common_init(struc
** Tell generic interrupt support we have 11 bits which need
** be checked in the interrupt handler.
*/
- dino_dev->dino_region = alloc_irq_region(DINO_IRQS, &dino_irq_ops,
- name, dino_dev);
+ dino_dev->dino_region = alloc_irq_region(DINO_IRQS,
+ &dino_interrupt_type, dino_dev);
if (NULL == dino_dev->dino_region) {
printk(KERN_WARNING "%s: alloc_irq_region() failed\n", name);
Index: drivers/parisc/eisa.c
===================================================================
RCS file: /var/cvs/linux-2.6/drivers/parisc/eisa.c,v
retrieving revision 1.8
diff -u -p -r1.8 eisa.c
--- drivers/parisc/eisa.c 6 Dec 2004 14:35:23 -0000 1.8
+++ drivers/parisc/eisa.c 30 Dec 2004 18:18:40 -0000
@@ -29,7 +29,7 @@
#include <linux/init.h>
#include <linux/ioport.h>
-#include <linux/irq.h>
+#include <linux/interrupt.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pci.h>
@@ -142,7 +142,7 @@ static unsigned int eisa_irq_level; /* d
/* called by free irq */
-static void eisa_disable_irq(void *irq_dev, int irq)
+static void eisa_disable_irq(unsigned int irq)
{
unsigned long flags;
@@ -162,7 +162,7 @@ static void eisa_disable_irq(void *irq_d
}
/* called by request irq */
-static void eisa_enable_irq(void *irq_dev, int irq)
+static void eisa_enable_irq(unsigned int irq)
{
unsigned long flags;
EISA_DBG("enable irq %d\n", irq);
@@ -182,13 +182,18 @@ static void eisa_enable_irq(void *irq_de
static struct irqaction action[IRQ_PER_REGION];
+static struct hw_interrupt_type eisa_interrupt_type = {
+ .typename = "EISA",
+ .disable = eisa_disable_irq,
+ .enable = eisa_enable_irq,
+};
+
/* EISA needs to be fixed at IRQ region #0 (EISA_IRQ_REGION) */
static struct irq_region eisa_irq_region = {
- .ops = {
- .disable_irq = eisa_disable_irq,
- .enable_irq = eisa_enable_irq
+ .type = &eisa_interrupt_type,
+ .data = {
+ .irqbase = 0
},
- .data = { .name = "EISA", .irqbase = 0 },
.action = action,
};
Index: drivers/parisc/gsc.c
===================================================================
RCS file: /var/cvs/linux-2.6/drivers/parisc/gsc.c,v
retrieving revision 1.4
diff -u -p -r1.4 gsc.c
--- drivers/parisc/gsc.c 6 Dec 2004 14:35:23 -0000 1.4
+++ drivers/parisc/gsc.c 30 Dec 2004 18:18:40 -0000
@@ -109,30 +109,33 @@ irqreturn_t busdev_barked(int busdev_irq
return IRQ_HANDLED;
}
-static void
-busdev_disable_irq(void *irq_dev, int irq)
+static void gsc_asic_disable_irq(unsigned int irq_handle)
{
+ struct irq_region *region = irq_region[IRQ_REGION(irq_handle)];
+ struct busdevice *irq_dev = region->data.dev;
+ int irq = IRQ_OFFSET(irq_handle);
/* Disable the IRQ line by clearing the bit in the IMR */
- u32 imr = gsc_readl(BUSDEV_DEV(irq_dev)->hpa+OFFSET_IMR);
- imr &= ~(GSC_MASK_IRQ(irq));
+ u32 imr = gsc_readl(irq_dev->hpa + OFFSET_IMR);
+ imr &= ~GSC_MASK_IRQ(irq);
DEBPRINTK( KERN_WARNING "%s(%p, %d) %s: IMR 0x%x\n",
__FUNCTION__, irq_dev, irq, BUSDEV_DEV(irq_dev)->name, imr);
- gsc_writel(imr, BUSDEV_DEV(irq_dev)->hpa+OFFSET_IMR);
+ gsc_writel(imr, irq_dev->hpa + OFFSET_IMR);
}
-
-static void
-busdev_enable_irq(void *irq_dev, int irq)
+static void gsc_asic_enable_irq(unsigned int irq_handle)
{
+ struct irq_region *region = irq_region[IRQ_REGION(irq_handle)];
+ struct busdevice *irq_dev = region->data.dev;
+ int irq = IRQ_OFFSET(irq_handle);
/* Enable the IRQ line by setting the bit in the IMR */
- unsigned long addr = BUSDEV_DEV(irq_dev)->hpa + OFFSET_IMR;
+ unsigned long addr = irq_dev->hpa + OFFSET_IMR;
u32 imr = gsc_readl(addr);
imr |= GSC_MASK_IRQ(irq);
DEBPRINTK (KERN_WARNING "%s(%p, %d) %s: IMR 0x%x\n",
- __FUNCTION__, irq_dev, irq, BUSDEV_DEV(irq_dev)->name, imr);
+ __FUNCTION__, irq_dev, irq, irq_dev->name, imr);
gsc_writel(imr, addr);
// gsc_writel(~0L, addr);
@@ -142,9 +145,10 @@ busdev_enable_irq(void *irq_dev, int irq
*/
}
-struct irq_region_ops busdev_irq_ops = {
- .disable_irq = busdev_disable_irq,
- .enable_irq = busdev_enable_irq,
+struct hw_interrupt_type gsc_asic_interrupt_type = {
+ .typename = "GSC-ASIC",
+ .disable = gsc_asic_disable_irq,
+ .enable = gsc_asic_enable_irq,
};
@@ -155,8 +159,8 @@ int gsc_common_irqsetup(struct parisc_de
busdev->gsc = parent;
/* the IRQs we simulate */
- busdev->busdev_region = alloc_irq_region(32, &busdev_irq_ops,
- busdev->name, busdev);
+ busdev->busdev_region = alloc_irq_region(32, &gsc_asic_interrupt_type,
+ busdev);
if (!busdev->busdev_region)
return -ENOMEM;
Index: drivers/parisc/iosapic.c
===================================================================
RCS file: /var/cvs/linux-2.6/drivers/parisc/iosapic.c,v
retrieving revision 1.12
diff -u -p -r1.12 iosapic.c
--- drivers/parisc/iosapic.c 6 Dec 2004 14:35:23 -0000 1.12
+++ drivers/parisc/iosapic.c 30 Dec 2004 18:18:41 -0000
@@ -91,7 +91,7 @@
** One IRQ number represents both an IRQ line and a driver ISR.
** The I/O sapic driver can't manage shared IRQ lines because
** additional data besides the IRQ number must be passed via
-** irq_region_ops. do_irq() and request_irq() must manage
+** hw_interrupt_type. do_irq() and request_irq() must manage
** a sharing a bit in the mask.
**
** iosapic_interrupt() replaces do_irq_mask() and calls do_irq().
@@ -768,15 +768,15 @@ iosapic_set_irt_data( struct vector_info
}
-static void
-iosapic_disable_irq(void *irq_dev, int irq)
+static void iosapic_disable_irq(unsigned int irq_handle)
{
unsigned long flags;
- struct vector_info *vi = &(((struct vector_info *) irq_dev)[irq]);
+ struct irq_region *region = irq_region[IRQ_REGION(irq_handle)];
+ int irq = IRQ_OFFSET(irq_handle);
+ struct vector_info *isi_vector = region->data.dev;
+ struct vector_info *vi = isi_vector + irq;
u32 d0, d1;
- BUG_ON(!vi);
-
spin_lock_irqsave(&iosapic_lock, flags);
#ifdef REVISIT_DESIGN_ISSUE
@@ -812,10 +812,12 @@ Need more info on how Linux supports sha
}
-static void
-iosapic_enable_irq(void *dev, int irq)
+static void iosapic_enable_irq(unsigned int irq_handle)
{
- struct vector_info *vi = &(((struct vector_info *) dev)[irq]);
+ struct irq_region *region = irq_region[IRQ_REGION(irq_handle)];
+ int irq = IRQ_OFFSET(irq_handle);
+ struct vector_info *isi_vector = region->data.dev;
+ struct vector_info *vi = isi_vector + irq;
u32 d0, d1;
/* data is initialized by fixup_irq */
@@ -856,9 +858,10 @@ printk("\n");
}
-static struct irq_region_ops iosapic_irq_ops = {
- .disable_irq = iosapic_disable_irq,
- .enable_irq = iosapic_enable_irq,
+static struct hw_interrupt_type iosapic_interrupt_type = {
+ .typename = "IO-SAPIC-level",
+ .disable = iosapic_disable_irq,
+ .enable = iosapic_enable_irq,
};
@@ -946,8 +949,7 @@ iosapic_register(unsigned long hpa)
}
isi->isi_region = alloc_irq_region(isi->isi_num_vectors,
- &iosapic_irq_ops, isi->isi_name,
- (void *) isi->isi_vector);
+ &iosapic_interrupt_type, isi->isi_vector);
WARN_ON(isi->isi_region == NULL);
return ((void *) isi);
Index: drivers/parisc/superio.c
===================================================================
RCS file: /var/cvs/linux-2.6/drivers/parisc/superio.c,v
retrieving revision 1.14
diff -u -p -r1.14 superio.c
--- drivers/parisc/superio.c 6 Dec 2004 14:35:23 -0000 1.14
+++ drivers/parisc/superio.c 30 Dec 2004 18:18:41 -0000
@@ -280,9 +280,9 @@ superio_init(struct superio_device *sio)
}
-static void
-superio_disable_irq(void *dev, int local_irq)
+static void superio_disable_irq(unsigned int irq_handle)
{
+ int local_irq = IRQ_OFFSET(irq_handle);
u8 r8;
if ((local_irq < 1) || (local_irq == 2) || (local_irq > 7)) {
@@ -298,9 +298,9 @@ superio_disable_irq(void *dev, int local
outb (r8,IC_PIC1+1);
}
-static void
-superio_enable_irq(void *dev, int local_irq)
+static void superio_enable_irq(unsigned int irq_handle)
{
+ int local_irq = IRQ_OFFSET(irq_handle);
u8 r8;
if ((local_irq < 1) || (local_irq == 2) || (local_irq > 7)) {
@@ -316,9 +316,10 @@ superio_enable_irq(void *dev, int local_
}
-static struct irq_region_ops superio_irq_ops = {
- .disable_irq = superio_disable_irq,
- .enable_irq = superio_enable_irq,
+static struct hw_interrupt_type superio_interrupt_type = {
+ .typename = "SuperIO",
+ .disable = superio_disable_irq,
+ .enable = superio_enable_irq,
};
#ifdef DEBUG_SUPERIO_INIT
@@ -351,8 +352,8 @@ int superio_fixup_irq(struct pci_dev *pc
if (!sio_dev.irq_region) {
/* Allocate an irq region for SuperIO devices */
sio_dev.irq_region = alloc_irq_region(SUPERIO_NIRQS,
- &superio_irq_ops,
- "SuperIO", (void *) &sio_dev);
+ &superio_interrupt_type,
+ &sio_dev);
if (!sio_dev.irq_region) {
printk(KERN_WARNING "SuperIO: alloc_irq_region failed\n");
return -1;
Index: include/asm-parisc/hardirq.h
===================================================================
RCS file: /var/cvs/linux-2.6/include/asm-parisc/hardirq.h,v
retrieving revision 1.3
diff -u -p -r1.3 hardirq.h
--- include/asm-parisc/hardirq.h 29 Nov 2004 19:56:44 -0000 1.3
+++ include/asm-parisc/hardirq.h 30 Dec 2004 18:18:43 -0000
@@ -18,11 +18,10 @@
#include <linux/config.h>
#include <linux/threads.h>
#include <linux/cache.h>
+#include <linux/irq.h>
typedef struct {
unsigned long __softirq_pending; /* set_bit is used on this */
- unsigned int __syscall_count;
- struct task_struct * __ksoftirqd_task;
unsigned long idle_timestamp;
} ____cacheline_aligned irq_cpustat_t;
@@ -31,20 +30,19 @@ typedef struct {
#define HARDIRQ_BITS 16
/*
- * The hardirq mask has to be large enough to have space for potentially all IRQ sources
- * in the system nesting on a single CPU:
+ * The hardirq mask has to be large enough to have space for potentially all
+ * IRQ sources in the system nesting on a single CPU:
*/
#if (1 << HARDIRQ_BITS) < NR_IRQS
# error HARDIRQ_BITS is too low!
#endif
-#define irq_enter() (preempt_count() += HARDIRQ_OFFSET)
-#define irq_exit() \
-do { \
- preempt_count() -= IRQ_EXIT_OFFSET; \
- if (!in_interrupt() && softirq_pending(smp_processor_id())) \
- do_softirq(); \
- preempt_enable_no_resched(); \
+#define irq_enter() (preempt_count() += HARDIRQ_OFFSET)
+#define irq_exit() do { \
+ preempt_count() -= IRQ_EXIT_OFFSET; \
+ if (!in_interrupt() && softirq_pending(smp_processor_id())) \
+ do_softirq(); \
+ preempt_enable_no_resched(); \
} while (0)
#endif /* _PARISC_HARDIRQ_H */
Index: include/asm-parisc/irq.h
===================================================================
RCS file: /var/cvs/linux-2.6/include/asm-parisc/irq.h,v
retrieving revision 1.5
diff -u -p -r1.5 irq.h
--- include/asm-parisc/irq.h 6 Dec 2004 14:35:23 -0000 1.5
+++ include/asm-parisc/irq.h 30 Dec 2004 18:18:43 -0000
@@ -11,14 +11,13 @@
#ifndef _ASM_PARISC_IRQ_H
#define _ASM_PARISC_IRQ_H
+#include <linux/string.h>
+#include <linux/config.h>
+
#include <asm/ptrace.h>
#include <asm/types.h>
#include <asm/errno.h>
-#include <linux/string.h>
-#include <linux/interrupt.h>
-#include <linux/config.h>
-
#define NO_IRQ (-1)
#define CPU_IRQ_REGION 1
@@ -45,22 +44,15 @@
#define EISA_IRQ_REGION 0 /* region 0 needs to be reserved for EISA */
#define EISA_MAX_IRQS 16 /* max. (E)ISA irq line */
-struct irq_region_ops {
- void (*disable_irq)(void *dev, int irq);
- void (* enable_irq)(void *dev, int irq);
-};
-
struct irq_region_data {
void *dev;
- const char *name;
int irqbase;
unsigned int status[IRQ_PER_REGION]; /* IRQ status */
};
struct irq_region {
- struct irq_region_ops ops;
+ struct hw_interrupt_type *type;
struct irq_region_data data;
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [parisc-linux] [PATCH] Remove irq_region_ops
2004-12-30 18:45 [parisc-linux] [PATCH] Remove irq_region_ops Matthew Wilcox
@ 2004-12-30 19:48 ` Joel Soete
2004-12-30 21:06 ` Joel Soete
0 siblings, 1 reply; 3+ messages in thread
From: Joel Soete @ 2004-12-30 19:48 UTC (permalink / raw)
To: Matthew Wilcox; +Cc: parisc-linux
Matthew Wilcox wrote:
[...]
>
> Tested on a 725, mostly with Lasi-based devices. It'd be nice if someone
> tested this on an IOSAPIC-based machine (eg a500/b2000/n4000/j7000/c8000)
build and boot fine on n4k (64bit 2way system) (on going to rebuild kernel ;-)
same results on b2k 64bit kernel (32bit on going to build)
> I'd like to commit this soon and move onto step 2.
>
Just would like to test on b180 (on going to build too) and c110 ;-)
hth,
Joel
_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [parisc-linux] [PATCH] Remove irq_region_ops
2004-12-30 19:48 ` Joel Soete
@ 2004-12-30 21:06 ` Joel Soete
0 siblings, 0 replies; 3+ messages in thread
From: Joel Soete @ 2004-12-30 21:06 UTC (permalink / raw)
To: Matthew Wilcox; +Cc: parisc-linux
Final update
Joel Soete wrote:
>
>
> Matthew Wilcox wrote:
> [...]
>
>>
>> Tested on a 725, mostly with Lasi-based devices. It'd be nice if someone
>> tested this on an IOSAPIC-based machine (eg a500/b2000/n4000/j7000/c8000)
>
>
> build and boot fine on n4k (64bit 2way system) (on going to rebuild
> kernel ;-)
> same results on b2k 64bit kernel (32bit on going to build)
32bit kernel seems to works as fine as 64bit one :-)
>
>> I'd like to commit this soon and move onto step 2.
>>
> Just would like to test on b180 (on going to build too)
Unfortunately this system is remote and I do not find any way to break this pdc boot loop:
[...]
Boot Device not ready.
Retrying Boot Device...
Boot Device not ready.
Retrying Boot Device...
Boot Device not ready.
Retrying Boot Device...
[...]
> and c110 ;-)
Boot (and seems to works) fine also :-)
Hope that help you to go ahead.
Joel
_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2004-12-30 21:06 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-12-30 18:45 [parisc-linux] [PATCH] Remove irq_region_ops Matthew Wilcox
2004-12-30 19:48 ` Joel Soete
2004-12-30 21:06 ` Joel Soete
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.