Annotation of /trunk/kernel-lts/patches-3.4/0168-3.4.69-all-fixes.patch
Parent Directory | Revision Log
Revision 2323 -
(hide annotations)
(download)
Mon Nov 18 12:00:18 2013 UTC (10 years, 10 months ago) by niro
File size: 37214 byte(s)
Mon Nov 18 12:00:18 2013 UTC (10 years, 10 months ago) by niro
File size: 37214 byte(s)
-linux-3.4.69
1 | niro | 2323 | diff --git a/arch/parisc/kernel/head.S b/arch/parisc/kernel/head.S |
2 | index 37aabd772fbb..d2d58258aea6 100644 | ||
3 | --- a/arch/parisc/kernel/head.S | ||
4 | +++ b/arch/parisc/kernel/head.S | ||
5 | @@ -195,6 +195,8 @@ common_stext: | ||
6 | ldw MEM_PDC_HI(%r0),%r6 | ||
7 | depd %r6, 31, 32, %r3 /* move to upper word */ | ||
8 | |||
9 | + mfctl %cr30,%r6 /* PCX-W2 firmware bug */ | ||
10 | + | ||
11 | ldo PDC_PSW(%r0),%arg0 /* 21 */ | ||
12 | ldo PDC_PSW_SET_DEFAULTS(%r0),%arg1 /* 2 */ | ||
13 | ldo PDC_PSW_WIDE_BIT(%r0),%arg2 /* 2 */ | ||
14 | @@ -203,6 +205,8 @@ common_stext: | ||
15 | copy %r0,%arg3 | ||
16 | |||
17 | stext_pdc_ret: | ||
18 | + mtctl %r6,%cr30 /* restore task thread info */ | ||
19 | + | ||
20 | /* restore rfi target address*/ | ||
21 | ldd TI_TASK-THREAD_SZ_ALGN(%sp), %r10 | ||
22 | tophys_r1 %r10 | ||
23 | diff --git a/arch/um/kernel/exitcode.c b/arch/um/kernel/exitcode.c | ||
24 | index 829df49dee99..41ebbfebb333 100644 | ||
25 | --- a/arch/um/kernel/exitcode.c | ||
26 | +++ b/arch/um/kernel/exitcode.c | ||
27 | @@ -40,9 +40,11 @@ static ssize_t exitcode_proc_write(struct file *file, | ||
28 | const char __user *buffer, size_t count, loff_t *pos) | ||
29 | { | ||
30 | char *end, buf[sizeof("nnnnn\0")]; | ||
31 | + size_t size; | ||
32 | int tmp; | ||
33 | |||
34 | - if (copy_from_user(buf, buffer, count)) | ||
35 | + size = min(count, sizeof(buf)); | ||
36 | + if (copy_from_user(buf, buffer, size)) | ||
37 | return -EFAULT; | ||
38 | |||
39 | tmp = simple_strtol(buf, &end, 0); | ||
40 | diff --git a/arch/xtensa/kernel/signal.c b/arch/xtensa/kernel/signal.c | ||
41 | index d78869a00b11..b08caaa59813 100644 | ||
42 | --- a/arch/xtensa/kernel/signal.c | ||
43 | +++ b/arch/xtensa/kernel/signal.c | ||
44 | @@ -343,7 +343,7 @@ static int setup_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | ||
45 | |||
46 | sp = regs->areg[1]; | ||
47 | |||
48 | - if ((ka->sa.sa_flags & SA_ONSTACK) != 0 && ! on_sig_stack(sp)) { | ||
49 | + if ((ka->sa.sa_flags & SA_ONSTACK) != 0 && sas_ss_flags(sp) == 0) { | ||
50 | sp = current->sas_ss_sp + current->sas_ss_size; | ||
51 | } | ||
52 | |||
53 | diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c | ||
54 | index e47c224d7c28..37fb4d6069a2 100644 | ||
55 | --- a/drivers/ata/libata-eh.c | ||
56 | +++ b/drivers/ata/libata-eh.c | ||
57 | @@ -1287,14 +1287,14 @@ void ata_eh_qc_complete(struct ata_queued_cmd *qc) | ||
58 | * should be retried. To be used from EH. | ||
59 | * | ||
60 | * SCSI midlayer limits the number of retries to scmd->allowed. | ||
61 | - * scmd->retries is decremented for commands which get retried | ||
62 | + * scmd->allowed is incremented for commands which get retried | ||
63 | * due to unrelated failures (qc->err_mask is zero). | ||
64 | */ | ||
65 | void ata_eh_qc_retry(struct ata_queued_cmd *qc) | ||
66 | { | ||
67 | struct scsi_cmnd *scmd = qc->scsicmd; | ||
68 | - if (!qc->err_mask && scmd->retries) | ||
69 | - scmd->retries--; | ||
70 | + if (!qc->err_mask) | ||
71 | + scmd->allowed++; | ||
72 | __ata_eh_qc_complete(qc); | ||
73 | } | ||
74 | |||
75 | diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c | ||
76 | index 6116e3b75393..e9f1ef5d9340 100644 | ||
77 | --- a/drivers/gpu/drm/drm_drv.c | ||
78 | +++ b/drivers/gpu/drm/drm_drv.c | ||
79 | @@ -420,9 +420,16 @@ long drm_ioctl(struct file *filp, | ||
80 | asize = drv_size; | ||
81 | } | ||
82 | else if ((nr >= DRM_COMMAND_END) || (nr < DRM_COMMAND_BASE)) { | ||
83 | + u32 drv_size; | ||
84 | + | ||
85 | ioctl = &drm_ioctls[nr]; | ||
86 | - cmd = ioctl->cmd; | ||
87 | + | ||
88 | + drv_size = _IOC_SIZE(ioctl->cmd); | ||
89 | usize = asize = _IOC_SIZE(cmd); | ||
90 | + if (drv_size > asize) | ||
91 | + asize = drv_size; | ||
92 | + | ||
93 | + cmd = ioctl->cmd; | ||
94 | } else | ||
95 | goto err_i1; | ||
96 | |||
97 | diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c | ||
98 | index 2f755e2aeb86..6f4627fe24a1 100644 | ||
99 | --- a/drivers/gpu/drm/radeon/atombios_encoders.c | ||
100 | +++ b/drivers/gpu/drm/radeon/atombios_encoders.c | ||
101 | @@ -1430,7 +1430,7 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode) | ||
102 | * does the same thing and more. | ||
103 | */ | ||
104 | if ((rdev->family != CHIP_RV710) && (rdev->family != CHIP_RV730) && | ||
105 | - (rdev->family != CHIP_RS880)) | ||
106 | + (rdev->family != CHIP_RS780) && (rdev->family != CHIP_RS880)) | ||
107 | atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0); | ||
108 | } | ||
109 | if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) { | ||
110 | diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c | ||
111 | index ce5f0449e1b6..75e66c612505 100644 | ||
112 | --- a/drivers/md/raid1.c | ||
113 | +++ b/drivers/md/raid1.c | ||
114 | @@ -1357,6 +1357,7 @@ static int raid1_spare_active(struct mddev *mddev) | ||
115 | } | ||
116 | } | ||
117 | if (rdev | ||
118 | + && rdev->recovery_offset == MaxSector | ||
119 | && !test_bit(Faulty, &rdev->flags) | ||
120 | && !test_and_set_bit(In_sync, &rdev->flags)) { | ||
121 | count++; | ||
122 | diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c | ||
123 | index f7febd8e3720..99a102d186ce 100644 | ||
124 | --- a/drivers/md/raid10.c | ||
125 | +++ b/drivers/md/raid10.c | ||
126 | @@ -1534,6 +1534,7 @@ static int raid10_spare_active(struct mddev *mddev) | ||
127 | } | ||
128 | sysfs_notify_dirent_safe(tmp->replacement->sysfs_state); | ||
129 | } else if (tmp->rdev | ||
130 | + && tmp->rdev->recovery_offset == MaxSector | ||
131 | && !test_bit(Faulty, &tmp->rdev->flags) | ||
132 | && !test_and_set_bit(In_sync, &tmp->rdev->flags)) { | ||
133 | count++; | ||
134 | diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c | ||
135 | index 00baa7e094f4..e2131ca64a5f 100644 | ||
136 | --- a/drivers/net/can/flexcan.c | ||
137 | +++ b/drivers/net/can/flexcan.c | ||
138 | @@ -60,7 +60,7 @@ | ||
139 | #define FLEXCAN_MCR_BCC BIT(16) | ||
140 | #define FLEXCAN_MCR_LPRIO_EN BIT(13) | ||
141 | #define FLEXCAN_MCR_AEN BIT(12) | ||
142 | -#define FLEXCAN_MCR_MAXMB(x) ((x) & 0xf) | ||
143 | +#define FLEXCAN_MCR_MAXMB(x) ((x) & 0x1f) | ||
144 | #define FLEXCAN_MCR_IDAM_A (0 << 8) | ||
145 | #define FLEXCAN_MCR_IDAM_B (1 << 8) | ||
146 | #define FLEXCAN_MCR_IDAM_C (2 << 8) | ||
147 | @@ -701,9 +701,11 @@ static int flexcan_chip_start(struct net_device *dev) | ||
148 | * | ||
149 | */ | ||
150 | reg_mcr = flexcan_read(®s->mcr); | ||
151 | + reg_mcr &= ~FLEXCAN_MCR_MAXMB(0xff); | ||
152 | reg_mcr |= FLEXCAN_MCR_FRZ | FLEXCAN_MCR_FEN | FLEXCAN_MCR_HALT | | ||
153 | FLEXCAN_MCR_SUPV | FLEXCAN_MCR_WRN_EN | | ||
154 | - FLEXCAN_MCR_IDAM_C | FLEXCAN_MCR_SRX_DIS; | ||
155 | + FLEXCAN_MCR_IDAM_C | FLEXCAN_MCR_SRX_DIS | | ||
156 | + FLEXCAN_MCR_MAXMB(FLEXCAN_TX_BUF_ID); | ||
157 | netdev_dbg(dev, "%s: writing mcr=0x%08x", __func__, reg_mcr); | ||
158 | flexcan_write(reg_mcr, ®s->mcr); | ||
159 | |||
160 | @@ -744,6 +746,10 @@ static int flexcan_chip_start(struct net_device *dev) | ||
161 | ®s->cantxfg[i].can_ctrl); | ||
162 | } | ||
163 | |||
164 | + /* Abort any pending TX, mark Mailbox as INACTIVE */ | ||
165 | + flexcan_write(FLEXCAN_MB_CNT_CODE(0x4), | ||
166 | + ®s->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl); | ||
167 | + | ||
168 | /* acceptance mask/acceptance code (accept everything) */ | ||
169 | flexcan_write(0x0, ®s->rxgmask); | ||
170 | flexcan_write(0x0, ®s->rx14mask); | ||
171 | diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c b/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c | ||
172 | index 21bc827c5fa6..9adb21a1133e 100644 | ||
173 | --- a/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c | ||
174 | +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c | ||
175 | @@ -343,7 +343,8 @@ bool rtl92cu_rx_query_desc(struct ieee80211_hw *hw, | ||
176 | (bool)GET_RX_DESC_PAGGR(pdesc)); | ||
177 | rx_status->mactime = GET_RX_DESC_TSFL(pdesc); | ||
178 | if (phystatus) { | ||
179 | - p_drvinfo = (struct rx_fwinfo_92c *)(pdesc + RTL_RX_DESC_SIZE); | ||
180 | + p_drvinfo = (struct rx_fwinfo_92c *)(skb->data + | ||
181 | + stats->rx_bufshift); | ||
182 | rtl92c_translate_rx_signal_stuff(hw, skb, stats, pdesc, | ||
183 | p_drvinfo); | ||
184 | } | ||
185 | diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c | ||
186 | index 0d279c445a30..e9313f85bc70 100644 | ||
187 | --- a/drivers/scsi/aacraid/linit.c | ||
188 | +++ b/drivers/scsi/aacraid/linit.c | ||
189 | @@ -777,6 +777,8 @@ static long aac_compat_do_ioctl(struct aac_dev *dev, unsigned cmd, unsigned long | ||
190 | static int aac_compat_ioctl(struct scsi_device *sdev, int cmd, void __user *arg) | ||
191 | { | ||
192 | struct aac_dev *dev = (struct aac_dev *)sdev->host->hostdata; | ||
193 | + if (!capable(CAP_SYS_RAWIO)) | ||
194 | + return -EPERM; | ||
195 | return aac_compat_do_ioctl(dev, cmd, (unsigned long)arg); | ||
196 | } | ||
197 | |||
198 | diff --git a/drivers/staging/bcm/Bcmchar.c b/drivers/staging/bcm/Bcmchar.c | ||
199 | index cf3059216958..c0d612ff8519 100644 | ||
200 | --- a/drivers/staging/bcm/Bcmchar.c | ||
201 | +++ b/drivers/staging/bcm/Bcmchar.c | ||
202 | @@ -1957,6 +1957,7 @@ cntrlEnd: | ||
203 | |||
204 | BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, OSAL_DBG, DBG_LVL_ALL, "Called IOCTL_BCM_GET_DEVICE_DRIVER_INFO\n"); | ||
205 | |||
206 | + memset(&DevInfo, 0, sizeof(DevInfo)); | ||
207 | DevInfo.MaxRDMBufferSize = BUFFER_4K; | ||
208 | DevInfo.u32DSDStartOffset = EEPROM_CALPARAM_START; | ||
209 | DevInfo.u32RxAlignmentCorrection = 0; | ||
210 | diff --git a/drivers/staging/ozwpan/ozcdev.c b/drivers/staging/ozwpan/ozcdev.c | ||
211 | index 1c380d687963..1c9245119567 100644 | ||
212 | --- a/drivers/staging/ozwpan/ozcdev.c | ||
213 | +++ b/drivers/staging/ozwpan/ozcdev.c | ||
214 | @@ -153,6 +153,9 @@ ssize_t oz_cdev_write(struct file *filp, const char __user *buf, size_t count, | ||
215 | struct oz_app_hdr *app_hdr; | ||
216 | struct oz_serial_ctx *ctx; | ||
217 | |||
218 | + if (count > sizeof(ei->data) - sizeof(*elt) - sizeof(*app_hdr)) | ||
219 | + return -EINVAL; | ||
220 | + | ||
221 | spin_lock_bh(&g_cdev.lock); | ||
222 | pd = g_cdev.active_pd; | ||
223 | if (pd) | ||
224 | diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c | ||
225 | index 8659cd94639a..f6904d819ca8 100644 | ||
226 | --- a/drivers/usb/core/quirks.c | ||
227 | +++ b/drivers/usb/core/quirks.c | ||
228 | @@ -119,6 +119,9 @@ static const struct usb_device_id usb_quirk_list[] = { | ||
229 | /* Alcor Micro Corp. Hub */ | ||
230 | { USB_DEVICE(0x058f, 0x9254), .driver_info = USB_QUIRK_RESET_RESUME }, | ||
231 | |||
232 | + /* MicroTouch Systems touchscreen */ | ||
233 | + { USB_DEVICE(0x0596, 0x051e), .driver_info = USB_QUIRK_RESET_RESUME }, | ||
234 | + | ||
235 | /* appletouch */ | ||
236 | { USB_DEVICE(0x05ac, 0x021a), .driver_info = USB_QUIRK_RESET_RESUME }, | ||
237 | |||
238 | @@ -152,6 +155,9 @@ static const struct usb_device_id usb_quirk_list[] = { | ||
239 | /* Broadcom BCM92035DGROM BT dongle */ | ||
240 | { USB_DEVICE(0x0a5c, 0x2021), .driver_info = USB_QUIRK_RESET_RESUME }, | ||
241 | |||
242 | + /* MAYA44USB sound device */ | ||
243 | + { USB_DEVICE(0x0a92, 0x0091), .driver_info = USB_QUIRK_RESET_RESUME }, | ||
244 | + | ||
245 | /* Action Semiconductor flash disk */ | ||
246 | { USB_DEVICE(0x10d6, 0x2200), .driver_info = | ||
247 | USB_QUIRK_STRING_FETCH_255 }, | ||
248 | diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c | ||
249 | index 3e4c27dd1590..904e8341b2c9 100644 | ||
250 | --- a/drivers/usb/serial/ftdi_sio.c | ||
251 | +++ b/drivers/usb/serial/ftdi_sio.c | ||
252 | @@ -916,6 +916,7 @@ static struct usb_device_id id_table_combined [] = { | ||
253 | { USB_DEVICE(FTDI_VID, FTDI_LUMEL_PD12_PID) }, | ||
254 | /* Crucible Devices */ | ||
255 | { USB_DEVICE(FTDI_VID, FTDI_CT_COMET_PID) }, | ||
256 | + { USB_DEVICE(FTDI_VID, FTDI_Z3X_PID) }, | ||
257 | { }, /* Optional parameter entry */ | ||
258 | { } /* Terminating entry */ | ||
259 | }; | ||
260 | diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h | ||
261 | index 1b8af461b522..a7019d1e3058 100644 | ||
262 | --- a/drivers/usb/serial/ftdi_sio_ids.h | ||
263 | +++ b/drivers/usb/serial/ftdi_sio_ids.h | ||
264 | @@ -1307,3 +1307,9 @@ | ||
265 | * Manufacturer: Crucible Technologies | ||
266 | */ | ||
267 | #define FTDI_CT_COMET_PID 0x8e08 | ||
268 | + | ||
269 | +/* | ||
270 | + * Product: Z3X Box | ||
271 | + * Manufacturer: Smart GSM Team | ||
272 | + */ | ||
273 | +#define FTDI_Z3X_PID 0x0011 | ||
274 | diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c | ||
275 | index b3440c66a995..57277bccb9ef 100644 | ||
276 | --- a/drivers/usb/serial/option.c | ||
277 | +++ b/drivers/usb/serial/option.c | ||
278 | @@ -707,6 +707,222 @@ static const struct usb_device_id option_ids[] = { | ||
279 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7A) }, | ||
280 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7B) }, | ||
281 | { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7C) }, | ||
282 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x01) }, | ||
283 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x02) }, | ||
284 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x03) }, | ||
285 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x04) }, | ||
286 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x05) }, | ||
287 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x06) }, | ||
288 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0A) }, | ||
289 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0B) }, | ||
290 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0D) }, | ||
291 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0E) }, | ||
292 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0F) }, | ||
293 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x10) }, | ||
294 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x12) }, | ||
295 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x13) }, | ||
296 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x14) }, | ||
297 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x15) }, | ||
298 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x17) }, | ||
299 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x18) }, | ||
300 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x19) }, | ||
301 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x1A) }, | ||
302 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x1B) }, | ||
303 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x1C) }, | ||
304 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x31) }, | ||
305 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x32) }, | ||
306 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x33) }, | ||
307 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x34) }, | ||
308 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x35) }, | ||
309 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x36) }, | ||
310 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3A) }, | ||
311 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3B) }, | ||
312 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3D) }, | ||
313 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3E) }, | ||
314 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3F) }, | ||
315 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x48) }, | ||
316 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x49) }, | ||
317 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x4A) }, | ||
318 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x4B) }, | ||
319 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x4C) }, | ||
320 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x61) }, | ||
321 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x62) }, | ||
322 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x63) }, | ||
323 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x64) }, | ||
324 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x65) }, | ||
325 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x66) }, | ||
326 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6A) }, | ||
327 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6B) }, | ||
328 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6D) }, | ||
329 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6E) }, | ||
330 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6F) }, | ||
331 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x78) }, | ||
332 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x79) }, | ||
333 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x7A) }, | ||
334 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x7B) }, | ||
335 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x7C) }, | ||
336 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x01) }, | ||
337 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x02) }, | ||
338 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x03) }, | ||
339 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x04) }, | ||
340 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x05) }, | ||
341 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x06) }, | ||
342 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0A) }, | ||
343 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0B) }, | ||
344 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0D) }, | ||
345 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0E) }, | ||
346 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0F) }, | ||
347 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x10) }, | ||
348 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x12) }, | ||
349 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x13) }, | ||
350 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x14) }, | ||
351 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x15) }, | ||
352 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x17) }, | ||
353 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x18) }, | ||
354 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x19) }, | ||
355 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x1A) }, | ||
356 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x1B) }, | ||
357 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x1C) }, | ||
358 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x31) }, | ||
359 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x32) }, | ||
360 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x33) }, | ||
361 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x34) }, | ||
362 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x35) }, | ||
363 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x36) }, | ||
364 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3A) }, | ||
365 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3B) }, | ||
366 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3D) }, | ||
367 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3E) }, | ||
368 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3F) }, | ||
369 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x48) }, | ||
370 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x49) }, | ||
371 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x4A) }, | ||
372 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x4B) }, | ||
373 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x4C) }, | ||
374 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x61) }, | ||
375 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x62) }, | ||
376 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x63) }, | ||
377 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x64) }, | ||
378 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x65) }, | ||
379 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x66) }, | ||
380 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6A) }, | ||
381 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6B) }, | ||
382 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6D) }, | ||
383 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6E) }, | ||
384 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6F) }, | ||
385 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x78) }, | ||
386 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x79) }, | ||
387 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x7A) }, | ||
388 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x7B) }, | ||
389 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x7C) }, | ||
390 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x01) }, | ||
391 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x02) }, | ||
392 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x03) }, | ||
393 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x04) }, | ||
394 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x05) }, | ||
395 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x06) }, | ||
396 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0A) }, | ||
397 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0B) }, | ||
398 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0D) }, | ||
399 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0E) }, | ||
400 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0F) }, | ||
401 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x10) }, | ||
402 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x12) }, | ||
403 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x13) }, | ||
404 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x14) }, | ||
405 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x15) }, | ||
406 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x17) }, | ||
407 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x18) }, | ||
408 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x19) }, | ||
409 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x1A) }, | ||
410 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x1B) }, | ||
411 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x1C) }, | ||
412 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x31) }, | ||
413 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x32) }, | ||
414 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x33) }, | ||
415 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x34) }, | ||
416 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x35) }, | ||
417 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x36) }, | ||
418 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3A) }, | ||
419 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3B) }, | ||
420 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3D) }, | ||
421 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3E) }, | ||
422 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3F) }, | ||
423 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x48) }, | ||
424 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x49) }, | ||
425 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x4A) }, | ||
426 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x4B) }, | ||
427 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x4C) }, | ||
428 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x61) }, | ||
429 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x62) }, | ||
430 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x63) }, | ||
431 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x64) }, | ||
432 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x65) }, | ||
433 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x66) }, | ||
434 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6A) }, | ||
435 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6B) }, | ||
436 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6D) }, | ||
437 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6E) }, | ||
438 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6F) }, | ||
439 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x78) }, | ||
440 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x79) }, | ||
441 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x7A) }, | ||
442 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x7B) }, | ||
443 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x7C) }, | ||
444 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x01) }, | ||
445 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x02) }, | ||
446 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x03) }, | ||
447 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x04) }, | ||
448 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x05) }, | ||
449 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x06) }, | ||
450 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0A) }, | ||
451 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0B) }, | ||
452 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0D) }, | ||
453 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0E) }, | ||
454 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0F) }, | ||
455 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x10) }, | ||
456 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x12) }, | ||
457 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x13) }, | ||
458 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x14) }, | ||
459 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x15) }, | ||
460 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x17) }, | ||
461 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x18) }, | ||
462 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x19) }, | ||
463 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x1A) }, | ||
464 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x1B) }, | ||
465 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x1C) }, | ||
466 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x31) }, | ||
467 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x32) }, | ||
468 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x33) }, | ||
469 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x34) }, | ||
470 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x35) }, | ||
471 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x36) }, | ||
472 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3A) }, | ||
473 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3B) }, | ||
474 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3D) }, | ||
475 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3E) }, | ||
476 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3F) }, | ||
477 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x48) }, | ||
478 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x49) }, | ||
479 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x4A) }, | ||
480 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x4B) }, | ||
481 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x4C) }, | ||
482 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x61) }, | ||
483 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x62) }, | ||
484 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x63) }, | ||
485 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x64) }, | ||
486 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x65) }, | ||
487 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x66) }, | ||
488 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6A) }, | ||
489 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6B) }, | ||
490 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6D) }, | ||
491 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6E) }, | ||
492 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6F) }, | ||
493 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x78) }, | ||
494 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x79) }, | ||
495 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7A) }, | ||
496 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7B) }, | ||
497 | + { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7C) }, | ||
498 | |||
499 | |||
500 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, | ||
501 | diff --git a/fs/jfs/jfs_inode.c b/fs/jfs/jfs_inode.c | ||
502 | index c1a3e603279c..7f464c513ba0 100644 | ||
503 | --- a/fs/jfs/jfs_inode.c | ||
504 | +++ b/fs/jfs/jfs_inode.c | ||
505 | @@ -95,7 +95,7 @@ struct inode *ialloc(struct inode *parent, umode_t mode) | ||
506 | |||
507 | if (insert_inode_locked(inode) < 0) { | ||
508 | rc = -EINVAL; | ||
509 | - goto fail_unlock; | ||
510 | + goto fail_put; | ||
511 | } | ||
512 | |||
513 | inode_init_owner(inode, parent, mode); | ||
514 | @@ -156,7 +156,6 @@ struct inode *ialloc(struct inode *parent, umode_t mode) | ||
515 | fail_drop: | ||
516 | dquot_drop(inode); | ||
517 | inode->i_flags |= S_NOQUOTA; | ||
518 | -fail_unlock: | ||
519 | clear_nlink(inode); | ||
520 | unlock_new_inode(inode); | ||
521 | fail_put: | ||
522 | diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c | ||
523 | index 9cd928f7a7c6..0d37a6fd18af 100644 | ||
524 | --- a/kernel/time/clockevents.c | ||
525 | +++ b/kernel/time/clockevents.c | ||
526 | @@ -30,29 +30,64 @@ static RAW_NOTIFIER_HEAD(clockevents_chain); | ||
527 | /* Protection for the above */ | ||
528 | static DEFINE_RAW_SPINLOCK(clockevents_lock); | ||
529 | |||
530 | -/** | ||
531 | - * clockevents_delta2ns - Convert a latch value (device ticks) to nanoseconds | ||
532 | - * @latch: value to convert | ||
533 | - * @evt: pointer to clock event device descriptor | ||
534 | - * | ||
535 | - * Math helper, returns latch value converted to nanoseconds (bound checked) | ||
536 | - */ | ||
537 | -u64 clockevent_delta2ns(unsigned long latch, struct clock_event_device *evt) | ||
538 | +static u64 cev_delta2ns(unsigned long latch, struct clock_event_device *evt, | ||
539 | + bool ismax) | ||
540 | { | ||
541 | u64 clc = (u64) latch << evt->shift; | ||
542 | + u64 rnd; | ||
543 | |||
544 | if (unlikely(!evt->mult)) { | ||
545 | evt->mult = 1; | ||
546 | WARN_ON(1); | ||
547 | } | ||
548 | + rnd = (u64) evt->mult - 1; | ||
549 | + | ||
550 | + /* | ||
551 | + * Upper bound sanity check. If the backwards conversion is | ||
552 | + * not equal latch, we know that the above shift overflowed. | ||
553 | + */ | ||
554 | + if ((clc >> evt->shift) != (u64)latch) | ||
555 | + clc = ~0ULL; | ||
556 | + | ||
557 | + /* | ||
558 | + * Scaled math oddities: | ||
559 | + * | ||
560 | + * For mult <= (1 << shift) we can safely add mult - 1 to | ||
561 | + * prevent integer rounding loss. So the backwards conversion | ||
562 | + * from nsec to device ticks will be correct. | ||
563 | + * | ||
564 | + * For mult > (1 << shift), i.e. device frequency is > 1GHz we | ||
565 | + * need to be careful. Adding mult - 1 will result in a value | ||
566 | + * which when converted back to device ticks can be larger | ||
567 | + * than latch by up to (mult - 1) >> shift. For the min_delta | ||
568 | + * calculation we still want to apply this in order to stay | ||
569 | + * above the minimum device ticks limit. For the upper limit | ||
570 | + * we would end up with a latch value larger than the upper | ||
571 | + * limit of the device, so we omit the add to stay below the | ||
572 | + * device upper boundary. | ||
573 | + * | ||
574 | + * Also omit the add if it would overflow the u64 boundary. | ||
575 | + */ | ||
576 | + if ((~0ULL - clc > rnd) && | ||
577 | + (!ismax || evt->mult <= (1U << evt->shift))) | ||
578 | + clc += rnd; | ||
579 | |||
580 | do_div(clc, evt->mult); | ||
581 | - if (clc < 1000) | ||
582 | - clc = 1000; | ||
583 | - if (clc > KTIME_MAX) | ||
584 | - clc = KTIME_MAX; | ||
585 | |||
586 | - return clc; | ||
587 | + /* Deltas less than 1usec are pointless noise */ | ||
588 | + return clc > 1000 ? clc : 1000; | ||
589 | +} | ||
590 | + | ||
591 | +/** | ||
592 | + * clockevents_delta2ns - Convert a latch value (device ticks) to nanoseconds | ||
593 | + * @latch: value to convert | ||
594 | + * @evt: pointer to clock event device descriptor | ||
595 | + * | ||
596 | + * Math helper, returns latch value converted to nanoseconds (bound checked) | ||
597 | + */ | ||
598 | +u64 clockevent_delta2ns(unsigned long latch, struct clock_event_device *evt) | ||
599 | +{ | ||
600 | + return cev_delta2ns(latch, evt, false); | ||
601 | } | ||
602 | EXPORT_SYMBOL_GPL(clockevent_delta2ns); | ||
603 | |||
604 | @@ -318,8 +353,8 @@ static void clockevents_config(struct clock_event_device *dev, | ||
605 | sec = 600; | ||
606 | |||
607 | clockevents_calc_mult_shift(dev, freq, sec); | ||
608 | - dev->min_delta_ns = clockevent_delta2ns(dev->min_delta_ticks, dev); | ||
609 | - dev->max_delta_ns = clockevent_delta2ns(dev->max_delta_ticks, dev); | ||
610 | + dev->min_delta_ns = cev_delta2ns(dev->min_delta_ticks, dev, false); | ||
611 | + dev->max_delta_ns = cev_delta2ns(dev->max_delta_ticks, dev, true); | ||
612 | } | ||
613 | |||
614 | /** | ||
615 | diff --git a/lib/scatterlist.c b/lib/scatterlist.c | ||
616 | index 6096e89bee55..8c2f278e5eb7 100644 | ||
617 | --- a/lib/scatterlist.c | ||
618 | +++ b/lib/scatterlist.c | ||
619 | @@ -419,7 +419,8 @@ void sg_miter_stop(struct sg_mapping_iter *miter) | ||
620 | if (miter->addr) { | ||
621 | miter->__offset += miter->consumed; | ||
622 | |||
623 | - if (miter->__flags & SG_MITER_TO_SG) | ||
624 | + if ((miter->__flags & SG_MITER_TO_SG) && | ||
625 | + !PageSlab(miter->page)) | ||
626 | flush_kernel_dcache_page(miter->page); | ||
627 | |||
628 | if (miter->__flags & SG_MITER_ATOMIC) { | ||
629 | diff --git a/mm/swap.c b/mm/swap.c | ||
630 | index 5c13f1338972..f689e9a03204 100644 | ||
631 | --- a/mm/swap.c | ||
632 | +++ b/mm/swap.c | ||
633 | @@ -30,6 +30,7 @@ | ||
634 | #include <linux/backing-dev.h> | ||
635 | #include <linux/memcontrol.h> | ||
636 | #include <linux/gfp.h> | ||
637 | +#include <linux/hugetlb.h> | ||
638 | |||
639 | #include "internal.h" | ||
640 | |||
641 | @@ -68,13 +69,26 @@ static void __put_compound_page(struct page *page) | ||
642 | { | ||
643 | compound_page_dtor *dtor; | ||
644 | |||
645 | - __page_cache_release(page); | ||
646 | + if (!PageHuge(page)) | ||
647 | + __page_cache_release(page); | ||
648 | dtor = get_compound_page_dtor(page); | ||
649 | (*dtor)(page); | ||
650 | } | ||
651 | |||
652 | static void put_compound_page(struct page *page) | ||
653 | { | ||
654 | + /* | ||
655 | + * hugetlbfs pages cannot be split from under us. If this is a | ||
656 | + * hugetlbfs page, check refcount on head page and release the page if | ||
657 | + * the refcount becomes zero. | ||
658 | + */ | ||
659 | + if (PageHuge(page)) { | ||
660 | + page = compound_head(page); | ||
661 | + if (put_page_testzero(page)) | ||
662 | + __put_compound_page(page); | ||
663 | + return; | ||
664 | + } | ||
665 | + | ||
666 | if (unlikely(PageTail(page))) { | ||
667 | /* __split_huge_page_refcount can run under us */ | ||
668 | struct page *page_head = compound_trans_head(page); | ||
669 | @@ -159,8 +173,20 @@ bool __get_page_tail(struct page *page) | ||
670 | */ | ||
671 | unsigned long flags; | ||
672 | bool got = false; | ||
673 | - struct page *page_head = compound_trans_head(page); | ||
674 | + struct page *page_head; | ||
675 | + | ||
676 | + /* | ||
677 | + * If this is a hugetlbfs page it cannot be split under us. Simply | ||
678 | + * increment refcount for the head page. | ||
679 | + */ | ||
680 | + if (PageHuge(page)) { | ||
681 | + page_head = compound_head(page); | ||
682 | + atomic_inc(&page_head->_count); | ||
683 | + got = true; | ||
684 | + goto out; | ||
685 | + } | ||
686 | |||
687 | + page_head = compound_trans_head(page); | ||
688 | if (likely(page != page_head && get_page_unless_zero(page_head))) { | ||
689 | /* | ||
690 | * page_head wasn't a dangling pointer but it | ||
691 | @@ -178,6 +204,7 @@ bool __get_page_tail(struct page *page) | ||
692 | if (unlikely(!got)) | ||
693 | put_page(page_head); | ||
694 | } | ||
695 | +out: | ||
696 | return got; | ||
697 | } | ||
698 | EXPORT_SYMBOL(__get_page_tail); | ||
699 | diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h | ||
700 | index 05160dbeaf44..226be1364ef3 100644 | ||
701 | --- a/net/mac80211/ieee80211_i.h | ||
702 | +++ b/net/mac80211/ieee80211_i.h | ||
703 | @@ -789,12 +789,15 @@ struct tpt_led_trigger { | ||
704 | * that the scan completed. | ||
705 | * @SCAN_ABORTED: Set for our scan work function when the driver reported | ||
706 | * a scan complete for an aborted scan. | ||
707 | + * @SCAN_HW_CANCELLED: Set for our scan work function when the scan is being | ||
708 | + * cancelled. | ||
709 | */ | ||
710 | enum { | ||
711 | SCAN_SW_SCANNING, | ||
712 | SCAN_HW_SCANNING, | ||
713 | SCAN_COMPLETED, | ||
714 | SCAN_ABORTED, | ||
715 | + SCAN_HW_CANCELLED, | ||
716 | }; | ||
717 | |||
718 | /** | ||
719 | diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c | ||
720 | index bcc57f93adc4..9520749bd1e3 100644 | ||
721 | --- a/net/mac80211/scan.c | ||
722 | +++ b/net/mac80211/scan.c | ||
723 | @@ -259,6 +259,9 @@ static bool ieee80211_prep_hw_scan(struct ieee80211_local *local) | ||
724 | enum ieee80211_band band; | ||
725 | int i, ielen, n_chans; | ||
726 | |||
727 | + if (test_bit(SCAN_HW_CANCELLED, &local->scanning)) | ||
728 | + return false; | ||
729 | + | ||
730 | do { | ||
731 | if (local->hw_scan_band == IEEE80211_NUM_BANDS) | ||
732 | return false; | ||
733 | @@ -844,7 +847,23 @@ void ieee80211_scan_cancel(struct ieee80211_local *local) | ||
734 | if (!local->scan_req) | ||
735 | goto out; | ||
736 | |||
737 | + /* | ||
738 | + * We have a scan running and the driver already reported completion, | ||
739 | + * but the worker hasn't run yet or is stuck on the mutex - mark it as | ||
740 | + * cancelled. | ||
741 | + */ | ||
742 | + if (test_bit(SCAN_HW_SCANNING, &local->scanning) && | ||
743 | + test_bit(SCAN_COMPLETED, &local->scanning)) { | ||
744 | + set_bit(SCAN_HW_CANCELLED, &local->scanning); | ||
745 | + goto out; | ||
746 | + } | ||
747 | + | ||
748 | if (test_bit(SCAN_HW_SCANNING, &local->scanning)) { | ||
749 | + /* | ||
750 | + * Make sure that __ieee80211_scan_completed doesn't trigger a | ||
751 | + * scan on another band. | ||
752 | + */ | ||
753 | + set_bit(SCAN_HW_CANCELLED, &local->scanning); | ||
754 | if (local->ops->cancel_hw_scan) | ||
755 | drv_cancel_hw_scan(local, local->scan_sdata); | ||
756 | goto out; | ||
757 | diff --git a/net/mac80211/status.c b/net/mac80211/status.c | ||
758 | index 47b117f3f567..b992a49fbe08 100644 | ||
759 | --- a/net/mac80211/status.c | ||
760 | +++ b/net/mac80211/status.c | ||
761 | @@ -183,6 +183,9 @@ static void ieee80211_frame_acked(struct sta_info *sta, struct sk_buff *skb) | ||
762 | struct ieee80211_local *local = sta->local; | ||
763 | struct ieee80211_sub_if_data *sdata = sta->sdata; | ||
764 | |||
765 | + if (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS) | ||
766 | + sta->last_rx = jiffies; | ||
767 | + | ||
768 | if (ieee80211_is_data_qos(mgmt->frame_control)) { | ||
769 | struct ieee80211_hdr *hdr = (void *) skb->data; | ||
770 | u8 *qc = ieee80211_get_qos_ctl(hdr); | ||
771 | diff --git a/sound/core/pcm.c b/sound/core/pcm.c | ||
772 | index e30e1be30a21..6355540fdb0d 100644 | ||
773 | --- a/sound/core/pcm.c | ||
774 | +++ b/sound/core/pcm.c | ||
775 | @@ -49,6 +49,8 @@ static struct snd_pcm *snd_pcm_get(struct snd_card *card, int device) | ||
776 | struct snd_pcm *pcm; | ||
777 | |||
778 | list_for_each_entry(pcm, &snd_pcm_devices, list) { | ||
779 | + if (pcm->internal) | ||
780 | + continue; | ||
781 | if (pcm->card == card && pcm->device == device) | ||
782 | return pcm; | ||
783 | } | ||
784 | @@ -60,6 +62,8 @@ static int snd_pcm_next(struct snd_card *card, int device) | ||
785 | struct snd_pcm *pcm; | ||
786 | |||
787 | list_for_each_entry(pcm, &snd_pcm_devices, list) { | ||
788 | + if (pcm->internal) | ||
789 | + continue; | ||
790 | if (pcm->card == card && pcm->device > device) | ||
791 | return pcm->device; | ||
792 | else if (pcm->card->number > card->number) | ||
793 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c | ||
794 | index 33abb782a54b..810f1fc2c3f4 100644 | ||
795 | --- a/sound/pci/hda/patch_realtek.c | ||
796 | +++ b/sound/pci/hda/patch_realtek.c | ||
797 | @@ -6833,6 +6833,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = { | ||
798 | SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE), | ||
799 | SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800), | ||
800 | SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_ASUS_MODE4), | ||
801 | + SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_ASUS_MODE4), | ||
802 | SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT), | ||
803 | SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_FIXUP_ASUS_MODE2), | ||
804 | SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD), | ||
805 | diff --git a/sound/soc/codecs/wm_hubs.c b/sound/soc/codecs/wm_hubs.c | ||
806 | index 6c028c470601..fec98cf3b2c0 100644 | ||
807 | --- a/sound/soc/codecs/wm_hubs.c | ||
808 | +++ b/sound/soc/codecs/wm_hubs.c | ||
809 | @@ -413,6 +413,7 @@ static int hp_supply_event(struct snd_soc_dapm_widget *w, | ||
810 | hubs->hp_startup_mode); | ||
811 | break; | ||
812 | } | ||
813 | + break; | ||
814 | |||
815 | case SND_SOC_DAPM_PRE_PMD: | ||
816 | snd_soc_update_bits(codec, WM8993_CHARGE_PUMP_1, | ||
817 | diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c | ||
818 | index 9ae82a4eb71e..e39364b6b080 100644 | ||
819 | --- a/sound/soc/soc-dapm.c | ||
820 | +++ b/sound/soc/soc-dapm.c | ||
821 | @@ -1590,7 +1590,7 @@ static ssize_t dapm_widget_power_read_file(struct file *file, | ||
822 | w->active ? "active" : "inactive"); | ||
823 | |||
824 | list_for_each_entry(p, &w->sources, list_sink) { | ||
825 | - if (p->connected && !p->connected(w, p->sink)) | ||
826 | + if (p->connected && !p->connected(w, p->source)) | ||
827 | continue; | ||
828 | |||
829 | if (p->connect) |