Remove uneeded resource structures from pci_dev
RFC PATCH 1/1 Remove uneeded resource structures from pci_dev
Hi,
The following patch remove irq_resource and dma_resource from pci_dev. It appears that the serial pci driver depends on irq_resource, however, it may be broken portions of an old quirk. I attempted to maintain the existing behavior while removing irq_resource. I changed FL_IRQRESOURCE to FL_NOIRQ. Russell, could you provide any comments? irq_resource and dma_resource are most likely remnants from when pci_dev was shared with pnp.
Thanks,
Adam
This patch has only been tested for compilation.
drivers/serial/8250_pci.c +6 -21
@@ -43,20 +43,12 @@#define FL_BASE4 0x0004#define FL_GET_BASE (x) (x & FL_BASE_MASK) -#define FL_IRQ_MASK (0x0007 << 4) -#define FL_IRQBASE0 (0x0000 << 4) -#define FL_IRQBASE1 (0x0001 << 4) -#define FL_IRQBASE2 (0x0002 << 4) -#define FL_IRQBASE3 (0x0003 << 4) -#define FL_IRQBASE4 (0x0004 << 4) -#define FL_GET_IRQBASE (x) ((x & FL_IRQ_MASK) >> 4) -/* Use successive BARs (PCI base address registers), else use offset into some specified BAR */ #define FL_BASE_BARS 0x0008 -/* Use the irq resource table instead of dev->irq */ -#define FL_IRQRESOURCE 0x0080 +/* do not assign an irq */ +#define FL_NOIRQ 0x0080/* Use the Base address register size to cap number of ports */ #define FL_REGION_SZ_CAP 0x0100
@@ -850,17 +842,10 @@ static _INLINE_ intget_pci_irq (struct pci_dev *dev,struct pci_board *board,int idx) { -int base_idx; - -if ((board->flags &FL_IRQRESOURCE ) ==0 ) -return dev->irq; - - base_idx =FL_GET_IRQBASE (board->flags); - -if (base_idx >DEVICE_COUNT_IRQ ) +if (board->flags &FL_NOIRQ )return 0 ; - -return dev->irq_resource[base_idx].start; +else +return dev->irq; }/*
@@ -1314,7 +1299,7 @@ .first_offset = 0x10000, }, [pbn_sgi_ioc3] = { - .flags = FL_BASE0|FL_IRQRESOURCE, + .flags = FL_BASE0|FL_NOIRQ, .num_ports = 1, .base_baud = 458333, .uart_offset = 8,
include/linux/pci.h +0 -2
@@ -416,8 +416,6 @@*/ unsigned int irq;struct resource resource[DEVICE_COUNT_RESOURCE ];/* I/O and memory regions + expansion ROMs */ -struct resource dma_resource[DEVICE_COUNT_DMA ]; -struct resource irq_resource[DEVICE_COUNT_IRQ ];char * slot_name;/* pointer to dev.bus_id */
Quoted 3 lines · Adam Belay
I changed
FL_IRQRESOURCEtoFL_NOIRQ. Russell, could you provide any comments?irq_resourceanddma_resourceare most likely remnants from whenpci_devwas shared with pnp.
Unfortunately there isn't much I can say about this, other than it looks like the right thing to do.
A lot of these PCI and PNP serial controllers are provided by various people, and unfortunately no record was kept as to who has what hardware. Of course, this makes testing these types of changes impossible.
So, the best thing I can suggest is to get the patch into Linus/akpm's kernel and watch what happens.
Signature · 4 lines
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
2.6 Serial coreQuoted 8 lines · Adam Belay
Hi,
The following patch remove
irq_resourceanddma_resourcefrompci_dev. It appears that the serial pci driver depends onirq_resource, however, it may be broken portions of an old quirk. I attempted to maintain the existing behavior while removingirq_resource. I changedFL_IRQRESOURCEtoFL_NOIRQ. Russell, could you provide any comments?irq_resourceanddma_resourceare most likely remnants from whenpci_devwas shared with pnp.
Ok, I've added this to my PCI bk tree, which will end up in the next -mm release. If that seems to work ok, I'll send it to Linus (after whenever 2.6.2 comes out...)
thanks,
greg k-h