do not truncate irq number for icom adapter
irq values are u32, not u8. Large irq numbers will be truncated, free_irq may free a different irq. Remove incorrectly sized struct member and use the one from pci_dev. Signed-off-by: Olaf Hering <olaf@aepfle.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
91fcd412e9
commit
179fb0c726
@ -1473,7 +1473,7 @@ static void icom_remove_adapter(struct icom_adapter *icom_adapter)
|
||||
}
|
||||
}
|
||||
|
||||
free_irq(icom_adapter->irq_number, (void *) icom_adapter);
|
||||
free_irq(icom_adapter->pci_dev->irq, (void *) icom_adapter);
|
||||
iounmap(icom_adapter->base_addr);
|
||||
icom_free_adapter(icom_adapter);
|
||||
pci_release_regions(icom_adapter->pci_dev);
|
||||
@ -1539,7 +1539,6 @@ static int __devinit icom_probe(struct pci_dev *dev,
|
||||
}
|
||||
|
||||
icom_adapter->base_addr_pci = pci_resource_start(dev, 0);
|
||||
icom_adapter->irq_number = dev->irq;
|
||||
icom_adapter->pci_dev = dev;
|
||||
icom_adapter->version = ent->driver_data;
|
||||
icom_adapter->subsystem_id = ent->subdevice;
|
||||
@ -1570,7 +1569,7 @@ static int __devinit icom_probe(struct pci_dev *dev,
|
||||
icom_port = &icom_adapter->port_info[index];
|
||||
|
||||
if (icom_port->status == ICOM_PORT_ACTIVE) {
|
||||
icom_port->uart_port.irq = icom_port->adapter->irq_number;
|
||||
icom_port->uart_port.irq = icom_port->adapter->pci_dev->irq;
|
||||
icom_port->uart_port.type = PORT_ICOM;
|
||||
icom_port->uart_port.iotype = UPIO_MEM;
|
||||
icom_port->uart_port.membase =
|
||||
|
@ -258,7 +258,6 @@ struct icom_port {
|
||||
struct icom_adapter {
|
||||
void __iomem * base_addr;
|
||||
unsigned long base_addr_pci;
|
||||
unsigned char irq_number;
|
||||
struct pci_dev *pci_dev;
|
||||
struct icom_port port_info[4];
|
||||
int index;
|
||||
|
Loading…
Reference in New Issue
Block a user