Magellan Linux

Contents of /trunk/kernel-magellan/patches-3.7/0106-3.7.7-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2075 - (show annotations) (download)
Mon Feb 18 12:04:00 2013 UTC (11 years, 2 months ago) by niro
File size: 48666 byte(s)
-linux-3.7.7
1 diff --git a/arch/powerpc/mm/hash_low_64.S b/arch/powerpc/mm/hash_low_64.S
2 index 5658508..7443481 100644
3 --- a/arch/powerpc/mm/hash_low_64.S
4 +++ b/arch/powerpc/mm/hash_low_64.S
5 @@ -115,11 +115,13 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT)
6 sldi r29,r5,SID_SHIFT - VPN_SHIFT
7 rldicl r28,r3,64 - VPN_SHIFT,64 - (SID_SHIFT - VPN_SHIFT)
8 or r29,r28,r29
9 -
10 - /* Calculate hash value for primary slot and store it in r28 */
11 - rldicl r5,r5,0,25 /* vsid & 0x0000007fffffffff */
12 - rldicl r0,r3,64-12,48 /* (ea >> 12) & 0xffff */
13 - xor r28,r5,r0
14 + /*
15 + * Calculate hash value for primary slot and store it in r28
16 + * r3 = va, r5 = vsid
17 + * r0 = (va >> 12) & ((1ul << (28 - 12)) -1)
18 + */
19 + rldicl r0,r3,64-12,48
20 + xor r28,r5,r0 /* hash */
21 b 4f
22
23 3: /* Calc vpn and put it in r29 */
24 @@ -130,11 +132,12 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT)
25 /*
26 * calculate hash value for primary slot and
27 * store it in r28 for 1T segment
28 + * r3 = va, r5 = vsid
29 */
30 - rldic r28,r5,25,25 /* (vsid << 25) & 0x7fffffffff */
31 - clrldi r5,r5,40 /* vsid & 0xffffff */
32 - rldicl r0,r3,64-12,36 /* (ea >> 12) & 0xfffffff */
33 - xor r28,r28,r5
34 + sldi r28,r5,25 /* vsid << 25 */
35 + /* r0 = (va >> 12) & ((1ul << (40 - 12)) -1) */
36 + rldicl r0,r3,64-12,36
37 + xor r28,r28,r5 /* vsid ^ ( vsid << 25) */
38 xor r28,r28,r0 /* hash */
39
40 /* Convert linux PTE bits into HW equivalents */
41 @@ -407,11 +410,13 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT)
42 */
43 rldicl r28,r3,64 - VPN_SHIFT,64 - (SID_SHIFT - VPN_SHIFT)
44 or r29,r28,r29
45 -
46 - /* Calculate hash value for primary slot and store it in r28 */
47 - rldicl r5,r5,0,25 /* vsid & 0x0000007fffffffff */
48 - rldicl r0,r3,64-12,48 /* (ea >> 12) & 0xffff */
49 - xor r28,r5,r0
50 + /*
51 + * Calculate hash value for primary slot and store it in r28
52 + * r3 = va, r5 = vsid
53 + * r0 = (va >> 12) & ((1ul << (28 - 12)) -1)
54 + */
55 + rldicl r0,r3,64-12,48
56 + xor r28,r5,r0 /* hash */
57 b 4f
58
59 3: /* Calc vpn and put it in r29 */
60 @@ -426,11 +431,12 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT)
61 /*
62 * Calculate hash value for primary slot and
63 * store it in r28 for 1T segment
64 + * r3 = va, r5 = vsid
65 */
66 - rldic r28,r5,25,25 /* (vsid << 25) & 0x7fffffffff */
67 - clrldi r5,r5,40 /* vsid & 0xffffff */
68 - rldicl r0,r3,64-12,36 /* (ea >> 12) & 0xfffffff */
69 - xor r28,r28,r5
70 + sldi r28,r5,25 /* vsid << 25 */
71 + /* r0 = (va >> 12) & ((1ul << (40 - 12)) -1) */
72 + rldicl r0,r3,64-12,36
73 + xor r28,r28,r5 /* vsid ^ ( vsid << 25) */
74 xor r28,r28,r0 /* hash */
75
76 /* Convert linux PTE bits into HW equivalents */
77 @@ -752,25 +758,27 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_1T_SEGMENT)
78 rldicl r28,r3,64 - VPN_SHIFT,64 - (SID_SHIFT - VPN_SHIFT)
79 or r29,r28,r29
80
81 - /* Calculate hash value for primary slot and store it in r28 */
82 - rldicl r5,r5,0,25 /* vsid & 0x0000007fffffffff */
83 - rldicl r0,r3,64-16,52 /* (ea >> 16) & 0xfff */
84 - xor r28,r5,r0
85 + /* Calculate hash value for primary slot and store it in r28
86 + * r3 = va, r5 = vsid
87 + * r0 = (va >> 16) & ((1ul << (28 - 16)) -1)
88 + */
89 + rldicl r0,r3,64-16,52
90 + xor r28,r5,r0 /* hash */
91 b 4f
92
93 3: /* Calc vpn and put it in r29 */
94 sldi r29,r5,SID_SHIFT_1T - VPN_SHIFT
95 rldicl r28,r3,64 - VPN_SHIFT,64 - (SID_SHIFT_1T - VPN_SHIFT)
96 or r29,r28,r29
97 -
98 /*
99 * calculate hash value for primary slot and
100 * store it in r28 for 1T segment
101 + * r3 = va, r5 = vsid
102 */
103 - rldic r28,r5,25,25 /* (vsid << 25) & 0x7fffffffff */
104 - clrldi r5,r5,40 /* vsid & 0xffffff */
105 - rldicl r0,r3,64-16,40 /* (ea >> 16) & 0xffffff */
106 - xor r28,r28,r5
107 + sldi r28,r5,25 /* vsid << 25 */
108 + /* r0 = (va >> 16) & ((1ul << (40 - 16)) -1) */
109 + rldicl r0,r3,64-16,40
110 + xor r28,r28,r5 /* vsid ^ ( vsid << 25) */
111 xor r28,r28,r0 /* hash */
112
113 /* Convert linux PTE bits into HW equivalents */
114 diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S
115 index 076745f..e7fa545 100644
116 --- a/arch/x86/ia32/ia32entry.S
117 +++ b/arch/x86/ia32/ia32entry.S
118 @@ -207,7 +207,7 @@ sysexit_from_sys_call:
119 testl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
120 jnz ia32_ret_from_sys_call
121 TRACE_IRQS_ON
122 - sti
123 + ENABLE_INTERRUPTS(CLBR_NONE)
124 movl %eax,%esi /* second arg, syscall return value */
125 cmpl $-MAX_ERRNO,%eax /* is it an error ? */
126 jbe 1f
127 @@ -217,7 +217,7 @@ sysexit_from_sys_call:
128 call __audit_syscall_exit
129 movq RAX-ARGOFFSET(%rsp),%rax /* reload syscall return value */
130 movl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),%edi
131 - cli
132 + DISABLE_INTERRUPTS(CLBR_NONE)
133 TRACE_IRQS_OFF
134 testl %edi,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
135 jz \exit
136 diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
137 index 18a5382..47c737c 100644
138 --- a/drivers/gpu/drm/radeon/evergreen.c
139 +++ b/drivers/gpu/drm/radeon/evergreen.c
140 @@ -1313,14 +1313,18 @@ void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *sav
141 if (!(tmp & EVERGREEN_CRTC_BLANK_DATA_EN)) {
142 radeon_wait_for_vblank(rdev, i);
143 tmp |= EVERGREEN_CRTC_BLANK_DATA_EN;
144 + WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 1);
145 WREG32(EVERGREEN_CRTC_BLANK_CONTROL + crtc_offsets[i], tmp);
146 + WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 0);
147 }
148 } else {
149 tmp = RREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i]);
150 if (!(tmp & EVERGREEN_CRTC_DISP_READ_REQUEST_DISABLE)) {
151 radeon_wait_for_vblank(rdev, i);
152 tmp |= EVERGREEN_CRTC_DISP_READ_REQUEST_DISABLE;
153 + WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 1);
154 WREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i], tmp);
155 + WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 0);
156 }
157 }
158 /* wait for the next frame */
159 @@ -1345,6 +1349,8 @@ void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *sav
160 blackout &= ~BLACKOUT_MODE_MASK;
161 WREG32(MC_SHARED_BLACKOUT_CNTL, blackout | 1);
162 }
163 + /* wait for the MC to settle */
164 + udelay(100);
165 }
166
167 void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *save)
168 @@ -1378,11 +1384,15 @@ void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *s
169 if (ASIC_IS_DCE6(rdev)) {
170 tmp = RREG32(EVERGREEN_CRTC_BLANK_CONTROL + crtc_offsets[i]);
171 tmp |= EVERGREEN_CRTC_BLANK_DATA_EN;
172 + WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 1);
173 WREG32(EVERGREEN_CRTC_BLANK_CONTROL + crtc_offsets[i], tmp);
174 + WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 0);
175 } else {
176 tmp = RREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i]);
177 tmp &= ~EVERGREEN_CRTC_DISP_READ_REQUEST_DISABLE;
178 + WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 1);
179 WREG32(EVERGREEN_CRTC_CONTROL + crtc_offsets[i], tmp);
180 + WREG32(EVERGREEN_CRTC_UPDATE_LOCK + crtc_offsets[i], 0);
181 }
182 /* wait for the next frame */
183 frame_count = radeon_get_vblank_counter(rdev, i);
184 @@ -2035,9 +2045,20 @@ static void evergreen_gpu_init(struct radeon_device *rdev)
185 WREG32(DMIF_ADDR_CONFIG, gb_addr_config);
186 WREG32(HDP_ADDR_CONFIG, gb_addr_config);
187
188 - tmp = gb_addr_config & NUM_PIPES_MASK;
189 - tmp = r6xx_remap_render_backend(rdev, tmp, rdev->config.evergreen.max_backends,
190 - EVERGREEN_MAX_BACKENDS, disabled_rb_mask);
191 + if ((rdev->config.evergreen.max_backends == 1) &&
192 + (rdev->flags & RADEON_IS_IGP)) {
193 + if ((disabled_rb_mask & 3) == 1) {
194 + /* RB0 disabled, RB1 enabled */
195 + tmp = 0x11111111;
196 + } else {
197 + /* RB1 disabled, RB0 enabled */
198 + tmp = 0x00000000;
199 + }
200 + } else {
201 + tmp = gb_addr_config & NUM_PIPES_MASK;
202 + tmp = r6xx_remap_render_backend(rdev, tmp, rdev->config.evergreen.max_backends,
203 + EVERGREEN_MAX_BACKENDS, disabled_rb_mask);
204 + }
205 WREG32(GB_BACKEND_MAP, tmp);
206
207 WREG32(CGTS_SYS_TCC_DISABLE, 0);
208 diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
209 index cda280d..271a6db 100644
210 --- a/drivers/gpu/drm/radeon/r600.c
211 +++ b/drivers/gpu/drm/radeon/r600.c
212 @@ -1382,12 +1382,15 @@ u32 r6xx_remap_render_backend(struct radeon_device *rdev,
213 u32 disabled_rb_mask)
214 {
215 u32 rendering_pipe_num, rb_num_width, req_rb_num;
216 - u32 pipe_rb_ratio, pipe_rb_remain;
217 + u32 pipe_rb_ratio, pipe_rb_remain, tmp;
218 u32 data = 0, mask = 1 << (max_rb_num - 1);
219 unsigned i, j;
220
221 /* mask out the RBs that don't exist on that asic */
222 - disabled_rb_mask |= (0xff << max_rb_num) & 0xff;
223 + tmp = disabled_rb_mask | ((0xff << max_rb_num) & 0xff);
224 + /* make sure at least one RB is available */
225 + if ((tmp & 0xff) != 0xff)
226 + disabled_rb_mask = tmp;
227
228 rendering_pipe_num = 1 << tiling_pipe_num;
229 req_rb_num = total_max_rb_num - r600_count_pipe_bits(disabled_rb_mask);
230 diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c
231 index ced9a81..4981a20 100644
232 --- a/drivers/gpu/drm/radeon/radeon_combios.c
233 +++ b/drivers/gpu/drm/radeon/radeon_combios.c
234 @@ -2470,6 +2470,14 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
235 1),
236 ATOM_DEVICE_CRT1_SUPPORT);
237 }
238 + /* RV100 board with external TDMS bit mis-set.
239 + * Actually uses internal TMDS, clear the bit.
240 + */
241 + if (dev->pdev->device == 0x5159 &&
242 + dev->pdev->subsystem_vendor == 0x1014 &&
243 + dev->pdev->subsystem_device == 0x029A) {
244 + tmp &= ~(1 << 4);
245 + }
246 if ((tmp >> 4) & 0x1) {
247 devices |= ATOM_DEVICE_DFP2_SUPPORT;
248 radeon_add_legacy_encoder(dev,
249 diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
250 index 6477849..ec202c8 100644
251 --- a/drivers/gpu/drm/radeon/radeon_display.c
252 +++ b/drivers/gpu/drm/radeon/radeon_display.c
253 @@ -1111,8 +1111,10 @@ radeon_user_framebuffer_create(struct drm_device *dev,
254 }
255
256 radeon_fb = kzalloc(sizeof(*radeon_fb), GFP_KERNEL);
257 - if (radeon_fb == NULL)
258 + if (radeon_fb == NULL) {
259 + drm_gem_object_unreference_unlocked(obj);
260 return ERR_PTR(-ENOMEM);
261 + }
262
263 ret = radeon_framebuffer_init(dev, radeon_fb, mode_cmd, obj);
264 if (ret) {
265 diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c
266 index 47634f2..246b374 100644
267 --- a/drivers/gpu/drm/radeon/radeon_ring.c
268 +++ b/drivers/gpu/drm/radeon/radeon_ring.c
269 @@ -377,6 +377,9 @@ int radeon_ring_alloc(struct radeon_device *rdev, struct radeon_ring *ring, unsi
270 {
271 int r;
272
273 + /* make sure we aren't trying to allocate more space than there is on the ring */
274 + if (ndw > (ring->ring_size / 4))
275 + return -ENOMEM;
276 /* Align requested size with padding so unlock_commit can
277 * pad safely */
278 ndw = (ndw + ring->align_mask) & ~ring->align_mask;
279 diff --git a/drivers/gpu/drm/radeon/reg_srcs/cayman b/drivers/gpu/drm/radeon/reg_srcs/cayman
280 index 0f656b1..a072fa8 100644
281 --- a/drivers/gpu/drm/radeon/reg_srcs/cayman
282 +++ b/drivers/gpu/drm/radeon/reg_srcs/cayman
283 @@ -1,5 +1,6 @@
284 cayman 0x9400
285 0x0000802C GRBM_GFX_INDEX
286 +0x00008040 WAIT_UNTIL
287 0x000084FC CP_STRMOUT_CNTL
288 0x000085F0 CP_COHER_CNTL
289 0x000085F4 CP_COHER_SIZE
290 diff --git a/drivers/mtd/nand/davinci_nand.c b/drivers/mtd/nand/davinci_nand.c
291 index 945047a..92cacba 100644
292 --- a/drivers/mtd/nand/davinci_nand.c
293 +++ b/drivers/mtd/nand/davinci_nand.c
294 @@ -523,7 +523,7 @@ static struct nand_ecclayout hwecc4_2048 __initconst = {
295 static const struct of_device_id davinci_nand_of_match[] = {
296 {.compatible = "ti,davinci-nand", },
297 {},
298 -}
299 +};
300 MODULE_DEVICE_TABLE(of, davinci_nand_of_match);
301
302 static struct davinci_nand_pdata
303 diff --git a/drivers/rtc/rtc-isl1208.c b/drivers/rtc/rtc-isl1208.c
304 index 26c81f2..8b68e72 100644
305 --- a/drivers/rtc/rtc-isl1208.c
306 +++ b/drivers/rtc/rtc-isl1208.c
307 @@ -506,6 +506,7 @@ isl1208_rtc_interrupt(int irq, void *data)
308 {
309 unsigned long timeout = jiffies + msecs_to_jiffies(1000);
310 struct i2c_client *client = data;
311 + struct rtc_device *rtc = i2c_get_clientdata(client);
312 int handled = 0, sr, err;
313
314 /*
315 @@ -528,6 +529,8 @@ isl1208_rtc_interrupt(int irq, void *data)
316 if (sr & ISL1208_REG_SR_ALM) {
317 dev_dbg(&client->dev, "alarm!\n");
318
319 + rtc_update_irq(rtc, 1, RTC_IRQF | RTC_AF);
320 +
321 /* Clear the alarm */
322 sr &= ~ISL1208_REG_SR_ALM;
323 sr = i2c_smbus_write_byte_data(client, ISL1208_REG_SR, sr);
324 diff --git a/drivers/rtc/rtc-pl031.c b/drivers/rtc/rtc-pl031.c
325 index 08378e3..10c1a34 100644
326 --- a/drivers/rtc/rtc-pl031.c
327 +++ b/drivers/rtc/rtc-pl031.c
328 @@ -44,6 +44,7 @@
329 #define RTC_YMR 0x34 /* Year match register */
330 #define RTC_YLR 0x38 /* Year data load register */
331
332 +#define RTC_CR_EN (1 << 0) /* counter enable bit */
333 #define RTC_CR_CWEN (1 << 26) /* Clockwatch enable bit */
334
335 #define RTC_TCR_EN (1 << 1) /* Periodic timer enable bit */
336 @@ -320,7 +321,7 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
337 struct pl031_local *ldata;
338 struct pl031_vendor_data *vendor = id->data;
339 struct rtc_class_ops *ops = &vendor->ops;
340 - unsigned long time;
341 + unsigned long time, data;
342
343 ret = amba_request_regions(adev, NULL);
344 if (ret)
345 @@ -345,10 +346,11 @@ static int pl031_probe(struct amba_device *adev, const struct amba_id *id)
346 dev_dbg(&adev->dev, "designer ID = 0x%02x\n", amba_manf(adev));
347 dev_dbg(&adev->dev, "revision = 0x%01x\n", amba_rev(adev));
348
349 + data = readl(ldata->base + RTC_CR);
350 /* Enable the clockwatch on ST Variants */
351 if (vendor->clockwatch)
352 - writel(readl(ldata->base + RTC_CR) | RTC_CR_CWEN,
353 - ldata->base + RTC_CR);
354 + data |= RTC_CR_CWEN;
355 + writel(data | RTC_CR_EN, ldata->base + RTC_CR);
356
357 /*
358 * On ST PL031 variants, the RTC reset value does not provide correct
359 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
360 index e6cc4e6..131067d 100644
361 --- a/drivers/usb/core/hub.c
362 +++ b/drivers/usb/core/hub.c
363 @@ -2799,6 +2799,23 @@ void usb_enable_ltm(struct usb_device *udev)
364 EXPORT_SYMBOL_GPL(usb_enable_ltm);
365
366 #ifdef CONFIG_USB_SUSPEND
367 +/*
368 + * usb_disable_function_remotewakeup - disable usb3.0
369 + * device's function remote wakeup
370 + * @udev: target device
371 + *
372 + * Assume there's only one function on the USB 3.0
373 + * device and disable remote wake for the first
374 + * interface. FIXME if the interface association
375 + * descriptor shows there's more than one function.
376 + */
377 +static int usb_disable_function_remotewakeup(struct usb_device *udev)
378 +{
379 + return usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
380 + USB_REQ_CLEAR_FEATURE, USB_RECIP_INTERFACE,
381 + USB_INTRF_FUNC_SUSPEND, 0, NULL, 0,
382 + USB_CTRL_SET_TIMEOUT);
383 +}
384
385 /*
386 * usb_port_suspend - suspend a usb device's upstream port
387 @@ -2916,12 +2933,19 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
388 dev_dbg(hub->intfdev, "can't suspend port %d, status %d\n",
389 port1, status);
390 /* paranoia: "should not happen" */
391 - if (udev->do_remote_wakeup)
392 - (void) usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
393 - USB_REQ_CLEAR_FEATURE, USB_RECIP_DEVICE,
394 - USB_DEVICE_REMOTE_WAKEUP, 0,
395 - NULL, 0,
396 - USB_CTRL_SET_TIMEOUT);
397 + if (udev->do_remote_wakeup) {
398 + if (!hub_is_superspeed(hub->hdev)) {
399 + (void) usb_control_msg(udev,
400 + usb_sndctrlpipe(udev, 0),
401 + USB_REQ_CLEAR_FEATURE,
402 + USB_RECIP_DEVICE,
403 + USB_DEVICE_REMOTE_WAKEUP, 0,
404 + NULL, 0,
405 + USB_CTRL_SET_TIMEOUT);
406 + } else
407 + (void) usb_disable_function_remotewakeup(udev);
408 +
409 + }
410
411 /* Try to enable USB2 hardware LPM again */
412 if (udev->usb2_hw_lpm_capable == 1)
413 @@ -3012,20 +3036,30 @@ static int finish_port_resume(struct usb_device *udev)
414 * udev->reset_resume
415 */
416 } else if (udev->actconfig && !udev->reset_resume) {
417 - le16_to_cpus(&devstatus);
418 - if (devstatus & (1 << USB_DEVICE_REMOTE_WAKEUP)) {
419 - status = usb_control_msg(udev,
420 - usb_sndctrlpipe(udev, 0),
421 - USB_REQ_CLEAR_FEATURE,
422 + if (!hub_is_superspeed(udev->parent)) {
423 + le16_to_cpus(&devstatus);
424 + if (devstatus & (1 << USB_DEVICE_REMOTE_WAKEUP))
425 + status = usb_control_msg(udev,
426 + usb_sndctrlpipe(udev, 0),
427 + USB_REQ_CLEAR_FEATURE,
428 USB_RECIP_DEVICE,
429 - USB_DEVICE_REMOTE_WAKEUP, 0,
430 - NULL, 0,
431 - USB_CTRL_SET_TIMEOUT);
432 - if (status)
433 - dev_dbg(&udev->dev,
434 - "disable remote wakeup, status %d\n",
435 - status);
436 + USB_DEVICE_REMOTE_WAKEUP, 0,
437 + NULL, 0,
438 + USB_CTRL_SET_TIMEOUT);
439 + } else {
440 + status = usb_get_status(udev, USB_RECIP_INTERFACE, 0,
441 + &devstatus);
442 + le16_to_cpus(&devstatus);
443 + if (!status && devstatus & (USB_INTRF_STAT_FUNC_RW_CAP
444 + | USB_INTRF_STAT_FUNC_RW))
445 + status =
446 + usb_disable_function_remotewakeup(udev);
447 }
448 +
449 + if (status)
450 + dev_dbg(&udev->dev,
451 + "disable remote wakeup, status %d\n",
452 + status);
453 status = 0;
454 }
455 return status;
456 diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
457 index 914ce93..b9f7f11 100644
458 --- a/drivers/usb/host/ehci-hub.c
459 +++ b/drivers/usb/host/ehci-hub.c
460 @@ -623,7 +623,11 @@ ehci_hub_status_data (struct usb_hcd *hcd, char *buf)
461 status = STS_PCD;
462 }
463 }
464 - /* FIXME autosuspend idle root hubs */
465 +
466 + /* If a resume is in progress, make sure it can finish */
467 + if (ehci->resuming_ports)
468 + mod_timer(&hcd->rh_timer, jiffies + msecs_to_jiffies(25));
469 +
470 spin_unlock_irqrestore (&ehci->lock, flags);
471 return status ? retval : 0;
472 }
473 diff --git a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c
474 index 3d98902..fd252f0 100644
475 --- a/drivers/usb/host/ehci-q.c
476 +++ b/drivers/usb/host/ehci-q.c
477 @@ -1197,17 +1197,26 @@ static void start_iaa_cycle(struct ehci_hcd *ehci, bool nested)
478 if (ehci->async_iaa || ehci->async_unlinking)
479 return;
480
481 - /* Do all the waiting QHs at once */
482 - ehci->async_iaa = ehci->async_unlink;
483 - ehci->async_unlink = NULL;
484 -
485 /* If the controller isn't running, we don't have to wait for it */
486 if (unlikely(ehci->rh_state < EHCI_RH_RUNNING)) {
487 +
488 + /* Do all the waiting QHs */
489 + ehci->async_iaa = ehci->async_unlink;
490 + ehci->async_unlink = NULL;
491 +
492 if (!nested) /* Avoid recursion */
493 end_unlink_async(ehci);
494
495 /* Otherwise start a new IAA cycle */
496 } else if (likely(ehci->rh_state == EHCI_RH_RUNNING)) {
497 + struct ehci_qh *qh;
498 +
499 + /* Do only the first waiting QH (nVidia bug?) */
500 + qh = ehci->async_unlink;
501 + ehci->async_iaa = qh;
502 + ehci->async_unlink = qh->unlink_next;
503 + qh->unlink_next = NULL;
504 +
505 /* Make sure the unlinks are all visible to the hardware */
506 wmb();
507
508 @@ -1255,34 +1264,35 @@ static void end_unlink_async(struct ehci_hcd *ehci)
509 }
510 }
511
512 +static void start_unlink_async(struct ehci_hcd *ehci, struct ehci_qh *qh);
513 +
514 static void unlink_empty_async(struct ehci_hcd *ehci)
515 {
516 - struct ehci_qh *qh, *next;
517 - bool stopped = (ehci->rh_state < EHCI_RH_RUNNING);
518 + struct ehci_qh *qh;
519 + struct ehci_qh *qh_to_unlink = NULL;
520 bool check_unlinks_later = false;
521 + int count = 0;
522
523 - /* Unlink all the async QHs that have been empty for a timer cycle */
524 - next = ehci->async->qh_next.qh;
525 - while (next) {
526 - qh = next;
527 - next = qh->qh_next.qh;
528 -
529 + /* Find the last async QH which has been empty for a timer cycle */
530 + for (qh = ehci->async->qh_next.qh; qh; qh = qh->qh_next.qh) {
531 if (list_empty(&qh->qtd_list) &&
532 qh->qh_state == QH_STATE_LINKED) {
533 - if (!stopped && qh->unlink_cycle ==
534 - ehci->async_unlink_cycle)
535 + ++count;
536 + if (qh->unlink_cycle == ehci->async_unlink_cycle)
537 check_unlinks_later = true;
538 else
539 - single_unlink_async(ehci, qh);
540 + qh_to_unlink = qh;
541 }
542 }
543
544 - /* Start a new IAA cycle if any QHs are waiting for it */
545 - if (ehci->async_unlink)
546 - start_iaa_cycle(ehci, false);
547 + /* If nothing else is being unlinked, unlink the last empty QH */
548 + if (!ehci->async_iaa && !ehci->async_unlink && qh_to_unlink) {
549 + start_unlink_async(ehci, qh_to_unlink);
550 + --count;
551 + }
552
553 - /* QHs that haven't been empty for long enough will be handled later */
554 - if (check_unlinks_later) {
555 + /* Other QHs will be handled later */
556 + if (count > 0) {
557 ehci_enable_event(ehci, EHCI_HRTIMER_ASYNC_UNLINKS, true);
558 ++ehci->async_unlink_cycle;
559 }
560 diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c
561 index 528a540..c41063d 100644
562 --- a/drivers/usb/host/ehci-sched.c
563 +++ b/drivers/usb/host/ehci-sched.c
564 @@ -236,7 +236,7 @@ static inline unsigned char tt_start_uframe(struct ehci_hcd *ehci, __hc32 mask)
565 }
566
567 static const unsigned char
568 -max_tt_usecs[] = { 125, 125, 125, 125, 125, 125, 30, 0 };
569 +max_tt_usecs[] = { 125, 125, 125, 125, 125, 125, 125, 25 };
570
571 /* carryover low/fullspeed bandwidth that crosses uframe boundries */
572 static inline void carryover_tt_bandwidth(unsigned short tt_usecs[8])
573 @@ -2336,5 +2336,5 @@ restart:
574 break;
575 frame = (frame + 1) & fmask;
576 }
577 - ehci->next_frame = now_frame;
578 + ehci->next_frame = (frame - 1) & fmask;
579 }
580 diff --git a/drivers/usb/host/ehci-timer.c b/drivers/usb/host/ehci-timer.c
581 index 20dbdcb..f904071 100644
582 --- a/drivers/usb/host/ehci-timer.c
583 +++ b/drivers/usb/host/ehci-timer.c
584 @@ -113,14 +113,15 @@ static void ehci_poll_ASS(struct ehci_hcd *ehci)
585
586 if (want != actual) {
587
588 - /* Poll again later, but give up after about 20 ms */
589 - if (ehci->ASS_poll_count++ < 20) {
590 - ehci_enable_event(ehci, EHCI_HRTIMER_POLL_ASS, true);
591 - return;
592 - }
593 - ehci_dbg(ehci, "Waited too long for the async schedule status (%x/%x), giving up\n",
594 - want, actual);
595 + /* Poll again later */
596 + ehci_enable_event(ehci, EHCI_HRTIMER_POLL_ASS, true);
597 + ++ehci->ASS_poll_count;
598 + return;
599 }
600 +
601 + if (ehci->ASS_poll_count > 20)
602 + ehci_dbg(ehci, "ASS poll count reached %d\n",
603 + ehci->ASS_poll_count);
604 ehci->ASS_poll_count = 0;
605
606 /* The status is up-to-date; restart or stop the schedule as needed */
607 @@ -159,14 +160,14 @@ static void ehci_poll_PSS(struct ehci_hcd *ehci)
608
609 if (want != actual) {
610
611 - /* Poll again later, but give up after about 20 ms */
612 - if (ehci->PSS_poll_count++ < 20) {
613 - ehci_enable_event(ehci, EHCI_HRTIMER_POLL_PSS, true);
614 - return;
615 - }
616 - ehci_dbg(ehci, "Waited too long for the periodic schedule status (%x/%x), giving up\n",
617 - want, actual);
618 + /* Poll again later */
619 + ehci_enable_event(ehci, EHCI_HRTIMER_POLL_PSS, true);
620 + return;
621 }
622 +
623 + if (ehci->PSS_poll_count > 20)
624 + ehci_dbg(ehci, "PSS poll count reached %d\n",
625 + ehci->PSS_poll_count);
626 ehci->PSS_poll_count = 0;
627
628 /* The status is up-to-date; restart or stop the schedule as needed */
629 diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
630 index eb5563a..7893351 100644
631 --- a/drivers/usb/host/pci-quirks.c
632 +++ b/drivers/usb/host/pci-quirks.c
633 @@ -780,6 +780,7 @@ void usb_enable_xhci_ports(struct pci_dev *xhci_pdev)
634 "defaulting to EHCI.\n");
635 dev_warn(&xhci_pdev->dev,
636 "USB 3.0 devices will work at USB 2.0 speeds.\n");
637 + usb_disable_xhci_ports(xhci_pdev);
638 return;
639 }
640
641 diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
642 index e80c49d..68cb9a8 100644
643 --- a/drivers/usb/host/xhci-ring.c
644 +++ b/drivers/usb/host/xhci-ring.c
645 @@ -1698,7 +1698,7 @@ static void handle_port_status(struct xhci_hcd *xhci,
646 faked_port_index + 1);
647 if (slot_id && xhci->devs[slot_id])
648 xhci_ring_device(xhci, slot_id);
649 - if (bus_state->port_remote_wakeup && (1 << faked_port_index)) {
650 + if (bus_state->port_remote_wakeup & (1 << faked_port_index)) {
651 bus_state->port_remote_wakeup &=
652 ~(1 << faked_port_index);
653 xhci_test_and_clear_bit(xhci, port_array,
654 @@ -2589,6 +2589,8 @@ cleanup:
655 (trb_comp_code != COMP_STALL &&
656 trb_comp_code != COMP_BABBLE))
657 xhci_urb_free_priv(xhci, urb_priv);
658 + else
659 + kfree(urb_priv);
660
661 usb_hcd_unlink_urb_from_ep(bus_to_hcd(urb->dev->bus), urb);
662 if ((urb->actual_length != urb->transfer_buffer_length &&
663 @@ -3108,7 +3110,7 @@ static u32 xhci_v1_0_td_remainder(int running_total, int trb_buff_len,
664 * running_total.
665 */
666 packets_transferred = (running_total + trb_buff_len) /
667 - usb_endpoint_maxp(&urb->ep->desc);
668 + GET_MAX_PACKET(usb_endpoint_maxp(&urb->ep->desc));
669
670 if ((total_packet_count - packets_transferred) > 31)
671 return 31 << 17;
672 @@ -3642,7 +3644,8 @@ static int xhci_queue_isoc_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
673 td_len = urb->iso_frame_desc[i].length;
674 td_remain_len = td_len;
675 total_packet_count = DIV_ROUND_UP(td_len,
676 - usb_endpoint_maxp(&urb->ep->desc));
677 + GET_MAX_PACKET(
678 + usb_endpoint_maxp(&urb->ep->desc)));
679 /* A zero-length transfer still involves at least one packet. */
680 if (total_packet_count == 0)
681 total_packet_count++;
682 @@ -3664,9 +3667,11 @@ static int xhci_queue_isoc_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
683 td = urb_priv->td[i];
684 for (j = 0; j < trbs_per_td; j++) {
685 u32 remainder = 0;
686 - field = TRB_TBC(burst_count) | TRB_TLBPC(residue);
687 + field = 0;
688
689 if (first_trb) {
690 + field = TRB_TBC(burst_count) |
691 + TRB_TLBPC(residue);
692 /* Queue the isoc TRB */
693 field |= TRB_TYPE(TRB_ISOC);
694 /* Assume URB_ISO_ASAP is set */
695 diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
696 index 71e80ab..b786b7d 100644
697 --- a/drivers/usb/serial/ftdi_sio.c
698 +++ b/drivers/usb/serial/ftdi_sio.c
699 @@ -585,6 +585,7 @@ static struct usb_device_id id_table_combined [] = {
700 /*
701 * ELV devices:
702 */
703 + { USB_DEVICE(FTDI_ELV_VID, FTDI_ELV_WS300_PID) },
704 { USB_DEVICE(FTDI_VID, FTDI_ELV_USR_PID) },
705 { USB_DEVICE(FTDI_VID, FTDI_ELV_MSM1_PID) },
706 { USB_DEVICE(FTDI_VID, FTDI_ELV_KL100_PID) },
707 @@ -671,6 +672,7 @@ static struct usb_device_id id_table_combined [] = {
708 { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_5_PID) },
709 { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_6_PID) },
710 { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_7_PID) },
711 + { USB_DEVICE(FTDI_VID, FTDI_OMNI1509) },
712 { USB_DEVICE(MOBILITY_VID, MOBILITY_USB_SERIAL_PID) },
713 { USB_DEVICE(FTDI_VID, FTDI_ACTIVE_ROBOTS_PID) },
714 { USB_DEVICE(FTDI_VID, FTDI_MHAM_KW_PID) },
715 diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
716 index fa5d560..9d359e1 100644
717 --- a/drivers/usb/serial/ftdi_sio_ids.h
718 +++ b/drivers/usb/serial/ftdi_sio_ids.h
719 @@ -147,6 +147,11 @@
720 #define XSENS_CONVERTER_6_PID 0xD38E
721 #define XSENS_CONVERTER_7_PID 0xD38F
722
723 +/**
724 + * Zolix (www.zolix.com.cb) product ids
725 + */
726 +#define FTDI_OMNI1509 0xD491 /* Omni1509 embedded USB-serial */
727 +
728 /*
729 * NDI (www.ndigital.com) product ids
730 */
731 @@ -204,7 +209,7 @@
732
733 /*
734 * ELV USB devices submitted by Christian Abt of ELV (www.elv.de).
735 - * All of these devices use FTDI's vendor ID (0x0403).
736 + * Almost all of these devices use FTDI's vendor ID (0x0403).
737 * Further IDs taken from ELV Windows .inf file.
738 *
739 * The previously included PID for the UO 100 module was incorrect.
740 @@ -212,6 +217,8 @@
741 *
742 * Armin Laeuger originally sent the PID for the UM 100 module.
743 */
744 +#define FTDI_ELV_VID 0x1B1F /* ELV AG */
745 +#define FTDI_ELV_WS300_PID 0xC006 /* eQ3 WS 300 PC II */
746 #define FTDI_ELV_USR_PID 0xE000 /* ELV Universal-Sound-Recorder */
747 #define FTDI_ELV_MSM1_PID 0xE001 /* ELV Mini-Sound-Modul */
748 #define FTDI_ELV_KL100_PID 0xE002 /* ELV Kfz-Leistungsmesser KL 100 */
749 diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
750 index f2727e4..b32b4f3 100644
751 --- a/drivers/usb/serial/option.c
752 +++ b/drivers/usb/serial/option.c
753 @@ -243,6 +243,7 @@ static void option_instat_callback(struct urb *urb);
754 #define TELIT_PRODUCT_CC864_DUAL 0x1005
755 #define TELIT_PRODUCT_CC864_SINGLE 0x1006
756 #define TELIT_PRODUCT_DE910_DUAL 0x1010
757 +#define TELIT_PRODUCT_LE920 0x1200
758
759 /* ZTE PRODUCTS */
760 #define ZTE_VENDOR_ID 0x19d2
761 @@ -454,6 +455,10 @@ static void option_instat_callback(struct urb *urb);
762 #define TPLINK_VENDOR_ID 0x2357
763 #define TPLINK_PRODUCT_MA180 0x0201
764
765 +/* Changhong products */
766 +#define CHANGHONG_VENDOR_ID 0x2077
767 +#define CHANGHONG_PRODUCT_CH690 0x7001
768 +
769 /* some devices interfaces need special handling due to a number of reasons */
770 enum option_blacklist_reason {
771 OPTION_BLACKLIST_NONE = 0,
772 @@ -535,6 +540,11 @@ static const struct option_blacklist_info zte_1255_blacklist = {
773 .reserved = BIT(3) | BIT(4),
774 };
775
776 +static const struct option_blacklist_info telit_le920_blacklist = {
777 + .sendsetup = BIT(0),
778 + .reserved = BIT(1) | BIT(5),
779 +};
780 +
781 static const struct usb_device_id option_ids[] = {
782 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
783 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
784 @@ -785,6 +795,8 @@ static const struct usb_device_id option_ids[] = {
785 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_DUAL) },
786 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_SINGLE) },
787 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_DE910_DUAL) },
788 + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920),
789 + .driver_info = (kernel_ulong_t)&telit_le920_blacklist },
790 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */
791 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0002, 0xff, 0xff, 0xff),
792 .driver_info = (kernel_ulong_t)&net_intf1_blacklist },
793 @@ -1319,6 +1331,7 @@ static const struct usb_device_id option_ids[] = {
794 { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T) },
795 { USB_DEVICE(TPLINK_VENDOR_ID, TPLINK_PRODUCT_MA180),
796 .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
797 + { USB_DEVICE(CHANGHONG_VENDOR_ID, CHANGHONG_PRODUCT_CH690) },
798 { } /* Terminating entry */
799 };
800 MODULE_DEVICE_TABLE(usb, option_ids);
801 diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
802 index aa148c2..2466254 100644
803 --- a/drivers/usb/serial/qcserial.c
804 +++ b/drivers/usb/serial/qcserial.c
805 @@ -53,6 +53,7 @@ static const struct usb_device_id id_table[] = {
806 {DEVICE_G1K(0x05c6, 0x9221)}, /* Generic Gobi QDL device */
807 {DEVICE_G1K(0x05c6, 0x9231)}, /* Generic Gobi QDL device */
808 {DEVICE_G1K(0x1f45, 0x0001)}, /* Unknown Gobi QDL device */
809 + {DEVICE_G1K(0x1bc7, 0x900e)}, /* Telit Gobi QDL device */
810
811 /* Gobi 2000 devices */
812 {USB_DEVICE(0x1410, 0xa010)}, /* Novatel Gobi 2000 QDL device */
813 diff --git a/drivers/usb/storage/initializers.c b/drivers/usb/storage/initializers.c
814 index 105d900..16b0bf0 100644
815 --- a/drivers/usb/storage/initializers.c
816 +++ b/drivers/usb/storage/initializers.c
817 @@ -92,8 +92,8 @@ int usb_stor_ucr61s2b_init(struct us_data *us)
818 return 0;
819 }
820
821 -/* This places the HUAWEI E220 devices in multi-port mode */
822 -int usb_stor_huawei_e220_init(struct us_data *us)
823 +/* This places the HUAWEI usb dongles in multi-port mode */
824 +static int usb_stor_huawei_feature_init(struct us_data *us)
825 {
826 int result;
827
828 @@ -104,3 +104,75 @@ int usb_stor_huawei_e220_init(struct us_data *us)
829 US_DEBUGP("Huawei mode set result is %d\n", result);
830 return 0;
831 }
832 +
833 +/*
834 + * It will send a scsi switch command called rewind' to huawei dongle.
835 + * When the dongle receives this command at the first time,
836 + * it will reboot immediately. After rebooted, it will ignore this command.
837 + * So it is unnecessary to read its response.
838 + */
839 +static int usb_stor_huawei_scsi_init(struct us_data *us)
840 +{
841 + int result = 0;
842 + int act_len = 0;
843 + struct bulk_cb_wrap *bcbw = (struct bulk_cb_wrap *) us->iobuf;
844 + char rewind_cmd[] = {0x11, 0x06, 0x20, 0x00, 0x00, 0x01, 0x01, 0x00,
845 + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
846 +
847 + bcbw->Signature = cpu_to_le32(US_BULK_CB_SIGN);
848 + bcbw->Tag = 0;
849 + bcbw->DataTransferLength = 0;
850 + bcbw->Flags = bcbw->Lun = 0;
851 + bcbw->Length = sizeof(rewind_cmd);
852 + memset(bcbw->CDB, 0, sizeof(bcbw->CDB));
853 + memcpy(bcbw->CDB, rewind_cmd, sizeof(rewind_cmd));
854 +
855 + result = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe, bcbw,
856 + US_BULK_CB_WRAP_LEN, &act_len);
857 + US_DEBUGP("transfer actual length=%d, result=%d\n", act_len, result);
858 + return result;
859 +}
860 +
861 +/*
862 + * It tries to find the supported Huawei USB dongles.
863 + * In Huawei, they assign the following product IDs
864 + * for all of their mobile broadband dongles,
865 + * including the new dongles in the future.
866 + * So if the product ID is not included in this list,
867 + * it means it is not Huawei's mobile broadband dongles.
868 + */
869 +static int usb_stor_huawei_dongles_pid(struct us_data *us)
870 +{
871 + struct usb_interface_descriptor *idesc;
872 + int idProduct;
873 +
874 + idesc = &us->pusb_intf->cur_altsetting->desc;
875 + idProduct = us->pusb_dev->descriptor.idProduct;
876 + /* The first port is CDROM,
877 + * means the dongle in the single port mode,
878 + * and a switch command is required to be sent. */
879 + if (idesc && idesc->bInterfaceNumber == 0) {
880 + if ((idProduct == 0x1001)
881 + || (idProduct == 0x1003)
882 + || (idProduct == 0x1004)
883 + || (idProduct >= 0x1401 && idProduct <= 0x1500)
884 + || (idProduct >= 0x1505 && idProduct <= 0x1600)
885 + || (idProduct >= 0x1c02 && idProduct <= 0x2202)) {
886 + return 1;
887 + }
888 + }
889 + return 0;
890 +}
891 +
892 +int usb_stor_huawei_init(struct us_data *us)
893 +{
894 + int result = 0;
895 +
896 + if (usb_stor_huawei_dongles_pid(us)) {
897 + if (us->pusb_dev->descriptor.idProduct >= 0x1446)
898 + result = usb_stor_huawei_scsi_init(us);
899 + else
900 + result = usb_stor_huawei_feature_init(us);
901 + }
902 + return result;
903 +}
904 diff --git a/drivers/usb/storage/initializers.h b/drivers/usb/storage/initializers.h
905 index 529327f..5376d4f 100644
906 --- a/drivers/usb/storage/initializers.h
907 +++ b/drivers/usb/storage/initializers.h
908 @@ -46,5 +46,5 @@ int usb_stor_euscsi_init(struct us_data *us);
909 * flash reader */
910 int usb_stor_ucr61s2b_init(struct us_data *us);
911
912 -/* This places the HUAWEI E220 devices in multi-port mode */
913 -int usb_stor_huawei_e220_init(struct us_data *us);
914 +/* This places the HUAWEI usb dongles in multi-port mode */
915 +int usb_stor_huawei_init(struct us_data *us);
916 diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
917 index d305a5a..72923b5 100644
918 --- a/drivers/usb/storage/unusual_devs.h
919 +++ b/drivers/usb/storage/unusual_devs.h
920 @@ -1527,335 +1527,10 @@ UNUSUAL_DEV( 0x1210, 0x0003, 0x0100, 0x0100,
921 /* Reported by fangxiaozhi <huananhu@huawei.com>
922 * This brings the HUAWEI data card devices into multi-port mode
923 */
924 -UNUSUAL_DEV( 0x12d1, 0x1001, 0x0000, 0x0000,
925 +UNUSUAL_VENDOR_INTF(0x12d1, 0x08, 0x06, 0x50,
926 "HUAWEI MOBILE",
927 "Mass Storage",
928 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
929 - 0),
930 -UNUSUAL_DEV( 0x12d1, 0x1003, 0x0000, 0x0000,
931 - "HUAWEI MOBILE",
932 - "Mass Storage",
933 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
934 - 0),
935 -UNUSUAL_DEV( 0x12d1, 0x1004, 0x0000, 0x0000,
936 - "HUAWEI MOBILE",
937 - "Mass Storage",
938 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
939 - 0),
940 -UNUSUAL_DEV( 0x12d1, 0x1401, 0x0000, 0x0000,
941 - "HUAWEI MOBILE",
942 - "Mass Storage",
943 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
944 - 0),
945 -UNUSUAL_DEV( 0x12d1, 0x1402, 0x0000, 0x0000,
946 - "HUAWEI MOBILE",
947 - "Mass Storage",
948 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
949 - 0),
950 -UNUSUAL_DEV( 0x12d1, 0x1403, 0x0000, 0x0000,
951 - "HUAWEI MOBILE",
952 - "Mass Storage",
953 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
954 - 0),
955 -UNUSUAL_DEV( 0x12d1, 0x1404, 0x0000, 0x0000,
956 - "HUAWEI MOBILE",
957 - "Mass Storage",
958 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
959 - 0),
960 -UNUSUAL_DEV( 0x12d1, 0x1405, 0x0000, 0x0000,
961 - "HUAWEI MOBILE",
962 - "Mass Storage",
963 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
964 - 0),
965 -UNUSUAL_DEV( 0x12d1, 0x1406, 0x0000, 0x0000,
966 - "HUAWEI MOBILE",
967 - "Mass Storage",
968 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
969 - 0),
970 -UNUSUAL_DEV( 0x12d1, 0x1407, 0x0000, 0x0000,
971 - "HUAWEI MOBILE",
972 - "Mass Storage",
973 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
974 - 0),
975 -UNUSUAL_DEV( 0x12d1, 0x1408, 0x0000, 0x0000,
976 - "HUAWEI MOBILE",
977 - "Mass Storage",
978 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
979 - 0),
980 -UNUSUAL_DEV( 0x12d1, 0x1409, 0x0000, 0x0000,
981 - "HUAWEI MOBILE",
982 - "Mass Storage",
983 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
984 - 0),
985 -UNUSUAL_DEV( 0x12d1, 0x140A, 0x0000, 0x0000,
986 - "HUAWEI MOBILE",
987 - "Mass Storage",
988 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
989 - 0),
990 -UNUSUAL_DEV( 0x12d1, 0x140B, 0x0000, 0x0000,
991 - "HUAWEI MOBILE",
992 - "Mass Storage",
993 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
994 - 0),
995 -UNUSUAL_DEV( 0x12d1, 0x140C, 0x0000, 0x0000,
996 - "HUAWEI MOBILE",
997 - "Mass Storage",
998 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
999 - 0),
1000 -UNUSUAL_DEV( 0x12d1, 0x140D, 0x0000, 0x0000,
1001 - "HUAWEI MOBILE",
1002 - "Mass Storage",
1003 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1004 - 0),
1005 -UNUSUAL_DEV( 0x12d1, 0x140E, 0x0000, 0x0000,
1006 - "HUAWEI MOBILE",
1007 - "Mass Storage",
1008 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1009 - 0),
1010 -UNUSUAL_DEV( 0x12d1, 0x140F, 0x0000, 0x0000,
1011 - "HUAWEI MOBILE",
1012 - "Mass Storage",
1013 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1014 - 0),
1015 -UNUSUAL_DEV( 0x12d1, 0x1410, 0x0000, 0x0000,
1016 - "HUAWEI MOBILE",
1017 - "Mass Storage",
1018 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1019 - 0),
1020 -UNUSUAL_DEV( 0x12d1, 0x1411, 0x0000, 0x0000,
1021 - "HUAWEI MOBILE",
1022 - "Mass Storage",
1023 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1024 - 0),
1025 -UNUSUAL_DEV( 0x12d1, 0x1412, 0x0000, 0x0000,
1026 - "HUAWEI MOBILE",
1027 - "Mass Storage",
1028 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1029 - 0),
1030 -UNUSUAL_DEV( 0x12d1, 0x1413, 0x0000, 0x0000,
1031 - "HUAWEI MOBILE",
1032 - "Mass Storage",
1033 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1034 - 0),
1035 -UNUSUAL_DEV( 0x12d1, 0x1414, 0x0000, 0x0000,
1036 - "HUAWEI MOBILE",
1037 - "Mass Storage",
1038 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1039 - 0),
1040 -UNUSUAL_DEV( 0x12d1, 0x1415, 0x0000, 0x0000,
1041 - "HUAWEI MOBILE",
1042 - "Mass Storage",
1043 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1044 - 0),
1045 -UNUSUAL_DEV( 0x12d1, 0x1416, 0x0000, 0x0000,
1046 - "HUAWEI MOBILE",
1047 - "Mass Storage",
1048 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1049 - 0),
1050 -UNUSUAL_DEV( 0x12d1, 0x1417, 0x0000, 0x0000,
1051 - "HUAWEI MOBILE",
1052 - "Mass Storage",
1053 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1054 - 0),
1055 -UNUSUAL_DEV( 0x12d1, 0x1418, 0x0000, 0x0000,
1056 - "HUAWEI MOBILE",
1057 - "Mass Storage",
1058 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1059 - 0),
1060 -UNUSUAL_DEV( 0x12d1, 0x1419, 0x0000, 0x0000,
1061 - "HUAWEI MOBILE",
1062 - "Mass Storage",
1063 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1064 - 0),
1065 -UNUSUAL_DEV( 0x12d1, 0x141A, 0x0000, 0x0000,
1066 - "HUAWEI MOBILE",
1067 - "Mass Storage",
1068 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1069 - 0),
1070 -UNUSUAL_DEV( 0x12d1, 0x141B, 0x0000, 0x0000,
1071 - "HUAWEI MOBILE",
1072 - "Mass Storage",
1073 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1074 - 0),
1075 -UNUSUAL_DEV( 0x12d1, 0x141C, 0x0000, 0x0000,
1076 - "HUAWEI MOBILE",
1077 - "Mass Storage",
1078 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1079 - 0),
1080 -UNUSUAL_DEV( 0x12d1, 0x141D, 0x0000, 0x0000,
1081 - "HUAWEI MOBILE",
1082 - "Mass Storage",
1083 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1084 - 0),
1085 -UNUSUAL_DEV( 0x12d1, 0x141E, 0x0000, 0x0000,
1086 - "HUAWEI MOBILE",
1087 - "Mass Storage",
1088 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1089 - 0),
1090 -UNUSUAL_DEV( 0x12d1, 0x141F, 0x0000, 0x0000,
1091 - "HUAWEI MOBILE",
1092 - "Mass Storage",
1093 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1094 - 0),
1095 -UNUSUAL_DEV( 0x12d1, 0x1420, 0x0000, 0x0000,
1096 - "HUAWEI MOBILE",
1097 - "Mass Storage",
1098 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1099 - 0),
1100 -UNUSUAL_DEV( 0x12d1, 0x1421, 0x0000, 0x0000,
1101 - "HUAWEI MOBILE",
1102 - "Mass Storage",
1103 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1104 - 0),
1105 -UNUSUAL_DEV( 0x12d1, 0x1422, 0x0000, 0x0000,
1106 - "HUAWEI MOBILE",
1107 - "Mass Storage",
1108 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1109 - 0),
1110 -UNUSUAL_DEV( 0x12d1, 0x1423, 0x0000, 0x0000,
1111 - "HUAWEI MOBILE",
1112 - "Mass Storage",
1113 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1114 - 0),
1115 -UNUSUAL_DEV( 0x12d1, 0x1424, 0x0000, 0x0000,
1116 - "HUAWEI MOBILE",
1117 - "Mass Storage",
1118 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1119 - 0),
1120 -UNUSUAL_DEV( 0x12d1, 0x1425, 0x0000, 0x0000,
1121 - "HUAWEI MOBILE",
1122 - "Mass Storage",
1123 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1124 - 0),
1125 -UNUSUAL_DEV( 0x12d1, 0x1426, 0x0000, 0x0000,
1126 - "HUAWEI MOBILE",
1127 - "Mass Storage",
1128 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1129 - 0),
1130 -UNUSUAL_DEV( 0x12d1, 0x1427, 0x0000, 0x0000,
1131 - "HUAWEI MOBILE",
1132 - "Mass Storage",
1133 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1134 - 0),
1135 -UNUSUAL_DEV( 0x12d1, 0x1428, 0x0000, 0x0000,
1136 - "HUAWEI MOBILE",
1137 - "Mass Storage",
1138 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1139 - 0),
1140 -UNUSUAL_DEV( 0x12d1, 0x1429, 0x0000, 0x0000,
1141 - "HUAWEI MOBILE",
1142 - "Mass Storage",
1143 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1144 - 0),
1145 -UNUSUAL_DEV( 0x12d1, 0x142A, 0x0000, 0x0000,
1146 - "HUAWEI MOBILE",
1147 - "Mass Storage",
1148 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1149 - 0),
1150 -UNUSUAL_DEV( 0x12d1, 0x142B, 0x0000, 0x0000,
1151 - "HUAWEI MOBILE",
1152 - "Mass Storage",
1153 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1154 - 0),
1155 -UNUSUAL_DEV( 0x12d1, 0x142C, 0x0000, 0x0000,
1156 - "HUAWEI MOBILE",
1157 - "Mass Storage",
1158 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1159 - 0),
1160 -UNUSUAL_DEV( 0x12d1, 0x142D, 0x0000, 0x0000,
1161 - "HUAWEI MOBILE",
1162 - "Mass Storage",
1163 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1164 - 0),
1165 -UNUSUAL_DEV( 0x12d1, 0x142E, 0x0000, 0x0000,
1166 - "HUAWEI MOBILE",
1167 - "Mass Storage",
1168 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1169 - 0),
1170 -UNUSUAL_DEV( 0x12d1, 0x142F, 0x0000, 0x0000,
1171 - "HUAWEI MOBILE",
1172 - "Mass Storage",
1173 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1174 - 0),
1175 -UNUSUAL_DEV( 0x12d1, 0x1430, 0x0000, 0x0000,
1176 - "HUAWEI MOBILE",
1177 - "Mass Storage",
1178 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1179 - 0),
1180 -UNUSUAL_DEV( 0x12d1, 0x1431, 0x0000, 0x0000,
1181 - "HUAWEI MOBILE",
1182 - "Mass Storage",
1183 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1184 - 0),
1185 -UNUSUAL_DEV( 0x12d1, 0x1432, 0x0000, 0x0000,
1186 - "HUAWEI MOBILE",
1187 - "Mass Storage",
1188 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1189 - 0),
1190 -UNUSUAL_DEV( 0x12d1, 0x1433, 0x0000, 0x0000,
1191 - "HUAWEI MOBILE",
1192 - "Mass Storage",
1193 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1194 - 0),
1195 -UNUSUAL_DEV( 0x12d1, 0x1434, 0x0000, 0x0000,
1196 - "HUAWEI MOBILE",
1197 - "Mass Storage",
1198 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1199 - 0),
1200 -UNUSUAL_DEV( 0x12d1, 0x1435, 0x0000, 0x0000,
1201 - "HUAWEI MOBILE",
1202 - "Mass Storage",
1203 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1204 - 0),
1205 -UNUSUAL_DEV( 0x12d1, 0x1436, 0x0000, 0x0000,
1206 - "HUAWEI MOBILE",
1207 - "Mass Storage",
1208 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1209 - 0),
1210 -UNUSUAL_DEV( 0x12d1, 0x1437, 0x0000, 0x0000,
1211 - "HUAWEI MOBILE",
1212 - "Mass Storage",
1213 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1214 - 0),
1215 -UNUSUAL_DEV( 0x12d1, 0x1438, 0x0000, 0x0000,
1216 - "HUAWEI MOBILE",
1217 - "Mass Storage",
1218 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1219 - 0),
1220 -UNUSUAL_DEV( 0x12d1, 0x1439, 0x0000, 0x0000,
1221 - "HUAWEI MOBILE",
1222 - "Mass Storage",
1223 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1224 - 0),
1225 -UNUSUAL_DEV( 0x12d1, 0x143A, 0x0000, 0x0000,
1226 - "HUAWEI MOBILE",
1227 - "Mass Storage",
1228 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1229 - 0),
1230 -UNUSUAL_DEV( 0x12d1, 0x143B, 0x0000, 0x0000,
1231 - "HUAWEI MOBILE",
1232 - "Mass Storage",
1233 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1234 - 0),
1235 -UNUSUAL_DEV( 0x12d1, 0x143C, 0x0000, 0x0000,
1236 - "HUAWEI MOBILE",
1237 - "Mass Storage",
1238 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1239 - 0),
1240 -UNUSUAL_DEV( 0x12d1, 0x143D, 0x0000, 0x0000,
1241 - "HUAWEI MOBILE",
1242 - "Mass Storage",
1243 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1244 - 0),
1245 -UNUSUAL_DEV( 0x12d1, 0x143E, 0x0000, 0x0000,
1246 - "HUAWEI MOBILE",
1247 - "Mass Storage",
1248 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1249 - 0),
1250 -UNUSUAL_DEV( 0x12d1, 0x143F, 0x0000, 0x0000,
1251 - "HUAWEI MOBILE",
1252 - "Mass Storage",
1253 - USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_e220_init,
1254 + USB_SC_DEVICE, USB_PR_DEVICE, usb_stor_huawei_init,
1255 0),
1256
1257 /* Reported by Vilius Bilinkevicius <vilisas AT xxx DOT lt) */
1258 diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
1259 index 12aa726..69b9eec 100644
1260 --- a/drivers/usb/storage/usb.c
1261 +++ b/drivers/usb/storage/usb.c
1262 @@ -120,6 +120,17 @@ MODULE_PARM_DESC(quirks, "supplemental list of device IDs and their quirks");
1263 .useTransport = use_transport, \
1264 }
1265
1266 +#define UNUSUAL_VENDOR_INTF(idVendor, cl, sc, pr, \
1267 + vendor_name, product_name, use_protocol, use_transport, \
1268 + init_function, Flags) \
1269 +{ \
1270 + .vendorName = vendor_name, \
1271 + .productName = product_name, \
1272 + .useProtocol = use_protocol, \
1273 + .useTransport = use_transport, \
1274 + .initFunction = init_function, \
1275 +}
1276 +
1277 static struct us_unusual_dev us_unusual_dev_list[] = {
1278 # include "unusual_devs.h"
1279 { } /* Terminating entry */
1280 @@ -131,6 +142,7 @@ static struct us_unusual_dev for_dynamic_ids =
1281 #undef UNUSUAL_DEV
1282 #undef COMPLIANT_DEV
1283 #undef USUAL_DEV
1284 +#undef UNUSUAL_VENDOR_INTF
1285
1286 #ifdef CONFIG_LOCKDEP
1287
1288 diff --git a/drivers/usb/storage/usual-tables.c b/drivers/usb/storage/usual-tables.c
1289 index b78a526..5ef8ce7 100644
1290 --- a/drivers/usb/storage/usual-tables.c
1291 +++ b/drivers/usb/storage/usual-tables.c
1292 @@ -41,6 +41,20 @@
1293 #define USUAL_DEV(useProto, useTrans) \
1294 { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, useProto, useTrans) }
1295
1296 +/* Define the device is matched with Vendor ID and interface descriptors */
1297 +#define UNUSUAL_VENDOR_INTF(id_vendor, cl, sc, pr, \
1298 + vendorName, productName, useProtocol, useTransport, \
1299 + initFunction, flags) \
1300 +{ \
1301 + .match_flags = USB_DEVICE_ID_MATCH_INT_INFO \
1302 + | USB_DEVICE_ID_MATCH_VENDOR, \
1303 + .idVendor = (id_vendor), \
1304 + .bInterfaceClass = (cl), \
1305 + .bInterfaceSubClass = (sc), \
1306 + .bInterfaceProtocol = (pr), \
1307 + .driver_info = (flags) \
1308 +}
1309 +
1310 struct usb_device_id usb_storage_usb_ids[] = {
1311 # include "unusual_devs.h"
1312 { } /* Terminating entry */
1313 @@ -50,6 +64,7 @@ MODULE_DEVICE_TABLE(usb, usb_storage_usb_ids);
1314 #undef UNUSUAL_DEV
1315 #undef COMPLIANT_DEV
1316 #undef USUAL_DEV
1317 +#undef UNUSUAL_VENDOR_INTF
1318
1319 /*
1320 * The table of devices to ignore
1321 diff --git a/fs/nilfs2/ioctl.c b/fs/nilfs2/ioctl.c
1322 index fdb1807..f385935 100644
1323 --- a/fs/nilfs2/ioctl.c
1324 +++ b/fs/nilfs2/ioctl.c
1325 @@ -664,8 +664,11 @@ static int nilfs_ioctl_clean_segments(struct inode *inode, struct file *filp,
1326 if (ret < 0)
1327 printk(KERN_ERR "NILFS: GC failed during preparation: "
1328 "cannot read source blocks: err=%d\n", ret);
1329 - else
1330 + else {
1331 + if (nilfs_sb_need_update(nilfs))
1332 + set_nilfs_discontinued(nilfs);
1333 ret = nilfs_clean_segments(inode->i_sb, argv, kbufs);
1334 + }
1335
1336 nilfs_remove_all_gcinodes(nilfs);
1337 clear_nilfs_gc_running(nilfs);
1338 diff --git a/include/uapi/linux/usb/ch9.h b/include/uapi/linux/usb/ch9.h
1339 index 5059847..f738e25 100644
1340 --- a/include/uapi/linux/usb/ch9.h
1341 +++ b/include/uapi/linux/usb/ch9.h
1342 @@ -152,6 +152,12 @@
1343 #define USB_INTRF_FUNC_SUSPEND_LP (1 << (8 + 0))
1344 #define USB_INTRF_FUNC_SUSPEND_RW (1 << (8 + 1))
1345
1346 +/*
1347 + * Interface status, Figure 9-5 USB 3.0 spec
1348 + */
1349 +#define USB_INTRF_STAT_FUNC_RW_CAP 1
1350 +#define USB_INTRF_STAT_FUNC_RW 2
1351 +
1352 #define USB_ENDPOINT_HALT 0 /* IN/OUT will STALL */
1353
1354 /* Bit array elements as returned by the USB_REQ_GET_STATUS request. */
1355 diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
1356 index 418feb0..4f02b28 100644
1357 --- a/kernel/sched/rt.c
1358 +++ b/kernel/sched/rt.c
1359 @@ -566,7 +566,7 @@ static inline struct rt_bandwidth *sched_rt_bandwidth(struct rt_rq *rt_rq)
1360 static int do_balance_runtime(struct rt_rq *rt_rq)
1361 {
1362 struct rt_bandwidth *rt_b = sched_rt_bandwidth(rt_rq);
1363 - struct root_domain *rd = cpu_rq(smp_processor_id())->rd;
1364 + struct root_domain *rd = rq_of_rt_rq(rt_rq)->rd;
1365 int i, weight, more = 0;
1366 u64 rt_period;
1367
1368 diff --git a/lib/digsig.c b/lib/digsig.c
1369 index 8c0e629..dc2be7e 100644
1370 --- a/lib/digsig.c
1371 +++ b/lib/digsig.c
1372 @@ -162,6 +162,8 @@ static int digsig_verify_rsa(struct key *key,
1373 memset(out1, 0, head);
1374 memcpy(out1 + head, p, l);
1375
1376 + kfree(p);
1377 +
1378 err = pkcs_1_v1_5_decode_emsa(out1, len, mblen, out2, &len);
1379 if (err)
1380 goto err;
1381 diff --git a/mm/hugetlb.c b/mm/hugetlb.c
1382 index f198aca..b969ed4 100644
1383 --- a/mm/hugetlb.c
1384 +++ b/mm/hugetlb.c
1385 @@ -3028,6 +3028,7 @@ void hugetlb_change_protection(struct vm_area_struct *vma,
1386 if (!huge_pte_none(huge_ptep_get(ptep))) {
1387 pte = huge_ptep_get_and_clear(mm, address, ptep);
1388 pte = pte_mkhuge(pte_modify(pte, newprot));
1389 + pte = arch_make_huge_pte(pte, vma, NULL, 0);
1390 set_huge_pte_at(mm, address, ptep, pte);
1391 }
1392 }
1393 diff --git a/mm/migrate.c b/mm/migrate.c
1394 index 77ed2d7..346d32d 100644
1395 --- a/mm/migrate.c
1396 +++ b/mm/migrate.c
1397 @@ -143,8 +143,10 @@ static int remove_migration_pte(struct page *new, struct vm_area_struct *vma,
1398 if (is_write_migration_entry(entry))
1399 pte = pte_mkwrite(pte);
1400 #ifdef CONFIG_HUGETLB_PAGE
1401 - if (PageHuge(new))
1402 + if (PageHuge(new)) {
1403 pte = pte_mkhuge(pte);
1404 + pte = arch_make_huge_pte(pte, vma, new, 0);
1405 + }
1406 #endif
1407 flush_cache_page(vma, addr, pte_pfn(pte));
1408 set_pte_at(mm, addr, ptep, pte);