do not truncate irq number for icom adapter
PATCH 1/1 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 <[email protected]>
--- drivers/serial/icom.c | 5 ++--- drivers/serial/icom.h | 1 - 2 files changed, 2 insertions(+), 4 deletions(-)
drivers/serial/icom.c +2 -3
@@ -1473,7 +1473,7 @@ static void icom_remove_adapter(struct i } } -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 p } 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 p 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 =
drivers/serial/icom.h +0 -1
@@ -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;