diff options
| -rw-r--r-- | arch/mips/kernel/time.c | 5 | ||||
| -rw-r--r-- | drivers/char/pcmcia/cm4000_cs.c | 24 | ||||
| -rw-r--r-- | drivers/char/pcmcia/cm4040_cs.c | 23 | ||||
| -rw-r--r-- | drivers/ide/legacy/ide-cs.c | 1 | ||||
| -rw-r--r-- | drivers/net/e1000/e1000.h | 3 | ||||
| -rw-r--r-- | drivers/net/e1000/e1000_main.c | 119 | ||||
| -rw-r--r-- | drivers/net/pcmcia/axnet_cs.c | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/hostap/hostap_cs.c | 5 | ||||
| -rw-r--r-- | drivers/pcmcia/ds.c | 40 | ||||
| -rw-r--r-- | drivers/scsi/aha152x.c | 85 | ||||
| -rw-r--r-- | drivers/scsi/aha152x.h | 2 | ||||
| -rw-r--r-- | drivers/scsi/jazz_esp.c | 21 | ||||
| -rw-r--r-- | drivers/scsi/megaraid/megaraid_sas.c | 29 | ||||
| -rw-r--r-- | drivers/scsi/pcmcia/aha152x_stub.c | 4 | ||||
| -rw-r--r-- | drivers/scsi/scsi_error.c | 4 | ||||
| -rw-r--r-- | drivers/scsi/scsi_lib.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/scsi_scan.c | 16 | ||||
| -rw-r--r-- | drivers/scsi/scsi_transport_fc.c | 3 | ||||
| -rw-r--r-- | drivers/scsi/sg.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/sym53c8xx_2/sym_hipd.c | 2 | ||||
| -rw-r--r-- | include/asm-powerpc/eeh.h | 1 | ||||
| -rw-r--r-- | include/pcmcia/device_id.h | 9 |
22 files changed, 218 insertions, 183 deletions
diff --git a/arch/mips/kernel/time.c b/arch/mips/kernel/time.c index 7050b4ffffcd..42c94c771afb 100644 --- a/arch/mips/kernel/time.c +++ b/arch/mips/kernel/time.c | |||
| @@ -163,7 +163,7 @@ void do_gettimeofday(struct timeval *tv) | |||
| 163 | unsigned long seq; | 163 | unsigned long seq; |
| 164 | unsigned long lost; | 164 | unsigned long lost; |
| 165 | unsigned long usec, sec; | 165 | unsigned long usec, sec; |
| 166 | unsigned long max_ntp_tick = tick_usec - tickadj; | 166 | unsigned long max_ntp_tick; |
| 167 | 167 | ||
| 168 | do { | 168 | do { |
| 169 | seq = read_seqbegin(&xtime_lock); | 169 | seq = read_seqbegin(&xtime_lock); |
| @@ -178,12 +178,13 @@ void do_gettimeofday(struct timeval *tv) | |||
| 178 | * Better to lose some accuracy than have time go backwards.. | 178 | * Better to lose some accuracy than have time go backwards.. |
| 179 | */ | 179 | */ |
| 180 | if (unlikely(time_adjust < 0)) { | 180 | if (unlikely(time_adjust < 0)) { |
| 181 | max_ntp_tick = (USEC_PER_SEC / HZ) - tickadj; | ||
| 181 | usec = min(usec, max_ntp_tick); | 182 | usec = min(usec, max_ntp_tick); |
| 182 | 183 | ||
| 183 | if (lost) | 184 | if (lost) |
| 184 | usec += lost * max_ntp_tick; | 185 | usec += lost * max_ntp_tick; |
| 185 | } else if (unlikely(lost)) | 186 | } else if (unlikely(lost)) |
| 186 | usec += lost * tick_usec; | 187 | usec += lost * (USEC_PER_SEC / HZ); |
| 187 | 188 | ||
| 188 | sec = xtime.tv_sec; | 189 | sec = xtime.tv_sec; |
| 189 | usec += (xtime.tv_nsec / 1000); | 190 | usec += (xtime.tv_nsec / 1000); |
diff --git a/drivers/char/pcmcia/cm4000_cs.c b/drivers/char/pcmcia/cm4000_cs.c index 649677b5dc36..5fdf18515433 100644 --- a/drivers/char/pcmcia/cm4000_cs.c +++ b/drivers/char/pcmcia/cm4000_cs.c | |||
| @@ -13,11 +13,12 @@ | |||
| 13 | * | 13 | * |
| 14 | * (C) 2000,2001,2002,2003,2004 Omnikey AG | 14 | * (C) 2000,2001,2002,2003,2004 Omnikey AG |
| 15 | * | 15 | * |
| 16 | * (C) 2005 Harald Welte <laforge@gnumonks.org> | 16 | * (C) 2005-2006 Harald Welte <laforge@gnumonks.org> |
| 17 | * - Adhere to Kernel CodingStyle | 17 | * - Adhere to Kernel CodingStyle |
| 18 | * - Port to 2.6.13 "new" style PCMCIA | 18 | * - Port to 2.6.13 "new" style PCMCIA |
| 19 | * - Check for copy_{from,to}_user return values | 19 | * - Check for copy_{from,to}_user return values |
| 20 | * - Use nonseekable_open() | 20 | * - Use nonseekable_open() |
| 21 | * - add class interface for udev device creation | ||
| 21 | * | 22 | * |
| 22 | * All rights reserved. Licensed under dual BSD/GPL license. | 23 | * All rights reserved. Licensed under dual BSD/GPL license. |
| 23 | */ | 24 | */ |
| @@ -56,7 +57,7 @@ module_param(pc_debug, int, 0600); | |||
| 56 | #else | 57 | #else |
| 57 | #define DEBUGP(n, rdr, x, args...) | 58 | #define DEBUGP(n, rdr, x, args...) |
| 58 | #endif | 59 | #endif |
| 59 | static char *version = "cm4000_cs.c v2.4.0gm5 - All bugs added by Harald Welte"; | 60 | static char *version = "cm4000_cs.c v2.4.0gm6 - All bugs added by Harald Welte"; |
| 60 | 61 | ||
| 61 | #define T_1SEC (HZ) | 62 | #define T_1SEC (HZ) |
| 62 | #define T_10MSEC msecs_to_jiffies(10) | 63 | #define T_10MSEC msecs_to_jiffies(10) |
| @@ -156,6 +157,7 @@ struct cm4000_dev { | |||
| 156 | /*queue*/ 4*sizeof(wait_queue_head_t)) | 157 | /*queue*/ 4*sizeof(wait_queue_head_t)) |
| 157 | 158 | ||
| 158 | static dev_link_t *dev_table[CM4000_MAX_DEV]; | 159 | static dev_link_t *dev_table[CM4000_MAX_DEV]; |
| 160 | static struct class *cmm_class; | ||
| 159 | 161 | ||
| 160 | /* This table doesn't use spaces after the comma between fields and thus | 162 | /* This table doesn't use spaces after the comma between fields and thus |
| 161 | * violates CodingStyle. However, I don't really think wrapping it around will | 163 | * violates CodingStyle. However, I don't really think wrapping it around will |
| @@ -1937,6 +1939,9 @@ static int cm4000_attach(struct pcmcia_device *p_dev) | |||
| 1937 | link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; | 1939 | link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; |
| 1938 | cm4000_config(link, i); | 1940 | cm4000_config(link, i); |
| 1939 | 1941 | ||
| 1942 | class_device_create(cmm_class, NULL, MKDEV(major, i), NULL, | ||
| 1943 | "cmm%d", i); | ||
| 1944 | |||
| 1940 | return 0; | 1945 | return 0; |
| 1941 | } | 1946 | } |
| 1942 | 1947 | ||
| @@ -1962,6 +1967,8 @@ static void cm4000_detach(struct pcmcia_device *p_dev) | |||
| 1962 | dev_table[devno] = NULL; | 1967 | dev_table[devno] = NULL; |
| 1963 | kfree(dev); | 1968 | kfree(dev); |
| 1964 | 1969 | ||
| 1970 | class_device_destroy(cmm_class, MKDEV(major, devno)); | ||
| 1971 | |||
| 1965 | return; | 1972 | return; |
| 1966 | } | 1973 | } |
| 1967 | 1974 | ||
| @@ -1995,8 +2002,18 @@ static struct pcmcia_driver cm4000_driver = { | |||
| 1995 | 2002 | ||
| 1996 | static int __init cmm_init(void) | 2003 | static int __init cmm_init(void) |
| 1997 | { | 2004 | { |
| 2005 | int rc; | ||
| 2006 | |||
| 1998 | printk(KERN_INFO "%s\n", version); | 2007 | printk(KERN_INFO "%s\n", version); |
| 1999 | pcmcia_register_driver(&cm4000_driver); | 2008 | |
| 2009 | cmm_class = class_create(THIS_MODULE, "cardman_4000"); | ||
| 2010 | if (!cmm_class) | ||
| 2011 | return -1; | ||
| 2012 | |||
| 2013 | rc = pcmcia_register_driver(&cm4000_driver); | ||
| 2014 | if (rc < 0) | ||
| 2015 | return rc; | ||
| 2016 | |||
| 2000 | major = register_chrdev(0, DEVICE_NAME, &cm4000_fops); | 2017 | major = register_chrdev(0, DEVICE_NAME, &cm4000_fops); |
| 2001 | if (major < 0) { | 2018 | if (major < 0) { |
| 2002 | printk(KERN_WARNING MODULE_NAME | 2019 | printk(KERN_WARNING MODULE_NAME |
| @@ -2012,6 +2029,7 @@ static void __exit cmm_exit(void) | |||
| 2012 | printk(KERN_INFO MODULE_NAME ": unloading\n"); | 2029 | printk(KERN_INFO MODULE_NAME ": unloading\n"); |
| 2013 | pcmcia_unregister_driver(&cm4000_driver); | 2030 | pcmcia_unregister_driver(&cm4000_driver); |
| 2014 | unregister_chrdev(major, DEVICE_NAME); | 2031 | unregister_chrdev(major, DEVICE_NAME); |
| 2032 | class_destroy(cmm_class); | ||
| 2015 | }; | 2033 | }; |
| 2016 | 2034 | ||
| 2017 | module_init(cmm_init); | 2035 | module_init(cmm_init); |
diff --git a/drivers/char/pcmcia/cm4040_cs.c b/drivers/char/pcmcia/cm4040_cs.c index 46eb371bf17e..466e33bab029 100644 --- a/drivers/char/pcmcia/cm4040_cs.c +++ b/drivers/char/pcmcia/cm4040_cs.c | |||
| @@ -3,12 +3,13 @@ | |||
| 3 | * | 3 | * |
| 4 | * (c) 2000-2004 Omnikey AG (http://www.omnikey.com/) | 4 | * (c) 2000-2004 Omnikey AG (http://www.omnikey.com/) |
| 5 | * | 5 | * |
| 6 | * (C) 2005 Harald Welte <laforge@gnumonks.org> | 6 | * (C) 2005-2006 Harald Welte <laforge@gnumonks.org> |
| 7 | * - add support for poll() | 7 | * - add support for poll() |
| 8 | * - driver cleanup | 8 | * - driver cleanup |
| 9 | * - add waitqueues | 9 | * - add waitqueues |
| 10 | * - adhere to linux kernel coding style and policies | 10 | * - adhere to linux kernel coding style and policies |
| 11 | * - support 2.6.13 "new style" pcmcia interface | 11 | * - support 2.6.13 "new style" pcmcia interface |
| 12 | * - add class interface for udev device creation | ||
| 12 | * | 13 | * |
| 13 | * The device basically is a USB CCID compliant device that has been | 14 | * The device basically is a USB CCID compliant device that has been |
| 14 | * attached to an I/O-Mapped FIFO. | 15 | * attached to an I/O-Mapped FIFO. |
| @@ -53,7 +54,7 @@ module_param(pc_debug, int, 0600); | |||
| 53 | #endif | 54 | #endif |
| 54 | 55 | ||
| 55 | static char *version = | 56 | static char *version = |
| 56 | "OMNIKEY CardMan 4040 v1.1.0gm4 - All bugs added by Harald Welte"; | 57 | "OMNIKEY CardMan 4040 v1.1.0gm5 - All bugs added by Harald Welte"; |
| 57 | 58 | ||
| 58 | #define CCID_DRIVER_BULK_DEFAULT_TIMEOUT (150*HZ) | 59 | #define CCID_DRIVER_BULK_DEFAULT_TIMEOUT (150*HZ) |
| 59 | #define CCID_DRIVER_ASYNC_POWERUP_TIMEOUT (35*HZ) | 60 | #define CCID_DRIVER_ASYNC_POWERUP_TIMEOUT (35*HZ) |
| @@ -67,6 +68,7 @@ static char *version = | |||
| 67 | static void reader_release(dev_link_t *link); | 68 | static void reader_release(dev_link_t *link); |
| 68 | 69 | ||
| 69 | static int major; | 70 | static int major; |
| 71 | static struct class *cmx_class; | ||
| 70 | 72 | ||
| 71 | #define BS_READABLE 0x01 | 73 | #define BS_READABLE 0x01 |
| 72 | #define BS_WRITABLE 0x02 | 74 | #define BS_WRITABLE 0x02 |
| @@ -696,6 +698,9 @@ static int reader_attach(struct pcmcia_device *p_dev) | |||
| 696 | link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; | 698 | link->state |= DEV_PRESENT | DEV_CONFIG_PENDING; |
| 697 | reader_config(link, i); | 699 | reader_config(link, i); |
| 698 | 700 | ||
| 701 | class_device_create(cmx_class, NULL, MKDEV(major, i), NULL, | ||
| 702 | "cmx%d", i); | ||
| 703 | |||
| 699 | return 0; | 704 | return 0; |
| 700 | } | 705 | } |
| 701 | 706 | ||
| @@ -721,6 +726,8 @@ static void reader_detach(struct pcmcia_device *p_dev) | |||
| 721 | dev_table[devno] = NULL; | 726 | dev_table[devno] = NULL; |
| 722 | kfree(dev); | 727 | kfree(dev); |
| 723 | 728 | ||
| 729 | class_device_destroy(cmx_class, MKDEV(major, devno)); | ||
| 730 | |||
| 724 | return; | 731 | return; |
| 725 | } | 732 | } |
| 726 | 733 | ||
| @@ -755,8 +762,17 @@ static struct pcmcia_driver reader_driver = { | |||
| 755 | 762 | ||
| 756 | static int __init cm4040_init(void) | 763 | static int __init cm4040_init(void) |
| 757 | { | 764 | { |
| 765 | int rc; | ||
| 766 | |||
| 758 | printk(KERN_INFO "%s\n", version); | 767 | printk(KERN_INFO "%s\n", version); |
| 759 | pcmcia_register_driver(&reader_driver); | 768 | cmx_class = class_create(THIS_MODULE, "cardman_4040"); |
| 769 | if (!cmx_class) | ||
| 770 | return -1; | ||
| 771 | |||
| 772 | rc = pcmcia_register_driver(&reader_driver); | ||
| 773 | if (rc < 0) | ||
| 774 | return rc; | ||
| 775 | |||
| 760 | major = register_chrdev(0, DEVICE_NAME, &reader_fops); | 776 | major = register_chrdev(0, DEVICE_NAME, &reader_fops); |
| 761 | if (major < 0) { | 777 | if (major < 0) { |
| 762 | printk(KERN_WARNING MODULE_NAME | 778 | printk(KERN_WARNING MODULE_NAME |
| @@ -771,6 +787,7 @@ static void __exit cm4040_exit(void) | |||
| 771 | printk(KERN_INFO MODULE_NAME ": unloading\n"); | 787 | printk(KERN_INFO MODULE_NAME ": unloading\n"); |
| 772 | pcmcia_unregister_driver(&reader_driver); | 788 | pcmcia_unregister_driver(&reader_driver); |
| 773 | unregister_chrdev(major, DEVICE_NAME); | 789 | unregister_chrdev(major, DEVICE_NAME); |
| 790 | class_destroy(cmx_class); | ||
| 774 | } | 791 | } |
| 775 | 792 | ||
| 776 | module_init(cm4040_init); | 793 | module_init(cm4040_init); |
diff --git a/drivers/ide/legacy/ide-cs.c b/drivers/ide/legacy/ide-cs.c index 4c2af9020905..6213bd3caee5 100644 --- a/drivers/ide/legacy/ide-cs.c +++ b/drivers/ide/legacy/ide-cs.c | |||
| @@ -445,6 +445,7 @@ static struct pcmcia_device_id ide_ids[] = { | |||
| 445 | PCMCIA_DEVICE_PROD_ID12("PCMCIA", "PnPIDE", 0x281f1c5d, 0x0c694728), | 445 | PCMCIA_DEVICE_PROD_ID12("PCMCIA", "PnPIDE", 0x281f1c5d, 0x0c694728), |
| 446 | PCMCIA_DEVICE_PROD_ID12("SHUTTLE TECHNOLOGY LTD.", "PCCARD-IDE/ATAPI Adapter", 0x4a3f0ba0, 0x322560e1), | 446 | PCMCIA_DEVICE_PROD_ID12("SHUTTLE TECHNOLOGY LTD.", "PCCARD-IDE/ATAPI Adapter", 0x4a3f0ba0, 0x322560e1), |
| 447 | PCMCIA_DEVICE_PROD_ID12("TOSHIBA", "MK2001MPL", 0xb4585a1a, 0x3489e003), | 447 | PCMCIA_DEVICE_PROD_ID12("TOSHIBA", "MK2001MPL", 0xb4585a1a, 0x3489e003), |
| 448 | PCMCIA_DEVICE_PROD_ID1("TRANSCEND 512M ", 0xd0909443), | ||
| 448 | PCMCIA_DEVICE_PROD_ID12("WIT", "IDE16", 0x244e5994, 0x3e232852), | 449 | PCMCIA_DEVICE_PROD_ID12("WIT", "IDE16", 0x244e5994, 0x3e232852), |
| 449 | PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209), | 450 | PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209), |
| 450 | PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e), | 451 | PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e), |
diff --git a/drivers/net/e1000/e1000.h b/drivers/net/e1000/e1000.h index 27c77306193b..99baf0e099fc 100644 --- a/drivers/net/e1000/e1000.h +++ b/drivers/net/e1000/e1000.h | |||
| @@ -225,9 +225,6 @@ struct e1000_rx_ring { | |||
| 225 | struct e1000_ps_page *ps_page; | 225 | struct e1000_ps_page *ps_page; |
| 226 | struct e1000_ps_page_dma *ps_page_dma; | 226 | struct e1000_ps_page_dma *ps_page_dma; |
| 227 | 227 | ||
| 228 | struct sk_buff *rx_skb_top; | ||
| 229 | struct sk_buff *rx_skb_prev; | ||
| 230 | |||
| 231 | /* cpu for rx queue */ | 228 | /* cpu for rx queue */ |
| 232 | int cpu; | 229 | int cpu; |
| 233 | 230 | ||
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index 31e332935e5a..5b7d0f425af2 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c | |||
| @@ -103,7 +103,7 @@ static char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver"; | |||
| 103 | #else | 103 | #else |
| 104 | #define DRIVERNAPI "-NAPI" | 104 | #define DRIVERNAPI "-NAPI" |
| 105 | #endif | 105 | #endif |
| 106 | #define DRV_VERSION "6.3.9-k2"DRIVERNAPI | 106 | #define DRV_VERSION "6.3.9-k4"DRIVERNAPI |
| 107 | char e1000_driver_version[] = DRV_VERSION; | 107 | char e1000_driver_version[] = DRV_VERSION; |
| 108 | static char e1000_copyright[] = "Copyright (c) 1999-2005 Intel Corporation."; | 108 | static char e1000_copyright[] = "Copyright (c) 1999-2005 Intel Corporation."; |
| 109 | 109 | ||
| @@ -1635,8 +1635,6 @@ setup_rx_desc_die: | |||
| 1635 | 1635 | ||
| 1636 | rxdr->next_to_clean = 0; | 1636 | rxdr->next_to_clean = 0; |
| 1637 | rxdr->next_to_use = 0; | 1637 | rxdr->next_to_use = 0; |
| 1638 | rxdr->rx_skb_top = NULL; | ||
| 1639 | rxdr->rx_skb_prev = NULL; | ||
| 1640 | 1638 | ||
| 1641 | return 0; | 1639 | return 0; |
| 1642 | } | 1640 | } |
| @@ -1713,8 +1711,23 @@ e1000_setup_rctl(struct e1000_adapter *adapter) | |||
| 1713 | rctl |= adapter->rx_buffer_len << 0x11; | 1711 | rctl |= adapter->rx_buffer_len << 0x11; |
| 1714 | } else { | 1712 | } else { |
| 1715 | rctl &= ~E1000_RCTL_SZ_4096; | 1713 | rctl &= ~E1000_RCTL_SZ_4096; |
| 1716 | rctl &= ~E1000_RCTL_BSEX; | 1714 | rctl |= E1000_RCTL_BSEX; |
| 1717 | rctl |= E1000_RCTL_SZ_2048; | 1715 | switch (adapter->rx_buffer_len) { |
| 1716 | case E1000_RXBUFFER_2048: | ||
| 1717 | default: | ||
| 1718 | rctl |= E1000_RCTL_SZ_2048; | ||
| 1719 | rctl &= ~E1000_RCTL_BSEX; | ||
| 1720 | break; | ||
| 1721 | case E1000_RXBUFFER_4096: | ||
| 1722 | rctl |= E1000_RCTL_SZ_4096; | ||
| 1723 | break; | ||
| 1724 | case E1000_RXBUFFER_8192: | ||
| 1725 | rctl |= E1000_RCTL_SZ_8192; | ||
| 1726 | break; | ||
| 1727 | case E1000_RXBUFFER_16384: | ||
| 1728 | rctl |= E1000_RCTL_SZ_16384; | ||
| 1729 | break; | ||
| 1730 | } | ||
| 1718 | } | 1731 | } |
| 1719 | 1732 | ||
| 1720 | #ifndef CONFIG_E1000_DISABLE_PACKET_SPLIT | 1733 | #ifndef CONFIG_E1000_DISABLE_PACKET_SPLIT |
| @@ -2107,16 +2120,6 @@ e1000_clean_rx_ring(struct e1000_adapter *adapter, | |||
| 2107 | } | 2120 | } |
| 2108 | } | 2121 | } |
| 2109 | 2122 | ||
| 2110 | /* there also may be some cached data in our adapter */ | ||
| 2111 | if (rx_ring->rx_skb_top) { | ||
| 2112 | dev_kfree_skb(rx_ring->rx_skb_top); | ||
| 2113 | |||
| 2114 | /* rx_skb_prev will be wiped out by rx_skb_top */ | ||
| 2115 | rx_ring->rx_skb_top = NULL; | ||
| 2116 | rx_ring->rx_skb_prev = NULL; | ||
| 2117 | } | ||
| 2118 | |||
| 2119 | |||
| 2120 | size = sizeof(struct e1000_buffer) * rx_ring->count; | 2123 | size = sizeof(struct e1000_buffer) * rx_ring->count; |
| 2121 | memset(rx_ring->buffer_info, 0, size); | 2124 | memset(rx_ring->buffer_info, 0, size); |
| 2122 | size = sizeof(struct e1000_ps_page) * rx_ring->count; | 2125 | size = sizeof(struct e1000_ps_page) * rx_ring->count; |
| @@ -3106,24 +3109,27 @@ e1000_change_mtu(struct net_device *netdev, int new_mtu) | |||
| 3106 | break; | 3109 | break; |
| 3107 | } | 3110 | } |
| 3108 | 3111 | ||
| 3109 | /* since the driver code now supports splitting a packet across | 3112 | |
| 3110 | * multiple descriptors, most of the fifo related limitations on | ||
| 3111 | * jumbo frame traffic have gone away. | ||
| 3112 | * simply use 2k descriptors for everything. | ||
| 3113 | * | ||
| 3114 | * NOTE: dev_alloc_skb reserves 16 bytes, and typically NET_IP_ALIGN | ||
| 3115 | * means we reserve 2 more, this pushes us to allocate from the next | ||
| 3116 | * larger slab size | ||
| 3117 | * i.e. RXBUFFER_2048 --> size-4096 slab */ | ||
| 3118 | |||
| 3119 | /* recent hardware supports 1KB granularity */ | ||
| 3120 | if (adapter->hw.mac_type > e1000_82547_rev_2) { | 3113 | if (adapter->hw.mac_type > e1000_82547_rev_2) { |
| 3121 | adapter->rx_buffer_len = | 3114 | adapter->rx_buffer_len = max_frame; |
| 3122 | ((max_frame < E1000_RXBUFFER_2048) ? | ||
| 3123 | max_frame : E1000_RXBUFFER_2048); | ||
| 3124 | E1000_ROUNDUP(adapter->rx_buffer_len, 1024); | 3115 | E1000_ROUNDUP(adapter->rx_buffer_len, 1024); |
| 3125 | } else | 3116 | } else { |
| 3126 | adapter->rx_buffer_len = E1000_RXBUFFER_2048; | 3117 | if(unlikely((adapter->hw.mac_type < e1000_82543) && |
| 3118 | (max_frame > MAXIMUM_ETHERNET_FRAME_SIZE))) { | ||
| 3119 | DPRINTK(PROBE, ERR, "Jumbo Frames not supported " | ||
| 3120 | "on 82542\n"); | ||
| 3121 | return -EINVAL; | ||
| 3122 | } else { | ||
| 3123 | if(max_frame <= E1000_RXBUFFER_2048) | ||
| 3124 | adapter->rx_buffer_len = E1000_RXBUFFER_2048; | ||
| 3125 | else if(max_frame <= E1000_RXBUFFER_4096) | ||
| 3126 | adapter->rx_buffer_len = E1000_RXBUFFER_4096; | ||
| 3127 | else if(max_frame <= E1000_RXBUFFER_8192) | ||
| 3128 | adapter->rx_buffer_len = E1000_RXBUFFER_8192; | ||
| 3129 | else if(max_frame <= E1000_RXBUFFER_16384) | ||
| 3130 | adapter->rx_buffer_len = E1000_RXBUFFER_16384; | ||
| 3131 | } | ||
| 3132 | } | ||
| 3127 | 3133 | ||
| 3128 | netdev->mtu = new_mtu; | 3134 | netdev->mtu = new_mtu; |
| 3129 | 3135 | ||
| @@ -3620,7 +3626,7 @@ e1000_clean_rx_irq(struct e1000_adapter *adapter, | |||
| 3620 | uint8_t last_byte; | 3626 | uint8_t last_byte; |
| 3621 | unsigned int i; | 3627 | unsigned int i; |
| 3622 | int cleaned_count = 0; | 3628 | int cleaned_count = 0; |
| 3623 | boolean_t cleaned = FALSE, multi_descriptor = FALSE; | 3629 | boolean_t cleaned = FALSE; |
| 3624 | 3630 | ||
| 3625 | i = rx_ring->next_to_clean; | 3631 | i = rx_ring->next_to_clean; |
| 3626 | rx_desc = E1000_RX_DESC(*rx_ring, i); | 3632 | rx_desc = E1000_RX_DESC(*rx_ring, i); |
| @@ -3652,43 +3658,12 @@ e1000_clean_rx_irq(struct e1000_adapter *adapter, | |||
| 3652 | 3658 | ||
| 3653 | length = le16_to_cpu(rx_desc->length); | 3659 | length = le16_to_cpu(rx_desc->length); |
| 3654 | 3660 | ||
| 3655 | skb_put(skb, length); | 3661 | if (unlikely(!(status & E1000_RXD_STAT_EOP))) { |
| 3656 | 3662 | /* All receives must fit into a single buffer */ | |
| 3657 | if (!(status & E1000_RXD_STAT_EOP)) { | 3663 | E1000_DBG("%s: Receive packet consumed multiple" |
| 3658 | if (!rx_ring->rx_skb_top) { | 3664 | " buffers\n", netdev->name); |
| 3659 | rx_ring->rx_skb_top = skb; | 3665 | dev_kfree_skb_irq(skb); |
| 3660 | rx_ring->rx_skb_top->len = length; | ||
| 3661 | rx_ring->rx_skb_prev = skb; | ||
| 3662 | } else { | ||
| 3663 | if (skb_shinfo(rx_ring->rx_skb_top)->frag_list) { | ||
| 3664 | rx_ring->rx_skb_prev->next = skb; | ||
| 3665 | skb->prev = rx_ring->rx_skb_prev; | ||
| 3666 | } else { | ||
| 3667 | skb_shinfo(rx_ring->rx_skb_top)->frag_list = skb; | ||
| 3668 | } | ||
| 3669 | rx_ring->rx_skb_prev = skb; | ||
| 3670 | rx_ring->rx_skb_top->data_len += length; | ||
| 3671 | } | ||
| 3672 | goto next_desc; | 3666 | goto next_desc; |
| 3673 | } else { | ||
| 3674 | if (rx_ring->rx_skb_top) { | ||
| 3675 | if (skb_shinfo(rx_ring->rx_skb_top) | ||
| 3676 | ->frag_list) { | ||
| 3677 | rx_ring->rx_skb_prev->next = skb; | ||
| 3678 | skb->prev = rx_ring->rx_skb_prev; | ||
| 3679 | } else | ||
| 3680 | skb_shinfo(rx_ring->rx_skb_top) | ||
| 3681 | ->frag_list = skb; | ||
| 3682 | |||
| 3683 | rx_ring->rx_skb_top->data_len += length; | ||
| 3684 | rx_ring->rx_skb_top->len += | ||
| 3685 | rx_ring->rx_skb_top->data_len; | ||
| 3686 | |||
| 3687 | skb = rx_ring->rx_skb_top; | ||
| 3688 | multi_descriptor = TRUE; | ||
| 3689 | rx_ring->rx_skb_top = NULL; | ||
| 3690 | rx_ring->rx_skb_prev = NULL; | ||
| 3691 | } | ||
| 3692 | } | 3667 | } |
| 3693 | 3668 | ||
| 3694 | if (unlikely(rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK)) { | 3669 | if (unlikely(rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK)) { |
| @@ -3712,10 +3687,7 @@ e1000_clean_rx_irq(struct e1000_adapter *adapter, | |||
| 3712 | * performance for small packets with large amounts | 3687 | * performance for small packets with large amounts |
| 3713 | * of reassembly being done in the stack */ | 3688 | * of reassembly being done in the stack */ |
| 3714 | #define E1000_CB_LENGTH 256 | 3689 | #define E1000_CB_LENGTH 256 |
| 3715 | if ((length < E1000_CB_LENGTH) && | 3690 | if (length < E1000_CB_LENGTH) { |
| 3716 | !rx_ring->rx_skb_top && | ||
| 3717 | /* or maybe (status & E1000_RXD_STAT_EOP) && */ | ||
| 3718 | !multi_descriptor) { | ||
| 3719 | struct sk_buff *new_skb = | 3691 | struct sk_buff *new_skb = |
| 3720 | dev_alloc_skb(length + NET_IP_ALIGN); | 3692 | dev_alloc_skb(length + NET_IP_ALIGN); |
| 3721 | if (new_skb) { | 3693 | if (new_skb) { |
| @@ -3729,7 +3701,8 @@ e1000_clean_rx_irq(struct e1000_adapter *adapter, | |||
| 3729 | skb = new_skb; | 3701 | skb = new_skb; |
| 3730 | skb_put(skb, length); | 3702 | skb_put(skb, length); |
| 3731 | } | 3703 | } |
| 3732 | } | 3704 | } else |
| 3705 | skb_put(skb, length); | ||
| 3733 | 3706 | ||
| 3734 | /* end copybreak code */ | 3707 | /* end copybreak code */ |
| 3735 | 3708 | ||
diff --git a/drivers/net/pcmcia/axnet_cs.c b/drivers/net/pcmcia/axnet_cs.c index 01ddfc8cce3f..aa5581369399 100644 --- a/drivers/net/pcmcia/axnet_cs.c +++ b/drivers/net/pcmcia/axnet_cs.c | |||
| @@ -806,6 +806,7 @@ static struct pcmcia_device_id axnet_ids[] = { | |||
| 806 | PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0309), | 806 | PCMCIA_DEVICE_MANF_CARD(0x026f, 0x0309), |
| 807 | PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1106), | 807 | PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1106), |
| 808 | PCMCIA_DEVICE_MANF_CARD(0x8a01, 0xc1ab), | 808 | PCMCIA_DEVICE_MANF_CARD(0x8a01, 0xc1ab), |
| 809 | PCMCIA_DEVICE_PROD_ID12("AmbiCom,Inc.", "Fast Ethernet PC Card(AMB8110)", 0x49b020a7, 0x119cc9fc), | ||
| 809 | PCMCIA_DEVICE_PROD_ID124("Fast Ethernet", "16-bit PC Card", "AX88190", 0xb4be14e3, 0x9a12eb6a, 0xab9be5ef), | 810 | PCMCIA_DEVICE_PROD_ID124("Fast Ethernet", "16-bit PC Card", "AX88190", 0xb4be14e3, 0x9a12eb6a, 0xab9be5ef), |
| 810 | PCMCIA_DEVICE_PROD_ID12("ASIX", "AX88190", 0x0959823b, 0xab9be5ef), | 811 | PCMCIA_DEVICE_PROD_ID12("ASIX", "AX88190", 0x0959823b, 0xab9be5ef), |
| 811 | PCMCIA_DEVICE_PROD_ID12("Billionton", "LNA-100B", 0x552ab682, 0xbc3b87e1), | 812 | PCMCIA_DEVICE_PROD_ID12("Billionton", "LNA-100B", 0x552ab682, 0xbc3b87e1), |
diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c index 8bc0b528548f..f8f4503475f9 100644 --- a/drivers/net/wireless/hostap/hostap_cs.c +++ b/drivers/net/wireless/hostap/hostap_cs.c | |||
| @@ -877,7 +877,6 @@ static struct pcmcia_device_id hostap_cs_ids[] = { | |||
| 877 | PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0777), | 877 | PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0777), |
| 878 | PCMCIA_DEVICE_MANF_CARD(0x0126, 0x8000), | 878 | PCMCIA_DEVICE_MANF_CARD(0x0126, 0x8000), |
| 879 | PCMCIA_DEVICE_MANF_CARD(0x0138, 0x0002), | 879 | PCMCIA_DEVICE_MANF_CARD(0x0138, 0x0002), |
| 880 | PCMCIA_DEVICE_MANF_CARD(0x0156, 0x0002), | ||
| 881 | PCMCIA_DEVICE_MANF_CARD(0x0250, 0x0002), | 880 | PCMCIA_DEVICE_MANF_CARD(0x0250, 0x0002), |
| 882 | PCMCIA_DEVICE_MANF_CARD(0x026f, 0x030b), | 881 | PCMCIA_DEVICE_MANF_CARD(0x026f, 0x030b), |
| 883 | PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1612), | 882 | PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1612), |
| @@ -891,6 +890,10 @@ static struct pcmcia_device_id hostap_cs_ids[] = { | |||
| 891 | PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0002), | 890 | PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0002), |
| 892 | PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0005), | 891 | PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0005), |
| 893 | PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0010), | 892 | PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0010), |
| 893 | PCMCIA_DEVICE_MANF_CARD_PROD_ID1(0x0156, 0x0002, "INTERSIL", | ||
| 894 | 0x74c5e40d), | ||
| 895 | PCMCIA_DEVICE_MANF_CARD_PROD_ID1(0x0156, 0x0002, "Intersil", | ||
| 896 | 0x4b801a17), | ||
| 894 | PCMCIA_MFC_DEVICE_PROD_ID12(0, "SanDisk", "ConnectPlus", | 897 | PCMCIA_MFC_DEVICE_PROD_ID12(0, "SanDisk", "ConnectPlus", |
| 895 | 0x7a954bd9, 0x74be00c6), | 898 | 0x7a954bd9, 0x74be00c6), |
| 896 | PCMCIA_DEVICE_PROD_ID1234( | 899 | PCMCIA_DEVICE_PROD_ID1234( |
diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c index 0a424a4e8187..54ad93daca3c 100644 --- a/drivers/pcmcia/ds.c +++ b/drivers/pcmcia/ds.c | |||
| @@ -352,11 +352,20 @@ static void pcmcia_release_dev(struct device *dev) | |||
| 352 | kfree(p_dev); | 352 | kfree(p_dev); |
| 353 | } | 353 | } |
| 354 | 354 | ||
| 355 | static void pcmcia_add_pseudo_device(struct pcmcia_socket *s) | ||
| 356 | { | ||
| 357 | if (!s->pcmcia_state.device_add_pending) { | ||
| 358 | s->pcmcia_state.device_add_pending = 1; | ||
| 359 | schedule_work(&s->device_add); | ||
| 360 | } | ||
| 361 | return; | ||
| 362 | } | ||
| 355 | 363 | ||
| 356 | static int pcmcia_device_probe(struct device * dev) | 364 | static int pcmcia_device_probe(struct device * dev) |
| 357 | { | 365 | { |
| 358 | struct pcmcia_device *p_dev; | 366 | struct pcmcia_device *p_dev; |
| 359 | struct pcmcia_driver *p_drv; | 367 | struct pcmcia_driver *p_drv; |
| 368 | struct pcmcia_device_id *did; | ||
| 360 | struct pcmcia_socket *s; | 369 | struct pcmcia_socket *s; |
| 361 | int ret = 0; | 370 | int ret = 0; |
| 362 | 371 | ||
| @@ -392,6 +401,19 @@ static int pcmcia_device_probe(struct device * dev) | |||
| 392 | } | 401 | } |
| 393 | 402 | ||
| 394 | ret = p_drv->probe(p_dev); | 403 | ret = p_drv->probe(p_dev); |
| 404 | if (ret) | ||
| 405 | goto put_module; | ||
| 406 | |||
| 407 | /* handle pseudo multifunction devices: | ||
| 408 | * there are at most two pseudo multifunction devices. | ||
| 409 | * if we're matching against the first, schedule a | ||
| 410 | * call which will then check whether there are two | ||
| 411 | * pseudo devices, and if not, add the second one. | ||
| 412 | */ | ||
| 413 | did = (struct pcmcia_device_id *) p_dev->dev.driver_data; | ||
| 414 | if ((did->match_flags & PCMCIA_DEV_ID_MATCH_DEVICE_NO) && | ||
| 415 | (p_dev->socket->device_count == 1) && (p_dev->device_no == 0)) | ||
| 416 | pcmcia_add_pseudo_device(p_dev->socket); | ||
| 395 | 417 | ||
| 396 | put_module: | 418 | put_module: |
| 397 | if (ret) | 419 | if (ret) |
| @@ -660,15 +682,6 @@ static void pcmcia_delayed_add_pseudo_device(void *data) | |||
| 660 | s->pcmcia_state.device_add_pending = 0; | 682 | s->pcmcia_state.device_add_pending = 0; |
| 661 | } | 683 | } |
| 662 | 684 | ||
| 663 | static inline void pcmcia_add_pseudo_device(struct pcmcia_socket *s) | ||
| 664 | { | ||
| 665 | if (!s->pcmcia_state.device_add_pending) { | ||
| 666 | s->pcmcia_state.device_add_pending = 1; | ||
| 667 | schedule_work(&s->device_add); | ||
| 668 | } | ||
| 669 | return; | ||
| 670 | } | ||
| 671 | |||
| 672 | static int pcmcia_requery(struct device *dev, void * _data) | 685 | static int pcmcia_requery(struct device *dev, void * _data) |
| 673 | { | 686 | { |
| 674 | struct pcmcia_device *p_dev = to_pcmcia_dev(dev); | 687 | struct pcmcia_device *p_dev = to_pcmcia_dev(dev); |
| @@ -755,15 +768,6 @@ static inline int pcmcia_devmatch(struct pcmcia_device *dev, | |||
| 755 | } | 768 | } |
| 756 | 769 | ||
| 757 | if (did->match_flags & PCMCIA_DEV_ID_MATCH_DEVICE_NO) { | 770 | if (did->match_flags & PCMCIA_DEV_ID_MATCH_DEVICE_NO) { |
| 758 | /* handle pseudo multifunction devices: | ||
| 759 | * there are at most two pseudo multifunction devices. | ||
| 760 | * if we're matching against the first, schedule a | ||
| 761 | * call which will then check whether there are two | ||
| 762 | * pseudo devices, and if not, add the second one. | ||
| 763 | */ | ||
| 764 | if (dev->device_no == 0) | ||
| 765 | pcmcia_add_pseudo_device(dev->socket); | ||
| 766 | |||
| 767 | if (dev->device_no != did->device_no) | 771 | if (dev->device_no != did->device_no) |
| 768 | return 0; | 772 | return 0; |
| 769 | } | 773 | } |
diff --git a/drivers/scsi/aha152x.c b/drivers/scsi/aha152x.c index cb2ee25f213f..531a1f9ceb51 100644 --- a/drivers/scsi/aha152x.c +++ b/drivers/scsi/aha152x.c | |||
| @@ -1260,16 +1260,15 @@ static void free_hard_reset_SCs(struct Scsi_Host *shpnt, Scsi_Cmnd **SCs) | |||
| 1260 | * Reset the bus | 1260 | * Reset the bus |
| 1261 | * | 1261 | * |
| 1262 | */ | 1262 | */ |
| 1263 | static int aha152x_bus_reset(Scsi_Cmnd *SCpnt) | 1263 | static int aha152x_bus_reset_host(struct Scsi_Host *shpnt) |
| 1264 | { | 1264 | { |
| 1265 | struct Scsi_Host *shpnt = SCpnt->device->host; | ||
| 1266 | unsigned long flags; | 1265 | unsigned long flags; |
| 1267 | 1266 | ||
| 1268 | DO_LOCK(flags); | 1267 | DO_LOCK(flags); |
| 1269 | 1268 | ||
| 1270 | #if defined(AHA152X_DEBUG) | 1269 | #if defined(AHA152X_DEBUG) |
| 1271 | if(HOSTDATA(shpnt)->debug & debug_eh) { | 1270 | if(HOSTDATA(shpnt)->debug & debug_eh) { |
| 1272 | printk(DEBUG_LEAD "aha152x_bus_reset(%p)", CMDINFO(SCpnt), SCpnt); | 1271 | printk(KERN_DEBUG "scsi%d: bus reset", shpnt->host_no); |
| 1273 | show_queues(shpnt); | 1272 | show_queues(shpnt); |
| 1274 | } | 1273 | } |
| 1275 | #endif | 1274 | #endif |
| @@ -1277,14 +1276,14 @@ static int aha152x_bus_reset(Scsi_Cmnd *SCpnt) | |||
| 1277 | free_hard_reset_SCs(shpnt, &ISSUE_SC); | 1276 | free_hard_reset_SCs(shpnt, &ISSUE_SC); |
| 1278 | free_hard_reset_SCs(shpnt, &DISCONNECTED_SC); | 1277 | free_hard_reset_SCs(shpnt, &DISCONNECTED_SC); |
| 1279 | 1278 | ||
| 1280 | DPRINTK(debug_eh, DEBUG_LEAD "resetting bus\n", CMDINFO(SCpnt)); | 1279 | DPRINTK(debug_eh, KERN_DEBUG "scsi%d: resetting bus\n", shpnt->host_no); |
| 1281 | 1280 | ||
| 1282 | SETPORT(SCSISEQ, SCSIRSTO); | 1281 | SETPORT(SCSISEQ, SCSIRSTO); |
| 1283 | mdelay(256); | 1282 | mdelay(256); |
| 1284 | SETPORT(SCSISEQ, 0); | 1283 | SETPORT(SCSISEQ, 0); |
| 1285 | mdelay(DELAY); | 1284 | mdelay(DELAY); |
| 1286 | 1285 | ||
| 1287 | DPRINTK(debug_eh, DEBUG_LEAD "bus resetted\n", CMDINFO(SCpnt)); | 1286 | DPRINTK(debug_eh, KERN_DEBUG "scsi%d: bus resetted\n", shpnt->host_no); |
| 1288 | 1287 | ||
| 1289 | setup_expected_interrupts(shpnt); | 1288 | setup_expected_interrupts(shpnt); |
| 1290 | if(HOSTDATA(shpnt)->commands==0) | 1289 | if(HOSTDATA(shpnt)->commands==0) |
| @@ -1295,6 +1294,14 @@ static int aha152x_bus_reset(Scsi_Cmnd *SCpnt) | |||
| 1295 | return SUCCESS; | 1294 | return SUCCESS; |
| 1296 | } | 1295 | } |
| 1297 | 1296 | ||
| 1297 | /* | ||
| 1298 | * Reset the bus | ||
| 1299 | * | ||
| 1300 | */ | ||
| 1301 | static int aha152x_bus_reset(Scsi_Cmnd *SCpnt) | ||
| 1302 | { | ||
| 1303 | return aha152x_bus_reset_host(SCpnt->device->host); | ||
| 1304 | } | ||
| 1298 | 1305 | ||
| 1299 | /* | 1306 | /* |
| 1300 | * Restore default values to the AIC-6260 registers and reset the fifos | 1307 | * Restore default values to the AIC-6260 registers and reset the fifos |
| @@ -1337,23 +1344,28 @@ static void reset_ports(struct Scsi_Host *shpnt) | |||
| 1337 | * Reset the host (bus and controller) | 1344 | * Reset the host (bus and controller) |
| 1338 | * | 1345 | * |
| 1339 | */ | 1346 | */ |
| 1340 | int aha152x_host_reset(Scsi_Cmnd * SCpnt) | 1347 | int aha152x_host_reset_host(struct Scsi_Host *shpnt) |
| 1341 | { | 1348 | { |
| 1342 | #if defined(AHA152X_DEBUG) | 1349 | DPRINTK(debug_eh, KERN_DEBUG "scsi%d: host reset\n", shpnt->host_no); |
| 1343 | struct Scsi_Host *shpnt = SCpnt->device->host; | ||
| 1344 | #endif | ||
| 1345 | |||
| 1346 | DPRINTK(debug_eh, DEBUG_LEAD "aha152x_host_reset(%p)\n", CMDINFO(SCpnt), SCpnt); | ||
| 1347 | 1350 | ||
| 1348 | aha152x_bus_reset(SCpnt); | 1351 | aha152x_bus_reset_host(shpnt); |
| 1349 | 1352 | ||
| 1350 | DPRINTK(debug_eh, DEBUG_LEAD "resetting ports\n", CMDINFO(SCpnt)); | 1353 | DPRINTK(debug_eh, KERN_DEBUG "scsi%d: resetting ports\n", shpnt->host_no); |
| 1351 | reset_ports(SCpnt->device->host); | 1354 | reset_ports(shpnt); |
| 1352 | 1355 | ||
| 1353 | return SUCCESS; | 1356 | return SUCCESS; |
| 1354 | } | 1357 | } |
| 1355 | 1358 | ||
| 1356 | /* | 1359 | /* |
| 1360 | * Reset the host (bus and controller) | ||
| 1361 | * | ||
| 1362 | */ | ||
| 1363 | static int aha152x_host_reset(Scsi_Cmnd *SCpnt) | ||
| 1364 | { | ||
| 1365 | return aha152x_host_reset_host(SCpnt->device->host); | ||
| 1366 | } | ||
| 1367 | |||
| 1368 | /* | ||
| 1357 | * Return the "logical geometry" | 1369 | * Return the "logical geometry" |
| 1358 | * | 1370 | * |
| 1359 | */ | 1371 | */ |
| @@ -1431,22 +1443,18 @@ static void run(void) | |||
| 1431 | { | 1443 | { |
| 1432 | int i; | 1444 | int i; |
| 1433 | for (i = 0; i<ARRAY_SIZE(aha152x_host); i++) { | 1445 | for (i = 0; i<ARRAY_SIZE(aha152x_host); i++) { |
| 1434 | struct Scsi_Host *shpnt = aha152x_host[i]; | 1446 | is_complete(aha152x_host[i]); |
| 1435 | if (shpnt && HOSTDATA(shpnt)->service) { | ||
| 1436 | HOSTDATA(shpnt)->service=0; | ||
| 1437 | is_complete(shpnt); | ||
| 1438 | } | ||
| 1439 | } | 1447 | } |
| 1440 | } | 1448 | } |
| 1441 | 1449 | ||
| 1442 | /* | 1450 | /* |
| 1443 | * Interrupts handler | 1451 | * Interrupt handler |
| 1444 | * | 1452 | * |
| 1445 | */ | 1453 | */ |
| 1446 | |||
| 1447 | static irqreturn_t intr(int irqno, void *dev_id, struct pt_regs *regs) | 1454 | static irqreturn_t intr(int irqno, void *dev_id, struct pt_regs *regs) |
| 1448 | { | 1455 | { |
| 1449 | struct Scsi_Host *shpnt = lookup_irq(irqno); | 1456 | struct Scsi_Host *shpnt = lookup_irq(irqno); |
| 1457 | unsigned long flags; | ||
| 1450 | unsigned char rev, dmacntrl0; | 1458 | unsigned char rev, dmacntrl0; |
| 1451 | 1459 | ||
| 1452 | if (!shpnt) { | 1460 | if (!shpnt) { |
| @@ -1472,23 +1480,23 @@ static irqreturn_t intr(int irqno, void *dev_id, struct pt_regs *regs) | |||
| 1472 | if ((rev == 0xFF) && (dmacntrl0 == 0xFF)) | 1480 | if ((rev == 0xFF) && (dmacntrl0 == 0xFF)) |
| 1473 | return IRQ_NONE; | 1481 | return IRQ_NONE; |
| 1474 | 1482 | ||
| 1483 | if( TESTLO(DMASTAT, INTSTAT) ) | ||
| 1484 | return IRQ_NONE; | ||
| 1485 | |||
| 1475 | /* no more interrupts from the controller, while we're busy. | 1486 | /* no more interrupts from the controller, while we're busy. |
| 1476 | INTEN is restored by the BH handler */ | 1487 | INTEN is restored by the BH handler */ |
| 1477 | CLRBITS(DMACNTRL0, INTEN); | 1488 | CLRBITS(DMACNTRL0, INTEN); |
| 1478 | 1489 | ||
| 1479 | #if 0 | 1490 | DO_LOCK(flags); |
| 1480 | /* check if there is already something to be | 1491 | if( HOSTDATA(shpnt)->service==0 ) { |
| 1481 | serviced; should not happen */ | 1492 | HOSTDATA(shpnt)->service=1; |
| 1482 | if(HOSTDATA(shpnt)->service) { | 1493 | |
| 1483 | printk(KERN_ERR "aha152x%d: lost interrupt (%d)\n", HOSTNO, HOSTDATA(shpnt)->service); | 1494 | /* Poke the BH handler */ |
| 1484 | show_queues(shpnt); | 1495 | INIT_WORK(&aha152x_tq, (void *) run, NULL); |
| 1496 | schedule_work(&aha152x_tq); | ||
| 1485 | } | 1497 | } |
| 1486 | #endif | 1498 | DO_UNLOCK(flags); |
| 1487 | 1499 | ||
| 1488 | /* Poke the BH handler */ | ||
| 1489 | HOSTDATA(shpnt)->service++; | ||
| 1490 | INIT_WORK(&aha152x_tq, (void *) run, NULL); | ||
| 1491 | schedule_work(&aha152x_tq); | ||
| 1492 | return IRQ_HANDLED; | 1500 | return IRQ_HANDLED; |
| 1493 | } | 1501 | } |
| 1494 | 1502 | ||
| @@ -2527,7 +2535,18 @@ static void is_complete(struct Scsi_Host *shpnt) | |||
| 2527 | unsigned long flags; | 2535 | unsigned long flags; |
| 2528 | int pending; | 2536 | int pending; |
| 2529 | 2537 | ||
| 2538 | if(!shpnt) | ||
| 2539 | return; | ||
| 2540 | |||
| 2530 | DO_LOCK(flags); | 2541 | DO_LOCK(flags); |
| 2542 | |||
| 2543 | if( HOSTDATA(shpnt)->service==0 ) { | ||
| 2544 | DO_UNLOCK(flags); | ||
| 2545 | return; | ||
| 2546 | } | ||
| 2547 | |||
| 2548 | HOSTDATA(shpnt)->service = 0; | ||
| 2549 | |||
| 2531 | if(HOSTDATA(shpnt)->in_intr) { | 2550 | if(HOSTDATA(shpnt)->in_intr) { |
| 2532 | DO_UNLOCK(flags); | 2551 | DO_UNLOCK(flags); |
| 2533 | /* aha152x_error never returns.. */ | 2552 | /* aha152x_error never returns.. */ |
diff --git a/drivers/scsi/aha152x.h b/drivers/scsi/aha152x.h index d277613af29b..d2add24d02a3 100644 --- a/drivers/scsi/aha152x.h +++ b/drivers/scsi/aha152x.h | |||
| @@ -332,6 +332,6 @@ struct aha152x_setup { | |||
| 332 | 332 | ||
| 333 | struct Scsi_Host *aha152x_probe_one(struct aha152x_setup *); | 333 | struct Scsi_Host *aha152x_probe_one(struct aha152x_setup *); |
| 334 | void aha152x_release(struct Scsi_Host *); | 334 | void aha152x_release(struct Scsi_Host *); |
| 335 | int aha152x_host_reset(Scsi_Cmnd *); | 335 | int aha152x_host_reset_host(struct Scsi_Host *); |
| 336 | 336 | ||
| 337 | #endif /* _AHA152X_H */ | 337 | #endif /* _AHA152X_H */ |
diff --git a/drivers/scsi/jazz_esp.c b/drivers/scsi/jazz_esp.c index 23728d1c980c..fcd304e11c26 100644 --- a/drivers/scsi/jazz_esp.c +++ b/drivers/scsi/jazz_esp.c | |||
| @@ -65,27 +65,6 @@ static int jazz_esp_release(struct Scsi_Host *shost) | |||
| 65 | return 0; | 65 | return 0; |
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | static struct scsi_host_template driver_template = { | ||
| 69 | .proc_name = "jazz_esp", | ||
| 70 | .proc_info = &esp_proc_info, | ||
| 71 | .name = "ESP 100/100a/200", | ||
| 72 | .detect = jazz_esp_detect, | ||
| 73 | .slave_alloc = esp_slave_alloc, | ||
| 74 | .slave_destroy = esp_slave_destroy, | ||
| 75 | .release = jazz_esp_release, | ||
| 76 | .info = esp_info, | ||
| 77 | .queuecommand = esp_queue, | ||
| 78 | .eh_abort_handler = esp_abort, | ||
| 79 | .eh_bus_reset_handler = esp_reset, | ||
| 80 | .can_queue = 7, | ||
| 81 | .this_id = 7, | ||
| 82 | .sg_tablesize = SG_ALL, | ||
| 83 | .cmd_per_lun = 1, | ||
| 84 | .use_clustering = DISABLE_CLUSTERING, | ||
| 85 | }; | ||
| 86 | |||
| 87 | #include "scsi_module.c" | ||
| 88 | |||
| 89 | /***************************************************************** Detection */ | 68 | /***************************************************************** Detection */ |
| 90 | static int jazz_esp_detect(struct scsi_host_template *tpnt) | 69 | static int jazz_esp_detect(struct scsi_host_template *tpnt) |
| 91 | { | 70 | { |
diff --git a/drivers/scsi/megaraid/megaraid_sas.c b/drivers/scsi/megaraid/megaraid_sas.c index 7de267e14458..4f39dd01936d 100644 --- a/drivers/scsi/megaraid/megaraid_sas.c +++ b/drivers/scsi/megaraid/megaraid_sas.c | |||
| @@ -793,6 +793,20 @@ megasas_queue_command(struct scsi_cmnd *scmd, void (*done) (struct scsi_cmnd *)) | |||
| 793 | return 0; | 793 | return 0; |
| 794 | } | 794 | } |
| 795 | 795 | ||
| 796 | static int megasas_slave_configure(struct scsi_device *sdev) | ||
| 797 | { | ||
| 798 | /* | ||
| 799 | * Don't export physical disk devices to the disk driver. | ||
| 800 | * | ||
| 801 | * FIXME: Currently we don't export them to the midlayer at all. | ||
| 802 | * That will be fixed once LSI engineers have audited the | ||
| 803 | * firmware for possible issues. | ||
| 804 | */ | ||
| 805 | if (sdev->channel < MEGASAS_MAX_PD_CHANNELS && sdev->type == TYPE_DISK) | ||
| 806 | return -ENXIO; | ||
| 807 | return 0; | ||
| 808 | } | ||
| 809 | |||
| 796 | /** | 810 | /** |
| 797 | * megasas_wait_for_outstanding - Wait for all outstanding cmds | 811 | * megasas_wait_for_outstanding - Wait for all outstanding cmds |
| 798 | * @instance: Adapter soft state | 812 | * @instance: Adapter soft state |
| @@ -943,6 +957,7 @@ static struct scsi_host_template megasas_template = { | |||
| 943 | .module = THIS_MODULE, | 957 | .module = THIS_MODULE, |
| 944 | .name = "LSI Logic SAS based MegaRAID driver", | 958 | .name = "LSI Logic SAS based MegaRAID driver", |
| 945 | .proc_name = "megaraid_sas", | 959 | .proc_name = "megaraid_sas", |
| 960 | .slave_configure = megasas_slave_configure, | ||
| 946 | .queuecommand = megasas_queue_command, | 961 | .queuecommand = megasas_queue_command, |
| 947 | .eh_device_reset_handler = megasas_reset_device, | 962 | .eh_device_reset_handler = megasas_reset_device, |
| 948 | .eh_bus_reset_handler = megasas_reset_bus_host, | 963 | .eh_bus_reset_handler = megasas_reset_bus_host, |
| @@ -1071,20 +1086,6 @@ megasas_complete_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd, | |||
| 1071 | break; | 1086 | break; |
| 1072 | } | 1087 | } |
| 1073 | 1088 | ||
| 1074 | /* | ||
| 1075 | * Don't export physical disk devices to mid-layer. | ||
| 1076 | */ | ||
| 1077 | if (!MEGASAS_IS_LOGICAL(cmd->scmd) && | ||
| 1078 | (hdr->cmd_status == MFI_STAT_OK) && | ||
| 1079 | (cmd->scmd->cmnd[0] == INQUIRY)) { | ||
| 1080 | |||
| 1081 | if (((*(u8 *) cmd->scmd->request_buffer) & 0x1F) == | ||
| 1082 | TYPE_DISK) { | ||
| 1083 | cmd->scmd->result = DID_BAD_TARGET << 16; | ||
| 1084 | exception = 1; | ||
| 1085 | } | ||
| 1086 | } | ||
| 1087 | |||
| 1088 | case MFI_CMD_LD_READ: | 1089 | case MFI_CMD_LD_READ: |
| 1089 | case MFI_CMD_LD_WRITE: | 1090 | case MFI_CMD_LD_WRITE: |
| 1090 | 1091 | ||
diff --git a/drivers/scsi/pcmcia/aha152x_stub.c b/drivers/scsi/pcmcia/aha152x_stub.c index 0c9edb7051f4..5609847e254a 100644 --- a/drivers/scsi/pcmcia/aha152x_stub.c +++ b/drivers/scsi/pcmcia/aha152x_stub.c | |||
| @@ -275,10 +275,8 @@ static int aha152x_resume(struct pcmcia_device *dev) | |||
| 275 | 275 | ||
| 276 | link->state &= ~DEV_SUSPEND; | 276 | link->state &= ~DEV_SUSPEND; |
| 277 | if (link->state & DEV_CONFIG) { | 277 | if (link->state & DEV_CONFIG) { |
| 278 | Scsi_Cmnd tmp; | ||
| 279 | pcmcia_request_configuration(link->handle, &link->conf); | 278 | pcmcia_request_configuration(link->handle, &link->conf); |
| 280 | tmp.device->host = info->host; | 279 | aha152x_host_reset_host(info->host); |
| 281 | aha152x_host_reset(&tmp); | ||
| 282 | } | 280 | } |
| 283 | 281 | ||
| 284 | return 0; | 282 | return 0; |
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index 5cc97b721661..ff82ccfbb106 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c | |||
| @@ -1308,7 +1308,7 @@ int scsi_decide_disposition(struct scsi_cmnd *scmd) | |||
| 1308 | * the request was not marked fast fail. Note that above, | 1308 | * the request was not marked fast fail. Note that above, |
| 1309 | * even if the request is marked fast fail, we still requeue | 1309 | * even if the request is marked fast fail, we still requeue |
| 1310 | * for queue congestion conditions (QUEUE_FULL or BUSY) */ | 1310 | * for queue congestion conditions (QUEUE_FULL or BUSY) */ |
| 1311 | if ((++scmd->retries) < scmd->allowed | 1311 | if ((++scmd->retries) <= scmd->allowed |
| 1312 | && !blk_noretry_request(scmd->request)) { | 1312 | && !blk_noretry_request(scmd->request)) { |
| 1313 | return NEEDS_RETRY; | 1313 | return NEEDS_RETRY; |
| 1314 | } else { | 1314 | } else { |
| @@ -1433,7 +1433,7 @@ static void scsi_eh_flush_done_q(struct list_head *done_q) | |||
| 1433 | list_del_init(&scmd->eh_entry); | 1433 | list_del_init(&scmd->eh_entry); |
| 1434 | if (scsi_device_online(scmd->device) && | 1434 | if (scsi_device_online(scmd->device) && |
| 1435 | !blk_noretry_request(scmd->request) && | 1435 | !blk_noretry_request(scmd->request) && |
| 1436 | (++scmd->retries < scmd->allowed)) { | 1436 | (++scmd->retries <= scmd->allowed)) { |
| 1437 | SCSI_LOG_ERROR_RECOVERY(3, printk("%s: flush" | 1437 | SCSI_LOG_ERROR_RECOVERY(3, printk("%s: flush" |
| 1438 | " retry cmd: %p\n", | 1438 | " retry cmd: %p\n", |
| 1439 | current->comm, | 1439 | current->comm, |
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 4362dcde74af..701a328f7beb 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
| @@ -1498,7 +1498,7 @@ static void scsi_kill_request(struct request *req, request_queue_t *q) | |||
| 1498 | static void scsi_softirq_done(struct request *rq) | 1498 | static void scsi_softirq_done(struct request *rq) |
| 1499 | { | 1499 | { |
| 1500 | struct scsi_cmnd *cmd = rq->completion_data; | 1500 | struct scsi_cmnd *cmd = rq->completion_data; |
| 1501 | unsigned long wait_for = cmd->allowed * cmd->timeout_per_command; | 1501 | unsigned long wait_for = (cmd->allowed + 1) * cmd->timeout_per_command; |
| 1502 | int disposition; | 1502 | int disposition; |
| 1503 | 1503 | ||
| 1504 | INIT_LIST_HEAD(&cmd->eh_entry); | 1504 | INIT_LIST_HEAD(&cmd->eh_entry); |
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index 5acb83ca5ae5..f9ecc3dea7df 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c | |||
| @@ -752,8 +752,20 @@ static int scsi_add_lun(struct scsi_device *sdev, char *inq_result, int *bflags) | |||
| 752 | 752 | ||
| 753 | transport_configure_device(&sdev->sdev_gendev); | 753 | transport_configure_device(&sdev->sdev_gendev); |
| 754 | 754 | ||
| 755 | if (sdev->host->hostt->slave_configure) | 755 | if (sdev->host->hostt->slave_configure) { |
| 756 | sdev->host->hostt->slave_configure(sdev); | 756 | int ret = sdev->host->hostt->slave_configure(sdev); |
| 757 | if (ret) { | ||
| 758 | /* | ||
| 759 | * if LLDD reports slave not present, don't clutter | ||
| 760 | * console with alloc failure messages | ||
| 761 | */ | ||
| 762 | if (ret != -ENXIO) { | ||
| 763 | sdev_printk(KERN_ERR, sdev, | ||
| 764 | "failed to configure device\n"); | ||
| 765 | } | ||
| 766 | return SCSI_SCAN_NO_RESPONSE; | ||
| 767 | } | ||
| 768 | } | ||
| 757 | 769 | ||
| 758 | /* | 770 | /* |
| 759 | * Ok, the device is now all set up, we can | 771 | * Ok, the device is now all set up, we can |
diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c index f2c9acf11bd0..929032e370db 100644 --- a/drivers/scsi/scsi_transport_fc.c +++ b/drivers/scsi/scsi_transport_fc.c | |||
| @@ -1498,8 +1498,7 @@ fc_remote_port_add(struct Scsi_Host *shost, int channel, | |||
| 1498 | } | 1498 | } |
| 1499 | 1499 | ||
| 1500 | /* Search the bindings array */ | 1500 | /* Search the bindings array */ |
| 1501 | if (likely((ids->roles & FC_RPORT_ROLE_FCP_TARGET) && | 1501 | if (fc_host_tgtid_bind_type(shost) != FC_TGTID_BIND_NONE) { |
| 1502 | (fc_host_tgtid_bind_type(shost) != FC_TGTID_BIND_NONE))) { | ||
| 1503 | 1502 | ||
| 1504 | /* search for a matching consistent binding */ | 1503 | /* search for a matching consistent binding */ |
| 1505 | 1504 | ||
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index 2a547538d444..5a0a19322d01 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c | |||
| @@ -2162,7 +2162,7 @@ sg_link_reserve(Sg_fd * sfp, Sg_request * srp, int size) | |||
| 2162 | 2162 | ||
| 2163 | srp->res_used = 1; | 2163 | srp->res_used = 1; |
| 2164 | SCSI_LOG_TIMEOUT(4, printk("sg_link_reserve: size=%d\n", size)); | 2164 | SCSI_LOG_TIMEOUT(4, printk("sg_link_reserve: size=%d\n", size)); |
| 2165 | rem = size = (size + 1) & (~1); /* round to even for aha1542 */ | 2165 | rem = size; |
| 2166 | 2166 | ||
| 2167 | for (k = 0; k < rsv_schp->k_use_sg; ++k, ++sg) { | 2167 | for (k = 0; k < rsv_schp->k_use_sg; ++k, ++sg) { |
| 2168 | num = sg->length; | 2168 | num = sg->length; |
diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.c b/drivers/scsi/sym53c8xx_2/sym_hipd.c index f4854c33f48d..2627000ca653 100644 --- a/drivers/scsi/sym53c8xx_2/sym_hipd.c +++ b/drivers/scsi/sym53c8xx_2/sym_hipd.c | |||
| @@ -919,6 +919,8 @@ static int sym_prepare_setting(struct Scsi_Host *shost, struct sym_hcb *np, stru | |||
| 919 | 919 | ||
| 920 | tp->usrflags |= (SYM_DISC_ENABLED | SYM_TAGS_ENABLED); | 920 | tp->usrflags |= (SYM_DISC_ENABLED | SYM_TAGS_ENABLED); |
| 921 | tp->usrtags = SYM_SETUP_MAX_TAG; | 921 | tp->usrtags = SYM_SETUP_MAX_TAG; |
| 922 | tp->usr_width = np->maxwide; | ||
| 923 | tp->usr_period = 9; | ||
| 922 | 924 | ||
| 923 | sym_nvram_setup_target(tp, i, nvram); | 925 | sym_nvram_setup_target(tp, i, nvram); |
| 924 | 926 | ||
diff --git a/include/asm-powerpc/eeh.h b/include/asm-powerpc/eeh.h index 7dfb408fe2ca..eb392032e19b 100644 --- a/include/asm-powerpc/eeh.h +++ b/include/asm-powerpc/eeh.h | |||
| @@ -61,6 +61,7 @@ void __init pci_addr_cache_build(void); | |||
| 61 | * to finish the eeh setup for this device. | 61 | * to finish the eeh setup for this device. |
| 62 | */ | 62 | */ |
| 63 | void eeh_add_device_early(struct device_node *); | 63 | void eeh_add_device_early(struct device_node *); |
| 64 | void eeh_add_device_late(struct pci_dev *dev); | ||
| 64 | void eeh_add_device_tree_early(struct device_node *); | 65 | void eeh_add_device_tree_early(struct device_node *); |
| 65 | void eeh_add_device_tree_late(struct pci_bus *); | 66 | void eeh_add_device_tree_late(struct pci_bus *); |
| 66 | 67 | ||
diff --git a/include/pcmcia/device_id.h b/include/pcmcia/device_id.h index 346d81ece287..e04e0b0d9a25 100644 --- a/include/pcmcia/device_id.h +++ b/include/pcmcia/device_id.h | |||
| @@ -72,6 +72,15 @@ | |||
| 72 | .prod_id = { (v1), (v2), (v3), (v4) }, \ | 72 | .prod_id = { (v1), (v2), (v3), (v4) }, \ |
| 73 | .prod_id_hash = { (vh1), (vh2), (vh3), (vh4) }, } | 73 | .prod_id_hash = { (vh1), (vh2), (vh3), (vh4) }, } |
| 74 | 74 | ||
| 75 | #define PCMCIA_DEVICE_MANF_CARD_PROD_ID1(manf, card, v1, vh1) { \ | ||
| 76 | .match_flags = PCMCIA_DEV_ID_MATCH_MANF_ID| \ | ||
| 77 | PCMCIA_DEV_ID_MATCH_CARD_ID| \ | ||
| 78 | PCMCIA_DEV_ID_MATCH_PROD_ID1, \ | ||
| 79 | .manf_id = (manf), \ | ||
| 80 | .card_id = (card), \ | ||
| 81 | .prod_id = { (v1), NULL, NULL, NULL }, \ | ||
| 82 | .prod_id_hash = { (vh1), 0, 0, 0 }, } | ||
| 83 | |||
| 75 | 84 | ||
| 76 | /* multi-function devices */ | 85 | /* multi-function devices */ |
| 77 | 86 | ||
