Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2075 - (hide annotations) (download)
Mon Feb 18 12:04:00 2013 UTC (11 years, 3 months ago) by niro
File size: 48666 byte(s)
-linux-3.7.7
1 niro 2075 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);