Annotation of /trunk/kernel26-magellan/patches-2.6.24-r5/0100-2.6.24.1-all-fixes.patch
Parent Directory | Revision Log
Revision 574 -
(hide annotations)
(download)
Mon Apr 21 17:56:37 2008 UTC (16 years, 6 months ago) by niro
File size: 62467 byte(s)
Mon Apr 21 17:56:37 2008 UTC (16 years, 6 months ago) by niro
File size: 62467 byte(s)
- 2.6.24-magellan-r5: updated to linux-2.6.24.5
1 | niro | 574 | diff --git a/Documentation/video4linux/CARDLIST.cx23885 b/Documentation/video4linux/CARDLIST.cx23885 |
2 | index 00cb646..986ea57 100644 | ||
3 | --- a/Documentation/video4linux/CARDLIST.cx23885 | ||
4 | +++ b/Documentation/video4linux/CARDLIST.cx23885 | ||
5 | @@ -1,5 +1,5 @@ | ||
6 | 0 -> UNKNOWN/GENERIC [0070:3400] | ||
7 | 1 -> Hauppauge WinTV-HVR1800lp [0070:7600] | ||
8 | - 2 -> Hauppauge WinTV-HVR1800 [0070:7800,0070:7801] | ||
9 | + 2 -> Hauppauge WinTV-HVR1800 [0070:7800,0070:7801,0070:7809] | ||
10 | 3 -> Hauppauge WinTV-HVR1250 [0070:7911] | ||
11 | 4 -> DViCO FusionHDTV5 Express [18ac:d500] | ||
12 | diff --git a/arch/x86/kernel/Makefile_32 b/arch/x86/kernel/Makefile_32 | ||
13 | index a7bc93c..5e48bd2 100644 | ||
14 | --- a/arch/x86/kernel/Makefile_32 | ||
15 | +++ b/arch/x86/kernel/Makefile_32 | ||
16 | @@ -19,7 +19,8 @@ obj-$(CONFIG_X86_MSR) += msr.o | ||
17 | obj-$(CONFIG_X86_CPUID) += cpuid.o | ||
18 | obj-$(CONFIG_MICROCODE) += microcode.o | ||
19 | obj-$(CONFIG_PCI) += early-quirks.o | ||
20 | -obj-$(CONFIG_APM) += apm_32.o | ||
21 | +apm-y := apm_32.o | ||
22 | +obj-$(CONFIG_APM) += apm.o | ||
23 | obj-$(CONFIG_X86_SMP) += smp_32.o smpboot_32.o tsc_sync.o | ||
24 | obj-$(CONFIG_SMP) += smpcommon_32.o | ||
25 | obj-$(CONFIG_X86_TRAMPOLINE) += trampoline_32.o | ||
26 | diff --git a/drivers/acpi/blacklist.c b/drivers/acpi/blacklist.c | ||
27 | index 8809654..bd12c8e 100644 | ||
28 | --- a/drivers/acpi/blacklist.c | ||
29 | +++ b/drivers/acpi/blacklist.c | ||
30 | @@ -208,24 +208,24 @@ static struct dmi_system_id acpi_osi_dmi_table[] __initdata = { | ||
31 | * Disable OSI(Linux) warnings on all "Acer, inc." | ||
32 | * | ||
33 | * _OSI(Linux) disables the latest Windows BIOS code: | ||
34 | + * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 3100"), | ||
35 | * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5050"), | ||
36 | + * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5100"), | ||
37 | * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5580"), | ||
38 | * DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 3010"), | ||
39 | * _OSI(Linux) effect unknown: | ||
40 | * DMI_MATCH(DMI_PRODUCT_NAME, "Ferrari 5000"), | ||
41 | */ | ||
42 | - { | ||
43 | - .callback = dmi_disable_osi_linux, | ||
44 | - .ident = "Acer, inc.", | ||
45 | - .matches = { | ||
46 | - DMI_MATCH(DMI_SYS_VENDOR, "Acer, inc."), | ||
47 | - }, | ||
48 | - }, | ||
49 | + /* | ||
50 | + * note that dmi_check_system() uses strstr() | ||
51 | + * to match sub-strings rather than !strcmp(), | ||
52 | + * so "Acer" below matches "Acer, inc." above. | ||
53 | + */ | ||
54 | /* | ||
55 | * Disable OSI(Linux) warnings on all "Acer" | ||
56 | * | ||
57 | * _OSI(Linux) effect unknown: | ||
58 | - * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5100"), | ||
59 | + * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5315"), | ||
60 | * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5610"), | ||
61 | * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 7720Z"), | ||
62 | * DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 5520"), | ||
63 | @@ -300,7 +300,7 @@ static struct dmi_system_id acpi_osi_dmi_table[] __initdata = { | ||
64 | DMI_MATCH(DMI_BIOS_VENDOR, "COMPAL"), | ||
65 | }, | ||
66 | }, | ||
67 | - { /* OSI(Linux) touches USB, breaks suspend to disk */ | ||
68 | + { /* OSI(Linux) touches USB, unknown side-effect */ | ||
69 | .callback = dmi_disable_osi_linux, | ||
70 | .ident = "Dell Dimension 5150", | ||
71 | .matches = { | ||
72 | @@ -474,6 +474,11 @@ static struct dmi_system_id acpi_osi_dmi_table[] __initdata = { | ||
73 | * | ||
74 | * _OSI(Linux) confirmed to be a NOP: | ||
75 | * DMI_MATCH(DMI_PRODUCT_NAME, "P1-J150B"), | ||
76 | + * with DMI_MATCH(DMI_BOARD_NAME, "ROCKY"), | ||
77 | + * | ||
78 | + * unknown: | ||
79 | + * DMI_MATCH(DMI_PRODUCT_NAME, "S1-MDGDG"), | ||
80 | + * with DMI_MATCH(DMI_BOARD_NAME, "ROCKY"), | ||
81 | */ | ||
82 | { | ||
83 | .callback = dmi_disable_osi_linux, | ||
84 | diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c | ||
85 | index e53fb51..fde7ac8 100644 | ||
86 | --- a/drivers/acpi/osl.c | ||
87 | +++ b/drivers/acpi/osl.c | ||
88 | @@ -120,7 +120,7 @@ static char osi_additional_string[OSI_STRING_LENGTH_MAX]; | ||
89 | */ | ||
90 | #define OSI_LINUX_ENABLE 0 | ||
91 | |||
92 | -struct osi_linux { | ||
93 | +static struct osi_linux { | ||
94 | unsigned int enable:1; | ||
95 | unsigned int dmi:1; | ||
96 | unsigned int cmdline:1; | ||
97 | @@ -1213,24 +1213,24 @@ acpi_status acpi_os_release_object(acpi_cache_t * cache, void *object) | ||
98 | * | ||
99 | * Returns 0 on success | ||
100 | */ | ||
101 | -int acpi_dmi_dump(void) | ||
102 | +static int acpi_dmi_dump(void) | ||
103 | { | ||
104 | |||
105 | if (!dmi_available) | ||
106 | return -1; | ||
107 | |||
108 | printk(KERN_NOTICE PREFIX "DMI System Vendor: %s\n", | ||
109 | - dmi_get_slot(DMI_SYS_VENDOR)); | ||
110 | + dmi_get_system_info(DMI_SYS_VENDOR)); | ||
111 | printk(KERN_NOTICE PREFIX "DMI Product Name: %s\n", | ||
112 | - dmi_get_slot(DMI_PRODUCT_NAME)); | ||
113 | + dmi_get_system_info(DMI_PRODUCT_NAME)); | ||
114 | printk(KERN_NOTICE PREFIX "DMI Product Version: %s\n", | ||
115 | - dmi_get_slot(DMI_PRODUCT_VERSION)); | ||
116 | + dmi_get_system_info(DMI_PRODUCT_VERSION)); | ||
117 | printk(KERN_NOTICE PREFIX "DMI Board Name: %s\n", | ||
118 | - dmi_get_slot(DMI_BOARD_NAME)); | ||
119 | + dmi_get_system_info(DMI_BOARD_NAME)); | ||
120 | printk(KERN_NOTICE PREFIX "DMI BIOS Vendor: %s\n", | ||
121 | - dmi_get_slot(DMI_BIOS_VENDOR)); | ||
122 | + dmi_get_system_info(DMI_BIOS_VENDOR)); | ||
123 | printk(KERN_NOTICE PREFIX "DMI BIOS Date: %s\n", | ||
124 | - dmi_get_slot(DMI_BIOS_DATE)); | ||
125 | + dmi_get_system_info(DMI_BIOS_DATE)); | ||
126 | |||
127 | return 0; | ||
128 | } | ||
129 | diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c | ||
130 | index 0295855..4a1b9bf 100644 | ||
131 | --- a/drivers/base/firmware_class.c | ||
132 | +++ b/drivers/base/firmware_class.c | ||
133 | @@ -292,7 +292,8 @@ firmware_class_timeout(u_long data) | ||
134 | |||
135 | static inline void fw_setup_device_id(struct device *f_dev, struct device *dev) | ||
136 | { | ||
137 | - snprintf(f_dev->bus_id, BUS_ID_SIZE, "firmware-%s", dev->bus_id); | ||
138 | + /* XXX warning we should watch out for name collisions */ | ||
139 | + strlcpy(f_dev->bus_id, dev->bus_id, BUS_ID_SIZE); | ||
140 | } | ||
141 | |||
142 | static int fw_register_device(struct device **dev_p, const char *fw_name, | ||
143 | diff --git a/drivers/char/drm/drm_stub.c b/drivers/char/drm/drm_stub.c | ||
144 | index ee83ff9..a157ee5 100644 | ||
145 | --- a/drivers/char/drm/drm_stub.c | ||
146 | +++ b/drivers/char/drm/drm_stub.c | ||
147 | @@ -218,6 +218,7 @@ int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent, | ||
148 | if (ret) | ||
149 | goto err_g1; | ||
150 | |||
151 | + pci_set_master(pdev); | ||
152 | if ((ret = drm_fill_in_dev(dev, pdev, ent, driver))) { | ||
153 | printk(KERN_ERR "DRM: Fill_in_dev failed.\n"); | ||
154 | goto err_g2; | ||
155 | diff --git a/drivers/char/drm/drm_vm.c b/drivers/char/drm/drm_vm.c | ||
156 | index e8d50af..ef5e6b1 100644 | ||
157 | --- a/drivers/char/drm/drm_vm.c | ||
158 | +++ b/drivers/char/drm/drm_vm.c | ||
159 | @@ -506,6 +506,7 @@ static int drm_mmap_dma(struct file *filp, struct vm_area_struct *vma) | ||
160 | vma->vm_ops = &drm_vm_dma_ops; | ||
161 | |||
162 | vma->vm_flags |= VM_RESERVED; /* Don't swap */ | ||
163 | + vma->vm_flags |= VM_DONTEXPAND; | ||
164 | |||
165 | vma->vm_file = filp; /* Needed for drm_vm_open() */ | ||
166 | drm_vm_open_locked(vma); | ||
167 | @@ -655,6 +656,7 @@ static int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma) | ||
168 | return -EINVAL; /* This should never happen. */ | ||
169 | } | ||
170 | vma->vm_flags |= VM_RESERVED; /* Don't swap */ | ||
171 | + vma->vm_flags |= VM_DONTEXPAND; | ||
172 | |||
173 | vma->vm_file = filp; /* Needed for drm_vm_open() */ | ||
174 | drm_vm_open_locked(vma); | ||
175 | diff --git a/drivers/char/mspec.c b/drivers/char/mspec.c | ||
176 | index 82f2e27..ff146c2 100644 | ||
177 | --- a/drivers/char/mspec.c | ||
178 | +++ b/drivers/char/mspec.c | ||
179 | @@ -283,7 +283,7 @@ mspec_mmap(struct file *file, struct vm_area_struct *vma, | ||
180 | vdata->refcnt = ATOMIC_INIT(1); | ||
181 | vma->vm_private_data = vdata; | ||
182 | |||
183 | - vma->vm_flags |= (VM_IO | VM_RESERVED | VM_PFNMAP); | ||
184 | + vma->vm_flags |= (VM_IO | VM_RESERVED | VM_PFNMAP | VM_DONTEXPAND); | ||
185 | if (vdata->type == MSPEC_FETCHOP || vdata->type == MSPEC_UNCACHED) | ||
186 | vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); | ||
187 | vma->vm_ops = &mspec_vm_ops; | ||
188 | diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c | ||
189 | index 5e596a7..b2fb6ba 100644 | ||
190 | --- a/drivers/firmware/dmi_scan.c | ||
191 | +++ b/drivers/firmware/dmi_scan.c | ||
192 | @@ -469,12 +469,3 @@ int dmi_get_year(int field) | ||
193 | |||
194 | return year; | ||
195 | } | ||
196 | - | ||
197 | -/** | ||
198 | - * dmi_get_slot - return dmi_ident[slot] | ||
199 | - * @slot: index into dmi_ident[] | ||
200 | - */ | ||
201 | -char *dmi_get_slot(int slot) | ||
202 | -{ | ||
203 | - return(dmi_ident[slot]); | ||
204 | -} | ||
205 | diff --git a/drivers/media/video/cx23885/cx23885-cards.c b/drivers/media/video/cx23885/cx23885-cards.c | ||
206 | index b9012ac..db00193 100644 | ||
207 | --- a/drivers/media/video/cx23885/cx23885-cards.c | ||
208 | +++ b/drivers/media/video/cx23885/cx23885-cards.c | ||
209 | @@ -138,6 +138,10 @@ struct cx23885_subid cx23885_subids[] = { | ||
210 | .card = CX23885_BOARD_HAUPPAUGE_HVR1800, | ||
211 | },{ | ||
212 | .subvendor = 0x0070, | ||
213 | + .subdevice = 0x7809, | ||
214 | + .card = CX23885_BOARD_HAUPPAUGE_HVR1800, | ||
215 | + },{ | ||
216 | + .subvendor = 0x0070, | ||
217 | .subdevice = 0x7911, | ||
218 | .card = CX23885_BOARD_HAUPPAUGE_HVR1250, | ||
219 | },{ | ||
220 | diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c | ||
221 | index f84c752..399592d 100644 | ||
222 | --- a/drivers/net/forcedeth.c | ||
223 | +++ b/drivers/net/forcedeth.c | ||
224 | @@ -5593,35 +5593,35 @@ static struct pci_device_id pci_tbl[] = { | ||
225 | }, | ||
226 | { /* MCP77 Ethernet Controller */ | ||
227 | PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_32), | ||
228 | - .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT, | ||
229 | + .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT|DEV_HAS_CORRECT_MACADDR, | ||
230 | }, | ||
231 | { /* MCP77 Ethernet Controller */ | ||
232 | PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_33), | ||
233 | - .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT, | ||
234 | + .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT|DEV_HAS_CORRECT_MACADDR, | ||
235 | }, | ||
236 | { /* MCP77 Ethernet Controller */ | ||
237 | PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_34), | ||
238 | - .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT, | ||
239 | + .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT|DEV_HAS_CORRECT_MACADDR, | ||
240 | }, | ||
241 | { /* MCP77 Ethernet Controller */ | ||
242 | PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_35), | ||
243 | - .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT, | ||
244 | + .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT|DEV_HAS_CORRECT_MACADDR, | ||
245 | }, | ||
246 | { /* MCP79 Ethernet Controller */ | ||
247 | PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_36), | ||
248 | - .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT, | ||
249 | + .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT|DEV_HAS_CORRECT_MACADDR, | ||
250 | }, | ||
251 | { /* MCP79 Ethernet Controller */ | ||
252 | PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_37), | ||
253 | - .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT, | ||
254 | + .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT|DEV_HAS_CORRECT_MACADDR, | ||
255 | }, | ||
256 | { /* MCP79 Ethernet Controller */ | ||
257 | PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_38), | ||
258 | - .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT, | ||
259 | + .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT|DEV_HAS_CORRECT_MACADDR, | ||
260 | }, | ||
261 | { /* MCP79 Ethernet Controller */ | ||
262 | PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_39), | ||
263 | - .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT, | ||
264 | + .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT|DEV_HAS_CORRECT_MACADDR, | ||
265 | }, | ||
266 | {0,}, | ||
267 | }; | ||
268 | diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c | ||
269 | index bc15940..962e28b 100644 | ||
270 | --- a/drivers/net/sky2.c | ||
271 | +++ b/drivers/net/sky2.c | ||
272 | @@ -621,6 +621,7 @@ static void sky2_phy_power(struct sky2_hw *hw, unsigned port, int onoff) | ||
273 | static const u32 phy_power[] = { PCI_Y2_PHY1_POWD, PCI_Y2_PHY2_POWD }; | ||
274 | static const u32 coma_mode[] = { PCI_Y2_PHY1_COMA, PCI_Y2_PHY2_COMA }; | ||
275 | |||
276 | + sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON); | ||
277 | reg1 = sky2_pci_read32(hw, PCI_DEV_REG1); | ||
278 | /* Turn on/off phy power saving */ | ||
279 | if (onoff) | ||
280 | @@ -632,7 +633,8 @@ static void sky2_phy_power(struct sky2_hw *hw, unsigned port, int onoff) | ||
281 | reg1 |= coma_mode[port]; | ||
282 | |||
283 | sky2_pci_write32(hw, PCI_DEV_REG1, reg1); | ||
284 | - reg1 = sky2_pci_read32(hw, PCI_DEV_REG1); | ||
285 | + sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF); | ||
286 | + sky2_pci_read32(hw, PCI_DEV_REG1); | ||
287 | |||
288 | udelay(100); | ||
289 | } | ||
290 | @@ -1412,6 +1414,7 @@ static int sky2_up(struct net_device *dev) | ||
291 | imask |= portirq_msk[port]; | ||
292 | sky2_write32(hw, B0_IMSK, imask); | ||
293 | |||
294 | + sky2_set_multicast(dev); | ||
295 | return 0; | ||
296 | |||
297 | err_out: | ||
298 | @@ -2426,6 +2429,7 @@ static void sky2_hw_intr(struct sky2_hw *hw) | ||
299 | if (status & (Y2_IS_MST_ERR | Y2_IS_IRQ_STAT)) { | ||
300 | u16 pci_err; | ||
301 | |||
302 | + sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON); | ||
303 | pci_err = sky2_pci_read16(hw, PCI_STATUS); | ||
304 | if (net_ratelimit()) | ||
305 | dev_err(&pdev->dev, "PCI hardware error (0x%x)\n", | ||
306 | @@ -2433,12 +2437,14 @@ static void sky2_hw_intr(struct sky2_hw *hw) | ||
307 | |||
308 | sky2_pci_write16(hw, PCI_STATUS, | ||
309 | pci_err | PCI_STATUS_ERROR_BITS); | ||
310 | + sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF); | ||
311 | } | ||
312 | |||
313 | if (status & Y2_IS_PCI_EXP) { | ||
314 | /* PCI-Express uncorrectable Error occurred */ | ||
315 | u32 err; | ||
316 | |||
317 | + sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON); | ||
318 | err = sky2_read32(hw, Y2_CFG_AER + PCI_ERR_UNCOR_STATUS); | ||
319 | sky2_write32(hw, Y2_CFG_AER + PCI_ERR_UNCOR_STATUS, | ||
320 | 0xfffffffful); | ||
321 | @@ -2446,6 +2452,7 @@ static void sky2_hw_intr(struct sky2_hw *hw) | ||
322 | dev_err(&pdev->dev, "PCI Express error (0x%x)\n", err); | ||
323 | |||
324 | sky2_read32(hw, Y2_CFG_AER + PCI_ERR_UNCOR_STATUS); | ||
325 | + sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF); | ||
326 | } | ||
327 | |||
328 | if (status & Y2_HWE_L1_MASK) | ||
329 | @@ -2811,6 +2818,7 @@ static void sky2_reset(struct sky2_hw *hw) | ||
330 | } | ||
331 | |||
332 | sky2_power_on(hw); | ||
333 | + sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF); | ||
334 | |||
335 | for (i = 0; i < hw->ports; i++) { | ||
336 | sky2_write8(hw, SK_REG(i, GMAC_LINK_CTRL), GMLC_RST_SET); | ||
337 | @@ -3533,8 +3541,6 @@ static int sky2_set_ringparam(struct net_device *dev, | ||
338 | err = sky2_up(dev); | ||
339 | if (err) | ||
340 | dev_close(dev); | ||
341 | - else | ||
342 | - sky2_set_multicast(dev); | ||
343 | } | ||
344 | |||
345 | return err; | ||
346 | @@ -4368,8 +4374,6 @@ static int sky2_resume(struct pci_dev *pdev) | ||
347 | dev_close(dev); | ||
348 | goto out; | ||
349 | } | ||
350 | - | ||
351 | - sky2_set_multicast(dev); | ||
352 | } | ||
353 | } | ||
354 | |||
355 | diff --git a/drivers/net/wireless/b43/dma.c b/drivers/net/wireless/b43/dma.c | ||
356 | index 5e8f8ac..559a9a9 100644 | ||
357 | --- a/drivers/net/wireless/b43/dma.c | ||
358 | +++ b/drivers/net/wireless/b43/dma.c | ||
359 | @@ -1106,7 +1106,7 @@ static int dma_tx_fragment(struct b43_dmaring *ring, | ||
360 | { | ||
361 | const struct b43_dma_ops *ops = ring->ops; | ||
362 | u8 *header; | ||
363 | - int slot; | ||
364 | + int slot, old_top_slot, old_used_slots; | ||
365 | int err; | ||
366 | struct b43_dmadesc_generic *desc; | ||
367 | struct b43_dmadesc_meta *meta; | ||
368 | @@ -1116,20 +1116,31 @@ static int dma_tx_fragment(struct b43_dmaring *ring, | ||
369 | #define SLOTS_PER_PACKET 2 | ||
370 | B43_WARN_ON(skb_shinfo(skb)->nr_frags); | ||
371 | |||
372 | + old_top_slot = ring->current_slot; | ||
373 | + old_used_slots = ring->used_slots; | ||
374 | + | ||
375 | /* Get a slot for the header. */ | ||
376 | slot = request_slot(ring); | ||
377 | desc = ops->idx2desc(ring, slot, &meta_hdr); | ||
378 | memset(meta_hdr, 0, sizeof(*meta_hdr)); | ||
379 | |||
380 | header = &(ring->txhdr_cache[slot * sizeof(struct b43_txhdr_fw4)]); | ||
381 | - b43_generate_txhdr(ring->dev, header, | ||
382 | + err = b43_generate_txhdr(ring->dev, header, | ||
383 | skb->data, skb->len, ctl, | ||
384 | generate_cookie(ring, slot)); | ||
385 | + if (unlikely(err)) { | ||
386 | + ring->current_slot = old_top_slot; | ||
387 | + ring->used_slots = old_used_slots; | ||
388 | + return err; | ||
389 | + } | ||
390 | |||
391 | meta_hdr->dmaaddr = map_descbuffer(ring, (unsigned char *)header, | ||
392 | sizeof(struct b43_txhdr_fw4), 1); | ||
393 | - if (dma_mapping_error(meta_hdr->dmaaddr)) | ||
394 | + if (dma_mapping_error(meta_hdr->dmaaddr)) { | ||
395 | + ring->current_slot = old_top_slot; | ||
396 | + ring->used_slots = old_used_slots; | ||
397 | return -EIO; | ||
398 | + } | ||
399 | ops->fill_descriptor(ring, desc, meta_hdr->dmaaddr, | ||
400 | sizeof(struct b43_txhdr_fw4), 1, 0, 0); | ||
401 | |||
402 | @@ -1147,6 +1158,8 @@ static int dma_tx_fragment(struct b43_dmaring *ring, | ||
403 | if (dma_mapping_error(meta->dmaaddr)) { | ||
404 | bounce_skb = __dev_alloc_skb(skb->len, GFP_ATOMIC | GFP_DMA); | ||
405 | if (!bounce_skb) { | ||
406 | + ring->current_slot = old_top_slot; | ||
407 | + ring->used_slots = old_used_slots; | ||
408 | err = -ENOMEM; | ||
409 | goto out_unmap_hdr; | ||
410 | } | ||
411 | @@ -1157,6 +1170,8 @@ static int dma_tx_fragment(struct b43_dmaring *ring, | ||
412 | meta->skb = skb; | ||
413 | meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1); | ||
414 | if (dma_mapping_error(meta->dmaaddr)) { | ||
415 | + ring->current_slot = old_top_slot; | ||
416 | + ring->used_slots = old_used_slots; | ||
417 | err = -EIO; | ||
418 | goto out_free_bounce; | ||
419 | } | ||
420 | @@ -1219,6 +1234,13 @@ int b43_dma_tx(struct b43_wldev *dev, | ||
421 | B43_WARN_ON(ring->stopped); | ||
422 | |||
423 | err = dma_tx_fragment(ring, skb, ctl); | ||
424 | + if (unlikely(err == -ENOKEY)) { | ||
425 | + /* Drop this packet, as we don't have the encryption key | ||
426 | + * anymore and must not transmit it unencrypted. */ | ||
427 | + dev_kfree_skb_any(skb); | ||
428 | + err = 0; | ||
429 | + goto out_unlock; | ||
430 | + } | ||
431 | if (unlikely(err)) { | ||
432 | b43err(dev->wl, "DMA tx mapping failure\n"); | ||
433 | goto out_unlock; | ||
434 | diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c | ||
435 | index 1c93b4f..69795fd 100644 | ||
436 | --- a/drivers/net/wireless/b43/main.c | ||
437 | +++ b/drivers/net/wireless/b43/main.c | ||
438 | @@ -1800,6 +1800,18 @@ static int b43_upload_microcode(struct b43_wldev *dev) | ||
439 | err = -EOPNOTSUPP; | ||
440 | goto out; | ||
441 | } | ||
442 | + if (fwrev > 351) { | ||
443 | + b43err(dev->wl, "YOUR FIRMWARE IS TOO NEW. Please downgrade your " | ||
444 | + "firmware.\n"); | ||
445 | + b43err(dev->wl, "Use this firmware tarball: " | ||
446 | + "http://downloads.openwrt.org/sources/broadcom-wl-4.80.53.0.tar.bz2\n"); | ||
447 | + b43err(dev->wl, "Use this b43-fwcutter tarball: " | ||
448 | + "http://bu3sch.de/b43/fwcutter/b43-fwcutter-009.tar.bz2\n"); | ||
449 | + b43err(dev->wl, "Read, understand and _do_ what this message says, please.\n"); | ||
450 | + b43_write32(dev, B43_MMIO_MACCTL, 0); | ||
451 | + err = -EOPNOTSUPP; | ||
452 | + goto out; | ||
453 | + } | ||
454 | b43dbg(dev->wl, "Loading firmware version %u.%u " | ||
455 | "(20%.2i-%.2i-%.2i %.2i:%.2i:%.2i)\n", | ||
456 | fwrev, fwpatch, | ||
457 | @@ -3395,8 +3407,6 @@ static int b43_wireless_core_init(struct b43_wldev *dev) | ||
458 | b43_bluetooth_coext_enable(dev); | ||
459 | |||
460 | ssb_bus_powerup(bus, 1); /* Enable dynamic PCTL */ | ||
461 | - memset(wl->bssid, 0, ETH_ALEN); | ||
462 | - memset(wl->mac_addr, 0, ETH_ALEN); | ||
463 | b43_upload_card_macaddress(dev); | ||
464 | b43_security_init(dev); | ||
465 | b43_rng_init(wl); | ||
466 | @@ -3493,6 +3503,13 @@ static int b43_start(struct ieee80211_hw *hw) | ||
467 | int did_init = 0; | ||
468 | int err = 0; | ||
469 | |||
470 | + /* Kill all old instance specific information to make sure | ||
471 | + * the card won't use it in the short timeframe between start | ||
472 | + * and mac80211 reconfiguring it. */ | ||
473 | + memset(wl->bssid, 0, ETH_ALEN); | ||
474 | + memset(wl->mac_addr, 0, ETH_ALEN); | ||
475 | + wl->filter_flags = 0; | ||
476 | + | ||
477 | /* First register RFkill. | ||
478 | * LEDs that are registered later depend on it. */ | ||
479 | b43_rfkill_init(dev); | ||
480 | diff --git a/drivers/net/wireless/b43/xmit.c b/drivers/net/wireless/b43/xmit.c | ||
481 | index 3307ba1..a856b9f 100644 | ||
482 | --- a/drivers/net/wireless/b43/xmit.c | ||
483 | +++ b/drivers/net/wireless/b43/xmit.c | ||
484 | @@ -177,7 +177,7 @@ static u8 b43_calc_fallback_rate(u8 bitrate) | ||
485 | return 0; | ||
486 | } | ||
487 | |||
488 | -static void generate_txhdr_fw4(struct b43_wldev *dev, | ||
489 | +static int generate_txhdr_fw4(struct b43_wldev *dev, | ||
490 | struct b43_txhdr_fw4 *txhdr, | ||
491 | const unsigned char *fragment_data, | ||
492 | unsigned int fragment_len, | ||
493 | @@ -235,7 +235,15 @@ static void generate_txhdr_fw4(struct b43_wldev *dev, | ||
494 | |||
495 | B43_WARN_ON(key_idx >= dev->max_nr_keys); | ||
496 | key = &(dev->key[key_idx]); | ||
497 | - B43_WARN_ON(!key->keyconf); | ||
498 | + | ||
499 | + if (unlikely(!key->keyconf)) { | ||
500 | + /* This key is invalid. This might only happen | ||
501 | + * in a short timeframe after machine resume before | ||
502 | + * we were able to reconfigure keys. | ||
503 | + * Drop this packet completely. Do not transmit it | ||
504 | + * unencrypted to avoid leaking information. */ | ||
505 | + return -ENOKEY; | ||
506 | + } | ||
507 | |||
508 | /* Hardware appends ICV. */ | ||
509 | plcp_fragment_len += txctl->icv_len; | ||
510 | @@ -352,16 +360,18 @@ static void generate_txhdr_fw4(struct b43_wldev *dev, | ||
511 | txhdr->mac_ctl = cpu_to_le32(mac_ctl); | ||
512 | txhdr->phy_ctl = cpu_to_le16(phy_ctl); | ||
513 | txhdr->extra_ft = extra_ft; | ||
514 | + | ||
515 | + return 0; | ||
516 | } | ||
517 | |||
518 | -void b43_generate_txhdr(struct b43_wldev *dev, | ||
519 | +int b43_generate_txhdr(struct b43_wldev *dev, | ||
520 | u8 * txhdr, | ||
521 | const unsigned char *fragment_data, | ||
522 | unsigned int fragment_len, | ||
523 | const struct ieee80211_tx_control *txctl, u16 cookie) | ||
524 | { | ||
525 | - generate_txhdr_fw4(dev, (struct b43_txhdr_fw4 *)txhdr, | ||
526 | - fragment_data, fragment_len, txctl, cookie); | ||
527 | + return generate_txhdr_fw4(dev, (struct b43_txhdr_fw4 *)txhdr, | ||
528 | + fragment_data, fragment_len, txctl, cookie); | ||
529 | } | ||
530 | |||
531 | static s8 b43_rssi_postprocess(struct b43_wldev *dev, | ||
532 | diff --git a/drivers/net/wireless/b43/xmit.h b/drivers/net/wireless/b43/xmit.h | ||
533 | index 6dc0793..e3bac08 100644 | ||
534 | --- a/drivers/net/wireless/b43/xmit.h | ||
535 | +++ b/drivers/net/wireless/b43/xmit.h | ||
536 | @@ -82,7 +82,7 @@ struct b43_txhdr_fw4 { | ||
537 | #define B43_TX4_PHY_ANT1 0x0100 /* Use antenna 1 */ | ||
538 | #define B43_TX4_PHY_ANTLAST 0x0300 /* Use last used antenna */ | ||
539 | |||
540 | -void b43_generate_txhdr(struct b43_wldev *dev, | ||
541 | +int b43_generate_txhdr(struct b43_wldev *dev, | ||
542 | u8 * txhdr, | ||
543 | const unsigned char *fragment_data, | ||
544 | unsigned int fragment_len, | ||
545 | diff --git a/drivers/net/wireless/b43legacy/dma.c b/drivers/net/wireless/b43legacy/dma.c | ||
546 | index 83161d9..6e08405 100644 | ||
547 | --- a/drivers/net/wireless/b43legacy/dma.c | ||
548 | +++ b/drivers/net/wireless/b43legacy/dma.c | ||
549 | @@ -1164,7 +1164,7 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring, | ||
550 | { | ||
551 | const struct b43legacy_dma_ops *ops = ring->ops; | ||
552 | u8 *header; | ||
553 | - int slot; | ||
554 | + int slot, old_top_slot, old_used_slots; | ||
555 | int err; | ||
556 | struct b43legacy_dmadesc_generic *desc; | ||
557 | struct b43legacy_dmadesc_meta *meta; | ||
558 | @@ -1174,6 +1174,9 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring, | ||
559 | #define SLOTS_PER_PACKET 2 | ||
560 | B43legacy_WARN_ON(skb_shinfo(skb)->nr_frags != 0); | ||
561 | |||
562 | + old_top_slot = ring->current_slot; | ||
563 | + old_used_slots = ring->used_slots; | ||
564 | + | ||
565 | /* Get a slot for the header. */ | ||
566 | slot = request_slot(ring); | ||
567 | desc = ops->idx2desc(ring, slot, &meta_hdr); | ||
568 | @@ -1181,9 +1184,14 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring, | ||
569 | |||
570 | header = &(ring->txhdr_cache[slot * sizeof( | ||
571 | struct b43legacy_txhdr_fw3)]); | ||
572 | - b43legacy_generate_txhdr(ring->dev, header, | ||
573 | + err = b43legacy_generate_txhdr(ring->dev, header, | ||
574 | skb->data, skb->len, ctl, | ||
575 | generate_cookie(ring, slot)); | ||
576 | + if (unlikely(err)) { | ||
577 | + ring->current_slot = old_top_slot; | ||
578 | + ring->used_slots = old_used_slots; | ||
579 | + return err; | ||
580 | + } | ||
581 | |||
582 | meta_hdr->dmaaddr = map_descbuffer(ring, (unsigned char *)header, | ||
583 | sizeof(struct b43legacy_txhdr_fw3), 1); | ||
584 | @@ -1206,6 +1214,8 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring, | ||
585 | if (dma_mapping_error(meta->dmaaddr)) { | ||
586 | bounce_skb = __dev_alloc_skb(skb->len, GFP_ATOMIC | GFP_DMA); | ||
587 | if (!bounce_skb) { | ||
588 | + ring->current_slot = old_top_slot; | ||
589 | + ring->used_slots = old_used_slots; | ||
590 | err = -ENOMEM; | ||
591 | goto out_unmap_hdr; | ||
592 | } | ||
593 | @@ -1216,6 +1226,8 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring, | ||
594 | meta->skb = skb; | ||
595 | meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1); | ||
596 | if (dma_mapping_error(meta->dmaaddr)) { | ||
597 | + ring->current_slot = old_top_slot; | ||
598 | + ring->used_slots = old_used_slots; | ||
599 | err = -EIO; | ||
600 | goto out_free_bounce; | ||
601 | } | ||
602 | @@ -1282,6 +1294,13 @@ int b43legacy_dma_tx(struct b43legacy_wldev *dev, | ||
603 | B43legacy_BUG_ON(ring->stopped); | ||
604 | |||
605 | err = dma_tx_fragment(ring, skb, ctl); | ||
606 | + if (unlikely(err == -ENOKEY)) { | ||
607 | + /* Drop this packet, as we don't have the encryption key | ||
608 | + * anymore and must not transmit it unencrypted. */ | ||
609 | + dev_kfree_skb_any(skb); | ||
610 | + err = 0; | ||
611 | + goto out_unlock; | ||
612 | + } | ||
613 | if (unlikely(err)) { | ||
614 | b43legacyerr(dev->wl, "DMA tx mapping failure\n"); | ||
615 | goto out_unlock; | ||
616 | diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c | ||
617 | index 32d5e17..cdb0497 100644 | ||
618 | --- a/drivers/net/wireless/b43legacy/main.c | ||
619 | +++ b/drivers/net/wireless/b43legacy/main.c | ||
620 | @@ -3215,8 +3215,6 @@ static int b43legacy_wireless_core_init(struct b43legacy_wldev *dev) | ||
621 | b43legacy_shm_write16(dev, B43legacy_SHM_SHARED, 0x0414, 0x01F4); | ||
622 | |||
623 | ssb_bus_powerup(bus, 1); /* Enable dynamic PCTL */ | ||
624 | - memset(wl->bssid, 0, ETH_ALEN); | ||
625 | - memset(wl->mac_addr, 0, ETH_ALEN); | ||
626 | b43legacy_upload_card_macaddress(dev); | ||
627 | b43legacy_security_init(dev); | ||
628 | b43legacy_rng_init(wl); | ||
629 | @@ -3311,6 +3309,13 @@ static int b43legacy_start(struct ieee80211_hw *hw) | ||
630 | int did_init = 0; | ||
631 | int err = 0; | ||
632 | |||
633 | + /* Kill all old instance specific information to make sure | ||
634 | + * the card won't use it in the short timeframe between start | ||
635 | + * and mac80211 reconfiguring it. */ | ||
636 | + memset(wl->bssid, 0, ETH_ALEN); | ||
637 | + memset(wl->mac_addr, 0, ETH_ALEN); | ||
638 | + wl->filter_flags = 0; | ||
639 | + | ||
640 | mutex_lock(&wl->mutex); | ||
641 | |||
642 | if (b43legacy_status(dev) < B43legacy_STAT_INITIALIZED) { | ||
643 | diff --git a/drivers/net/wireless/b43legacy/pio.c b/drivers/net/wireless/b43legacy/pio.c | ||
644 | index de843ac..3034503 100644 | ||
645 | --- a/drivers/net/wireless/b43legacy/pio.c | ||
646 | +++ b/drivers/net/wireless/b43legacy/pio.c | ||
647 | @@ -181,7 +181,7 @@ union txhdr_union { | ||
648 | struct b43legacy_txhdr_fw3 txhdr_fw3; | ||
649 | }; | ||
650 | |||
651 | -static void pio_tx_write_fragment(struct b43legacy_pioqueue *queue, | ||
652 | +static int pio_tx_write_fragment(struct b43legacy_pioqueue *queue, | ||
653 | struct sk_buff *skb, | ||
654 | struct b43legacy_pio_txpacket *packet, | ||
655 | size_t txhdr_size) | ||
656 | @@ -189,14 +189,17 @@ static void pio_tx_write_fragment(struct b43legacy_pioqueue *queue, | ||
657 | union txhdr_union txhdr_data; | ||
658 | u8 *txhdr = NULL; | ||
659 | unsigned int octets; | ||
660 | + int err; | ||
661 | |||
662 | txhdr = (u8 *)(&txhdr_data.txhdr_fw3); | ||
663 | |||
664 | B43legacy_WARN_ON(skb_shinfo(skb)->nr_frags != 0); | ||
665 | - b43legacy_generate_txhdr(queue->dev, | ||
666 | + err = b43legacy_generate_txhdr(queue->dev, | ||
667 | txhdr, skb->data, skb->len, | ||
668 | &packet->txstat.control, | ||
669 | generate_cookie(queue, packet)); | ||
670 | + if (err) | ||
671 | + return err; | ||
672 | |||
673 | tx_start(queue); | ||
674 | octets = skb->len + txhdr_size; | ||
675 | @@ -204,6 +207,8 @@ static void pio_tx_write_fragment(struct b43legacy_pioqueue *queue, | ||
676 | octets--; | ||
677 | tx_data(queue, txhdr, (u8 *)skb->data, octets); | ||
678 | tx_complete(queue, skb); | ||
679 | + | ||
680 | + return 0; | ||
681 | } | ||
682 | |||
683 | static void free_txpacket(struct b43legacy_pio_txpacket *packet, | ||
684 | @@ -226,6 +231,7 @@ static int pio_tx_packet(struct b43legacy_pio_txpacket *packet) | ||
685 | struct b43legacy_pioqueue *queue = packet->queue; | ||
686 | struct sk_buff *skb = packet->skb; | ||
687 | u16 octets; | ||
688 | + int err; | ||
689 | |||
690 | octets = (u16)skb->len + sizeof(struct b43legacy_txhdr_fw3); | ||
691 | if (queue->tx_devq_size < octets) { | ||
692 | @@ -247,8 +253,14 @@ static int pio_tx_packet(struct b43legacy_pio_txpacket *packet) | ||
693 | if (queue->tx_devq_used + octets > queue->tx_devq_size) | ||
694 | return -EBUSY; | ||
695 | /* Now poke the device. */ | ||
696 | - pio_tx_write_fragment(queue, skb, packet, | ||
697 | + err = pio_tx_write_fragment(queue, skb, packet, | ||
698 | sizeof(struct b43legacy_txhdr_fw3)); | ||
699 | + if (unlikely(err == -ENOKEY)) { | ||
700 | + /* Drop this packet, as we don't have the encryption key | ||
701 | + * anymore and must not transmit it unencrypted. */ | ||
702 | + free_txpacket(packet, 1); | ||
703 | + return 0; | ||
704 | + } | ||
705 | |||
706 | /* Account for the packet size. | ||
707 | * (We must not overflow the device TX queue) | ||
708 | @@ -486,6 +498,9 @@ void b43legacy_pio_handle_txstatus(struct b43legacy_wldev *dev, | ||
709 | queue = parse_cookie(dev, status->cookie, &packet); | ||
710 | B43legacy_WARN_ON(!queue); | ||
711 | |||
712 | + if (!packet->skb) | ||
713 | + return; | ||
714 | + | ||
715 | queue->tx_devq_packets--; | ||
716 | queue->tx_devq_used -= (packet->skb->len + | ||
717 | sizeof(struct b43legacy_txhdr_fw3)); | ||
718 | diff --git a/drivers/net/wireless/b43legacy/xmit.c b/drivers/net/wireless/b43legacy/xmit.c | ||
719 | index fa1e656..f10d637 100644 | ||
720 | --- a/drivers/net/wireless/b43legacy/xmit.c | ||
721 | +++ b/drivers/net/wireless/b43legacy/xmit.c | ||
722 | @@ -181,7 +181,7 @@ static u8 b43legacy_calc_fallback_rate(u8 bitrate) | ||
723 | return 0; | ||
724 | } | ||
725 | |||
726 | -static void generate_txhdr_fw3(struct b43legacy_wldev *dev, | ||
727 | +static int generate_txhdr_fw3(struct b43legacy_wldev *dev, | ||
728 | struct b43legacy_txhdr_fw3 *txhdr, | ||
729 | const unsigned char *fragment_data, | ||
730 | unsigned int fragment_len, | ||
731 | @@ -252,6 +252,13 @@ static void generate_txhdr_fw3(struct b43legacy_wldev *dev, | ||
732 | iv_len = min((size_t)txctl->iv_len, | ||
733 | ARRAY_SIZE(txhdr->iv)); | ||
734 | memcpy(txhdr->iv, ((u8 *)wlhdr) + wlhdr_len, iv_len); | ||
735 | + } else { | ||
736 | + /* This key is invalid. This might only happen | ||
737 | + * in a short timeframe after machine resume before | ||
738 | + * we were able to reconfigure keys. | ||
739 | + * Drop this packet completely. Do not transmit it | ||
740 | + * unencrypted to avoid leaking information. */ | ||
741 | + return -ENOKEY; | ||
742 | } | ||
743 | } | ||
744 | b43legacy_generate_plcp_hdr((struct b43legacy_plcp_hdr4 *) | ||
745 | @@ -344,16 +351,18 @@ static void generate_txhdr_fw3(struct b43legacy_wldev *dev, | ||
746 | /* Apply the bitfields */ | ||
747 | txhdr->mac_ctl = cpu_to_le32(mac_ctl); | ||
748 | txhdr->phy_ctl = cpu_to_le16(phy_ctl); | ||
749 | + | ||
750 | + return 0; | ||
751 | } | ||
752 | |||
753 | -void b43legacy_generate_txhdr(struct b43legacy_wldev *dev, | ||
754 | +int b43legacy_generate_txhdr(struct b43legacy_wldev *dev, | ||
755 | u8 *txhdr, | ||
756 | const unsigned char *fragment_data, | ||
757 | unsigned int fragment_len, | ||
758 | const struct ieee80211_tx_control *txctl, | ||
759 | u16 cookie) | ||
760 | { | ||
761 | - generate_txhdr_fw3(dev, (struct b43legacy_txhdr_fw3 *)txhdr, | ||
762 | + return generate_txhdr_fw3(dev, (struct b43legacy_txhdr_fw3 *)txhdr, | ||
763 | fragment_data, fragment_len, | ||
764 | txctl, cookie); | ||
765 | } | ||
766 | diff --git a/drivers/net/wireless/b43legacy/xmit.h b/drivers/net/wireless/b43legacy/xmit.h | ||
767 | index 8a155d0..bab4792 100644 | ||
768 | --- a/drivers/net/wireless/b43legacy/xmit.h | ||
769 | +++ b/drivers/net/wireless/b43legacy/xmit.h | ||
770 | @@ -76,7 +76,7 @@ struct b43legacy_txhdr_fw3 { | ||
771 | |||
772 | |||
773 | |||
774 | -void b43legacy_generate_txhdr(struct b43legacy_wldev *dev, | ||
775 | +int b43legacy_generate_txhdr(struct b43legacy_wldev *dev, | ||
776 | u8 *txhdr, | ||
777 | const unsigned char *fragment_data, | ||
778 | unsigned int fragment_len, | ||
779 | diff --git a/drivers/pci/hotplug/fakephp.c b/drivers/pci/hotplug/fakephp.c | ||
780 | index d7a293e..94b6401 100644 | ||
781 | --- a/drivers/pci/hotplug/fakephp.c | ||
782 | +++ b/drivers/pci/hotplug/fakephp.c | ||
783 | @@ -39,6 +39,7 @@ | ||
784 | #include <linux/init.h> | ||
785 | #include <linux/string.h> | ||
786 | #include <linux/slab.h> | ||
787 | +#include <linux/workqueue.h> | ||
788 | #include "../pci.h" | ||
789 | |||
790 | #if !defined(MODULE) | ||
791 | @@ -63,10 +64,16 @@ struct dummy_slot { | ||
792 | struct list_head node; | ||
793 | struct hotplug_slot *slot; | ||
794 | struct pci_dev *dev; | ||
795 | + struct work_struct remove_work; | ||
796 | + unsigned long removed; | ||
797 | }; | ||
798 | |||
799 | static int debug; | ||
800 | static LIST_HEAD(slot_list); | ||
801 | +static struct workqueue_struct *dummyphp_wq; | ||
802 | + | ||
803 | +static void pci_rescan_worker(struct work_struct *work); | ||
804 | +static DECLARE_WORK(pci_rescan_work, pci_rescan_worker); | ||
805 | |||
806 | static int enable_slot (struct hotplug_slot *slot); | ||
807 | static int disable_slot (struct hotplug_slot *slot); | ||
808 | @@ -109,7 +116,7 @@ static int add_slot(struct pci_dev *dev) | ||
809 | slot->name = &dev->dev.bus_id[0]; | ||
810 | dbg("slot->name = %s\n", slot->name); | ||
811 | |||
812 | - dslot = kmalloc(sizeof(struct dummy_slot), GFP_KERNEL); | ||
813 | + dslot = kzalloc(sizeof(struct dummy_slot), GFP_KERNEL); | ||
814 | if (!dslot) | ||
815 | goto error_info; | ||
816 | |||
817 | @@ -164,6 +171,14 @@ static void remove_slot(struct dummy_slot *dslot) | ||
818 | err("Problem unregistering a slot %s\n", dslot->slot->name); | ||
819 | } | ||
820 | |||
821 | +/* called from the single-threaded workqueue handler to remove a slot */ | ||
822 | +static void remove_slot_worker(struct work_struct *work) | ||
823 | +{ | ||
824 | + struct dummy_slot *dslot = | ||
825 | + container_of(work, struct dummy_slot, remove_work); | ||
826 | + remove_slot(dslot); | ||
827 | +} | ||
828 | + | ||
829 | /** | ||
830 | * pci_rescan_slot - Rescan slot | ||
831 | * @temp: Device template. Should be set: bus and devfn. | ||
832 | @@ -267,11 +282,17 @@ static inline void pci_rescan(void) { | ||
833 | pci_rescan_buses(&pci_root_buses); | ||
834 | } | ||
835 | |||
836 | +/* called from the single-threaded workqueue handler to rescan all pci buses */ | ||
837 | +static void pci_rescan_worker(struct work_struct *work) | ||
838 | +{ | ||
839 | + pci_rescan(); | ||
840 | +} | ||
841 | |||
842 | static int enable_slot(struct hotplug_slot *hotplug_slot) | ||
843 | { | ||
844 | /* mis-use enable_slot for rescanning of the pci bus */ | ||
845 | - pci_rescan(); | ||
846 | + cancel_work_sync(&pci_rescan_work); | ||
847 | + queue_work(dummyphp_wq, &pci_rescan_work); | ||
848 | return -ENODEV; | ||
849 | } | ||
850 | |||
851 | @@ -306,6 +327,10 @@ static int disable_slot(struct hotplug_slot *slot) | ||
852 | err("Can't remove PCI devices with other PCI devices behind it yet.\n"); | ||
853 | return -ENODEV; | ||
854 | } | ||
855 | + if (test_and_set_bit(0, &dslot->removed)) { | ||
856 | + dbg("Slot already scheduled for removal\n"); | ||
857 | + return -ENODEV; | ||
858 | + } | ||
859 | /* search for subfunctions and disable them first */ | ||
860 | if (!(dslot->dev->devfn & 7)) { | ||
861 | for (func = 1; func < 8; func++) { | ||
862 | @@ -328,8 +353,9 @@ static int disable_slot(struct hotplug_slot *slot) | ||
863 | /* remove the device from the pci core */ | ||
864 | pci_remove_bus_device(dslot->dev); | ||
865 | |||
866 | - /* blow away this sysfs entry and other parts. */ | ||
867 | - remove_slot(dslot); | ||
868 | + /* queue work item to blow away this sysfs entry and other parts. */ | ||
869 | + INIT_WORK(&dslot->remove_work, remove_slot_worker); | ||
870 | + queue_work(dummyphp_wq, &dslot->remove_work); | ||
871 | |||
872 | return 0; | ||
873 | } | ||
874 | @@ -340,6 +366,7 @@ static void cleanup_slots (void) | ||
875 | struct list_head *next; | ||
876 | struct dummy_slot *dslot; | ||
877 | |||
878 | + destroy_workqueue(dummyphp_wq); | ||
879 | list_for_each_safe (tmp, next, &slot_list) { | ||
880 | dslot = list_entry (tmp, struct dummy_slot, node); | ||
881 | remove_slot(dslot); | ||
882 | @@ -351,6 +378,10 @@ static int __init dummyphp_init(void) | ||
883 | { | ||
884 | info(DRIVER_DESC "\n"); | ||
885 | |||
886 | + dummyphp_wq = create_singlethread_workqueue(MY_NAME); | ||
887 | + if (!dummyphp_wq) | ||
888 | + return -ENOMEM; | ||
889 | + | ||
890 | return pci_scan_buses(); | ||
891 | } | ||
892 | |||
893 | diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c | ||
894 | index c51f8e9..b469718 100644 | ||
895 | --- a/drivers/usb/core/driver.c | ||
896 | +++ b/drivers/usb/core/driver.c | ||
897 | @@ -534,8 +534,8 @@ const struct usb_device_id *usb_match_id(struct usb_interface *interface, | ||
898 | id->driver_info is the way to create an entry that | ||
899 | indicates that the driver want to examine every | ||
900 | device and interface. */ | ||
901 | - for (; id->idVendor || id->bDeviceClass || id->bInterfaceClass || | ||
902 | - id->driver_info; id++) { | ||
903 | + for (; id->idVendor || id->idProduct || id->bDeviceClass || | ||
904 | + id->bInterfaceClass || id->driver_info; id++) { | ||
905 | if (usb_match_one_id(interface, id)) | ||
906 | return id; | ||
907 | } | ||
908 | diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c | ||
909 | index b04d232..1b17f63 100644 | ||
910 | --- a/drivers/usb/core/hub.c | ||
911 | +++ b/drivers/usb/core/hub.c | ||
912 | @@ -2946,7 +2946,7 @@ static int config_descriptors_changed(struct usb_device *udev) | ||
913 | if (len < le16_to_cpu(udev->config[index].desc.wTotalLength)) | ||
914 | len = le16_to_cpu(udev->config[index].desc.wTotalLength); | ||
915 | } | ||
916 | - buf = kmalloc (len, GFP_KERNEL); | ||
917 | + buf = kmalloc(len, GFP_NOIO); | ||
918 | if (buf == NULL) { | ||
919 | dev_err(&udev->dev, "no mem to re-read configs after reset\n"); | ||
920 | /* assume the worst */ | ||
921 | diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c | ||
922 | index 038e7d7..d59eb92 100644 | ||
923 | --- a/drivers/usb/gadget/fsl_usb2_udc.c | ||
924 | +++ b/drivers/usb/gadget/fsl_usb2_udc.c | ||
925 | @@ -776,7 +776,7 @@ fsl_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags) | ||
926 | VDBG("%s, bad params\n", __FUNCTION__); | ||
927 | return -EINVAL; | ||
928 | } | ||
929 | - if (!_ep || (!ep->desc && ep_index(ep))) { | ||
930 | + if (unlikely(!_ep || !ep->desc)) { | ||
931 | VDBG("%s, bad ep\n", __FUNCTION__); | ||
932 | return -EINVAL; | ||
933 | } | ||
934 | diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c | ||
935 | index ea31621..81755d0 100644 | ||
936 | --- a/drivers/usb/misc/usbtest.c | ||
937 | +++ b/drivers/usb/misc/usbtest.c | ||
938 | @@ -1151,6 +1151,7 @@ static int verify_halted (int ep, struct urb *urb) | ||
939 | dbg ("ep %02x couldn't get halt status, %d", ep, retval); | ||
940 | return retval; | ||
941 | } | ||
942 | + le16_to_cpus(&status); | ||
943 | if (status != 1) { | ||
944 | dbg ("ep %02x bogus status: %04x != 1", ep, status); | ||
945 | return -EINVAL; | ||
946 | diff --git a/drivers/usb/serial/cp2101.c b/drivers/usb/serial/cp2101.c | ||
947 | index 2283358..cd5f71b 100644 | ||
948 | --- a/drivers/usb/serial/cp2101.c | ||
949 | +++ b/drivers/usb/serial/cp2101.c | ||
950 | @@ -59,6 +59,7 @@ static struct usb_device_id id_table [] = { | ||
951 | { USB_DEVICE(0x10A6, 0xAA26) }, /* Knock-off DCU-11 cable */ | ||
952 | { USB_DEVICE(0x10AB, 0x10C5) }, /* Siemens MC60 Cable */ | ||
953 | { USB_DEVICE(0x10B5, 0xAC70) }, /* Nokia CA-42 USB */ | ||
954 | + { USB_DEVICE(0x10C4, 0x800A) }, /* SPORTident BSM7-D-USB main station */ | ||
955 | { USB_DEVICE(0x10C4, 0x803B) }, /* Pololu USB-serial converter */ | ||
956 | { USB_DEVICE(0x10C4, 0x8053) }, /* Enfora EDG1228 */ | ||
957 | { USB_DEVICE(0x10C4, 0x8066) }, /* Argussoft In-System Programmer */ | ||
958 | @@ -76,8 +77,13 @@ static struct usb_device_id id_table [] = { | ||
959 | { USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */ | ||
960 | { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ | ||
961 | { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ | ||
962 | + { USB_DEVICE(0x10C4, 0xF001) }, /* Elan Digital Systems USBscope50 */ | ||
963 | + { USB_DEVICE(0x10C4, 0xF002) }, /* Elan Digital Systems USBwave12 */ | ||
964 | + { USB_DEVICE(0x10C4, 0xF003) }, /* Elan Digital Systems USBpulse100 */ | ||
965 | + { USB_DEVICE(0x10C4, 0xF004) }, /* Elan Digital Systems USBcount50 */ | ||
966 | { USB_DEVICE(0x10C5, 0xEA61) }, /* Silicon Labs MobiData GPRS USB Modem */ | ||
967 | { USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */ | ||
968 | + { USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */ | ||
969 | { USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */ | ||
970 | { } /* Terminating Entry */ | ||
971 | }; | ||
972 | diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c | ||
973 | index c40e77d..1382af9 100644 | ||
974 | --- a/drivers/usb/serial/ftdi_sio.c | ||
975 | +++ b/drivers/usb/serial/ftdi_sio.c | ||
976 | @@ -471,30 +471,28 @@ static struct usb_device_id id_table_combined [] = { | ||
977 | { USB_DEVICE(FTDI_VID, FTDI_IBS_PEDO_PID) }, | ||
978 | { USB_DEVICE(FTDI_VID, FTDI_IBS_PROD_PID) }, | ||
979 | /* | ||
980 | - * These will probably use user-space drivers. Uncomment them if | ||
981 | - * you need them or use the user-specified vendor/product module | ||
982 | - * parameters (see ftdi_sio.h for the numbers). Make a fuss if | ||
983 | - * you think the driver should recognize any of them by default. | ||
984 | + * Due to many user requests for multiple ELV devices we enable | ||
985 | + * them by default. | ||
986 | */ | ||
987 | - /* { USB_DEVICE(FTDI_VID, FTDI_ELV_CLI7000_PID) }, */ | ||
988 | - /* { USB_DEVICE(FTDI_VID, FTDI_ELV_PPS7330_PID) }, */ | ||
989 | - /* { USB_DEVICE(FTDI_VID, FTDI_ELV_TFM100_PID) }, */ | ||
990 | - /* { USB_DEVICE(FTDI_VID, FTDI_ELV_UDF77_PID) }, */ | ||
991 | - /* { USB_DEVICE(FTDI_VID, FTDI_ELV_UIO88_PID) }, */ | ||
992 | - /* { USB_DEVICE(FTDI_VID, FTDI_ELV_UAD8_PID) }, */ | ||
993 | - /* { USB_DEVICE(FTDI_VID, FTDI_ELV_UDA7_PID) }, */ | ||
994 | - /* { USB_DEVICE(FTDI_VID, FTDI_ELV_USI2_PID) }, */ | ||
995 | - /* { USB_DEVICE(FTDI_VID, FTDI_ELV_T1100_PID) }, */ | ||
996 | - /* { USB_DEVICE(FTDI_VID, FTDI_ELV_PCD200_PID) }, */ | ||
997 | - /* { USB_DEVICE(FTDI_VID, FTDI_ELV_ULA200_PID) }, */ | ||
998 | - /* { USB_DEVICE(FTDI_VID, FTDI_ELV_CSI8_PID) }, */ | ||
999 | - /* { USB_DEVICE(FTDI_VID, FTDI_ELV_EM1000DL_PID) }, */ | ||
1000 | - /* { USB_DEVICE(FTDI_VID, FTDI_ELV_PCK100_PID) }, */ | ||
1001 | - /* { USB_DEVICE(FTDI_VID, FTDI_ELV_RFP500_PID) }, */ | ||
1002 | - /* { USB_DEVICE(FTDI_VID, FTDI_ELV_FS20SIG_PID) }, */ | ||
1003 | - /* { USB_DEVICE(FTDI_VID, FTDI_ELV_WS300PC_PID) }, */ | ||
1004 | - /* { USB_DEVICE(FTDI_VID, FTDI_ELV_FHZ1300PC_PID) }, */ | ||
1005 | - /* { USB_DEVICE(FTDI_VID, FTDI_ELV_WS500_PID) }, */ | ||
1006 | + { USB_DEVICE(FTDI_VID, FTDI_ELV_CLI7000_PID) }, | ||
1007 | + { USB_DEVICE(FTDI_VID, FTDI_ELV_PPS7330_PID) }, | ||
1008 | + { USB_DEVICE(FTDI_VID, FTDI_ELV_TFM100_PID) }, | ||
1009 | + { USB_DEVICE(FTDI_VID, FTDI_ELV_UDF77_PID) }, | ||
1010 | + { USB_DEVICE(FTDI_VID, FTDI_ELV_UIO88_PID) }, | ||
1011 | + { USB_DEVICE(FTDI_VID, FTDI_ELV_UAD8_PID) }, | ||
1012 | + { USB_DEVICE(FTDI_VID, FTDI_ELV_UDA7_PID) }, | ||
1013 | + { USB_DEVICE(FTDI_VID, FTDI_ELV_USI2_PID) }, | ||
1014 | + { USB_DEVICE(FTDI_VID, FTDI_ELV_T1100_PID) }, | ||
1015 | + { USB_DEVICE(FTDI_VID, FTDI_ELV_PCD200_PID) }, | ||
1016 | + { USB_DEVICE(FTDI_VID, FTDI_ELV_ULA200_PID) }, | ||
1017 | + { USB_DEVICE(FTDI_VID, FTDI_ELV_CSI8_PID) }, | ||
1018 | + { USB_DEVICE(FTDI_VID, FTDI_ELV_EM1000DL_PID) }, | ||
1019 | + { USB_DEVICE(FTDI_VID, FTDI_ELV_PCK100_PID) }, | ||
1020 | + { USB_DEVICE(FTDI_VID, FTDI_ELV_RFP500_PID) }, | ||
1021 | + { USB_DEVICE(FTDI_VID, FTDI_ELV_FS20SIG_PID) }, | ||
1022 | + { USB_DEVICE(FTDI_VID, FTDI_ELV_WS300PC_PID) }, | ||
1023 | + { USB_DEVICE(FTDI_VID, FTDI_ELV_FHZ1300PC_PID) }, | ||
1024 | + { USB_DEVICE(FTDI_VID, FTDI_ELV_WS500_PID) }, | ||
1025 | { USB_DEVICE(FTDI_VID, LINX_SDMUSBQSS_PID) }, | ||
1026 | { USB_DEVICE(FTDI_VID, LINX_MASTERDEVEL2_PID) }, | ||
1027 | { USB_DEVICE(FTDI_VID, LINX_FUTURE_0_PID) }, | ||
1028 | @@ -545,6 +543,7 @@ static struct usb_device_id id_table_combined [] = { | ||
1029 | { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16C_PID) }, | ||
1030 | { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16HR_PID) }, | ||
1031 | { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16HRC_PID) }, | ||
1032 | + { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16IC_PID) }, | ||
1033 | { USB_DEVICE(KOBIL_VID, KOBIL_CONV_B1_PID) }, | ||
1034 | { USB_DEVICE(KOBIL_VID, KOBIL_CONV_KAAN_PID) }, | ||
1035 | { USB_DEVICE(POSIFLEX_VID, POSIFLEX_PP7000_PID) }, | ||
1036 | @@ -569,6 +568,7 @@ static struct usb_device_id id_table_combined [] = { | ||
1037 | { USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) }, | ||
1038 | { USB_DEVICE(FTDI_VID, FTDI_MAXSTREAM_PID) }, | ||
1039 | { USB_DEVICE(TML_VID, TML_USB_SERIAL_PID) }, | ||
1040 | + { USB_DEVICE(FTDI_VID, FTDI_ELSTER_UNICOM_PID) }, | ||
1041 | { USB_DEVICE(OLIMEX_VID, OLIMEX_ARM_USB_OCD_PID), | ||
1042 | .driver_info = (kernel_ulong_t)&ftdi_olimex_quirk }, | ||
1043 | { }, /* Optional parameter entry */ | ||
1044 | diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h | ||
1045 | index b51cbb0..f6053da 100644 | ||
1046 | --- a/drivers/usb/serial/ftdi_sio.h | ||
1047 | +++ b/drivers/usb/serial/ftdi_sio.h | ||
1048 | @@ -245,6 +245,7 @@ | ||
1049 | #define FTDI_ELV_WS300PC_PID 0xE0F6 /* PC-Wetterstation (WS 300 PC) */ | ||
1050 | #define FTDI_ELV_FHZ1300PC_PID 0xE0E8 /* FHZ 1300 PC */ | ||
1051 | #define FTDI_ELV_WS500_PID 0xE0E9 /* PC-Wetterstation (WS 500) */ | ||
1052 | +#define FTDI_ELV_EM1010PC_PID 0xE0EF /* Engery monitor EM 1010 PC */ | ||
1053 | |||
1054 | /* | ||
1055 | * Definitions for ID TECH (www.idt-net.com) devices | ||
1056 | @@ -278,6 +279,7 @@ | ||
1057 | #define FTDI_ATIK_ATK16C_PID 0xDF32 /* ATIK ATK-16C Colour Camera */ | ||
1058 | #define FTDI_ATIK_ATK16HR_PID 0xDF31 /* ATIK ATK-16HR Grayscale Camera */ | ||
1059 | #define FTDI_ATIK_ATK16HRC_PID 0xDF33 /* ATIK ATK-16HRC Colour Camera */ | ||
1060 | +#define FTDI_ATIK_ATK16IC_PID 0xDF35 /* ATIK ATK-16IC Grayscale Camera */ | ||
1061 | |||
1062 | /* | ||
1063 | * Protego product ids | ||
1064 | @@ -534,6 +536,8 @@ | ||
1065 | #define OLIMEX_VID 0x15BA | ||
1066 | #define OLIMEX_ARM_USB_OCD_PID 0x0003 | ||
1067 | |||
1068 | +/* www.elsterelectricity.com Elster Unicom III Optical Probe */ | ||
1069 | +#define FTDI_ELSTER_UNICOM_PID 0xE700 /* Product Id */ | ||
1070 | |||
1071 | /* | ||
1072 | * The Mobility Lab (TML) | ||
1073 | diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c | ||
1074 | index 7c069a0..ea7bba6 100644 | ||
1075 | --- a/drivers/usb/serial/keyspan.c | ||
1076 | +++ b/drivers/usb/serial/keyspan.c | ||
1077 | @@ -838,7 +838,7 @@ static void usa49_indat_callback(struct urb *urb) | ||
1078 | |||
1079 | port = (struct usb_serial_port *) urb->context; | ||
1080 | tty = port->tty; | ||
1081 | - if (urb->actual_length) { | ||
1082 | + if (tty && urb->actual_length) { | ||
1083 | /* 0x80 bit is error flag */ | ||
1084 | if ((data[0] & 0x80) == 0) { | ||
1085 | /* no error on any byte */ | ||
1086 | diff --git a/drivers/usb/serial/kobil_sct.c b/drivers/usb/serial/kobil_sct.c | ||
1087 | index aee4502..17b3bae 100644 | ||
1088 | --- a/drivers/usb/serial/kobil_sct.c | ||
1089 | +++ b/drivers/usb/serial/kobil_sct.c | ||
1090 | @@ -114,6 +114,7 @@ static struct usb_serial_driver kobil_device = { | ||
1091 | .usb_driver = &kobil_driver, | ||
1092 | .id_table = id_table, | ||
1093 | .num_interrupt_in = NUM_DONT_CARE, | ||
1094 | + .num_interrupt_out = NUM_DONT_CARE, | ||
1095 | .num_bulk_in = 0, | ||
1096 | .num_bulk_out = 0, | ||
1097 | .num_ports = 1, | ||
1098 | diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c | ||
1099 | index d1185f5..bbbe1b9 100644 | ||
1100 | --- a/drivers/usb/serial/option.c | ||
1101 | +++ b/drivers/usb/serial/option.c | ||
1102 | @@ -180,6 +180,7 @@ static struct usb_device_id option_ids[] = { | ||
1103 | { USB_DEVICE(DELL_VENDOR_ID, 0x8117) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO ExpressCard == Novatel Merlin XV620 CDMA/EV-DO */ | ||
1104 | { USB_DEVICE(DELL_VENDOR_ID, 0x8118) }, /* Dell Wireless 5510 Mobile Broadband HSDPA ExpressCard == Novatel Merlin XU870 HSDPA/3G */ | ||
1105 | { USB_DEVICE(DELL_VENDOR_ID, 0x8128) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite E720 CDMA/EV-DO */ | ||
1106 | + { USB_DEVICE(DELL_VENDOR_ID, 0x8136) }, /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */ | ||
1107 | { USB_DEVICE(DELL_VENDOR_ID, 0x8137) }, /* Dell Wireless HSDPA 5520 */ | ||
1108 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, | ||
1109 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) }, | ||
1110 | diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c | ||
1111 | index 0da1df9..b7da8b5 100644 | ||
1112 | --- a/drivers/usb/serial/pl2303.c | ||
1113 | +++ b/drivers/usb/serial/pl2303.c | ||
1114 | @@ -65,6 +65,7 @@ static struct usb_device_id id_table [] = { | ||
1115 | { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID_2080) }, | ||
1116 | { USB_DEVICE(MA620_VENDOR_ID, MA620_PRODUCT_ID) }, | ||
1117 | { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID) }, | ||
1118 | + { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) }, | ||
1119 | { USB_DEVICE(TRIPP_VENDOR_ID, TRIPP_PRODUCT_ID) }, | ||
1120 | { USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) }, | ||
1121 | { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) }, | ||
1122 | @@ -84,9 +85,10 @@ static struct usb_device_id id_table [] = { | ||
1123 | { USB_DEVICE(DATAPILOT_U2_VENDOR_ID, DATAPILOT_U2_PRODUCT_ID) }, | ||
1124 | { USB_DEVICE(BELKIN_VENDOR_ID, BELKIN_PRODUCT_ID) }, | ||
1125 | { USB_DEVICE(ALCOR_VENDOR_ID, ALCOR_PRODUCT_ID) }, | ||
1126 | - { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ID) }, | ||
1127 | { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) }, | ||
1128 | { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) }, | ||
1129 | + { USB_DEVICE(HL340_VENDOR_ID, HL340_PRODUCT_ID) }, | ||
1130 | + { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) }, | ||
1131 | { } /* Terminating entry */ | ||
1132 | }; | ||
1133 | |||
1134 | diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h | ||
1135 | index d31f5d2..237a41f 100644 | ||
1136 | --- a/drivers/usb/serial/pl2303.h | ||
1137 | +++ b/drivers/usb/serial/pl2303.h | ||
1138 | @@ -35,6 +35,7 @@ | ||
1139 | |||
1140 | #define RATOC_VENDOR_ID 0x0584 | ||
1141 | #define RATOC_PRODUCT_ID 0xb000 | ||
1142 | +#define RATOC_PRODUCT_ID_USB60F 0xb020 | ||
1143 | |||
1144 | #define TRIPP_VENDOR_ID 0x2478 | ||
1145 | #define TRIPP_PRODUCT_ID 0x2008 | ||
1146 | @@ -96,10 +97,6 @@ | ||
1147 | #define ALCOR_VENDOR_ID 0x058F | ||
1148 | #define ALCOR_PRODUCT_ID 0x9720 | ||
1149 | |||
1150 | -/* Huawei E620 UMTS/HSDPA card (ID: 12d1:1001) */ | ||
1151 | -#define HUAWEI_VENDOR_ID 0x12d1 | ||
1152 | -#define HUAWEI_PRODUCT_ID 0x1001 | ||
1153 | - | ||
1154 | /* Willcom WS002IN Data Driver (by NetIndex Inc.) */ | ||
1155 | #define WS002IN_VENDOR_ID 0x11f6 | ||
1156 | #define WS002IN_PRODUCT_ID 0x2001 | ||
1157 | @@ -107,3 +104,11 @@ | ||
1158 | /* Corega CG-USBRS232R Serial Adapter */ | ||
1159 | #define COREGA_VENDOR_ID 0x07aa | ||
1160 | #define COREGA_PRODUCT_ID 0x002a | ||
1161 | + | ||
1162 | +/* HL HL-340 (ID: 4348:5523) */ | ||
1163 | +#define HL340_VENDOR_ID 0x4348 | ||
1164 | +#define HL340_PRODUCT_ID 0x5523 | ||
1165 | + | ||
1166 | +/* Y.C. Cable U.S.A., Inc - USB to RS-232 */ | ||
1167 | +#define YCCABLE_VENDOR_ID 0x05ad | ||
1168 | +#define YCCABLE_PRODUCT_ID 0x0fba | ||
1169 | diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c | ||
1170 | index c295d04..b4d7ac9 100644 | ||
1171 | --- a/drivers/usb/serial/sierra.c | ||
1172 | +++ b/drivers/usb/serial/sierra.c | ||
1173 | @@ -104,6 +104,7 @@ static struct usb_device_id id_table [] = { | ||
1174 | { USB_DEVICE(0x1199, 0x0019) }, /* Sierra Wireless AirCard 595 */ | ||
1175 | { USB_DEVICE(0x1199, 0x0021) }, /* Sierra Wireless AirCard 597E */ | ||
1176 | { USB_DEVICE(0x1199, 0x0120) }, /* Sierra Wireless USB Dongle 595U */ | ||
1177 | + { USB_DEVICE(0x1199, 0x0023) }, /* Sierra Wireless AirCard */ | ||
1178 | |||
1179 | { USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */ | ||
1180 | { USB_DEVICE(0x1199, 0x6804) }, /* Sierra Wireless MC8755 */ | ||
1181 | @@ -117,9 +118,15 @@ static struct usb_device_id id_table [] = { | ||
1182 | { USB_DEVICE(0x1199, 0x6851) }, /* Sierra Wireless AirCard 881 */ | ||
1183 | { USB_DEVICE(0x1199, 0x6852) }, /* Sierra Wireless AirCard 880 E */ | ||
1184 | { USB_DEVICE(0x1199, 0x6853) }, /* Sierra Wireless AirCard 881 E */ | ||
1185 | + { USB_DEVICE(0x1199, 0x6855) }, /* Sierra Wireless AirCard 880 U */ | ||
1186 | + { USB_DEVICE(0x1199, 0x6856) }, /* Sierra Wireless AirCard 881 U */ | ||
1187 | + | ||
1188 | + { USB_DEVICE(0x1199, 0x6468) }, /* Sierra Wireless MP3G - EVDO */ | ||
1189 | + { USB_DEVICE(0x1199, 0x6469) }, /* Sierra Wireless MP3G - UMTS/HSPA */ | ||
1190 | |||
1191 | { USB_DEVICE(0x1199, 0x0112), .driver_info = DEVICE_1_PORT }, /* Sierra Wireless AirCard 580 */ | ||
1192 | { USB_DEVICE(0x0F3D, 0x0112), .driver_info = DEVICE_1_PORT }, /* Airprime/Sierra PC 5220 */ | ||
1193 | + { USB_DEVICE(0x05C6, 0x6613), .driver_info = DEVICE_1_PORT }, /* Onda H600/ZTE MF330 */ | ||
1194 | |||
1195 | { USB_DEVICE(0x1199, 0x0FFF), .driver_info = DEVICE_INSTALLER}, | ||
1196 | { } | ||
1197 | @@ -129,6 +136,7 @@ MODULE_DEVICE_TABLE(usb, id_table); | ||
1198 | static struct usb_device_id id_table_1port [] = { | ||
1199 | { USB_DEVICE(0x1199, 0x0112) }, /* Sierra Wireless AirCard 580 */ | ||
1200 | { USB_DEVICE(0x0F3D, 0x0112) }, /* AirPrime/Sierra PC 5220 */ | ||
1201 | + { USB_DEVICE(0x05C6, 0x6613) }, /* Onda H600/ZTE MF330 */ | ||
1202 | { } | ||
1203 | }; | ||
1204 | |||
1205 | @@ -142,6 +150,7 @@ static struct usb_device_id id_table_3port [] = { | ||
1206 | { USB_DEVICE(0x1199, 0x0019) }, /* Sierra Wireless AirCard 595 */ | ||
1207 | { USB_DEVICE(0x1199, 0x0021) }, /* Sierra Wireless AirCard 597E */ | ||
1208 | { USB_DEVICE(0x1199, 0x0120) }, /* Sierra Wireless USB Dongle 595U*/ | ||
1209 | + { USB_DEVICE(0x1199, 0x0023) }, /* Sierra Wireless AirCard */ | ||
1210 | |||
1211 | { USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */ | ||
1212 | { USB_DEVICE(0x1199, 0x6804) }, /* Sierra Wireless MC8755 */ | ||
1213 | @@ -155,6 +164,10 @@ static struct usb_device_id id_table_3port [] = { | ||
1214 | { USB_DEVICE(0x1199, 0x6851) }, /* Sierra Wireless AirCard 881 */ | ||
1215 | { USB_DEVICE(0x1199, 0x6852) }, /* Sierra Wireless AirCard 880E */ | ||
1216 | { USB_DEVICE(0x1199, 0x6853) }, /* Sierra Wireless AirCard 881E */ | ||
1217 | + { USB_DEVICE(0x1199, 0x6855) }, /* Sierra Wireless AirCard 880 U */ | ||
1218 | + { USB_DEVICE(0x1199, 0x6856) }, /* Sierra Wireless AirCard 881U */ | ||
1219 | + { USB_DEVICE(0x1199, 0x6468) }, /* Sierra Wireless MP3G - EVDO */ | ||
1220 | + { USB_DEVICE(0x1199, 0x6469) }, /* Sierra Wireless MP3G - UMTS/HSPA */ | ||
1221 | { } | ||
1222 | }; | ||
1223 | |||
1224 | diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h | ||
1225 | index 6d6108b..fe12737 100644 | ||
1226 | --- a/drivers/usb/storage/unusual_devs.h | ||
1227 | +++ b/drivers/usb/storage/unusual_devs.h | ||
1228 | @@ -86,6 +86,14 @@ UNUSUAL_DEV( 0x03f0, 0x0307, 0x0001, 0x0001, | ||
1229 | US_SC_8070, US_PR_USBAT, init_usbat_cd, 0), | ||
1230 | #endif | ||
1231 | |||
1232 | +/* Reported by Grant Grundler <grundler@parisc-linux.org> | ||
1233 | + * HP r707 camera in "Disk" mode with 2.00.23 or 2.00.24 firmware. | ||
1234 | + */ | ||
1235 | +UNUSUAL_DEV( 0x03f0, 0x4002, 0x0001, 0x0001, | ||
1236 | + "HP", | ||
1237 | + "PhotoSmart R707", | ||
1238 | + US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_FIX_CAPACITY), | ||
1239 | + | ||
1240 | /* Reported by Sebastian Kapfer <sebastian_kapfer@gmx.net> | ||
1241 | * and Olaf Hering <olh@suse.de> (different bcd's, same vendor/product) | ||
1242 | * for USB floppies that need the SINGLE_LUN enforcement. | ||
1243 | diff --git a/fs/eventpoll.c b/fs/eventpoll.c | ||
1244 | index 34f68f3..0a98389 100644 | ||
1245 | --- a/fs/eventpoll.c | ||
1246 | +++ b/fs/eventpoll.c | ||
1247 | @@ -353,7 +353,7 @@ static void ep_poll_safewake(struct poll_safewake *psw, wait_queue_head_t *wq) | ||
1248 | spin_unlock_irqrestore(&psw->lock, flags); | ||
1249 | |||
1250 | /* Do really wake up now */ | ||
1251 | - wake_up(wq); | ||
1252 | + wake_up_nested(wq, 1 + wake_nests); | ||
1253 | |||
1254 | /* Remove the current task from the list */ | ||
1255 | spin_lock_irqsave(&psw->lock, flags); | ||
1256 | diff --git a/fs/ncpfs/mmap.c b/fs/ncpfs/mmap.c | ||
1257 | index a94473d..5d8dcb9 100644 | ||
1258 | --- a/fs/ncpfs/mmap.c | ||
1259 | +++ b/fs/ncpfs/mmap.c | ||
1260 | @@ -50,10 +50,6 @@ static int ncp_file_mmap_fault(struct vm_area_struct *area, | ||
1261 | pos = vmf->pgoff << PAGE_SHIFT; | ||
1262 | |||
1263 | count = PAGE_SIZE; | ||
1264 | - if ((unsigned long)vmf->virtual_address + PAGE_SIZE > area->vm_end) { | ||
1265 | - WARN_ON(1); /* shouldn't happen? */ | ||
1266 | - count = area->vm_end - (unsigned long)vmf->virtual_address; | ||
1267 | - } | ||
1268 | /* what we can read in one go */ | ||
1269 | bufsize = NCP_SERVER(inode)->buffer_size; | ||
1270 | |||
1271 | diff --git a/fs/splice.c b/fs/splice.c | ||
1272 | index 6bdcb61..36fdc61 100644 | ||
1273 | --- a/fs/splice.c | ||
1274 | +++ b/fs/splice.c | ||
1275 | @@ -1184,6 +1184,9 @@ static int copy_from_user_mmap_sem(void *dst, const void __user *src, size_t n) | ||
1276 | { | ||
1277 | int partial; | ||
1278 | |||
1279 | + if (!access_ok(VERIFY_READ, src, n)) | ||
1280 | + return -EFAULT; | ||
1281 | + | ||
1282 | pagefault_disable(); | ||
1283 | partial = __copy_from_user_inatomic(dst, src, n); | ||
1284 | pagefault_enable(); | ||
1285 | @@ -1392,6 +1395,11 @@ static long vmsplice_to_user(struct file *file, const struct iovec __user *iov, | ||
1286 | break; | ||
1287 | } | ||
1288 | |||
1289 | + if (unlikely(!access_ok(VERIFY_WRITE, base, len))) { | ||
1290 | + error = -EFAULT; | ||
1291 | + break; | ||
1292 | + } | ||
1293 | + | ||
1294 | sd.len = 0; | ||
1295 | sd.total_len = len; | ||
1296 | sd.flags = flags; | ||
1297 | diff --git a/include/linux/dmi.h b/include/linux/dmi.h | ||
1298 | index 5b42a65..b1251b2 100644 | ||
1299 | --- a/include/linux/dmi.h | ||
1300 | +++ b/include/linux/dmi.h | ||
1301 | @@ -79,7 +79,6 @@ extern void dmi_scan_machine(void); | ||
1302 | extern int dmi_get_year(int field); | ||
1303 | extern int dmi_name_in_vendors(const char *str); | ||
1304 | extern int dmi_available; | ||
1305 | -extern char *dmi_get_slot(int slot); | ||
1306 | |||
1307 | #else | ||
1308 | |||
1309 | @@ -90,7 +89,6 @@ static inline const struct dmi_device * dmi_find_device(int type, const char *na | ||
1310 | static inline int dmi_get_year(int year) { return 0; } | ||
1311 | static inline int dmi_name_in_vendors(const char *s) { return 0; } | ||
1312 | #define dmi_available 0 | ||
1313 | -static inline char *dmi_get_slot(int slot) { return NULL; } | ||
1314 | |||
1315 | #endif | ||
1316 | |||
1317 | diff --git a/include/linux/wait.h b/include/linux/wait.h | ||
1318 | index 0e68628..8eb6420 100644 | ||
1319 | --- a/include/linux/wait.h | ||
1320 | +++ b/include/linux/wait.h | ||
1321 | @@ -161,6 +161,22 @@ wait_queue_head_t *FASTCALL(bit_waitqueue(void *, int)); | ||
1322 | #define wake_up_locked(x) __wake_up_locked((x), TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE) | ||
1323 | #define wake_up_interruptible_sync(x) __wake_up_sync((x),TASK_INTERRUPTIBLE, 1) | ||
1324 | |||
1325 | +#ifdef CONFIG_DEBUG_LOCK_ALLOC | ||
1326 | +/* | ||
1327 | + * macro to avoid include hell | ||
1328 | + */ | ||
1329 | +#define wake_up_nested(x, s) \ | ||
1330 | +do { \ | ||
1331 | + unsigned long flags; \ | ||
1332 | + \ | ||
1333 | + spin_lock_irqsave_nested(&(x)->lock, flags, (s)); \ | ||
1334 | + wake_up_locked(x); \ | ||
1335 | + spin_unlock_irqrestore(&(x)->lock, flags); \ | ||
1336 | +} while (0) | ||
1337 | +#else | ||
1338 | +#define wake_up_nested(x, s) wake_up(x) | ||
1339 | +#endif | ||
1340 | + | ||
1341 | #define __wait_event(wq, condition) \ | ||
1342 | do { \ | ||
1343 | DEFINE_WAIT(__wait); \ | ||
1344 | diff --git a/kernel/relay.c b/kernel/relay.c | ||
1345 | index 61134eb..7c03733 100644 | ||
1346 | --- a/kernel/relay.c | ||
1347 | +++ b/kernel/relay.c | ||
1348 | @@ -92,6 +92,7 @@ static int relay_mmap_buf(struct rchan_buf *buf, struct vm_area_struct *vma) | ||
1349 | return -EINVAL; | ||
1350 | |||
1351 | vma->vm_ops = &relay_file_mmap_ops; | ||
1352 | + vma->vm_flags |= VM_DONTEXPAND; | ||
1353 | vma->vm_private_data = buf; | ||
1354 | buf->chan->cb->buf_mapped(buf, filp); | ||
1355 | |||
1356 | diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c | ||
1357 | index da7c061..2288ad8 100644 | ||
1358 | --- a/kernel/sched_fair.c | ||
1359 | +++ b/kernel/sched_fair.c | ||
1360 | @@ -511,7 +511,7 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial) | ||
1361 | |||
1362 | if (!initial) { | ||
1363 | /* sleeps upto a single latency don't count. */ | ||
1364 | - if (sched_feat(NEW_FAIR_SLEEPERS) && entity_is_task(se)) | ||
1365 | + if (sched_feat(NEW_FAIR_SLEEPERS)) | ||
1366 | vruntime -= sysctl_sched_latency; | ||
1367 | |||
1368 | /* ensure we never gain time by being placed backwards. */ | ||
1369 | @@ -867,7 +867,11 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p) | ||
1370 | } | ||
1371 | |||
1372 | gran = sysctl_sched_wakeup_granularity; | ||
1373 | - if (unlikely(se->load.weight != NICE_0_LOAD)) | ||
1374 | + /* | ||
1375 | + * More easily preempt - nice tasks, while not making | ||
1376 | + * it harder for + nice tasks. | ||
1377 | + */ | ||
1378 | + if (unlikely(se->load.weight > NICE_0_LOAD)) | ||
1379 | gran = calc_delta_fair(gran, &se->load); | ||
1380 | |||
1381 | if (pse->vruntime + gran < se->vruntime) | ||
1382 | diff --git a/mm/filemap.c b/mm/filemap.c | ||
1383 | index f4d0cde..69430d2 100644 | ||
1384 | --- a/mm/filemap.c | ||
1385 | +++ b/mm/filemap.c | ||
1386 | @@ -1733,7 +1733,11 @@ static void __iov_iter_advance_iov(struct iov_iter *i, size_t bytes) | ||
1387 | const struct iovec *iov = i->iov; | ||
1388 | size_t base = i->iov_offset; | ||
1389 | |||
1390 | - while (bytes) { | ||
1391 | + /* | ||
1392 | + * The !iov->iov_len check ensures we skip over unlikely | ||
1393 | + * zero-length segments. | ||
1394 | + */ | ||
1395 | + while (bytes || !iov->iov_len) { | ||
1396 | int copy = min(bytes, iov->iov_len - base); | ||
1397 | |||
1398 | bytes -= copy; | ||
1399 | @@ -2251,6 +2255,7 @@ again: | ||
1400 | |||
1401 | cond_resched(); | ||
1402 | |||
1403 | + iov_iter_advance(i, copied); | ||
1404 | if (unlikely(copied == 0)) { | ||
1405 | /* | ||
1406 | * If we were unable to copy any data at all, we must | ||
1407 | @@ -2264,7 +2269,6 @@ again: | ||
1408 | iov_iter_single_seg_count(i)); | ||
1409 | goto again; | ||
1410 | } | ||
1411 | - iov_iter_advance(i, copied); | ||
1412 | pos += copied; | ||
1413 | written += copied; | ||
1414 | |||
1415 | diff --git a/mm/fremap.c b/mm/fremap.c | ||
1416 | index 14bd3bf..69a37c2 100644 | ||
1417 | --- a/mm/fremap.c | ||
1418 | +++ b/mm/fremap.c | ||
1419 | @@ -190,10 +190,13 @@ asmlinkage long sys_remap_file_pages(unsigned long start, unsigned long size, | ||
1420 | */ | ||
1421 | if (mapping_cap_account_dirty(mapping)) { | ||
1422 | unsigned long addr; | ||
1423 | + struct file *file = vma->vm_file; | ||
1424 | |||
1425 | flags &= MAP_NONBLOCK; | ||
1426 | - addr = mmap_region(vma->vm_file, start, size, | ||
1427 | + get_file(file); | ||
1428 | + addr = mmap_region(file, start, size, | ||
1429 | flags, vma->vm_flags, pgoff, 1); | ||
1430 | + fput(file); | ||
1431 | if (IS_ERR_VALUE(addr)) { | ||
1432 | err = addr; | ||
1433 | } else { | ||
1434 | diff --git a/mm/mmap.c b/mm/mmap.c | ||
1435 | index 15678aa..555b3e7 100644 | ||
1436 | --- a/mm/mmap.c | ||
1437 | +++ b/mm/mmap.c | ||
1438 | @@ -2215,7 +2215,7 @@ int install_special_mapping(struct mm_struct *mm, | ||
1439 | vma->vm_start = addr; | ||
1440 | vma->vm_end = addr + len; | ||
1441 | |||
1442 | - vma->vm_flags = vm_flags | mm->def_flags; | ||
1443 | + vma->vm_flags = vm_flags | mm->def_flags | VM_DONTEXPAND; | ||
1444 | vma->vm_page_prot = vm_get_page_prot(vma->vm_flags); | ||
1445 | |||
1446 | vma->vm_ops = &special_mapping_vmops; | ||
1447 | diff --git a/mm/slab.c b/mm/slab.c | ||
1448 | index b03b2e4..ff31261 100644 | ||
1449 | --- a/mm/slab.c | ||
1450 | +++ b/mm/slab.c | ||
1451 | @@ -304,11 +304,11 @@ struct kmem_list3 { | ||
1452 | /* | ||
1453 | * Need this for bootstrapping a per node allocator. | ||
1454 | */ | ||
1455 | -#define NUM_INIT_LISTS (2 * MAX_NUMNODES + 1) | ||
1456 | +#define NUM_INIT_LISTS (3 * MAX_NUMNODES) | ||
1457 | struct kmem_list3 __initdata initkmem_list3[NUM_INIT_LISTS]; | ||
1458 | #define CACHE_CACHE 0 | ||
1459 | -#define SIZE_AC 1 | ||
1460 | -#define SIZE_L3 (1 + MAX_NUMNODES) | ||
1461 | +#define SIZE_AC MAX_NUMNODES | ||
1462 | +#define SIZE_L3 (2 * MAX_NUMNODES) | ||
1463 | |||
1464 | static int drain_freelist(struct kmem_cache *cache, | ||
1465 | struct kmem_list3 *l3, int tofree); | ||
1466 | @@ -1410,6 +1410,22 @@ static void init_list(struct kmem_cache *cachep, struct kmem_list3 *list, | ||
1467 | } | ||
1468 | |||
1469 | /* | ||
1470 | + * For setting up all the kmem_list3s for cache whose buffer_size is same as | ||
1471 | + * size of kmem_list3. | ||
1472 | + */ | ||
1473 | +static void __init set_up_list3s(struct kmem_cache *cachep, int index) | ||
1474 | +{ | ||
1475 | + int node; | ||
1476 | + | ||
1477 | + for_each_online_node(node) { | ||
1478 | + cachep->nodelists[node] = &initkmem_list3[index + node]; | ||
1479 | + cachep->nodelists[node]->next_reap = jiffies + | ||
1480 | + REAPTIMEOUT_LIST3 + | ||
1481 | + ((unsigned long)cachep) % REAPTIMEOUT_LIST3; | ||
1482 | + } | ||
1483 | +} | ||
1484 | + | ||
1485 | +/* | ||
1486 | * Initialisation. Called after the page allocator have been initialised and | ||
1487 | * before smp_init(). | ||
1488 | */ | ||
1489 | @@ -1432,6 +1448,7 @@ void __init kmem_cache_init(void) | ||
1490 | if (i < MAX_NUMNODES) | ||
1491 | cache_cache.nodelists[i] = NULL; | ||
1492 | } | ||
1493 | + set_up_list3s(&cache_cache, CACHE_CACHE); | ||
1494 | |||
1495 | /* | ||
1496 | * Fragmentation resistance on low memory - only use bigger | ||
1497 | @@ -1587,10 +1604,9 @@ void __init kmem_cache_init(void) | ||
1498 | { | ||
1499 | int nid; | ||
1500 | |||
1501 | - /* Replace the static kmem_list3 structures for the boot cpu */ | ||
1502 | - init_list(&cache_cache, &initkmem_list3[CACHE_CACHE], node); | ||
1503 | - | ||
1504 | for_each_online_node(nid) { | ||
1505 | + init_list(&cache_cache, &initkmem_list3[CACHE_CACHE], nid); | ||
1506 | + | ||
1507 | init_list(malloc_sizes[INDEX_AC].cs_cachep, | ||
1508 | &initkmem_list3[SIZE_AC + nid], nid); | ||
1509 | |||
1510 | @@ -1960,22 +1976,6 @@ static void slab_destroy(struct kmem_cache *cachep, struct slab *slabp) | ||
1511 | } | ||
1512 | } | ||
1513 | |||
1514 | -/* | ||
1515 | - * For setting up all the kmem_list3s for cache whose buffer_size is same as | ||
1516 | - * size of kmem_list3. | ||
1517 | - */ | ||
1518 | -static void __init set_up_list3s(struct kmem_cache *cachep, int index) | ||
1519 | -{ | ||
1520 | - int node; | ||
1521 | - | ||
1522 | - for_each_online_node(node) { | ||
1523 | - cachep->nodelists[node] = &initkmem_list3[index + node]; | ||
1524 | - cachep->nodelists[node]->next_reap = jiffies + | ||
1525 | - REAPTIMEOUT_LIST3 + | ||
1526 | - ((unsigned long)cachep) % REAPTIMEOUT_LIST3; | ||
1527 | - } | ||
1528 | -} | ||
1529 | - | ||
1530 | static void __kmem_cache_destroy(struct kmem_cache *cachep) | ||
1531 | { | ||
1532 | int i; | ||
1533 | @@ -2099,7 +2099,7 @@ static int __init_refok setup_cpu_cache(struct kmem_cache *cachep) | ||
1534 | g_cpucache_up = PARTIAL_L3; | ||
1535 | } else { | ||
1536 | int node; | ||
1537 | - for_each_node_state(node, N_NORMAL_MEMORY) { | ||
1538 | + for_each_online_node(node) { | ||
1539 | cachep->nodelists[node] = | ||
1540 | kmalloc_node(sizeof(struct kmem_list3), | ||
1541 | GFP_KERNEL, node); | ||
1542 | diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c | ||
1543 | index d802b5a..9ddf944 100644 | ||
1544 | --- a/scripts/mod/file2alias.c | ||
1545 | +++ b/scripts/mod/file2alias.c | ||
1546 | @@ -155,7 +155,7 @@ static void do_usb_entry_multi(struct usb_device_id *id, struct module *mod) | ||
1547 | * Some modules (visor) have empty slots as placeholder for | ||
1548 | * run-time specification that results in catch-all alias | ||
1549 | */ | ||
1550 | - if (!(id->idVendor | id->bDeviceClass | id->bInterfaceClass)) | ||
1551 | + if (!(id->idVendor | id->idProduct | id->bDeviceClass | id->bInterfaceClass)) | ||
1552 | return; | ||
1553 | |||
1554 | /* Convert numeric bcdDevice range into fnmatch-able pattern(s) */ | ||
1555 | diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c | ||
1556 | index f83b19d..4bf715d 100644 | ||
1557 | --- a/security/selinux/ss/services.c | ||
1558 | +++ b/security/selinux/ss/services.c | ||
1559 | @@ -1744,6 +1744,9 @@ int security_genfs_sid(const char *fstype, | ||
1560 | struct ocontext *c; | ||
1561 | int rc = 0, cmp = 0; | ||
1562 | |||
1563 | + while (path[0] == '/' && path[1] == '/') | ||
1564 | + path++; | ||
1565 | + | ||
1566 | POLICY_RDLOCK; | ||
1567 | |||
1568 | for (genfs = policydb.genfs; genfs; genfs = genfs->next) { | ||
1569 | diff --git a/sound/oss/via82cxxx_audio.c b/sound/oss/via82cxxx_audio.c | ||
1570 | index 5d3c037..f95aa09 100644 | ||
1571 | --- a/sound/oss/via82cxxx_audio.c | ||
1572 | +++ b/sound/oss/via82cxxx_audio.c | ||
1573 | @@ -2104,6 +2104,7 @@ static struct page * via_mm_nopage (struct vm_area_struct * vma, | ||
1574 | { | ||
1575 | struct via_info *card = vma->vm_private_data; | ||
1576 | struct via_channel *chan = &card->ch_out; | ||
1577 | + unsigned long max_bufs; | ||
1578 | struct page *dmapage; | ||
1579 | unsigned long pgoff; | ||
1580 | int rd, wr; | ||
1581 | @@ -2127,14 +2128,11 @@ static struct page * via_mm_nopage (struct vm_area_struct * vma, | ||
1582 | rd = card->ch_in.is_mapped; | ||
1583 | wr = card->ch_out.is_mapped; | ||
1584 | |||
1585 | -#ifndef VIA_NDEBUG | ||
1586 | - { | ||
1587 | - unsigned long max_bufs = chan->frag_number; | ||
1588 | - if (rd && wr) max_bufs *= 2; | ||
1589 | - /* via_dsp_mmap() should ensure this */ | ||
1590 | - assert (pgoff < max_bufs); | ||
1591 | - } | ||
1592 | -#endif | ||
1593 | + max_bufs = chan->frag_number; | ||
1594 | + if (rd && wr) | ||
1595 | + max_bufs *= 2; | ||
1596 | + if (pgoff >= max_bufs) | ||
1597 | + return NOPAGE_SIGBUS; | ||
1598 | |||
1599 | /* if full-duplex (read+write) and we have two sets of bufs, | ||
1600 | * then the playback buffers come first, sez soundcard.c */ | ||
1601 | diff --git a/sound/usb/usx2y/usX2Yhwdep.c b/sound/usb/usx2y/usX2Yhwdep.c | ||
1602 | index b76b3dd..e617d7e 100644 | ||
1603 | --- a/sound/usb/usx2y/usX2Yhwdep.c | ||
1604 | +++ b/sound/usb/usx2y/usX2Yhwdep.c | ||
1605 | @@ -88,7 +88,7 @@ static int snd_us428ctls_mmap(struct snd_hwdep * hw, struct file *filp, struct v | ||
1606 | us428->us428ctls_sharedmem->CtlSnapShotLast = -2; | ||
1607 | } | ||
1608 | area->vm_ops = &us428ctls_vm_ops; | ||
1609 | - area->vm_flags |= VM_RESERVED; | ||
1610 | + area->vm_flags |= VM_RESERVED | VM_DONTEXPAND; | ||
1611 | area->vm_private_data = hw->private_data; | ||
1612 | return 0; | ||
1613 | } | ||
1614 | diff --git a/sound/usb/usx2y/usx2yhwdeppcm.c b/sound/usb/usx2y/usx2yhwdeppcm.c | ||
1615 | index a5e7bcd..6e70520 100644 | ||
1616 | --- a/sound/usb/usx2y/usx2yhwdeppcm.c | ||
1617 | +++ b/sound/usb/usx2y/usx2yhwdeppcm.c | ||
1618 | @@ -728,7 +728,7 @@ static int snd_usX2Y_hwdep_pcm_mmap(struct snd_hwdep * hw, struct file *filp, st | ||
1619 | return -ENODEV; | ||
1620 | } | ||
1621 | area->vm_ops = &snd_usX2Y_hwdep_pcm_vm_ops; | ||
1622 | - area->vm_flags |= VM_RESERVED; | ||
1623 | + area->vm_flags |= VM_RESERVED | VM_DONTEXPAND; | ||
1624 | area->vm_private_data = hw->private_data; | ||
1625 | return 0; | ||
1626 | } |