diff options
Diffstat (limited to 'drivers')
26 files changed, 207 insertions, 117 deletions
diff --git a/drivers/atm/fore200e.c b/drivers/atm/fore200e.c index 14f6a6201da3..05983a312d50 100644 --- a/drivers/atm/fore200e.c +++ b/drivers/atm/fore200e.c | |||
@@ -555,7 +555,7 @@ fore200e_pca_reset(struct fore200e* fore200e) | |||
555 | } | 555 | } |
556 | 556 | ||
557 | 557 | ||
558 | static int __init | 558 | static int __devinit |
559 | fore200e_pca_map(struct fore200e* fore200e) | 559 | fore200e_pca_map(struct fore200e* fore200e) |
560 | { | 560 | { |
561 | DPRINTK(2, "device %s being mapped in memory\n", fore200e->name); | 561 | DPRINTK(2, "device %s being mapped in memory\n", fore200e->name); |
@@ -589,7 +589,7 @@ fore200e_pca_unmap(struct fore200e* fore200e) | |||
589 | } | 589 | } |
590 | 590 | ||
591 | 591 | ||
592 | static int __init | 592 | static int __devinit |
593 | fore200e_pca_configure(struct fore200e* fore200e) | 593 | fore200e_pca_configure(struct fore200e* fore200e) |
594 | { | 594 | { |
595 | struct pci_dev* pci_dev = (struct pci_dev*)fore200e->bus_dev; | 595 | struct pci_dev* pci_dev = (struct pci_dev*)fore200e->bus_dev; |
@@ -2125,7 +2125,7 @@ fore200e_change_qos(struct atm_vcc* vcc,struct atm_qos* qos, int flags) | |||
2125 | } | 2125 | } |
2126 | 2126 | ||
2127 | 2127 | ||
2128 | static int __init | 2128 | static int __devinit |
2129 | fore200e_irq_request(struct fore200e* fore200e) | 2129 | fore200e_irq_request(struct fore200e* fore200e) |
2130 | { | 2130 | { |
2131 | if (request_irq(fore200e->irq, fore200e_interrupt, SA_SHIRQ, fore200e->name, fore200e->atm_dev) < 0) { | 2131 | if (request_irq(fore200e->irq, fore200e_interrupt, SA_SHIRQ, fore200e->name, fore200e->atm_dev) < 0) { |
@@ -2148,7 +2148,7 @@ fore200e_irq_request(struct fore200e* fore200e) | |||
2148 | } | 2148 | } |
2149 | 2149 | ||
2150 | 2150 | ||
2151 | static int __init | 2151 | static int __devinit |
2152 | fore200e_get_esi(struct fore200e* fore200e) | 2152 | fore200e_get_esi(struct fore200e* fore200e) |
2153 | { | 2153 | { |
2154 | struct prom_data* prom = fore200e_kmalloc(sizeof(struct prom_data), GFP_KERNEL | GFP_DMA); | 2154 | struct prom_data* prom = fore200e_kmalloc(sizeof(struct prom_data), GFP_KERNEL | GFP_DMA); |
@@ -2180,7 +2180,7 @@ fore200e_get_esi(struct fore200e* fore200e) | |||
2180 | } | 2180 | } |
2181 | 2181 | ||
2182 | 2182 | ||
2183 | static int __init | 2183 | static int __devinit |
2184 | fore200e_alloc_rx_buf(struct fore200e* fore200e) | 2184 | fore200e_alloc_rx_buf(struct fore200e* fore200e) |
2185 | { | 2185 | { |
2186 | int scheme, magn, nbr, size, i; | 2186 | int scheme, magn, nbr, size, i; |
@@ -2245,7 +2245,7 @@ fore200e_alloc_rx_buf(struct fore200e* fore200e) | |||
2245 | } | 2245 | } |
2246 | 2246 | ||
2247 | 2247 | ||
2248 | static int __init | 2248 | static int __devinit |
2249 | fore200e_init_bs_queue(struct fore200e* fore200e) | 2249 | fore200e_init_bs_queue(struct fore200e* fore200e) |
2250 | { | 2250 | { |
2251 | int scheme, magn, i; | 2251 | int scheme, magn, i; |
@@ -2308,7 +2308,7 @@ fore200e_init_bs_queue(struct fore200e* fore200e) | |||
2308 | } | 2308 | } |
2309 | 2309 | ||
2310 | 2310 | ||
2311 | static int __init | 2311 | static int __devinit |
2312 | fore200e_init_rx_queue(struct fore200e* fore200e) | 2312 | fore200e_init_rx_queue(struct fore200e* fore200e) |
2313 | { | 2313 | { |
2314 | struct host_rxq* rxq = &fore200e->host_rxq; | 2314 | struct host_rxq* rxq = &fore200e->host_rxq; |
@@ -2368,7 +2368,7 @@ fore200e_init_rx_queue(struct fore200e* fore200e) | |||
2368 | } | 2368 | } |
2369 | 2369 | ||
2370 | 2370 | ||
2371 | static int __init | 2371 | static int __devinit |
2372 | fore200e_init_tx_queue(struct fore200e* fore200e) | 2372 | fore200e_init_tx_queue(struct fore200e* fore200e) |
2373 | { | 2373 | { |
2374 | struct host_txq* txq = &fore200e->host_txq; | 2374 | struct host_txq* txq = &fore200e->host_txq; |
@@ -2431,7 +2431,7 @@ fore200e_init_tx_queue(struct fore200e* fore200e) | |||
2431 | } | 2431 | } |
2432 | 2432 | ||
2433 | 2433 | ||
2434 | static int __init | 2434 | static int __devinit |
2435 | fore200e_init_cmd_queue(struct fore200e* fore200e) | 2435 | fore200e_init_cmd_queue(struct fore200e* fore200e) |
2436 | { | 2436 | { |
2437 | struct host_cmdq* cmdq = &fore200e->host_cmdq; | 2437 | struct host_cmdq* cmdq = &fore200e->host_cmdq; |
@@ -2487,7 +2487,7 @@ fore200e_param_bs_queue(struct fore200e* fore200e, | |||
2487 | } | 2487 | } |
2488 | 2488 | ||
2489 | 2489 | ||
2490 | static int __init | 2490 | static int __devinit |
2491 | fore200e_initialize(struct fore200e* fore200e) | 2491 | fore200e_initialize(struct fore200e* fore200e) |
2492 | { | 2492 | { |
2493 | struct cp_queues __iomem * cpq; | 2493 | struct cp_queues __iomem * cpq; |
@@ -2539,7 +2539,7 @@ fore200e_initialize(struct fore200e* fore200e) | |||
2539 | } | 2539 | } |
2540 | 2540 | ||
2541 | 2541 | ||
2542 | static void __init | 2542 | static void __devinit |
2543 | fore200e_monitor_putc(struct fore200e* fore200e, char c) | 2543 | fore200e_monitor_putc(struct fore200e* fore200e, char c) |
2544 | { | 2544 | { |
2545 | struct cp_monitor __iomem * monitor = fore200e->cp_monitor; | 2545 | struct cp_monitor __iomem * monitor = fore200e->cp_monitor; |
@@ -2551,7 +2551,7 @@ fore200e_monitor_putc(struct fore200e* fore200e, char c) | |||
2551 | } | 2551 | } |
2552 | 2552 | ||
2553 | 2553 | ||
2554 | static int __init | 2554 | static int __devinit |
2555 | fore200e_monitor_getc(struct fore200e* fore200e) | 2555 | fore200e_monitor_getc(struct fore200e* fore200e) |
2556 | { | 2556 | { |
2557 | struct cp_monitor __iomem * monitor = fore200e->cp_monitor; | 2557 | struct cp_monitor __iomem * monitor = fore200e->cp_monitor; |
@@ -2576,7 +2576,7 @@ fore200e_monitor_getc(struct fore200e* fore200e) | |||
2576 | } | 2576 | } |
2577 | 2577 | ||
2578 | 2578 | ||
2579 | static void __init | 2579 | static void __devinit |
2580 | fore200e_monitor_puts(struct fore200e* fore200e, char* str) | 2580 | fore200e_monitor_puts(struct fore200e* fore200e, char* str) |
2581 | { | 2581 | { |
2582 | while (*str) { | 2582 | while (*str) { |
@@ -2591,7 +2591,7 @@ fore200e_monitor_puts(struct fore200e* fore200e, char* str) | |||
2591 | } | 2591 | } |
2592 | 2592 | ||
2593 | 2593 | ||
2594 | static int __init | 2594 | static int __devinit |
2595 | fore200e_start_fw(struct fore200e* fore200e) | 2595 | fore200e_start_fw(struct fore200e* fore200e) |
2596 | { | 2596 | { |
2597 | int ok; | 2597 | int ok; |
@@ -2622,7 +2622,7 @@ fore200e_start_fw(struct fore200e* fore200e) | |||
2622 | } | 2622 | } |
2623 | 2623 | ||
2624 | 2624 | ||
2625 | static int __init | 2625 | static int __devinit |
2626 | fore200e_load_fw(struct fore200e* fore200e) | 2626 | fore200e_load_fw(struct fore200e* fore200e) |
2627 | { | 2627 | { |
2628 | u32* fw_data = (u32*) fore200e->bus->fw_data; | 2628 | u32* fw_data = (u32*) fore200e->bus->fw_data; |
@@ -2648,7 +2648,7 @@ fore200e_load_fw(struct fore200e* fore200e) | |||
2648 | } | 2648 | } |
2649 | 2649 | ||
2650 | 2650 | ||
2651 | static int __init | 2651 | static int __devinit |
2652 | fore200e_register(struct fore200e* fore200e) | 2652 | fore200e_register(struct fore200e* fore200e) |
2653 | { | 2653 | { |
2654 | struct atm_dev* atm_dev; | 2654 | struct atm_dev* atm_dev; |
@@ -2675,7 +2675,7 @@ fore200e_register(struct fore200e* fore200e) | |||
2675 | } | 2675 | } |
2676 | 2676 | ||
2677 | 2677 | ||
2678 | static int __init | 2678 | static int __devinit |
2679 | fore200e_init(struct fore200e* fore200e) | 2679 | fore200e_init(struct fore200e* fore200e) |
2680 | { | 2680 | { |
2681 | if (fore200e_register(fore200e) < 0) | 2681 | if (fore200e_register(fore200e) < 0) |
@@ -2721,7 +2721,7 @@ fore200e_init(struct fore200e* fore200e) | |||
2721 | return -EBUSY; | 2721 | return -EBUSY; |
2722 | 2722 | ||
2723 | fore200e_supply(fore200e); | 2723 | fore200e_supply(fore200e); |
2724 | 2724 | ||
2725 | /* all done, board initialization is now complete */ | 2725 | /* all done, board initialization is now complete */ |
2726 | fore200e->state = FORE200E_STATE_COMPLETE; | 2726 | fore200e->state = FORE200E_STATE_COMPLETE; |
2727 | return 0; | 2727 | return 0; |
diff --git a/drivers/block/DAC960.c b/drivers/block/DAC960.c index 6ede1f352c29..37b8cda3e8bc 100644 --- a/drivers/block/DAC960.c +++ b/drivers/block/DAC960.c | |||
@@ -41,6 +41,7 @@ | |||
41 | #include <linux/timer.h> | 41 | #include <linux/timer.h> |
42 | #include <linux/pci.h> | 42 | #include <linux/pci.h> |
43 | #include <linux/init.h> | 43 | #include <linux/init.h> |
44 | #include <linux/random.h> | ||
44 | #include <asm/io.h> | 45 | #include <asm/io.h> |
45 | #include <asm/uaccess.h> | 46 | #include <asm/uaccess.h> |
46 | #include "DAC960.h" | 47 | #include "DAC960.h" |
@@ -3463,7 +3464,7 @@ static inline boolean DAC960_ProcessCompletedRequest(DAC960_Command_T *Command, | |||
3463 | Command->SegmentCount, Command->DmaDirection); | 3464 | Command->SegmentCount, Command->DmaDirection); |
3464 | 3465 | ||
3465 | if (!end_that_request_first(Request, UpToDate, Command->BlockCount)) { | 3466 | if (!end_that_request_first(Request, UpToDate, Command->BlockCount)) { |
3466 | 3467 | add_disk_randomness(Request->rq_disk); | |
3467 | end_that_request_last(Request, UpToDate); | 3468 | end_that_request_last(Request, UpToDate); |
3468 | 3469 | ||
3469 | if (Command->Completion) { | 3470 | if (Command->Completion) { |
diff --git a/drivers/char/hw_random.c b/drivers/char/hw_random.c index b3bc2e37e616..29dc87e59020 100644 --- a/drivers/char/hw_random.c +++ b/drivers/char/hw_random.c | |||
@@ -131,7 +131,9 @@ enum { | |||
131 | rng_hw_none, | 131 | rng_hw_none, |
132 | rng_hw_intel, | 132 | rng_hw_intel, |
133 | rng_hw_amd, | 133 | rng_hw_amd, |
134 | #ifdef __i386__ | ||
134 | rng_hw_via, | 135 | rng_hw_via, |
136 | #endif | ||
135 | rng_hw_geode, | 137 | rng_hw_geode, |
136 | }; | 138 | }; |
137 | 139 | ||
diff --git a/drivers/char/mmtimer.c b/drivers/char/mmtimer.c index c92378121b4c..1b05fa688996 100644 --- a/drivers/char/mmtimer.c +++ b/drivers/char/mmtimer.c | |||
@@ -675,7 +675,7 @@ static int __init mmtimer_init(void) | |||
675 | cnodeid_t node, maxn = -1; | 675 | cnodeid_t node, maxn = -1; |
676 | 676 | ||
677 | if (!ia64_platform_is("sn2")) | 677 | if (!ia64_platform_is("sn2")) |
678 | return -1; | 678 | return 0; |
679 | 679 | ||
680 | /* | 680 | /* |
681 | * Sanity check the cycles/sec variable | 681 | * Sanity check the cycles/sec variable |
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c index 2d2d4ac3525a..960dae5c87d1 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.c +++ b/drivers/infiniband/ulp/srp/ib_srp.c | |||
@@ -1155,6 +1155,12 @@ static int srp_send_tsk_mgmt(struct scsi_cmnd *scmnd, u8 func) | |||
1155 | 1155 | ||
1156 | spin_lock_irq(target->scsi_host->host_lock); | 1156 | spin_lock_irq(target->scsi_host->host_lock); |
1157 | 1157 | ||
1158 | if (target->state == SRP_TARGET_DEAD || | ||
1159 | target->state == SRP_TARGET_REMOVED) { | ||
1160 | scmnd->result = DID_BAD_TARGET << 16; | ||
1161 | goto out; | ||
1162 | } | ||
1163 | |||
1158 | if (scmnd->host_scribble == (void *) -1L) | 1164 | if (scmnd->host_scribble == (void *) -1L) |
1159 | goto out; | 1165 | goto out; |
1160 | 1166 | ||
diff --git a/drivers/isdn/hisax/config.c b/drivers/isdn/hisax/config.c index 8159bcecd0c2..df9d65201819 100644 --- a/drivers/isdn/hisax/config.c +++ b/drivers/isdn/hisax/config.c | |||
@@ -1929,6 +1929,8 @@ static struct pci_device_id hisax_pci_tbl[] __initdata = { | |||
1929 | {PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B00B, PCI_ANY_ID, PCI_ANY_ID}, | 1929 | {PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B00B, PCI_ANY_ID, PCI_ANY_ID}, |
1930 | {PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B00C, PCI_ANY_ID, PCI_ANY_ID}, | 1930 | {PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B00C, PCI_ANY_ID, PCI_ANY_ID}, |
1931 | {PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B100, PCI_ANY_ID, PCI_ANY_ID}, | 1931 | {PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B100, PCI_ANY_ID, PCI_ANY_ID}, |
1932 | {PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B700, PCI_ANY_ID, PCI_ANY_ID}, | ||
1933 | {PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B701, PCI_ANY_ID, PCI_ANY_ID}, | ||
1932 | {PCI_VENDOR_ID_ABOCOM, PCI_DEVICE_ID_ABOCOM_2BD1, PCI_ANY_ID, PCI_ANY_ID}, | 1934 | {PCI_VENDOR_ID_ABOCOM, PCI_DEVICE_ID_ABOCOM_2BD1, PCI_ANY_ID, PCI_ANY_ID}, |
1933 | {PCI_VENDOR_ID_ASUSTEK, PCI_DEVICE_ID_ASUSTEK_0675, PCI_ANY_ID, PCI_ANY_ID}, | 1935 | {PCI_VENDOR_ID_ASUSTEK, PCI_DEVICE_ID_ASUSTEK_0675, PCI_ANY_ID, PCI_ANY_ID}, |
1934 | {PCI_VENDOR_ID_BERKOM, PCI_DEVICE_ID_BERKOM_T_CONCEPT, PCI_ANY_ID, PCI_ANY_ID}, | 1936 | {PCI_VENDOR_ID_BERKOM, PCI_DEVICE_ID_BERKOM_T_CONCEPT, PCI_ANY_ID, PCI_ANY_ID}, |
diff --git a/drivers/isdn/hisax/hfc_pci.c b/drivers/isdn/hisax/hfc_pci.c index 4866fc32d8d9..91d25acb5ede 100644 --- a/drivers/isdn/hisax/hfc_pci.c +++ b/drivers/isdn/hisax/hfc_pci.c | |||
@@ -51,6 +51,8 @@ static const PCI_ENTRY id_list[] = | |||
51 | {PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B00B, "Billion", "B00B"}, | 51 | {PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B00B, "Billion", "B00B"}, |
52 | {PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B00C, "Billion", "B00C"}, | 52 | {PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B00C, "Billion", "B00C"}, |
53 | {PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B100, "Seyeon", "B100"}, | 53 | {PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B100, "Seyeon", "B100"}, |
54 | {PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B700, "Primux II S0", "B700"}, | ||
55 | {PCI_VENDOR_ID_CCD, PCI_DEVICE_ID_CCD_B701, "Primux II S0 NT", "B701"}, | ||
54 | {PCI_VENDOR_ID_ABOCOM, PCI_DEVICE_ID_ABOCOM_2BD1, "Abocom/Magitek", "2BD1"}, | 56 | {PCI_VENDOR_ID_ABOCOM, PCI_DEVICE_ID_ABOCOM_2BD1, "Abocom/Magitek", "2BD1"}, |
55 | {PCI_VENDOR_ID_ASUSTEK, PCI_DEVICE_ID_ASUSTEK_0675, "Asuscom/Askey", "675"}, | 57 | {PCI_VENDOR_ID_ASUSTEK, PCI_DEVICE_ID_ASUSTEK_0675, "Asuscom/Askey", "675"}, |
56 | {PCI_VENDOR_ID_BERKOM, PCI_DEVICE_ID_BERKOM_T_CONCEPT, "German telekom", "T-Concept"}, | 58 | {PCI_VENDOR_ID_BERKOM, PCI_DEVICE_ID_BERKOM_T_CONCEPT, "German telekom", "T-Concept"}, |
diff --git a/drivers/isdn/hisax/hfc_usb.c b/drivers/isdn/hisax/hfc_usb.c index ca5b4a3b683e..262c44127419 100644 --- a/drivers/isdn/hisax/hfc_usb.c +++ b/drivers/isdn/hisax/hfc_usb.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * hfc_usb.c | 2 | * hfc_usb.c |
3 | * | 3 | * |
4 | * $Id: hfc_usb.c,v 4.36 2005/04/08 09:55:13 martinb1 Exp $ | 4 | * $Id: hfc_usb.c,v 2.3.2.13 2006/02/17 17:17:22 mbachem Exp $ |
5 | * | 5 | * |
6 | * modular HiSax ISDN driver for Colognechip HFC-S USB chip | 6 | * modular HiSax ISDN driver for Colognechip HFC-S USB chip |
7 | * | 7 | * |
@@ -45,7 +45,7 @@ | |||
45 | #include "hfc_usb.h" | 45 | #include "hfc_usb.h" |
46 | 46 | ||
47 | static const char *hfcusb_revision = | 47 | static const char *hfcusb_revision = |
48 | "$Revision: 4.36 $ $Date: 2005/04/08 09:55:13 $ "; | 48 | "$Revision: 2.3.2.13 $ $Date: 2006/02/17 17:17:22 $ "; |
49 | 49 | ||
50 | /* Hisax debug support | 50 | /* Hisax debug support |
51 | * use "modprobe debug=x" where x is bitfield of USB_DBG & ISDN_DBG | 51 | * use "modprobe debug=x" where x is bitfield of USB_DBG & ISDN_DBG |
@@ -219,7 +219,7 @@ symbolic(struct hfcusb_symbolic_list list[], const int num) | |||
219 | for (i = 0; list[i].name != NULL; i++) | 219 | for (i = 0; list[i].name != NULL; i++) |
220 | if (list[i].num == num) | 220 | if (list[i].num == num) |
221 | return (list[i].name); | 221 | return (list[i].name); |
222 | return "<unkown ERROR>"; | 222 | return "<unknown ERROR>"; |
223 | } | 223 | } |
224 | 224 | ||
225 | 225 | ||
@@ -235,9 +235,9 @@ ctrl_start_transfer(hfcusb_data * hfc) | |||
235 | hfc->ctrl_urb->transfer_buffer = NULL; | 235 | hfc->ctrl_urb->transfer_buffer = NULL; |
236 | hfc->ctrl_urb->transfer_buffer_length = 0; | 236 | hfc->ctrl_urb->transfer_buffer_length = 0; |
237 | hfc->ctrl_write.wIndex = | 237 | hfc->ctrl_write.wIndex = |
238 | hfc->ctrl_buff[hfc->ctrl_out_idx].hfc_reg; | 238 | cpu_to_le16(hfc->ctrl_buff[hfc->ctrl_out_idx].hfc_reg); |
239 | hfc->ctrl_write.wValue = | 239 | hfc->ctrl_write.wValue = |
240 | hfc->ctrl_buff[hfc->ctrl_out_idx].reg_val; | 240 | cpu_to_le16(hfc->ctrl_buff[hfc->ctrl_out_idx].reg_val); |
241 | 241 | ||
242 | usb_submit_urb(hfc->ctrl_urb, GFP_ATOMIC); /* start transfer */ | 242 | usb_submit_urb(hfc->ctrl_urb, GFP_ATOMIC); /* start transfer */ |
243 | } | 243 | } |
@@ -1282,7 +1282,7 @@ usb_init(hfcusb_data * hfc) | |||
1282 | /* init the background machinery for control requests */ | 1282 | /* init the background machinery for control requests */ |
1283 | hfc->ctrl_read.bRequestType = 0xc0; | 1283 | hfc->ctrl_read.bRequestType = 0xc0; |
1284 | hfc->ctrl_read.bRequest = 1; | 1284 | hfc->ctrl_read.bRequest = 1; |
1285 | hfc->ctrl_read.wLength = 1; | 1285 | hfc->ctrl_read.wLength = cpu_to_le16(1); |
1286 | hfc->ctrl_write.bRequestType = 0x40; | 1286 | hfc->ctrl_write.bRequestType = 0x40; |
1287 | hfc->ctrl_write.bRequest = 0; | 1287 | hfc->ctrl_write.bRequest = 0; |
1288 | hfc->ctrl_write.wLength = 0; | 1288 | hfc->ctrl_write.wLength = 0; |
@@ -1373,9 +1373,8 @@ hfc_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) | |||
1373 | 1373 | ||
1374 | vend_idx = 0xffff; | 1374 | vend_idx = 0xffff; |
1375 | for (i = 0; hfcusb_idtab[i].idVendor; i++) { | 1375 | for (i = 0; hfcusb_idtab[i].idVendor; i++) { |
1376 | if (dev->descriptor.idVendor == hfcusb_idtab[i].idVendor | 1376 | if ((le16_to_cpu(dev->descriptor.idVendor) == hfcusb_idtab[i].idVendor) |
1377 | && dev->descriptor.idProduct == | 1377 | && (le16_to_cpu(dev->descriptor.idProduct) == hfcusb_idtab[i].idProduct)) { |
1378 | hfcusb_idtab[i].idProduct) { | ||
1379 | vend_idx = i; | 1378 | vend_idx = i; |
1380 | continue; | 1379 | continue; |
1381 | } | 1380 | } |
@@ -1516,8 +1515,7 @@ hfc_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) | |||
1516 | usb_transfer_mode | 1515 | usb_transfer_mode |
1517 | = USB_INT; | 1516 | = USB_INT; |
1518 | packet_size = | 1517 | packet_size = |
1519 | ep->desc. | 1518 | le16_to_cpu(ep->desc.wMaxPacketSize); |
1520 | wMaxPacketSize; | ||
1521 | break; | 1519 | break; |
1522 | case USB_ENDPOINT_XFER_BULK: | 1520 | case USB_ENDPOINT_XFER_BULK: |
1523 | if (ep_addr & 0x80) | 1521 | if (ep_addr & 0x80) |
@@ -1545,8 +1543,7 @@ hfc_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) | |||
1545 | usb_transfer_mode | 1543 | usb_transfer_mode |
1546 | = USB_BULK; | 1544 | = USB_BULK; |
1547 | packet_size = | 1545 | packet_size = |
1548 | ep->desc. | 1546 | le16_to_cpu(ep->desc.wMaxPacketSize); |
1549 | wMaxPacketSize; | ||
1550 | break; | 1547 | break; |
1551 | case USB_ENDPOINT_XFER_ISOC: | 1548 | case USB_ENDPOINT_XFER_ISOC: |
1552 | if (ep_addr & 0x80) | 1549 | if (ep_addr & 0x80) |
@@ -1574,8 +1571,7 @@ hfc_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) | |||
1574 | usb_transfer_mode | 1571 | usb_transfer_mode |
1575 | = USB_ISOC; | 1572 | = USB_ISOC; |
1576 | iso_packet_size = | 1573 | iso_packet_size = |
1577 | ep->desc. | 1574 | le16_to_cpu(ep->desc.wMaxPacketSize); |
1578 | wMaxPacketSize; | ||
1579 | break; | 1575 | break; |
1580 | default: | 1576 | default: |
1581 | context-> | 1577 | context-> |
@@ -1588,10 +1584,8 @@ hfc_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) | |||
1588 | fifonum = cidx; | 1584 | fifonum = cidx; |
1589 | context->fifos[cidx].hfc = | 1585 | context->fifos[cidx].hfc = |
1590 | context; | 1586 | context; |
1591 | context->fifos[cidx]. | 1587 | context->fifos[cidx].usb_packet_maxlen = |
1592 | usb_packet_maxlen = | 1588 | le16_to_cpu(ep->desc.wMaxPacketSize); |
1593 | ep->desc. | ||
1594 | wMaxPacketSize; | ||
1595 | context->fifos[cidx]. | 1589 | context->fifos[cidx]. |
1596 | intervall = | 1590 | intervall = |
1597 | ep->desc.bInterval; | 1591 | ep->desc.bInterval; |
diff --git a/drivers/isdn/i4l/isdn_tty.c b/drivers/isdn/i4l/isdn_tty.c index 393633681f49..aeaa1db74bd8 100644 --- a/drivers/isdn/i4l/isdn_tty.c +++ b/drivers/isdn/i4l/isdn_tty.c | |||
@@ -1682,6 +1682,7 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp) | |||
1682 | #ifdef ISDN_DEBUG_MODEM_OPEN | 1682 | #ifdef ISDN_DEBUG_MODEM_OPEN |
1683 | printk(KERN_DEBUG "isdn_tty_close after info->count != 0\n"); | 1683 | printk(KERN_DEBUG "isdn_tty_close after info->count != 0\n"); |
1684 | #endif | 1684 | #endif |
1685 | module_put(info->owner); | ||
1685 | return; | 1686 | return; |
1686 | } | 1687 | } |
1687 | info->flags |= ISDN_ASYNC_CLOSING; | 1688 | info->flags |= ISDN_ASYNC_CLOSING; |
diff --git a/drivers/macintosh/windfarm_pid.c b/drivers/macintosh/windfarm_pid.c index 0842432e27ad..f10efb28cae4 100644 --- a/drivers/macintosh/windfarm_pid.c +++ b/drivers/macintosh/windfarm_pid.c | |||
@@ -143,3 +143,7 @@ s32 wf_cpu_pid_run(struct wf_cpu_pid_state *st, s32 new_power, s32 new_temp) | |||
143 | return st->target; | 143 | return st->target; |
144 | } | 144 | } |
145 | EXPORT_SYMBOL_GPL(wf_cpu_pid_run); | 145 | EXPORT_SYMBOL_GPL(wf_cpu_pid_run); |
146 | |||
147 | MODULE_AUTHOR("Benjamin Herrenschmidt <benh@kernel.crashing.org>"); | ||
148 | MODULE_DESCRIPTION("PID algorithm for PowerMacs thermal control"); | ||
149 | MODULE_LICENSE("GPL"); | ||
diff --git a/drivers/mmc/au1xmmc.c b/drivers/mmc/au1xmmc.c index 227c39a7c1b4..8d84b045bc83 100644 --- a/drivers/mmc/au1xmmc.c +++ b/drivers/mmc/au1xmmc.c | |||
@@ -37,7 +37,7 @@ | |||
37 | #include <linux/config.h> | 37 | #include <linux/config.h> |
38 | #include <linux/module.h> | 38 | #include <linux/module.h> |
39 | #include <linux/init.h> | 39 | #include <linux/init.h> |
40 | #include <linux/device.h> | 40 | #include <linux/platform_device.h> |
41 | #include <linux/mm.h> | 41 | #include <linux/mm.h> |
42 | #include <linux/interrupt.h> | 42 | #include <linux/interrupt.h> |
43 | #include <linux/dma-mapping.h> | 43 | #include <linux/dma-mapping.h> |
@@ -194,7 +194,7 @@ static int au1xmmc_send_command(struct au1xmmc_host *host, int wait, | |||
194 | 194 | ||
195 | u32 mmccmd = (cmd->opcode << SD_CMD_CI_SHIFT); | 195 | u32 mmccmd = (cmd->opcode << SD_CMD_CI_SHIFT); |
196 | 196 | ||
197 | switch (mmc_rsp_type(cmd->flags)) { | 197 | switch (mmc_resp_type(cmd)) { |
198 | case MMC_RSP_R1: | 198 | case MMC_RSP_R1: |
199 | mmccmd |= SD_CMD_RT_1; | 199 | mmccmd |= SD_CMD_RT_1; |
200 | break; | 200 | break; |
@@ -740,7 +740,6 @@ static void au1xmmc_set_ios(struct mmc_host* mmc, struct mmc_ios* ios) | |||
740 | static void au1xmmc_dma_callback(int irq, void *dev_id, struct pt_regs *regs) | 740 | static void au1xmmc_dma_callback(int irq, void *dev_id, struct pt_regs *regs) |
741 | { | 741 | { |
742 | struct au1xmmc_host *host = (struct au1xmmc_host *) dev_id; | 742 | struct au1xmmc_host *host = (struct au1xmmc_host *) dev_id; |
743 | u32 status; | ||
744 | 743 | ||
745 | /* Avoid spurious interrupts */ | 744 | /* Avoid spurious interrupts */ |
746 | 745 | ||
@@ -887,7 +886,7 @@ struct mmc_host_ops au1xmmc_ops = { | |||
887 | .set_ios = au1xmmc_set_ios, | 886 | .set_ios = au1xmmc_set_ios, |
888 | }; | 887 | }; |
889 | 888 | ||
890 | static int au1xmmc_probe(struct device *dev) | 889 | static int __devinit au1xmmc_probe(struct platform_device *pdev) |
891 | { | 890 | { |
892 | 891 | ||
893 | int i, ret = 0; | 892 | int i, ret = 0; |
@@ -904,7 +903,7 @@ static int au1xmmc_probe(struct device *dev) | |||
904 | disable_irq(AU1100_SD_IRQ); | 903 | disable_irq(AU1100_SD_IRQ); |
905 | 904 | ||
906 | for(i = 0; i < AU1XMMC_CONTROLLER_COUNT; i++) { | 905 | for(i = 0; i < AU1XMMC_CONTROLLER_COUNT; i++) { |
907 | struct mmc_host *mmc = mmc_alloc_host(sizeof(struct au1xmmc_host), dev); | 906 | struct mmc_host *mmc = mmc_alloc_host(sizeof(struct au1xmmc_host), &pdev->dev); |
908 | struct au1xmmc_host *host = 0; | 907 | struct au1xmmc_host *host = 0; |
909 | 908 | ||
910 | if (!mmc) { | 909 | if (!mmc) { |
@@ -967,7 +966,7 @@ static int au1xmmc_probe(struct device *dev) | |||
967 | return 0; | 966 | return 0; |
968 | } | 967 | } |
969 | 968 | ||
970 | static int au1xmmc_remove(struct device *dev) | 969 | static int __devexit au1xmmc_remove(struct platform_device *pdev) |
971 | { | 970 | { |
972 | 971 | ||
973 | int i; | 972 | int i; |
@@ -997,23 +996,24 @@ static int au1xmmc_remove(struct device *dev) | |||
997 | return 0; | 996 | return 0; |
998 | } | 997 | } |
999 | 998 | ||
1000 | static struct device_driver au1xmmc_driver = { | 999 | static struct platform_driver au1xmmc_driver = { |
1001 | .name = DRIVER_NAME, | ||
1002 | .bus = &platform_bus_type, | ||
1003 | .probe = au1xmmc_probe, | 1000 | .probe = au1xmmc_probe, |
1004 | .remove = au1xmmc_remove, | 1001 | .remove = au1xmmc_remove, |
1005 | .suspend = NULL, | 1002 | .suspend = NULL, |
1006 | .resume = NULL | 1003 | .resume = NULL, |
1004 | .driver = { | ||
1005 | .name = DRIVER_NAME, | ||
1006 | }, | ||
1007 | }; | 1007 | }; |
1008 | 1008 | ||
1009 | static int __init au1xmmc_init(void) | 1009 | static int __init au1xmmc_init(void) |
1010 | { | 1010 | { |
1011 | return driver_register(&au1xmmc_driver); | 1011 | return platform_driver_register(&au1xmmc_driver); |
1012 | } | 1012 | } |
1013 | 1013 | ||
1014 | static void __exit au1xmmc_exit(void) | 1014 | static void __exit au1xmmc_exit(void) |
1015 | { | 1015 | { |
1016 | driver_unregister(&au1xmmc_driver); | 1016 | platform_driver_unregister(&au1xmmc_driver); |
1017 | } | 1017 | } |
1018 | 1018 | ||
1019 | module_init(au1xmmc_init); | 1019 | module_init(au1xmmc_init); |
diff --git a/drivers/net/chelsio/espi.c b/drivers/net/chelsio/espi.c index 230642571c92..e824acaf188a 100644 --- a/drivers/net/chelsio/espi.c +++ b/drivers/net/chelsio/espi.c | |||
@@ -296,9 +296,7 @@ void t1_espi_destroy(struct peespi *espi) | |||
296 | 296 | ||
297 | struct peespi *t1_espi_create(adapter_t *adapter) | 297 | struct peespi *t1_espi_create(adapter_t *adapter) |
298 | { | 298 | { |
299 | struct peespi *espi = kmalloc(sizeof(*espi), GFP_KERNEL); | 299 | struct peespi *espi = kzalloc(sizeof(*espi), GFP_KERNEL); |
300 | |||
301 | memset(espi, 0, sizeof(*espi)); | ||
302 | 300 | ||
303 | if (espi) | 301 | if (espi) |
304 | espi->adapter = adapter; | 302 | espi->adapter = adapter; |
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c index 49b597cbc19a..b7f00d6eb6a6 100644 --- a/drivers/net/s2io.c +++ b/drivers/net/s2io.c | |||
@@ -4092,6 +4092,7 @@ static void s2io_set_multicast(struct net_device *dev) | |||
4092 | i++, mclist = mclist->next) { | 4092 | i++, mclist = mclist->next) { |
4093 | memcpy(sp->usr_addrs[i].addr, mclist->dmi_addr, | 4093 | memcpy(sp->usr_addrs[i].addr, mclist->dmi_addr, |
4094 | ETH_ALEN); | 4094 | ETH_ALEN); |
4095 | mac_addr = 0; | ||
4095 | for (j = 0; j < ETH_ALEN; j++) { | 4096 | for (j = 0; j < ETH_ALEN; j++) { |
4096 | mac_addr |= mclist->dmi_addr[j]; | 4097 | mac_addr |= mclist->dmi_addr[j]; |
4097 | mac_addr <<= 8; | 4098 | mac_addr <<= 8; |
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index e8e92c853e89..15545620ab0e 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -3532,9 +3532,23 @@ static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len) | |||
3532 | (base + len + 8 < base)); | 3532 | (base + len + 8 < base)); |
3533 | } | 3533 | } |
3534 | 3534 | ||
3535 | /* Test for DMA addresses > 40-bit */ | ||
3536 | static inline int tg3_40bit_overflow_test(struct tg3 *tp, dma_addr_t mapping, | ||
3537 | int len) | ||
3538 | { | ||
3539 | #if defined(CONFIG_HIGHMEM) && (BITS_PER_LONG == 64) | ||
3540 | if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) | ||
3541 | return (((u64) mapping + len) > DMA_40BIT_MASK); | ||
3542 | return 0; | ||
3543 | #else | ||
3544 | return 0; | ||
3545 | #endif | ||
3546 | } | ||
3547 | |||
3535 | static void tg3_set_txd(struct tg3 *, int, dma_addr_t, int, u32, u32); | 3548 | static void tg3_set_txd(struct tg3 *, int, dma_addr_t, int, u32, u32); |
3536 | 3549 | ||
3537 | static int tigon3_4gb_hwbug_workaround(struct tg3 *tp, struct sk_buff *skb, | 3550 | /* Workaround 4GB and 40-bit hardware DMA bugs. */ |
3551 | static int tigon3_dma_hwbug_workaround(struct tg3 *tp, struct sk_buff *skb, | ||
3538 | u32 last_plus_one, u32 *start, | 3552 | u32 last_plus_one, u32 *start, |
3539 | u32 base_flags, u32 mss) | 3553 | u32 base_flags, u32 mss) |
3540 | { | 3554 | { |
@@ -3742,6 +3756,9 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
3742 | if (tg3_4g_overflow_test(mapping, len)) | 3756 | if (tg3_4g_overflow_test(mapping, len)) |
3743 | would_hit_hwbug = 1; | 3757 | would_hit_hwbug = 1; |
3744 | 3758 | ||
3759 | if (tg3_40bit_overflow_test(tp, mapping, len)) | ||
3760 | would_hit_hwbug = 1; | ||
3761 | |||
3745 | if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) | 3762 | if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) |
3746 | tg3_set_txd(tp, entry, mapping, len, | 3763 | tg3_set_txd(tp, entry, mapping, len, |
3747 | base_flags, (i == last)|(mss << 1)); | 3764 | base_flags, (i == last)|(mss << 1)); |
@@ -3763,7 +3780,7 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
3763 | /* If the workaround fails due to memory/mapping | 3780 | /* If the workaround fails due to memory/mapping |
3764 | * failure, silently drop this packet. | 3781 | * failure, silently drop this packet. |
3765 | */ | 3782 | */ |
3766 | if (tigon3_4gb_hwbug_workaround(tp, skb, last_plus_one, | 3783 | if (tigon3_dma_hwbug_workaround(tp, skb, last_plus_one, |
3767 | &start, base_flags, mss)) | 3784 | &start, base_flags, mss)) |
3768 | goto out_unlock; | 3785 | goto out_unlock; |
3769 | 3786 | ||
@@ -10608,8 +10625,9 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, | |||
10608 | unsigned long tg3reg_base, tg3reg_len; | 10625 | unsigned long tg3reg_base, tg3reg_len; |
10609 | struct net_device *dev; | 10626 | struct net_device *dev; |
10610 | struct tg3 *tp; | 10627 | struct tg3 *tp; |
10611 | int i, err, pci_using_dac, pm_cap; | 10628 | int i, err, pm_cap; |
10612 | char str[40]; | 10629 | char str[40]; |
10630 | u64 dma_mask, persist_dma_mask; | ||
10613 | 10631 | ||
10614 | if (tg3_version_printed++ == 0) | 10632 | if (tg3_version_printed++ == 0) |
10615 | printk(KERN_INFO "%s", version); | 10633 | printk(KERN_INFO "%s", version); |
@@ -10646,26 +10664,6 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, | |||
10646 | goto err_out_free_res; | 10664 | goto err_out_free_res; |
10647 | } | 10665 | } |
10648 | 10666 | ||
10649 | /* Configure DMA attributes. */ | ||
10650 | err = pci_set_dma_mask(pdev, DMA_64BIT_MASK); | ||
10651 | if (!err) { | ||
10652 | pci_using_dac = 1; | ||
10653 | err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK); | ||
10654 | if (err < 0) { | ||
10655 | printk(KERN_ERR PFX "Unable to obtain 64 bit DMA " | ||
10656 | "for consistent allocations\n"); | ||
10657 | goto err_out_free_res; | ||
10658 | } | ||
10659 | } else { | ||
10660 | err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); | ||
10661 | if (err) { | ||
10662 | printk(KERN_ERR PFX "No usable DMA configuration, " | ||
10663 | "aborting.\n"); | ||
10664 | goto err_out_free_res; | ||
10665 | } | ||
10666 | pci_using_dac = 0; | ||
10667 | } | ||
10668 | |||
10669 | tg3reg_base = pci_resource_start(pdev, 0); | 10667 | tg3reg_base = pci_resource_start(pdev, 0); |
10670 | tg3reg_len = pci_resource_len(pdev, 0); | 10668 | tg3reg_len = pci_resource_len(pdev, 0); |
10671 | 10669 | ||
@@ -10679,8 +10677,6 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, | |||
10679 | SET_MODULE_OWNER(dev); | 10677 | SET_MODULE_OWNER(dev); |
10680 | SET_NETDEV_DEV(dev, &pdev->dev); | 10678 | SET_NETDEV_DEV(dev, &pdev->dev); |
10681 | 10679 | ||
10682 | if (pci_using_dac) | ||
10683 | dev->features |= NETIF_F_HIGHDMA; | ||
10684 | dev->features |= NETIF_F_LLTX; | 10680 | dev->features |= NETIF_F_LLTX; |
10685 | #if TG3_VLAN_TAG_USED | 10681 | #if TG3_VLAN_TAG_USED |
10686 | dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; | 10682 | dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; |
@@ -10765,6 +10761,44 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, | |||
10765 | goto err_out_iounmap; | 10761 | goto err_out_iounmap; |
10766 | } | 10762 | } |
10767 | 10763 | ||
10764 | /* 5714, 5715 and 5780 cannot support DMA addresses > 40-bit. | ||
10765 | * On 64-bit systems with IOMMU, use 40-bit dma_mask. | ||
10766 | * On 64-bit systems without IOMMU, use 64-bit dma_mask and | ||
10767 | * do DMA address check in tg3_start_xmit(). | ||
10768 | */ | ||
10769 | if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) { | ||
10770 | persist_dma_mask = dma_mask = DMA_40BIT_MASK; | ||
10771 | #ifdef CONFIG_HIGHMEM | ||
10772 | dma_mask = DMA_64BIT_MASK; | ||
10773 | #endif | ||
10774 | } else if (tp->tg3_flags2 & TG3_FLG2_IS_5788) | ||
10775 | persist_dma_mask = dma_mask = DMA_32BIT_MASK; | ||
10776 | else | ||
10777 | persist_dma_mask = dma_mask = DMA_64BIT_MASK; | ||
10778 | |||
10779 | /* Configure DMA attributes. */ | ||
10780 | if (dma_mask > DMA_32BIT_MASK) { | ||
10781 | err = pci_set_dma_mask(pdev, dma_mask); | ||
10782 | if (!err) { | ||
10783 | dev->features |= NETIF_F_HIGHDMA; | ||
10784 | err = pci_set_consistent_dma_mask(pdev, | ||
10785 | persist_dma_mask); | ||
10786 | if (err < 0) { | ||
10787 | printk(KERN_ERR PFX "Unable to obtain 64 bit " | ||
10788 | "DMA for consistent allocations\n"); | ||
10789 | goto err_out_iounmap; | ||
10790 | } | ||
10791 | } | ||
10792 | } | ||
10793 | if (err || dma_mask == DMA_32BIT_MASK) { | ||
10794 | err = pci_set_dma_mask(pdev, DMA_32BIT_MASK); | ||
10795 | if (err) { | ||
10796 | printk(KERN_ERR PFX "No usable DMA configuration, " | ||
10797 | "aborting.\n"); | ||
10798 | goto err_out_iounmap; | ||
10799 | } | ||
10800 | } | ||
10801 | |||
10768 | tg3_init_bufmgr_config(tp); | 10802 | tg3_init_bufmgr_config(tp); |
10769 | 10803 | ||
10770 | #if TG3_TSO_SUPPORT != 0 | 10804 | #if TG3_TSO_SUPPORT != 0 |
@@ -10833,9 +10867,6 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, | |||
10833 | } else | 10867 | } else |
10834 | tp->tg3_flags &= ~TG3_FLAG_RX_CHECKSUMS; | 10868 | tp->tg3_flags &= ~TG3_FLAG_RX_CHECKSUMS; |
10835 | 10869 | ||
10836 | if (tp->tg3_flags2 & TG3_FLG2_IS_5788) | ||
10837 | dev->features &= ~NETIF_F_HIGHDMA; | ||
10838 | |||
10839 | /* flow control autonegotiation is default behavior */ | 10870 | /* flow control autonegotiation is default behavior */ |
10840 | tp->tg3_flags |= TG3_FLAG_PAUSE_AUTONEG; | 10871 | tp->tg3_flags |= TG3_FLAG_PAUSE_AUTONEG; |
10841 | 10872 | ||
diff --git a/drivers/parport/parport_serial.c b/drivers/parport/parport_serial.c index 166de3507780..10845253c9e0 100644 --- a/drivers/parport/parport_serial.c +++ b/drivers/parport/parport_serial.c | |||
@@ -312,8 +312,7 @@ static int __devinit parport_register (struct pci_dev *dev, | |||
312 | { | 312 | { |
313 | struct parport_pc_pci *card; | 313 | struct parport_pc_pci *card; |
314 | struct parport_serial_private *priv = pci_get_drvdata (dev); | 314 | struct parport_serial_private *priv = pci_get_drvdata (dev); |
315 | int i = id->driver_data, n; | 315 | int n, success = 0; |
316 | int success = 0; | ||
317 | 316 | ||
318 | priv->par = cards[id->driver_data]; | 317 | priv->par = cards[id->driver_data]; |
319 | card = &priv->par; | 318 | card = &priv->par; |
@@ -344,10 +343,8 @@ static int __devinit parport_register (struct pci_dev *dev, | |||
344 | "hi" as an offset (see SYBA | 343 | "hi" as an offset (see SYBA |
345 | def.) */ | 344 | def.) */ |
346 | /* TODO: test if sharing interrupts works */ | 345 | /* TODO: test if sharing interrupts works */ |
347 | printk (KERN_DEBUG "PCI parallel port detected: %04x:%04x, " | 346 | dev_dbg(&dev->dev, "PCI parallel port detected: I/O at " |
348 | "I/O at %#lx(%#lx)\n", | 347 | "%#lx(%#lx)\n", io_lo, io_hi); |
349 | parport_serial_pci_tbl[i].vendor, | ||
350 | parport_serial_pci_tbl[i].device, io_lo, io_hi); | ||
351 | port = parport_pc_probe_port (io_lo, io_hi, PARPORT_IRQ_NONE, | 348 | port = parport_pc_probe_port (io_lo, io_hi, PARPORT_IRQ_NONE, |
352 | PARPORT_DMA_NONE, dev); | 349 | PARPORT_DMA_NONE, dev); |
353 | if (port) { | 350 | if (port) { |
@@ -359,7 +356,7 @@ static int __devinit parport_register (struct pci_dev *dev, | |||
359 | if (card->postinit_hook) | 356 | if (card->postinit_hook) |
360 | card->postinit_hook (dev, card, !success); | 357 | card->postinit_hook (dev, card, !success); |
361 | 358 | ||
362 | return success ? 0 : 1; | 359 | return 0; |
363 | } | 360 | } |
364 | 361 | ||
365 | static int __devinit parport_serial_pci_probe (struct pci_dev *dev, | 362 | static int __devinit parport_serial_pci_probe (struct pci_dev *dev, |
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index af1d5b404cee..33157c84d1d3 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c | |||
@@ -215,9 +215,10 @@ dasd_state_basic_to_known(struct dasd_device * device) | |||
215 | * interrupt for this detection ccw uses the kernel event daemon to | 215 | * interrupt for this detection ccw uses the kernel event daemon to |
216 | * trigger the call to dasd_change_state. All this is done in the | 216 | * trigger the call to dasd_change_state. All this is done in the |
217 | * discipline code, see dasd_eckd.c. | 217 | * discipline code, see dasd_eckd.c. |
218 | * After the analysis ccw is done (do_analysis returned 0 or error) | 218 | * After the analysis ccw is done (do_analysis returned 0) the block |
219 | * the block device is setup. Either a fake disk is added to allow | 219 | * device is setup. |
220 | * formatting or a proper device request queue is created. | 220 | * In case the analysis returns an error, the device setup is stopped |
221 | * (a fake disk was already added to allow formatting). | ||
221 | */ | 222 | */ |
222 | static inline int | 223 | static inline int |
223 | dasd_state_basic_to_ready(struct dasd_device * device) | 224 | dasd_state_basic_to_ready(struct dasd_device * device) |
@@ -227,13 +228,19 @@ dasd_state_basic_to_ready(struct dasd_device * device) | |||
227 | rc = 0; | 228 | rc = 0; |
228 | if (device->discipline->do_analysis != NULL) | 229 | if (device->discipline->do_analysis != NULL) |
229 | rc = device->discipline->do_analysis(device); | 230 | rc = device->discipline->do_analysis(device); |
230 | if (rc) | 231 | if (rc) { |
232 | if (rc != -EAGAIN) | ||
233 | device->state = DASD_STATE_UNFMT; | ||
231 | return rc; | 234 | return rc; |
235 | } | ||
236 | /* make disk known with correct capacity */ | ||
232 | dasd_setup_queue(device); | 237 | dasd_setup_queue(device); |
238 | set_capacity(device->gdp, device->blocks << device->s2b_shift); | ||
233 | device->state = DASD_STATE_READY; | 239 | device->state = DASD_STATE_READY; |
234 | if (dasd_scan_partitions(device) != 0) | 240 | rc = dasd_scan_partitions(device); |
241 | if (rc) | ||
235 | device->state = DASD_STATE_BASIC; | 242 | device->state = DASD_STATE_BASIC; |
236 | return 0; | 243 | return rc; |
237 | } | 244 | } |
238 | 245 | ||
239 | /* | 246 | /* |
@@ -254,6 +261,15 @@ dasd_state_ready_to_basic(struct dasd_device * device) | |||
254 | } | 261 | } |
255 | 262 | ||
256 | /* | 263 | /* |
264 | * Back to basic. | ||
265 | */ | ||
266 | static inline void | ||
267 | dasd_state_unfmt_to_basic(struct dasd_device * device) | ||
268 | { | ||
269 | device->state = DASD_STATE_BASIC; | ||
270 | } | ||
271 | |||
272 | /* | ||
257 | * Make the device online and schedule the bottom half to start | 273 | * Make the device online and schedule the bottom half to start |
258 | * the requeueing of requests from the linux request queue to the | 274 | * the requeueing of requests from the linux request queue to the |
259 | * ccw queue. | 275 | * ccw queue. |
@@ -319,8 +335,12 @@ dasd_decrease_state(struct dasd_device *device) | |||
319 | if (device->state == DASD_STATE_READY && | 335 | if (device->state == DASD_STATE_READY && |
320 | device->target <= DASD_STATE_BASIC) | 336 | device->target <= DASD_STATE_BASIC) |
321 | dasd_state_ready_to_basic(device); | 337 | dasd_state_ready_to_basic(device); |
322 | 338 | ||
323 | if (device->state == DASD_STATE_BASIC && | 339 | if (device->state == DASD_STATE_UNFMT && |
340 | device->target <= DASD_STATE_BASIC) | ||
341 | dasd_state_unfmt_to_basic(device); | ||
342 | |||
343 | if (device->state == DASD_STATE_BASIC && | ||
324 | device->target <= DASD_STATE_KNOWN) | 344 | device->target <= DASD_STATE_KNOWN) |
325 | dasd_state_basic_to_known(device); | 345 | dasd_state_basic_to_known(device); |
326 | 346 | ||
@@ -1722,7 +1742,7 @@ dasd_open(struct inode *inp, struct file *filp) | |||
1722 | goto out; | 1742 | goto out; |
1723 | } | 1743 | } |
1724 | 1744 | ||
1725 | if (device->state < DASD_STATE_BASIC) { | 1745 | if (device->state <= DASD_STATE_BASIC) { |
1726 | DBF_DEV_EVENT(DBF_ERR, device, " %s", | 1746 | DBF_DEV_EVENT(DBF_ERR, device, " %s", |
1727 | " Cannot open unrecognized device"); | 1747 | " Cannot open unrecognized device"); |
1728 | rc = -ENODEV; | 1748 | rc = -ENODEV; |
diff --git a/drivers/s390/block/dasd_genhd.c b/drivers/s390/block/dasd_genhd.c index 65dc844b975c..fce2835e7d19 100644 --- a/drivers/s390/block/dasd_genhd.c +++ b/drivers/s390/block/dasd_genhd.c | |||
@@ -100,8 +100,6 @@ dasd_scan_partitions(struct dasd_device * device) | |||
100 | { | 100 | { |
101 | struct block_device *bdev; | 101 | struct block_device *bdev; |
102 | 102 | ||
103 | /* Make the disk known. */ | ||
104 | set_capacity(device->gdp, device->blocks << device->s2b_shift); | ||
105 | bdev = bdget_disk(device->gdp, 0); | 103 | bdev = bdget_disk(device->gdp, 0); |
106 | if (!bdev || blkdev_get(bdev, FMODE_READ, 1) < 0) | 104 | if (!bdev || blkdev_get(bdev, FMODE_READ, 1) < 0) |
107 | return -ENODEV; | 105 | return -ENODEV; |
diff --git a/drivers/s390/block/dasd_int.h b/drivers/s390/block/dasd_int.h index 0592354cc604..7cb0b9e78a6a 100644 --- a/drivers/s390/block/dasd_int.h +++ b/drivers/s390/block/dasd_int.h | |||
@@ -26,7 +26,7 @@ | |||
26 | * new: the dasd_device structure is allocated. | 26 | * new: the dasd_device structure is allocated. |
27 | * known: the discipline for the device is identified. | 27 | * known: the discipline for the device is identified. |
28 | * basic: the device can do basic i/o. | 28 | * basic: the device can do basic i/o. |
29 | * accept: the device is analysed (format is known). | 29 | * unfmt: the device could not be analyzed (format is unknown). |
30 | * ready: partition detection is done and the device is can do block io. | 30 | * ready: partition detection is done and the device is can do block io. |
31 | * online: the device accepts requests from the block device queue. | 31 | * online: the device accepts requests from the block device queue. |
32 | * | 32 | * |
@@ -47,8 +47,9 @@ | |||
47 | #define DASD_STATE_NEW 0 | 47 | #define DASD_STATE_NEW 0 |
48 | #define DASD_STATE_KNOWN 1 | 48 | #define DASD_STATE_KNOWN 1 |
49 | #define DASD_STATE_BASIC 2 | 49 | #define DASD_STATE_BASIC 2 |
50 | #define DASD_STATE_READY 3 | 50 | #define DASD_STATE_UNFMT 3 |
51 | #define DASD_STATE_ONLINE 4 | 51 | #define DASD_STATE_READY 4 |
52 | #define DASD_STATE_ONLINE 5 | ||
52 | 53 | ||
53 | #include <linux/module.h> | 54 | #include <linux/module.h> |
54 | #include <linux/wait.h> | 55 | #include <linux/wait.h> |
diff --git a/drivers/s390/block/dasd_proc.c b/drivers/s390/block/dasd_proc.c index 2d5da3c75ca7..4c1acc8daa82 100644 --- a/drivers/s390/block/dasd_proc.c +++ b/drivers/s390/block/dasd_proc.c | |||
@@ -93,6 +93,9 @@ dasd_devices_show(struct seq_file *m, void *v) | |||
93 | case DASD_STATE_BASIC: | 93 | case DASD_STATE_BASIC: |
94 | seq_printf(m, "basic"); | 94 | seq_printf(m, "basic"); |
95 | break; | 95 | break; |
96 | case DASD_STATE_UNFMT: | ||
97 | seq_printf(m, "unnformatted"); | ||
98 | break; | ||
96 | case DASD_STATE_READY: | 99 | case DASD_STATE_READY: |
97 | case DASD_STATE_ONLINE: | 100 | case DASD_STATE_ONLINE: |
98 | seq_printf(m, "active "); | 101 | seq_printf(m, "active "); |
diff --git a/drivers/s390/cio/chsc.c b/drivers/s390/cio/chsc.c index 8cf9905d484b..f4183d660258 100644 --- a/drivers/s390/cio/chsc.c +++ b/drivers/s390/cio/chsc.c | |||
@@ -1115,6 +1115,9 @@ chsc_enable_facility(int operation_code) | |||
1115 | goto out; | 1115 | goto out; |
1116 | } | 1116 | } |
1117 | switch (sda_area->response.code) { | 1117 | switch (sda_area->response.code) { |
1118 | case 0x0001: /* everything ok */ | ||
1119 | ret = 0; | ||
1120 | break; | ||
1118 | case 0x0003: /* invalid request block */ | 1121 | case 0x0003: /* invalid request block */ |
1119 | case 0x0007: | 1122 | case 0x0007: |
1120 | ret = -EINVAL; | 1123 | ret = -EINVAL; |
@@ -1123,6 +1126,8 @@ chsc_enable_facility(int operation_code) | |||
1123 | case 0x0101: /* facility not provided */ | 1126 | case 0x0101: /* facility not provided */ |
1124 | ret = -EOPNOTSUPP; | 1127 | ret = -EOPNOTSUPP; |
1125 | break; | 1128 | break; |
1129 | default: /* something went wrong */ | ||
1130 | ret = -EIO; | ||
1126 | } | 1131 | } |
1127 | out: | 1132 | out: |
1128 | free_page((unsigned long)sda_area); | 1133 | free_page((unsigned long)sda_area); |
diff --git a/drivers/s390/net/smsgiucv.c b/drivers/s390/net/smsgiucv.c index d6469baa7e16..72118ee68954 100644 --- a/drivers/s390/net/smsgiucv.c +++ b/drivers/s390/net/smsgiucv.c | |||
@@ -168,7 +168,7 @@ smsg_init(void) | |||
168 | driver_unregister(&smsg_driver); | 168 | driver_unregister(&smsg_driver); |
169 | return -EIO; /* better errno ? */ | 169 | return -EIO; /* better errno ? */ |
170 | } | 170 | } |
171 | rc = iucv_connect (&smsg_pathid, 1, 0, "*MSG ", 0, 0, 0, 0, | 171 | rc = iucv_connect (&smsg_pathid, 255, 0, "*MSG ", 0, 0, 0, 0, |
172 | smsg_handle, 0); | 172 | smsg_handle, 0); |
173 | if (rc) { | 173 | if (rc) { |
174 | printk(KERN_ERR "SMSGIUCV: failed to connect to *MSG"); | 174 | printk(KERN_ERR "SMSGIUCV: failed to connect to *MSG"); |
diff --git a/drivers/scsi/sr_ioctl.c b/drivers/scsi/sr_ioctl.c index 5d02ff4db6cc..b65462f76484 100644 --- a/drivers/scsi/sr_ioctl.c +++ b/drivers/scsi/sr_ioctl.c | |||
@@ -192,7 +192,7 @@ int sr_do_ioctl(Scsi_CD *cd, struct packet_command *cgc) | |||
192 | SDev = cd->device; | 192 | SDev = cd->device; |
193 | 193 | ||
194 | if (!sense) { | 194 | if (!sense) { |
195 | sense = kmalloc(sizeof(*sense), GFP_KERNEL); | 195 | sense = kmalloc(SCSI_SENSE_BUFFERSIZE, GFP_KERNEL); |
196 | if (!sense) { | 196 | if (!sense) { |
197 | err = -ENOMEM; | 197 | err = -ENOMEM; |
198 | goto out; | 198 | goto out; |
diff --git a/drivers/serial/ip22zilog.c b/drivers/serial/ip22zilog.c index 419dd3cd7862..193722d680cf 100644 --- a/drivers/serial/ip22zilog.c +++ b/drivers/serial/ip22zilog.c | |||
@@ -420,10 +420,8 @@ static void ip22zilog_transmit_chars(struct uart_ip22zilog_port *up, | |||
420 | if (up->port.info == NULL) | 420 | if (up->port.info == NULL) |
421 | goto ack_tx_int; | 421 | goto ack_tx_int; |
422 | xmit = &up->port.info->xmit; | 422 | xmit = &up->port.info->xmit; |
423 | if (uart_circ_empty(xmit)) { | 423 | if (uart_circ_empty(xmit)) |
424 | uart_write_wakeup(&up->port); | ||
425 | goto ack_tx_int; | 424 | goto ack_tx_int; |
426 | } | ||
427 | if (uart_tx_stopped(&up->port)) | 425 | if (uart_tx_stopped(&up->port)) |
428 | goto ack_tx_int; | 426 | goto ack_tx_int; |
429 | 427 | ||
diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c index 95fb4939c675..cc1faa31d124 100644 --- a/drivers/serial/serial_core.c +++ b/drivers/serial/serial_core.c | |||
@@ -71,6 +71,11 @@ static void uart_change_pm(struct uart_state *state, int pm_state); | |||
71 | void uart_write_wakeup(struct uart_port *port) | 71 | void uart_write_wakeup(struct uart_port *port) |
72 | { | 72 | { |
73 | struct uart_info *info = port->info; | 73 | struct uart_info *info = port->info; |
74 | /* | ||
75 | * This means you called this function _after_ the port was | ||
76 | * closed. No cookie for you. | ||
77 | */ | ||
78 | BUG_ON(!info); | ||
74 | tasklet_schedule(&info->tlet); | 79 | tasklet_schedule(&info->tlet); |
75 | } | 80 | } |
76 | 81 | ||
@@ -471,14 +476,26 @@ static void uart_flush_chars(struct tty_struct *tty) | |||
471 | } | 476 | } |
472 | 477 | ||
473 | static int | 478 | static int |
474 | uart_write(struct tty_struct *tty, const unsigned char * buf, int count) | 479 | uart_write(struct tty_struct *tty, const unsigned char *buf, int count) |
475 | { | 480 | { |
476 | struct uart_state *state = tty->driver_data; | 481 | struct uart_state *state = tty->driver_data; |
477 | struct uart_port *port = state->port; | 482 | struct uart_port *port; |
478 | struct circ_buf *circ = &state->info->xmit; | 483 | struct circ_buf *circ; |
479 | unsigned long flags; | 484 | unsigned long flags; |
480 | int c, ret = 0; | 485 | int c, ret = 0; |
481 | 486 | ||
487 | /* | ||
488 | * This means you called this function _after_ the port was | ||
489 | * closed. No cookie for you. | ||
490 | */ | ||
491 | if (!state || !state->info) { | ||
492 | WARN_ON(1); | ||
493 | return -EL3HLT; | ||
494 | } | ||
495 | |||
496 | port = state->port; | ||
497 | circ = &state->info->xmit; | ||
498 | |||
482 | if (!circ->buf) | 499 | if (!circ->buf) |
483 | return 0; | 500 | return 0; |
484 | 501 | ||
@@ -521,6 +538,15 @@ static void uart_flush_buffer(struct tty_struct *tty) | |||
521 | struct uart_port *port = state->port; | 538 | struct uart_port *port = state->port; |
522 | unsigned long flags; | 539 | unsigned long flags; |
523 | 540 | ||
541 | /* | ||
542 | * This means you called this function _after_ the port was | ||
543 | * closed. No cookie for you. | ||
544 | */ | ||
545 | if (!state || !state->info) { | ||
546 | WARN_ON(1); | ||
547 | return; | ||
548 | } | ||
549 | |||
524 | DPRINTK("uart_flush_buffer(%d) called\n", tty->index); | 550 | DPRINTK("uart_flush_buffer(%d) called\n", tty->index); |
525 | 551 | ||
526 | spin_lock_irqsave(&port->lock, flags); | 552 | spin_lock_irqsave(&port->lock, flags); |
diff --git a/drivers/serial/sn_console.c b/drivers/serial/sn_console.c index 43e67d6c29d4..60ea4a3f0713 100644 --- a/drivers/serial/sn_console.c +++ b/drivers/serial/sn_console.c | |||
@@ -820,7 +820,7 @@ static int __init sn_sal_module_init(void) | |||
820 | int retval; | 820 | int retval; |
821 | 821 | ||
822 | if (!ia64_platform_is("sn2")) | 822 | if (!ia64_platform_is("sn2")) |
823 | return -ENODEV; | 823 | return 0; |
824 | 824 | ||
825 | printk(KERN_INFO "sn_console: Console driver init\n"); | 825 | printk(KERN_INFO "sn_console: Console driver init\n"); |
826 | 826 | ||
diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c index 4dd6865d32b0..b5c96e74a903 100644 --- a/drivers/usb/serial/usb-serial.c +++ b/drivers/usb/serial/usb-serial.c | |||
@@ -242,8 +242,10 @@ static void serial_close(struct tty_struct *tty, struct file * filp) | |||
242 | 242 | ||
243 | down(&port->sem); | 243 | down(&port->sem); |
244 | 244 | ||
245 | if (port->open_count == 0) | 245 | if (port->open_count == 0) { |
246 | goto out; | 246 | up(&port->sem); |
247 | return; | ||
248 | } | ||
247 | 249 | ||
248 | --port->open_count; | 250 | --port->open_count; |
249 | if (port->open_count == 0) { | 251 | if (port->open_count == 0) { |
@@ -260,10 +262,8 @@ static void serial_close(struct tty_struct *tty, struct file * filp) | |||
260 | module_put(port->serial->type->driver.owner); | 262 | module_put(port->serial->type->driver.owner); |
261 | } | 263 | } |
262 | 264 | ||
263 | kref_put(&port->serial->kref, destroy_serial); | ||
264 | |||
265 | out: | ||
266 | up(&port->sem); | 265 | up(&port->sem); |
266 | kref_put(&port->serial->kref, destroy_serial); | ||
267 | } | 267 | } |
268 | 268 | ||
269 | static int serial_write (struct tty_struct * tty, const unsigned char *buf, int count) | 269 | static int serial_write (struct tty_struct * tty, const unsigned char *buf, int count) |