mirror of
https://github.com/Fishwaldo/build.git
synced 2025-03-30 02:31:46 +00:00
841 lines
37 KiB
Diff
841 lines
37 KiB
Diff
diff --git a/Makefile b/Makefile
|
|
index 656c45f09128..2f9a0467ede5 100644
|
|
--- a/Makefile
|
|
+++ b/Makefile
|
|
@@ -1,6 +1,6 @@
|
|
VERSION = 3
|
|
PATCHLEVEL = 4
|
|
-SUBLEVEL = 68
|
|
+SUBLEVEL = 69
|
|
EXTRAVERSION =
|
|
NAME = Saber-toothed Squirrel
|
|
|
|
diff --git a/arch/parisc/kernel/head.S b/arch/parisc/kernel/head.S
|
|
index 37aabd772fbb..d2d58258aea6 100644
|
|
--- a/arch/parisc/kernel/head.S
|
|
+++ b/arch/parisc/kernel/head.S
|
|
@@ -195,6 +195,8 @@ common_stext:
|
|
ldw MEM_PDC_HI(%r0),%r6
|
|
depd %r6, 31, 32, %r3 /* move to upper word */
|
|
|
|
+ mfctl %cr30,%r6 /* PCX-W2 firmware bug */
|
|
+
|
|
ldo PDC_PSW(%r0),%arg0 /* 21 */
|
|
ldo PDC_PSW_SET_DEFAULTS(%r0),%arg1 /* 2 */
|
|
ldo PDC_PSW_WIDE_BIT(%r0),%arg2 /* 2 */
|
|
@@ -203,6 +205,8 @@ common_stext:
|
|
copy %r0,%arg3
|
|
|
|
stext_pdc_ret:
|
|
+ mtctl %r6,%cr30 /* restore task thread info */
|
|
+
|
|
/* restore rfi target address*/
|
|
ldd TI_TASK-THREAD_SZ_ALGN(%sp), %r10
|
|
tophys_r1 %r10
|
|
diff --git a/arch/um/kernel/exitcode.c b/arch/um/kernel/exitcode.c
|
|
index 829df49dee99..41ebbfebb333 100644
|
|
--- a/arch/um/kernel/exitcode.c
|
|
+++ b/arch/um/kernel/exitcode.c
|
|
@@ -40,9 +40,11 @@ static ssize_t exitcode_proc_write(struct file *file,
|
|
const char __user *buffer, size_t count, loff_t *pos)
|
|
{
|
|
char *end, buf[sizeof("nnnnn\0")];
|
|
+ size_t size;
|
|
int tmp;
|
|
|
|
- if (copy_from_user(buf, buffer, count))
|
|
+ size = min(count, sizeof(buf));
|
|
+ if (copy_from_user(buf, buffer, size))
|
|
return -EFAULT;
|
|
|
|
tmp = simple_strtol(buf, &end, 0);
|
|
diff --git a/arch/xtensa/kernel/signal.c b/arch/xtensa/kernel/signal.c
|
|
index d78869a00b11..b08caaa59813 100644
|
|
--- a/arch/xtensa/kernel/signal.c
|
|
+++ b/arch/xtensa/kernel/signal.c
|
|
@@ -343,7 +343,7 @@ static int setup_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
|
|
|
|
sp = regs->areg[1];
|
|
|
|
- if ((ka->sa.sa_flags & SA_ONSTACK) != 0 && ! on_sig_stack(sp)) {
|
|
+ if ((ka->sa.sa_flags & SA_ONSTACK) != 0 && sas_ss_flags(sp) == 0) {
|
|
sp = current->sas_ss_sp + current->sas_ss_size;
|
|
}
|
|
|
|
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
|
|
index e47c224d7c28..37fb4d6069a2 100644
|
|
--- a/drivers/ata/libata-eh.c
|
|
+++ b/drivers/ata/libata-eh.c
|
|
@@ -1287,14 +1287,14 @@ void ata_eh_qc_complete(struct ata_queued_cmd *qc)
|
|
* should be retried. To be used from EH.
|
|
*
|
|
* SCSI midlayer limits the number of retries to scmd->allowed.
|
|
- * scmd->retries is decremented for commands which get retried
|
|
+ * scmd->allowed is incremented for commands which get retried
|
|
* due to unrelated failures (qc->err_mask is zero).
|
|
*/
|
|
void ata_eh_qc_retry(struct ata_queued_cmd *qc)
|
|
{
|
|
struct scsi_cmnd *scmd = qc->scsicmd;
|
|
- if (!qc->err_mask && scmd->retries)
|
|
- scmd->retries--;
|
|
+ if (!qc->err_mask)
|
|
+ scmd->allowed++;
|
|
__ata_eh_qc_complete(qc);
|
|
}
|
|
|
|
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
|
|
index 6116e3b75393..e9f1ef5d9340 100644
|
|
--- a/drivers/gpu/drm/drm_drv.c
|
|
+++ b/drivers/gpu/drm/drm_drv.c
|
|
@@ -420,9 +420,16 @@ long drm_ioctl(struct file *filp,
|
|
asize = drv_size;
|
|
}
|
|
else if ((nr >= DRM_COMMAND_END) || (nr < DRM_COMMAND_BASE)) {
|
|
+ u32 drv_size;
|
|
+
|
|
ioctl = &drm_ioctls[nr];
|
|
- cmd = ioctl->cmd;
|
|
+
|
|
+ drv_size = _IOC_SIZE(ioctl->cmd);
|
|
usize = asize = _IOC_SIZE(cmd);
|
|
+ if (drv_size > asize)
|
|
+ asize = drv_size;
|
|
+
|
|
+ cmd = ioctl->cmd;
|
|
} else
|
|
goto err_i1;
|
|
|
|
diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
|
|
index 2f755e2aeb86..6f4627fe24a1 100644
|
|
--- a/drivers/gpu/drm/radeon/atombios_encoders.c
|
|
+++ b/drivers/gpu/drm/radeon/atombios_encoders.c
|
|
@@ -1430,7 +1430,7 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode)
|
|
* does the same thing and more.
|
|
*/
|
|
if ((rdev->family != CHIP_RV710) && (rdev->family != CHIP_RV730) &&
|
|
- (rdev->family != CHIP_RS880))
|
|
+ (rdev->family != CHIP_RS780) && (rdev->family != CHIP_RS880))
|
|
atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE_OUTPUT, 0, 0);
|
|
}
|
|
if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) {
|
|
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
|
|
index ce5f0449e1b6..75e66c612505 100644
|
|
--- a/drivers/md/raid1.c
|
|
+++ b/drivers/md/raid1.c
|
|
@@ -1357,6 +1357,7 @@ static int raid1_spare_active(struct mddev *mddev)
|
|
}
|
|
}
|
|
if (rdev
|
|
+ && rdev->recovery_offset == MaxSector
|
|
&& !test_bit(Faulty, &rdev->flags)
|
|
&& !test_and_set_bit(In_sync, &rdev->flags)) {
|
|
count++;
|
|
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
|
|
index f7febd8e3720..99a102d186ce 100644
|
|
--- a/drivers/md/raid10.c
|
|
+++ b/drivers/md/raid10.c
|
|
@@ -1534,6 +1534,7 @@ static int raid10_spare_active(struct mddev *mddev)
|
|
}
|
|
sysfs_notify_dirent_safe(tmp->replacement->sysfs_state);
|
|
} else if (tmp->rdev
|
|
+ && tmp->rdev->recovery_offset == MaxSector
|
|
&& !test_bit(Faulty, &tmp->rdev->flags)
|
|
&& !test_and_set_bit(In_sync, &tmp->rdev->flags)) {
|
|
count++;
|
|
diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
|
|
index 00baa7e094f4..e2131ca64a5f 100644
|
|
--- a/drivers/net/can/flexcan.c
|
|
+++ b/drivers/net/can/flexcan.c
|
|
@@ -60,7 +60,7 @@
|
|
#define FLEXCAN_MCR_BCC BIT(16)
|
|
#define FLEXCAN_MCR_LPRIO_EN BIT(13)
|
|
#define FLEXCAN_MCR_AEN BIT(12)
|
|
-#define FLEXCAN_MCR_MAXMB(x) ((x) & 0xf)
|
|
+#define FLEXCAN_MCR_MAXMB(x) ((x) & 0x1f)
|
|
#define FLEXCAN_MCR_IDAM_A (0 << 8)
|
|
#define FLEXCAN_MCR_IDAM_B (1 << 8)
|
|
#define FLEXCAN_MCR_IDAM_C (2 << 8)
|
|
@@ -701,9 +701,11 @@ static int flexcan_chip_start(struct net_device *dev)
|
|
*
|
|
*/
|
|
reg_mcr = flexcan_read(®s->mcr);
|
|
+ reg_mcr &= ~FLEXCAN_MCR_MAXMB(0xff);
|
|
reg_mcr |= FLEXCAN_MCR_FRZ | FLEXCAN_MCR_FEN | FLEXCAN_MCR_HALT |
|
|
FLEXCAN_MCR_SUPV | FLEXCAN_MCR_WRN_EN |
|
|
- FLEXCAN_MCR_IDAM_C | FLEXCAN_MCR_SRX_DIS;
|
|
+ FLEXCAN_MCR_IDAM_C | FLEXCAN_MCR_SRX_DIS |
|
|
+ FLEXCAN_MCR_MAXMB(FLEXCAN_TX_BUF_ID);
|
|
netdev_dbg(dev, "%s: writing mcr=0x%08x", __func__, reg_mcr);
|
|
flexcan_write(reg_mcr, ®s->mcr);
|
|
|
|
@@ -744,6 +746,10 @@ static int flexcan_chip_start(struct net_device *dev)
|
|
®s->cantxfg[i].can_ctrl);
|
|
}
|
|
|
|
+ /* Abort any pending TX, mark Mailbox as INACTIVE */
|
|
+ flexcan_write(FLEXCAN_MB_CNT_CODE(0x4),
|
|
+ ®s->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl);
|
|
+
|
|
/* acceptance mask/acceptance code (accept everything) */
|
|
flexcan_write(0x0, ®s->rxgmask);
|
|
flexcan_write(0x0, ®s->rx14mask);
|
|
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c b/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c
|
|
index 21bc827c5fa6..9adb21a1133e 100644
|
|
--- a/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c
|
|
+++ b/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c
|
|
@@ -343,7 +343,8 @@ bool rtl92cu_rx_query_desc(struct ieee80211_hw *hw,
|
|
(bool)GET_RX_DESC_PAGGR(pdesc));
|
|
rx_status->mactime = GET_RX_DESC_TSFL(pdesc);
|
|
if (phystatus) {
|
|
- p_drvinfo = (struct rx_fwinfo_92c *)(pdesc + RTL_RX_DESC_SIZE);
|
|
+ p_drvinfo = (struct rx_fwinfo_92c *)(skb->data +
|
|
+ stats->rx_bufshift);
|
|
rtl92c_translate_rx_signal_stuff(hw, skb, stats, pdesc,
|
|
p_drvinfo);
|
|
}
|
|
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
|
|
index 0d279c445a30..e9313f85bc70 100644
|
|
--- a/drivers/scsi/aacraid/linit.c
|
|
+++ b/drivers/scsi/aacraid/linit.c
|
|
@@ -777,6 +777,8 @@ static long aac_compat_do_ioctl(struct aac_dev *dev, unsigned cmd, unsigned long
|
|
static int aac_compat_ioctl(struct scsi_device *sdev, int cmd, void __user *arg)
|
|
{
|
|
struct aac_dev *dev = (struct aac_dev *)sdev->host->hostdata;
|
|
+ if (!capable(CAP_SYS_RAWIO))
|
|
+ return -EPERM;
|
|
return aac_compat_do_ioctl(dev, cmd, (unsigned long)arg);
|
|
}
|
|
|
|
diff --git a/drivers/staging/bcm/Bcmchar.c b/drivers/staging/bcm/Bcmchar.c
|
|
index cf3059216958..c0d612ff8519 100644
|
|
--- a/drivers/staging/bcm/Bcmchar.c
|
|
+++ b/drivers/staging/bcm/Bcmchar.c
|
|
@@ -1957,6 +1957,7 @@ cntrlEnd:
|
|
|
|
BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, OSAL_DBG, DBG_LVL_ALL, "Called IOCTL_BCM_GET_DEVICE_DRIVER_INFO\n");
|
|
|
|
+ memset(&DevInfo, 0, sizeof(DevInfo));
|
|
DevInfo.MaxRDMBufferSize = BUFFER_4K;
|
|
DevInfo.u32DSDStartOffset = EEPROM_CALPARAM_START;
|
|
DevInfo.u32RxAlignmentCorrection = 0;
|
|
diff --git a/drivers/staging/ozwpan/ozcdev.c b/drivers/staging/ozwpan/ozcdev.c
|
|
index 1c380d687963..1c9245119567 100644
|
|
--- a/drivers/staging/ozwpan/ozcdev.c
|
|
+++ b/drivers/staging/ozwpan/ozcdev.c
|
|
@@ -153,6 +153,9 @@ ssize_t oz_cdev_write(struct file *filp, const char __user *buf, size_t count,
|
|
struct oz_app_hdr *app_hdr;
|
|
struct oz_serial_ctx *ctx;
|
|
|
|
+ if (count > sizeof(ei->data) - sizeof(*elt) - sizeof(*app_hdr))
|
|
+ return -EINVAL;
|
|
+
|
|
spin_lock_bh(&g_cdev.lock);
|
|
pd = g_cdev.active_pd;
|
|
if (pd)
|
|
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
|
|
index 8659cd94639a..f6904d819ca8 100644
|
|
--- a/drivers/usb/core/quirks.c
|
|
+++ b/drivers/usb/core/quirks.c
|
|
@@ -119,6 +119,9 @@ static const struct usb_device_id usb_quirk_list[] = {
|
|
/* Alcor Micro Corp. Hub */
|
|
{ USB_DEVICE(0x058f, 0x9254), .driver_info = USB_QUIRK_RESET_RESUME },
|
|
|
|
+ /* MicroTouch Systems touchscreen */
|
|
+ { USB_DEVICE(0x0596, 0x051e), .driver_info = USB_QUIRK_RESET_RESUME },
|
|
+
|
|
/* appletouch */
|
|
{ USB_DEVICE(0x05ac, 0x021a), .driver_info = USB_QUIRK_RESET_RESUME },
|
|
|
|
@@ -152,6 +155,9 @@ static const struct usb_device_id usb_quirk_list[] = {
|
|
/* Broadcom BCM92035DGROM BT dongle */
|
|
{ USB_DEVICE(0x0a5c, 0x2021), .driver_info = USB_QUIRK_RESET_RESUME },
|
|
|
|
+ /* MAYA44USB sound device */
|
|
+ { USB_DEVICE(0x0a92, 0x0091), .driver_info = USB_QUIRK_RESET_RESUME },
|
|
+
|
|
/* Action Semiconductor flash disk */
|
|
{ USB_DEVICE(0x10d6, 0x2200), .driver_info =
|
|
USB_QUIRK_STRING_FETCH_255 },
|
|
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
|
|
index 3e4c27dd1590..904e8341b2c9 100644
|
|
--- a/drivers/usb/serial/ftdi_sio.c
|
|
+++ b/drivers/usb/serial/ftdi_sio.c
|
|
@@ -916,6 +916,7 @@ static struct usb_device_id id_table_combined [] = {
|
|
{ USB_DEVICE(FTDI_VID, FTDI_LUMEL_PD12_PID) },
|
|
/* Crucible Devices */
|
|
{ USB_DEVICE(FTDI_VID, FTDI_CT_COMET_PID) },
|
|
+ { USB_DEVICE(FTDI_VID, FTDI_Z3X_PID) },
|
|
{ }, /* Optional parameter entry */
|
|
{ } /* Terminating entry */
|
|
};
|
|
diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
|
|
index 1b8af461b522..a7019d1e3058 100644
|
|
--- a/drivers/usb/serial/ftdi_sio_ids.h
|
|
+++ b/drivers/usb/serial/ftdi_sio_ids.h
|
|
@@ -1307,3 +1307,9 @@
|
|
* Manufacturer: Crucible Technologies
|
|
*/
|
|
#define FTDI_CT_COMET_PID 0x8e08
|
|
+
|
|
+/*
|
|
+ * Product: Z3X Box
|
|
+ * Manufacturer: Smart GSM Team
|
|
+ */
|
|
+#define FTDI_Z3X_PID 0x0011
|
|
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
|
|
index b3440c66a995..57277bccb9ef 100644
|
|
--- a/drivers/usb/serial/option.c
|
|
+++ b/drivers/usb/serial/option.c
|
|
@@ -707,6 +707,222 @@ static const struct usb_device_id option_ids[] = {
|
|
{ USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7A) },
|
|
{ USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7B) },
|
|
{ USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x02, 0x7C) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x01) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x02) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x03) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x04) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x05) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x06) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0D) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0E) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x0F) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x10) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x12) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x13) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x14) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x15) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x17) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x18) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x19) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x1A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x1B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x1C) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x31) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x32) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x33) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x34) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x35) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x36) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3D) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3E) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x3F) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x48) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x49) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x4A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x4B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x4C) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x61) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x62) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x63) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x64) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x65) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x66) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6D) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6E) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x6F) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x78) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x79) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x7A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x7B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x03, 0x7C) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x01) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x02) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x03) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x04) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x05) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x06) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0D) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0E) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x0F) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x10) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x12) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x13) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x14) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x15) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x17) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x18) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x19) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x1A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x1B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x1C) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x31) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x32) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x33) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x34) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x35) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x36) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3D) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3E) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x3F) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x48) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x49) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x4A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x4B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x4C) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x61) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x62) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x63) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x64) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x65) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x66) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6D) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6E) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x6F) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x78) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x79) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x7A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x7B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x04, 0x7C) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x01) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x02) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x03) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x04) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x05) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x06) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0D) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0E) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x0F) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x10) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x12) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x13) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x14) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x15) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x17) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x18) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x19) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x1A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x1B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x1C) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x31) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x32) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x33) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x34) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x35) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x36) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3D) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3E) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x3F) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x48) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x49) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x4A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x4B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x4C) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x61) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x62) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x63) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x64) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x65) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x66) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6D) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6E) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x6F) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x78) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x79) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x7A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x7B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x05, 0x7C) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x01) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x02) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x03) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x04) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x05) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x06) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0D) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0E) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x0F) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x10) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x12) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x13) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x14) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x15) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x17) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x18) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x19) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x1A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x1B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x1C) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x31) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x32) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x33) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x34) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x35) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x36) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3D) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3E) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x3F) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x48) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x49) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x4A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x4B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x4C) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x61) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x62) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x63) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x64) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x65) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x66) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6D) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6E) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x6F) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x78) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x79) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7A) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7B) },
|
|
+ { USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, 0xff, 0x06, 0x7C) },
|
|
|
|
|
|
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) },
|
|
diff --git a/fs/jfs/jfs_inode.c b/fs/jfs/jfs_inode.c
|
|
index c1a3e603279c..7f464c513ba0 100644
|
|
--- a/fs/jfs/jfs_inode.c
|
|
+++ b/fs/jfs/jfs_inode.c
|
|
@@ -95,7 +95,7 @@ struct inode *ialloc(struct inode *parent, umode_t mode)
|
|
|
|
if (insert_inode_locked(inode) < 0) {
|
|
rc = -EINVAL;
|
|
- goto fail_unlock;
|
|
+ goto fail_put;
|
|
}
|
|
|
|
inode_init_owner(inode, parent, mode);
|
|
@@ -156,7 +156,6 @@ struct inode *ialloc(struct inode *parent, umode_t mode)
|
|
fail_drop:
|
|
dquot_drop(inode);
|
|
inode->i_flags |= S_NOQUOTA;
|
|
-fail_unlock:
|
|
clear_nlink(inode);
|
|
unlock_new_inode(inode);
|
|
fail_put:
|
|
diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c
|
|
index 9cd928f7a7c6..0d37a6fd18af 100644
|
|
--- a/kernel/time/clockevents.c
|
|
+++ b/kernel/time/clockevents.c
|
|
@@ -30,29 +30,64 @@ static RAW_NOTIFIER_HEAD(clockevents_chain);
|
|
/* Protection for the above */
|
|
static DEFINE_RAW_SPINLOCK(clockevents_lock);
|
|
|
|
-/**
|
|
- * clockevents_delta2ns - Convert a latch value (device ticks) to nanoseconds
|
|
- * @latch: value to convert
|
|
- * @evt: pointer to clock event device descriptor
|
|
- *
|
|
- * Math helper, returns latch value converted to nanoseconds (bound checked)
|
|
- */
|
|
-u64 clockevent_delta2ns(unsigned long latch, struct clock_event_device *evt)
|
|
+static u64 cev_delta2ns(unsigned long latch, struct clock_event_device *evt,
|
|
+ bool ismax)
|
|
{
|
|
u64 clc = (u64) latch << evt->shift;
|
|
+ u64 rnd;
|
|
|
|
if (unlikely(!evt->mult)) {
|
|
evt->mult = 1;
|
|
WARN_ON(1);
|
|
}
|
|
+ rnd = (u64) evt->mult - 1;
|
|
+
|
|
+ /*
|
|
+ * Upper bound sanity check. If the backwards conversion is
|
|
+ * not equal latch, we know that the above shift overflowed.
|
|
+ */
|
|
+ if ((clc >> evt->shift) != (u64)latch)
|
|
+ clc = ~0ULL;
|
|
+
|
|
+ /*
|
|
+ * Scaled math oddities:
|
|
+ *
|
|
+ * For mult <= (1 << shift) we can safely add mult - 1 to
|
|
+ * prevent integer rounding loss. So the backwards conversion
|
|
+ * from nsec to device ticks will be correct.
|
|
+ *
|
|
+ * For mult > (1 << shift), i.e. device frequency is > 1GHz we
|
|
+ * need to be careful. Adding mult - 1 will result in a value
|
|
+ * which when converted back to device ticks can be larger
|
|
+ * than latch by up to (mult - 1) >> shift. For the min_delta
|
|
+ * calculation we still want to apply this in order to stay
|
|
+ * above the minimum device ticks limit. For the upper limit
|
|
+ * we would end up with a latch value larger than the upper
|
|
+ * limit of the device, so we omit the add to stay below the
|
|
+ * device upper boundary.
|
|
+ *
|
|
+ * Also omit the add if it would overflow the u64 boundary.
|
|
+ */
|
|
+ if ((~0ULL - clc > rnd) &&
|
|
+ (!ismax || evt->mult <= (1U << evt->shift)))
|
|
+ clc += rnd;
|
|
|
|
do_div(clc, evt->mult);
|
|
- if (clc < 1000)
|
|
- clc = 1000;
|
|
- if (clc > KTIME_MAX)
|
|
- clc = KTIME_MAX;
|
|
|
|
- return clc;
|
|
+ /* Deltas less than 1usec are pointless noise */
|
|
+ return clc > 1000 ? clc : 1000;
|
|
+}
|
|
+
|
|
+/**
|
|
+ * clockevents_delta2ns - Convert a latch value (device ticks) to nanoseconds
|
|
+ * @latch: value to convert
|
|
+ * @evt: pointer to clock event device descriptor
|
|
+ *
|
|
+ * Math helper, returns latch value converted to nanoseconds (bound checked)
|
|
+ */
|
|
+u64 clockevent_delta2ns(unsigned long latch, struct clock_event_device *evt)
|
|
+{
|
|
+ return cev_delta2ns(latch, evt, false);
|
|
}
|
|
EXPORT_SYMBOL_GPL(clockevent_delta2ns);
|
|
|
|
@@ -318,8 +353,8 @@ static void clockevents_config(struct clock_event_device *dev,
|
|
sec = 600;
|
|
|
|
clockevents_calc_mult_shift(dev, freq, sec);
|
|
- dev->min_delta_ns = clockevent_delta2ns(dev->min_delta_ticks, dev);
|
|
- dev->max_delta_ns = clockevent_delta2ns(dev->max_delta_ticks, dev);
|
|
+ dev->min_delta_ns = cev_delta2ns(dev->min_delta_ticks, dev, false);
|
|
+ dev->max_delta_ns = cev_delta2ns(dev->max_delta_ticks, dev, true);
|
|
}
|
|
|
|
/**
|
|
diff --git a/lib/scatterlist.c b/lib/scatterlist.c
|
|
index 6096e89bee55..8c2f278e5eb7 100644
|
|
--- a/lib/scatterlist.c
|
|
+++ b/lib/scatterlist.c
|
|
@@ -419,7 +419,8 @@ void sg_miter_stop(struct sg_mapping_iter *miter)
|
|
if (miter->addr) {
|
|
miter->__offset += miter->consumed;
|
|
|
|
- if (miter->__flags & SG_MITER_TO_SG)
|
|
+ if ((miter->__flags & SG_MITER_TO_SG) &&
|
|
+ !PageSlab(miter->page))
|
|
flush_kernel_dcache_page(miter->page);
|
|
|
|
if (miter->__flags & SG_MITER_ATOMIC) {
|
|
diff --git a/mm/swap.c b/mm/swap.c
|
|
index 5c13f1338972..f689e9a03204 100644
|
|
--- a/mm/swap.c
|
|
+++ b/mm/swap.c
|
|
@@ -30,6 +30,7 @@
|
|
#include <linux/backing-dev.h>
|
|
#include <linux/memcontrol.h>
|
|
#include <linux/gfp.h>
|
|
+#include <linux/hugetlb.h>
|
|
|
|
#include "internal.h"
|
|
|
|
@@ -68,13 +69,26 @@ static void __put_compound_page(struct page *page)
|
|
{
|
|
compound_page_dtor *dtor;
|
|
|
|
- __page_cache_release(page);
|
|
+ if (!PageHuge(page))
|
|
+ __page_cache_release(page);
|
|
dtor = get_compound_page_dtor(page);
|
|
(*dtor)(page);
|
|
}
|
|
|
|
static void put_compound_page(struct page *page)
|
|
{
|
|
+ /*
|
|
+ * hugetlbfs pages cannot be split from under us. If this is a
|
|
+ * hugetlbfs page, check refcount on head page and release the page if
|
|
+ * the refcount becomes zero.
|
|
+ */
|
|
+ if (PageHuge(page)) {
|
|
+ page = compound_head(page);
|
|
+ if (put_page_testzero(page))
|
|
+ __put_compound_page(page);
|
|
+ return;
|
|
+ }
|
|
+
|
|
if (unlikely(PageTail(page))) {
|
|
/* __split_huge_page_refcount can run under us */
|
|
struct page *page_head = compound_trans_head(page);
|
|
@@ -159,8 +173,20 @@ bool __get_page_tail(struct page *page)
|
|
*/
|
|
unsigned long flags;
|
|
bool got = false;
|
|
- struct page *page_head = compound_trans_head(page);
|
|
+ struct page *page_head;
|
|
+
|
|
+ /*
|
|
+ * If this is a hugetlbfs page it cannot be split under us. Simply
|
|
+ * increment refcount for the head page.
|
|
+ */
|
|
+ if (PageHuge(page)) {
|
|
+ page_head = compound_head(page);
|
|
+ atomic_inc(&page_head->_count);
|
|
+ got = true;
|
|
+ goto out;
|
|
+ }
|
|
|
|
+ page_head = compound_trans_head(page);
|
|
if (likely(page != page_head && get_page_unless_zero(page_head))) {
|
|
/*
|
|
* page_head wasn't a dangling pointer but it
|
|
@@ -178,6 +204,7 @@ bool __get_page_tail(struct page *page)
|
|
if (unlikely(!got))
|
|
put_page(page_head);
|
|
}
|
|
+out:
|
|
return got;
|
|
}
|
|
EXPORT_SYMBOL(__get_page_tail);
|
|
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
|
|
index 05160dbeaf44..226be1364ef3 100644
|
|
--- a/net/mac80211/ieee80211_i.h
|
|
+++ b/net/mac80211/ieee80211_i.h
|
|
@@ -789,12 +789,15 @@ struct tpt_led_trigger {
|
|
* that the scan completed.
|
|
* @SCAN_ABORTED: Set for our scan work function when the driver reported
|
|
* a scan complete for an aborted scan.
|
|
+ * @SCAN_HW_CANCELLED: Set for our scan work function when the scan is being
|
|
+ * cancelled.
|
|
*/
|
|
enum {
|
|
SCAN_SW_SCANNING,
|
|
SCAN_HW_SCANNING,
|
|
SCAN_COMPLETED,
|
|
SCAN_ABORTED,
|
|
+ SCAN_HW_CANCELLED,
|
|
};
|
|
|
|
/**
|
|
diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
|
|
index bcc57f93adc4..9520749bd1e3 100644
|
|
--- a/net/mac80211/scan.c
|
|
+++ b/net/mac80211/scan.c
|
|
@@ -259,6 +259,9 @@ static bool ieee80211_prep_hw_scan(struct ieee80211_local *local)
|
|
enum ieee80211_band band;
|
|
int i, ielen, n_chans;
|
|
|
|
+ if (test_bit(SCAN_HW_CANCELLED, &local->scanning))
|
|
+ return false;
|
|
+
|
|
do {
|
|
if (local->hw_scan_band == IEEE80211_NUM_BANDS)
|
|
return false;
|
|
@@ -844,7 +847,23 @@ void ieee80211_scan_cancel(struct ieee80211_local *local)
|
|
if (!local->scan_req)
|
|
goto out;
|
|
|
|
+ /*
|
|
+ * We have a scan running and the driver already reported completion,
|
|
+ * but the worker hasn't run yet or is stuck on the mutex - mark it as
|
|
+ * cancelled.
|
|
+ */
|
|
+ if (test_bit(SCAN_HW_SCANNING, &local->scanning) &&
|
|
+ test_bit(SCAN_COMPLETED, &local->scanning)) {
|
|
+ set_bit(SCAN_HW_CANCELLED, &local->scanning);
|
|
+ goto out;
|
|
+ }
|
|
+
|
|
if (test_bit(SCAN_HW_SCANNING, &local->scanning)) {
|
|
+ /*
|
|
+ * Make sure that __ieee80211_scan_completed doesn't trigger a
|
|
+ * scan on another band.
|
|
+ */
|
|
+ set_bit(SCAN_HW_CANCELLED, &local->scanning);
|
|
if (local->ops->cancel_hw_scan)
|
|
drv_cancel_hw_scan(local, local->scan_sdata);
|
|
goto out;
|
|
diff --git a/net/mac80211/status.c b/net/mac80211/status.c
|
|
index 47b117f3f567..b992a49fbe08 100644
|
|
--- a/net/mac80211/status.c
|
|
+++ b/net/mac80211/status.c
|
|
@@ -183,6 +183,9 @@ static void ieee80211_frame_acked(struct sta_info *sta, struct sk_buff *skb)
|
|
struct ieee80211_local *local = sta->local;
|
|
struct ieee80211_sub_if_data *sdata = sta->sdata;
|
|
|
|
+ if (local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS)
|
|
+ sta->last_rx = jiffies;
|
|
+
|
|
if (ieee80211_is_data_qos(mgmt->frame_control)) {
|
|
struct ieee80211_hdr *hdr = (void *) skb->data;
|
|
u8 *qc = ieee80211_get_qos_ctl(hdr);
|
|
diff --git a/sound/core/pcm.c b/sound/core/pcm.c
|
|
index e30e1be30a21..6355540fdb0d 100644
|
|
--- a/sound/core/pcm.c
|
|
+++ b/sound/core/pcm.c
|
|
@@ -49,6 +49,8 @@ static struct snd_pcm *snd_pcm_get(struct snd_card *card, int device)
|
|
struct snd_pcm *pcm;
|
|
|
|
list_for_each_entry(pcm, &snd_pcm_devices, list) {
|
|
+ if (pcm->internal)
|
|
+ continue;
|
|
if (pcm->card == card && pcm->device == device)
|
|
return pcm;
|
|
}
|
|
@@ -60,6 +62,8 @@ static int snd_pcm_next(struct snd_card *card, int device)
|
|
struct snd_pcm *pcm;
|
|
|
|
list_for_each_entry(pcm, &snd_pcm_devices, list) {
|
|
+ if (pcm->internal)
|
|
+ continue;
|
|
if (pcm->card == card && pcm->device > device)
|
|
return pcm->device;
|
|
else if (pcm->card->number > card->number)
|
|
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
|
|
index 33abb782a54b..810f1fc2c3f4 100644
|
|
--- a/sound/pci/hda/patch_realtek.c
|
|
+++ b/sound/pci/hda/patch_realtek.c
|
|
@@ -6833,6 +6833,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
|
|
SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE),
|
|
SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
|
|
SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_ASUS_MODE4),
|
|
+ SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_ASUS_MODE4),
|
|
SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT),
|
|
SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_FIXUP_ASUS_MODE2),
|
|
SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
|
|
diff --git a/sound/soc/codecs/wm_hubs.c b/sound/soc/codecs/wm_hubs.c
|
|
index 6c028c470601..fec98cf3b2c0 100644
|
|
--- a/sound/soc/codecs/wm_hubs.c
|
|
+++ b/sound/soc/codecs/wm_hubs.c
|
|
@@ -413,6 +413,7 @@ static int hp_supply_event(struct snd_soc_dapm_widget *w,
|
|
hubs->hp_startup_mode);
|
|
break;
|
|
}
|
|
+ break;
|
|
|
|
case SND_SOC_DAPM_PRE_PMD:
|
|
snd_soc_update_bits(codec, WM8993_CHARGE_PUMP_1,
|
|
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
|
|
index 9ae82a4eb71e..e39364b6b080 100644
|
|
--- a/sound/soc/soc-dapm.c
|
|
+++ b/sound/soc/soc-dapm.c
|
|
@@ -1590,7 +1590,7 @@ static ssize_t dapm_widget_power_read_file(struct file *file,
|
|
w->active ? "active" : "inactive");
|
|
|
|
list_for_each_entry(p, &w->sources, list_sink) {
|
|
- if (p->connected && !p->connected(w, p->sink))
|
|
+ if (p->connected && !p->connected(w, p->source))
|
|
continue;
|
|
|
|
if (p->connect)
|