Linux 4.19.101
Greg KH
maintainerI'm announcing the release of the 4.19.101 kernel.
All users of the 4.19 kernel series must upgrade.
The updated 4.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.19.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arc/plat-eznps/Kconfig | 2 arch/arm64/kvm/debug.c | 6 block/blk-lib.c | 23 -- crypto/af_alg.c | 6 drivers/atm/eni.c | 4 drivers/base/component.c | 8 drivers/char/random.c | 62 ++++++ drivers/crypto/chelsio/chcr_algo.c | 16 - drivers/gpio/Kconfig | 1 drivers/hid/hid-ids.h | 3 drivers/hid/hid-ite.c | 3 drivers/hid/hid-multitouch.c | 5 drivers/hid/hid-quirks.c | 1 drivers/hid/hid-steam.c | 4 drivers/hid/i2c-hid/i2c-hid-core.c | 16 + drivers/iio/gyro/st_gyro_core.c | 75 ++++++++ drivers/iommu/amd_iommu.c | 37 +++- drivers/misc/mei/hw-me-regs.h | 4 drivers/misc/mei/pci-me.c | 2 drivers/net/ethernet/broadcom/b44.c | 9 - drivers/net/wan/sdla.c | 2 drivers/net/wireless/ath/ath9k/hif_usb.c | 2 drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 4 drivers/net/wireless/intersil/orinoco/orinoco_usb.c | 4 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 2 drivers/net/wireless/rsi/rsi_91x_hal.c | 12 - drivers/net/wireless/rsi/rsi_91x_usb.c | 19 +- drivers/net/wireless/zydas/zd1211rw/zd_usb.c | 2 drivers/pci/quirks.c | 34 +++ drivers/phy/motorola/phy-cpcap-usb.c | 18 +- drivers/phy/qualcomm/phy-qcom-qmp.c | 2 drivers/platform/x86/dell-laptop.c | 26 ++ drivers/spi/spi-dw.c | 15 + drivers/spi/spi-dw.h | 1 drivers/staging/most/net/net.c | 10 + drivers/staging/vt6656/device.h | 2 drivers/staging/vt6656/int.c | 6 drivers/staging/vt6656/main_usb.c | 1 drivers/staging/vt6656/rxtx.c | 26 +- drivers/staging/wlan-ng/prism2mgmt.c | 2 drivers/tty/serial/8250/8250_bcm2835aux.c | 2 drivers/usb/dwc3/core.c | 3 drivers/usb/dwc3/dwc3-pci.c | 4 drivers/usb/serial/ir-usb.c | 136 +++++++++++---- drivers/usb/storage/unusual_uas.h | 7 drivers/watchdog/Kconfig | 1 drivers/watchdog/rn5t618_wdt.c | 1 fs/cifs/smb2misc.c | 2 include/linux/power/smartreflex.h | 3 include/linux/usb/irda.h | 13 + include/net/pkt_cls.h | 33 ++- include/net/sch_generic.h | 3 kernel/sched/fair.c | 153 ++++++++++------- net/sched/cls_basic.c | 11 - net/sched/cls_bpf.c | 11 - net/sched/cls_flower.c | 11 - net/sched/cls_fw.c | 11 - net/sched/cls_matchall.c | 11 - net/sched/cls_route.c | 11 - net/sched/cls_rsvp.h | 11 - net/sched/cls_tcindex.c | 11 - net/sched/cls_u32.c | 11 - net/sched/ematch.c | 3 net/sched/sch_api.c | 6 65 files changed, 709 insertions(+), 239 deletions(-)
Aaron Ma (1):
HID: multitouch: Add LG MELF0410 I2C touchscreen support
Andreas Kemnade (1):
watchdog: rn5t618_wdt: fix module aliases
Andrew Murray (1):
KVM: arm64: Write arch.mdcr_el2 changes since last vcpu_load on VHE
Andrey Shvetsov (1):
staging: most: net: fix buffer overflow
Andy Shevchenko (1):
iio: st_gyro: Correct data for LSM9DS0 gyro
Arnd Bergmann (1):
atm: eni: fix uninitialized variable warning
Ben Dooks (1):
ARM: OMAP2+: SmartReflex: add omap_sr_pdata definition
Bin Liu (1):
usb: dwc3: turn off VBUS when leaving host mode
Bjorn Andersson (1):
phy: qcom-qmp: Increase PHY ready timeout
Colin Ian King (1):
staging: wlan-ng: ensure error return is actually returned
Cong Wang (1):
net_sched: fix ops->bind_class() implementations
Dave Chinner (1):
block: fix 32 bit overflow in __blkdev_issue_discard()
David Engraf (1):
watchdog: max77620_wdt: fix potential build errors
Dmitry Osipenko (1):
gpio: max77620: Add missing dependency on GPIOLIB_IRQCHIP
Eric Biggers (1):
crypto: chelsio - fix writing tfm flags to wrong place
Eric Dumazet (1):
net_sched: ematch: reject invalid TCF_EM_SIMPLE
Fenghua Yu (1):
drivers/net/b44: Change to non-atomic bit operations on pwol_mask
Greg Kroah-Hartman (1):
Linux 4.19.101
Hans de Goede (1):
HID: ite: Add USB id match for Acer SW5-012 keyboard dock
Heikki Krogerus (1):
usb: dwc3: pci: add ID for the Intel Comet Lake -V variant
Herbert Xu (1):
crypto: af_alg - Use bh_lock_sock in sk_destruct
Johan Hovold (12):
orinoco_usb: fix interface sanity check
rsi_91x_usb: fix interface sanity check
USB: serial: ir-usb: add missing endpoint sanity check
USB: serial: ir-usb: fix link-speed handling
USB: serial: ir-usb: fix IrLAP framing
ath9k: fix storage endpoint lookup
brcmfmac: fix interface sanity check
rtl8xxxu: fix interface sanity check
zd1211rw: fix storage endpoint lookup
rsi: fix use-after-free on probe errors
rsi: fix memory leak on failed URB submission
rsi: fix non-atomic allocation in completion handler
Krzysztof Kozlowski (1):
net: wan: sdla: Fix cast from pointer to integer of different size
Laura Abbott (1):
usb-storage: Disable UAS on JMicron SATA enclosure
Linus Torvalds (1):
random: try to actively add entropy rather than passively wait for it
Logan Gunthorpe (1):
iommu/amd: Support multiple PCI DMA aliases in IRQ Remapping
Lubomir Rintel (1):
component: do not dereference opaque pointer in debugfs
Lukas Wunner (1):
serial: 8250_bcm2835aux: Fix line mismatch on driver unbind
Malcolm Priestley (3):
staging: vt6656: correct packet types for CTS protect, mode.
staging: vt6656: use NULLFUCTION stack on mac80211
staging: vt6656: Fix false Tx excessive retries reporting.
Ming Lei (1):
block: cleanup __blkdev_issue_discard()
Pacien TRAN-GIRARD (1):
platform/x86: dell-laptop: disable kbd backlight on Inspiron 10xx
Pan Zhang (1):
drivers/hid/hid-multitouch.c: fix a possible null pointer access.
Paulo Alcantara (SUSE) (1):
cifs: Fix memory allocation in __smb2_handle_cancelled_cmd()
Pavel Balan (1):
HID: Add quirk for incorrect input length on Lenovo Y720
Peter Zijlstra (1):
sched/fair: Add tmp_alone_branch assertion
Priit Laes (1):
HID: Add quirk for Xin-Mo Dual Controller
Randy Dunlap (1):
arc: eznps: fix allmodconfig kconfig warning
Rodrigo Rivas Costa (1):
HID: steam: Fix input device disappearing
Slawomir Pawlowski (1):
PCI: Add DMA alias quirk for Intel VCA NTB
Tomas Winkler (1):
mei: me: add comet point (lake) H device ids
Tony Lindgren (1):
phy: cpcap-usb: Prevent USB line glitches from waking up modem
Vincent Guittot (1):
sched/fair: Fix insertion in rq->leaf_cfs_rq_list
wuxu.wu (1):
spi: spi-dw: Add lock protect dw_spi rx/tx to prevent concurrent calls
Greg KH
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 100 +SUBLEVEL = 101 EXTRAVERSION = NAME = "People's Front"
arch/arc/plat-eznps/Kconfig +1 -1
@@ -7,7 +7,7 @@ menuconfig ARC_PLAT_EZNPS bool "\"EZchip\" ARC dev platform" select CPU_BIG_ENDIAN - select CLKSRC_NPS + select CLKSRC_NPS if !PHYS_ADDR_T_64BIT select EZNPS_GIC select EZCHIP_NPS_MANAGEMENT_ENET if ETHERNET help
arch/arm64/kvm/debug.c +5 -1
@@ -112,7 +112,7 @@ void kvm_arm_reset_debug_ptr(struct kvm_vcpu *vcpu)void kvm_arm_setup_debug (struct kvm_vcpu *vcpu) {bool trap_debug = !(vcpu->arch.flags &KVM_ARM64_DEBUG_DIRTY ); -unsigned long mdscr; +unsigned long mdscr, orig_mdcr_el2 = vcpu->arch.mdcr_el2;trace_kvm_arm_setup_debug (vcpu, vcpu->guest_debug);
@@ -208,6 +208,10 @@ void kvm_arm_setup_debug(struct kvm_vcpu *vcpu)if (vcpu_read_sys_reg (vcpu,MDSCR_EL1 ) & (DBG_MDSCR_KDE |DBG_MDSCR_MDE )) vcpu->arch.flags |=KVM_ARM64_DEBUG_DIRTY ; +/* Write mdcr_el2 changes since vcpu_load on VHE systems */ +if (has_vhe () && orig_mdcr_el2 != vcpu->arch.mdcr_el2) +write_sysreg (vcpu->arch.mdcr_el2, mdcr_el2); +trace_kvm_arm_set_dreg32 ("MDCR_EL2" , vcpu->arch.mdcr_el2);trace_kvm_arm_set_dreg32 ("MDSCR_EL1" ,vcpu_read_sys_reg (vcpu,MDSCR_EL1 )); }
block/blk-lib.c +7 -16
@@ -52,15 +52,14 @@ int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,if ((sector | nr_sects) & bs_mask)return -EINVAL ; -while (nr_sects) { -unsigned int req_sects = nr_sects; -sector_t end_sect; +if (!nr_sects) +return -EINVAL ; -if (!req_sects) - goto fail; - req_sects =min (req_sects,bio_allowed_max_sectors (q)); +while (nr_sects) { +sector_t req_sects =min_t (sector_t, nr_sects, +bio_allowed_max_sectors (q)); - end_sect = sector + req_sects; +WARN_ON_ONCE ((req_sects <<9 ) >UINT_MAX ); bio =next_bio (bio,0 , gfp_mask); bio->bi_iter.bi_sector = sector;
@@ -68,8 +67,8 @@ int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,bio_set_op_attrs (bio, op,0 ); bio->bi_iter.bi_size = req_sects <<9 ; + sector += req_sects; nr_sects -= req_sects; - sector = end_sect;/* * We can loop for a long time in here, if someone does
@@ -82,14 +81,6 @@ int __blkdev_issue_discard(struct block_device *bdev, sector_t sector, *biop = bio;return 0 ; - -fail: -if (bio) { -submit_bio_wait (bio); -bio_put (bio); - } - *biop =NULL ; -return -EOPNOTSUPP ; }EXPORT_SYMBOL (__blkdev_issue_discard);
crypto/af_alg.c +4 -2
@@ -139,11 +139,13 @@ void af_alg_release_parent(struct sock *sk) sk = ask->parent; ask =alg_sk (sk); -lock_sock (sk); +local_bh_disable (); +bh_lock_sock (sk); ask->nokey_refcnt -= nokey;if (!last) last = !--ask->refcnt; -release_sock (sk); +bh_unlock_sock (sk); +local_bh_enable ();if (last)sock_put (sk);
drivers/atm/eni.c +2 -2
@@ -372,7 +372,7 @@ static int do_rx_dma(struct atm_vcc *vcc,struct sk_buff *skb, here = (eni_vcc->descr+skip) & (eni_vcc->words-1 ); dma[j++] = (here <<MID_DMA_COUNT_SHIFT ) | (vcc->vci <<MID_DMA_VCI_SHIFT ) |MID_DT_JK ; - j++; + dma[j++] =0 ; } here = (eni_vcc->descr+size+skip) & (eni_vcc->words-1 );if (!eff) size += skip;
@@ -445,7 +445,7 @@ static int do_rx_dma(struct atm_vcc *vcc,struct sk_buff *skb,if (size != eff) { dma[j++] = (here <<MID_DMA_COUNT_SHIFT ) | (vcc->vci <<MID_DMA_VCI_SHIFT ) |MID_DT_JK ; - j++; + dma[j++] =0 ; }if (!j || j >2 *RX_DMA_BUF ) { printk(KERN_CRIT DEV_LABEL "!j or j too big!!!\n");
drivers/base/component.c +4 -4
@@ -74,11 +74,11 @@ static int component_devices_show(struct seq_file *s, void *data)seq_printf (s,"%-40s %20s\n" ,"device name" ,"status" );seq_puts (s,"-------------------------------------------------------------\n" );for (i =0 ; i < match->num; i++) { -struct device *d = (struct device *)match->compare[i].data; +struct component *component = match->compare[i].component; -seq_printf (s,"%-40s %20s\n" ,dev_name (d), - match->compare[i].component ? -"registered" :"not registered" ); +seq_printf (s,"%-40s %20s\n" , + component ?dev_name (component->dev) :"(unknown)" , + component ? (component->bound ?"bound" :"not bound" ) :"not registered" ); }mutex_unlock (&component_mutex);
drivers/char/random.c +61 -1
74 lines not on this page · raw message
drivers/crypto/chelsio/chcr_algo.c +3 -13
@@ -3135,9 +3135,6 @@ static int chcr_gcm_setauthsize(struct crypto_aead *tfm, unsigned int authsize) aeadctx->mayverify =VERIFY_SW ;break ;default : - -crypto_tfm_set_flags ((struct crypto_tfm *) tfm, -CRYPTO_TFM_RES_BAD_KEY_LEN );return -EINVAL ; }return crypto_aead_setauthsize (aeadctx->sw_cipher, authsize);
@@ -3162,8 +3159,6 @@ static int chcr_4106_4309_setauthsize(struct crypto_aead *tfm, aeadctx->mayverify =VERIFY_HW ;break ;default : -crypto_tfm_set_flags ((struct crypto_tfm *)tfm, -CRYPTO_TFM_RES_BAD_KEY_LEN );return -EINVAL ; }return crypto_aead_setauthsize (aeadctx->sw_cipher, authsize);
@@ -3204,8 +3199,6 @@ static int chcr_ccm_setauthsize(struct crypto_aead *tfm, aeadctx->mayverify =VERIFY_HW ;break ;default : -crypto_tfm_set_flags ((struct crypto_tfm *)tfm, -CRYPTO_TFM_RES_BAD_KEY_LEN );return -EINVAL ; }return crypto_aead_setauthsize (aeadctx->sw_cipher, authsize);
@@ -3230,8 +3223,7 @@ static int chcr_ccm_common_setkey(struct crypto_aead *aead, ck_size =CHCR_KEYCTX_CIPHER_KEY_SIZE_256 ; mk_size =CHCR_KEYCTX_MAC_KEY_SIZE_256 ; }else { -crypto_tfm_set_flags ((struct crypto_tfm *)aead, -CRYPTO_TFM_RES_BAD_KEY_LEN ); +crypto_aead_set_flags (aead,CRYPTO_TFM_RES_BAD_KEY_LEN ); aeadctx->enckey_len =0 ;return -EINVAL ; }
@@ -3269,8 +3261,7 @@ static int chcr_aead_rfc4309_setkey(struct crypto_aead *aead, const u8 *key,int error;if (keylen <3 ) { -crypto_tfm_set_flags ((struct crypto_tfm *)aead, -CRYPTO_TFM_RES_BAD_KEY_LEN ); +crypto_aead_set_flags (aead,CRYPTO_TFM_RES_BAD_KEY_LEN ); aeadctx->enckey_len =0 ;return -EINVAL ; }
@@ -3320,8 +3311,7 @@ static int chcr_gcm_setkey(struct crypto_aead *aead, const u8 *key, }else if (keylen ==AES_KEYSIZE_256 ) { ck_size =CHCR_KEYCTX_CIPHER_KEY_SIZE_256 ; }else { -crypto_tfm_set_flags ((struct crypto_tfm *)aead, -CRYPTO_TFM_RES_BAD_KEY_LEN ); +crypto_aead_set_flags (aead,CRYPTO_TFM_RES_BAD_KEY_LEN );pr_err ("GCM: Invalid key length %d\n" , keylen); ret = -EINVAL ; goto out;
drivers/gpio/Kconfig +1 -0
@@ -1059,6 +1059,7 @@ config GPIO_MADERA config GPIO_MAX77620 tristate "GPIO support for PMIC MAX77620 and MAX20024" depends on MFD_MAX77620 + select GPIOLIB_IRQCHIP help GPIO driver for MAX77620 and MAX20024 PMIC from Maxim Semiconductor. MAX77620 PMIC has 8 pins that can be configured as GPIOs. The
drivers/hid/hid-ids.h +3 -0
@@ -620,6 +620,7 @@#define USB_VENDOR_ID_ITE 0x048d#define USB_DEVICE_ID_ITE_LENOVO_YOGA 0x8386#define USB_DEVICE_ID_ITE_LENOVO_YOGA2 0x8350 +#define I2C_DEVICE_ID_ITE_LENOVO_LEGION_Y720 0x837a#define USB_DEVICE_ID_ITE_LENOVO_YOGA900 0x8396#define USB_DEVICE_ID_ITE8595 0x8595
@@ -717,6 +718,7 @@#define USB_DEVICE_ID_LG_MULTITOUCH 0x0064#define USB_DEVICE_ID_LG_MELFAS_MT 0x6007#define I2C_DEVICE_ID_LG_8001 0x8001 +#define I2C_DEVICE_ID_LG_7010 0x7010#define USB_VENDOR_ID_LOGITECH 0x046d#define USB_DEVICE_ID_LOGITECH_AUDIOHUB 0x0a0e
@@ -1074,6 +1076,7 @@#define USB_DEVICE_ID_SYNAPTICS_LTS2 0x1d10#define USB_DEVICE_ID_SYNAPTICS_HD 0x0ac3#define USB_DEVICE_ID_SYNAPTICS_QUAD_HD 0x1ac3 +#define USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5_012 0x2968#define USB_DEVICE_ID_SYNAPTICS_TP_V103 0x5710#define USB_VENDOR_ID_TEXAS_INSTRUMENTS 0x2047
drivers/hid/hid-ite.c +3 -0
@@ -43,6 +43,9 @@ static int ite_event(struct hid_device *hdev, struct hid_field *field,static const struct hid_device_id ite_devices[] = { {HID_USB_DEVICE (USB_VENDOR_ID_ITE ,USB_DEVICE_ID_ITE8595 ) }, {HID_USB_DEVICE (USB_VENDOR_ID_258A ,USB_DEVICE_ID_258A_6A88 ) }, +/* ITE8595 USB kbd ctlr, with Synaptics touchpad connected to it. */ + {HID_USB_DEVICE (USB_VENDOR_ID_SYNAPTICS , +USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5_012 ) }, { } };MODULE_DEVICE_TABLE (hid, ite_devices);
drivers/hid/hid-multitouch.c +4 -1
@@ -1007,7 +1007,7 @@ static int mt_process_slot(struct mt_device *td, struct input_dev *input, tool =MT_TOOL_DIAL ; else if (unlikely(!confidence_state)) { tool =MT_TOOL_PALM ; -if (!active && +if (!active && mt &&input_mt_is_active (&mt->slots[slotnum])) {/* * The non-confidence was reported for
@@ -1972,6 +1972,9 @@ static const struct hid_device_id mt_devices[] = { { .driver_data = MT_CLS_LG,HID_USB_DEVICE (USB_VENDOR_ID_LG , USB_DEVICE_ID_LG_MELFAS_MT) }, + { .driver_data = MT_CLS_LG, +HID_DEVICE (BUS_I2C ,HID_GROUP_GENERIC , + USB_VENDOR_ID_LG, I2C_DEVICE_ID_LG_7010) }, /* MosArt panels */ { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
drivers/hid/hid-quirks.c +1 -0
@@ -175,6 +175,7 @@ static const struct hid_device_id hid_quirks[] = { { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SIRIUS_BATTERY_FREE_TABLET), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD2, USB_DEVICE_ID_SMARTJOY_DUAL_PLUS), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_QUAD_USB_JOYPAD), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE), HID_QUIRK_MULTI_INPUT }, { 0 } };
drivers/hid/hid-steam.c +4 -0
@@ -768,8 +768,12 @@ static int steam_probe(struct hid_device *hdev,if (steam->quirks &STEAM_QUIRK_WIRELESS ) {hid_info (hdev,"Steam wireless receiver connected" ); +/* If using a wireless adaptor ask for connection status */ + steam->connected = false;steam_request_conn_status (steam); }else { +/* A wired connection is always present */ + steam->connected = true; ret =steam_register (steam);if (ret) { hid_err(hdev,
drivers/hid/i2c-hid/i2c-hid-core.c +13 -3
@@ -52,6 +52,8 @@#define I2C_HID_QUIRK_DELAY_AFTER_SLEEP BIT(3)#define I2C_HID_QUIRK_BOGUS_IRQ BIT(4)#define I2C_HID_QUIRK_RESET_ON_RESUME BIT(5) +#define I2C_HID_QUIRK_BAD_INPUT_SIZE BIT(6) +/* flags */ #define I2C_HID_STARTED 0
@@ -185,6 +187,8 @@ static const struct i2c_hid_quirks { I2C_HID_QUIRK_BOGUS_IRQ }, {USB_VENDOR_ID_ALPS_JP ,HID_ANY_ID , I2C_HID_QUIRK_RESET_ON_RESUME }, + { USB_VENDOR_ID_ITE, I2C_DEVICE_ID_ITE_LENOVO_LEGION_Y720, + I2C_HID_QUIRK_BAD_INPUT_SIZE }, { 0, 0 } };
@@ -516,9 +520,15 @@ static void i2c_hid_get_input(struct i2c_hid *ihid) }if ((ret_size > size) || (ret_size <2 )) { -dev_err (&ihid->client->dev,"%s: incomplete report (%d/%d)\n" , - __func__, size, ret_size); -return ; +if (ihid->quirks &I2C_HID_QUIRK_BAD_INPUT_SIZE ) { + ihid->inbuf[0 ] = size &0xff ; + ihid->inbuf[1 ] = size >>8 ; + ret_size = size; + }else { +dev_err (&ihid->client->dev,"%s: incomplete report (%d/%d)\n" , + __func__, size, ret_size); +return ; + } }i2c_hid_dbg (ihid,"input: %*ph\n" , ret_size, ihid->inbuf);
drivers/iio/gyro/st_gyro_core.c +74 -1
87 lines not on this page · raw message
drivers/iommu/amd_iommu.c +30 -7
@@ -3709,7 +3709,20 @@ static void set_remap_table_entry(struct amd_iommu *iommu, u16 devid,iommu_flush_dte (iommu, devid); } -static struct irq_remap_table *alloc_irq_table (u16 devid) +static int set_remap_table_entry_alias (struct pci_dev *pdev,u16 alias, +void *data) +{ +struct irq_remap_table *table = data; + + irq_lookup_table[alias] = table; +set_dte_irq_entry (alias, table); + +iommu_flush_dte (amd_iommu_rlookup_table[alias], alias); + +return 0 ; +} + +static struct irq_remap_table *alloc_irq_table (u16 devid,struct pci_dev *pdev) {struct irq_remap_table *table =NULL ;struct irq_remap_table *new_table =NULL ;
@@ -3755,7 +3768,12 @@ static struct irq_remap_table *alloc_irq_table(u16 devid) table = new_table; new_table =NULL ; -set_remap_table_entry (iommu, devid, table); +if (pdev) +pci_for_each_dma_alias (pdev, set_remap_table_entry_alias, + table); +else +set_remap_table_entry (iommu, devid, table); +if (devid != alias)set_remap_table_entry (iommu, alias, table);
@@ -3772,7 +3790,8 @@ static struct irq_remap_table *alloc_irq_table(u16 devid)return table; } -static int alloc_irq_index (u16 devid,int count,bool align) +static int alloc_irq_index (u16 devid,int count,bool align, +struct pci_dev *pdev) {struct irq_remap_table *table;int index, c, alignment =1 ;
@@ -3782,7 +3801,7 @@ static int alloc_irq_index(u16 devid, int count, bool align)if (!iommu)return -ENODEV ; - table =alloc_irq_table (devid); + table =alloc_irq_table (devid, pdev);if (!table)return -ENODEV ;
@@ -4215,7 +4234,7 @@ static int irq_remapping_alloc(struct irq_domain *domain, unsigned int virq,struct irq_remap_table *table;struct amd_iommu *iommu; - table =alloc_irq_table (devid); + table =alloc_irq_table (devid,NULL );if (table) {if (!table->min_index) {/*
@@ -4232,11 +4251,15 @@ static int irq_remapping_alloc(struct irq_domain *domain, unsigned int virq, }else { index = -ENOMEM ; } - }else { + }else if (info->type ==X86_IRQ_ALLOC_TYPE_MSI || + info->type ==X86_IRQ_ALLOC_TYPE_MSIX ) {bool align = (info->type ==X86_IRQ_ALLOC_TYPE_MSI ); - index =alloc_irq_index (devid, nr_irqs, align); + index =alloc_irq_index (devid, nr_irqs, align, info->msi_dev); + }else { + index =alloc_irq_index (devid, nr_irqs, false,NULL ); } +if (index <0 ) {pr_warn ("Failed to allocate IRTE\n" ); ret = index;
drivers/misc/mei/hw-me-regs.h +4 -0
@@ -141,8 +141,12 @@#define MEI_DEV_ID_CMP_LP 0x02e0/* Comet Point LP */ #define MEI_DEV_ID_CMP_LP_3 0x02e4/* Comet Point LP 3 (iTouch) */ +#define MEI_DEV_ID_CMP_V 0xA3BA/* Comet Point Lake V */ +#define MEI_DEV_ID_CMP_H 0x06e0/* Comet Lake H */ +#define MEI_DEV_ID_CMP_H_3 0x06e4/* Comet Lake H 3 (iTouch) */ +#define MEI_DEV_ID_ICP_LP 0x34E0/* Ice Lake Point LP */ #define MEI_DEV_ID_TGP_LP 0xA0E0/* Tiger Lake Point LP */
drivers/misc/mei/pci-me.c +2 -0
@@ -108,6 +108,8 @@ static const struct pci_device_id mei_me_pci_tbl[] = { {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_LP, MEI_ME_PCH12_CFG)}, {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_LP_3, MEI_ME_PCH8_CFG)}, {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_V, MEI_ME_PCH12_CFG)}, + {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_H, MEI_ME_PCH12_CFG)}, + {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_H_3, MEI_ME_PCH8_CFG)}, {MEI_PCI_DEVICE(MEI_DEV_ID_ICP_LP, MEI_ME_PCH12_CFG)},
drivers/net/ethernet/broadcom/b44.c +6 -3
@@ -1519,8 +1519,10 @@ static int b44_magic_pattern(u8 *macaddr, u8 *ppattern, u8 *pmask, int offset)int ethaddr_bytes =ETH_ALEN ;memset (ppattern + offset,0xff , magicsync); -for (j =0 ; j < magicsync; j++) -set_bit (len++, (unsigned long *) pmask); +for (j =0 ; j < magicsync; j++) { + pmask[len >>3 ] |=BIT (len &7 ); + len++; + }for (j =0 ; j <B44_MAX_PATTERNS ; j++) {if ((B44_PATTERN_SIZE - len) >=ETH_ALEN )
@@ -1532,7 +1534,8 @@ static int b44_magic_pattern(u8 *macaddr, u8 *ppattern, u8 *pmask, int offset)for (k =0 ; k< ethaddr_bytes; k++) { ppattern[offset + magicsync + (j *ETH_ALEN ) + k] = macaddr[k]; -set_bit (len++, (unsigned long *) pmask); + pmask[len >>3 ] |=BIT (len &7 ); + len++; } }return len -1 ;
drivers/net/wan/sdla.c +1 -1
@@ -711,7 +711,7 @@ static netdev_tx_t sdla_transmit(struct sk_buff *skb,spin_lock_irqsave (&sdla_lock, flags);SDLA_WINDOW (dev, addr); - pbuf = (void *)(((int ) dev->mem_start) + (addr &SDLA_ADDR_MASK )); + pbuf = (void *)(dev->mem_start + (addr &SDLA_ADDR_MASK ));__sdla_write (dev, pbuf->buf_addr, skb->data, skb->len);SDLA_WINDOW (dev, addr); pbuf->opp_flag =1 ;
drivers/net/wireless/ath/ath9k/hif_usb.c +1 -1
@@ -1216,7 +1216,7 @@ static void ath9k_hif_usb_firmware_cb(const struct firmware *fw, void *context)static int send_eject_command (struct usb_interface *interface) {struct usb_device *udev =interface_to_usbdev (interface); -struct usb_host_interface *iface_desc = &interface->altsetting[0 ]; +struct usb_host_interface *iface_desc = interface->cur_altsetting;struct usb_endpoint_descriptor *endpoint;unsigned char *cmd;u8 bulk_out_ep;
drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c +2 -2
@@ -1357,7 +1357,7 @@ brcmf_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) goto fail; } - desc = &intf->altsetting[0 ].desc; + desc = &intf->cur_altsetting->desc;if ((desc->bInterfaceClass !=USB_CLASS_VENDOR_SPEC ) || (desc->bInterfaceSubClass !=2 ) || (desc->bInterfaceProtocol !=0xff )) {
@@ -1370,7 +1370,7 @@ brcmf_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) num_of_eps = desc->bNumEndpoints;for (ep =0 ; ep < num_of_eps; ep++) { - endpoint = &intf->altsetting[0 ].endpoint[ep].desc; + endpoint = &intf->cur_altsetting->endpoint[ep].desc; endpoint_num =usb_endpoint_num (endpoint);if (!usb_endpoint_xfer_bulk (endpoint))continue ;
drivers/net/wireless/intersil/orinoco/orinoco_usb.c +2 -2
@@ -1611,9 +1611,9 @@ static int ezusb_probe(struct usb_interface *interface,/* set up the endpoint information */ /* check out the endpoints */ - iface_desc = &interface->altsetting[0 ].desc; + iface_desc = &interface->cur_altsetting->desc;for (i =0 ; i < iface_desc->bNumEndpoints; ++i) { - ep = &interface->altsetting[0 ].endpoint[i].desc; + ep = &interface->cur_altsetting->endpoint[i].desc;if (usb_endpoint_is_bulk_in (ep)) {/* we found a bulk in endpoint */
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c +1 -1
@@ -5921,7 +5921,7 @@ static int rtl8xxxu_parse_usb(struct rtl8xxxu_priv *priv,u8 dir, xtype, num;int ret =0 ; - host_interface = &interface->altsetting[0 ]; + host_interface = interface->cur_altsetting; interface_desc = &host_interface->desc; endpoints = interface_desc->bNumEndpoints;
drivers/net/wireless/rsi/rsi_91x_hal.c +6 -6
@@ -616,6 +616,7 @@ static int bl_cmd(struct rsi_hw *adapter, u8 cmd, u8 exp_resp, char *str)bl_start_cmd_timer (adapter, timeout); status =bl_write_cmd (adapter, cmd, exp_resp, ®out_val);if (status <0 ) { +bl_stop_cmd_timer (adapter);rsi_dbg (ERR_ZONE ,"%s: Command %s (%0x) writing failed..\n" , __func__, str, cmd);
@@ -731,10 +732,9 @@ static int ping_pong_write(struct rsi_hw *adapter, u8 cmd, u8 *addr, u32 size) } status =bl_cmd (adapter, cmd_req, cmd_resp, str); -if (status) { -bl_stop_cmd_timer (adapter); +if (status)return status; - } +return 0 ; }
@@ -822,10 +822,9 @@ static int auto_fw_upgrade(struct rsi_hw *adapter, u8 *flash_content, status =bl_cmd (adapter,EOF_REACHED ,FW_LOADING_SUCCESSFUL ,"EOF_REACHED" ); -if (status) { -bl_stop_cmd_timer (adapter); +if (status)return status; - } +rsi_dbg (INFO_ZONE ,"FW loading is done and FW is running..\n" );return 0 ; }
@@ -846,6 +845,7 @@ static int rsi_load_firmware(struct rsi_hw *adapter) status = hif_ops->master_reg_read (adapter,SWBL_REGOUT , ®out_val,2 );if (status <0 ) { +bl_stop_cmd_timer (adapter);rsi_dbg (ERR_ZONE ,"%s: REGOUT read failed\n" , __func__);return status;
drivers/net/wireless/rsi/rsi_91x_usb.c +11 -8
@@ -16,6 +16,7 @@*/ #include <linux/module.h> +#include <linux/types.h> #include <net/rsi_91x.h> #include "rsi_usb.h" #include "rsi_hal.h"
@@ -29,7 +30,7 @@ MODULE_PARM_DESC(dev_oper_mode,"9[Wi-Fi STA + BT LE], 13[Wi-Fi STA + BT classic + BT LE]\n" "6[AP + BT classic], 14[AP + BT classic + BT LE]"); -static int rsi_rx_urb_submit (struct rsi_hw *adapter,u8 ep_num); +static int rsi_rx_urb_submit (struct rsi_hw *adapter,u8 ep_num,gfp_t flags);/** * rsi_usb_card_write() - This function writes to the USB Card.
@@ -117,7 +118,7 @@ static int rsi_find_bulk_in_and_out_endpoints(struct usb_interface *interface,__le16 buffer_size;int ii, bin_found =0 , bout_found =0 ; - iface_desc = &(interface->altsetting[0 ]); + iface_desc = interface->cur_altsetting;for (ii =0 ; ii < iface_desc->desc.bNumEndpoints; ++ii) { endpoint = &(iface_desc->endpoint[ii].desc);
@@ -283,7 +284,7 @@ static void rsi_rx_done_handler(struct urb *urb) status =0 ; out: -if (rsi_rx_urb_submit (dev->priv, rx_cb->ep_num)) +if (rsi_rx_urb_submit (dev->priv, rx_cb->ep_num,GFP_ATOMIC ))rsi_dbg (ERR_ZONE ,"%s: Failed in urb submission" , __func__);if (status)
@@ -296,7 +297,7 @@ static void rsi_rx_done_handler(struct urb *urb)* * Return: 0 on success, a negative error code on failure. */ -static int rsi_rx_urb_submit (struct rsi_hw *adapter,u8 ep_num) +static int rsi_rx_urb_submit (struct rsi_hw *adapter,u8 ep_num,gfp_t mem_flags) {struct rsi_91x_usbdev *dev = (struct rsi_91x_usbdev *)adapter->rsi_dev;struct rx_usb_ctrl_block *rx_cb = &dev->rx_cb[ep_num -1 ];
@@ -326,9 +327,11 @@ static int rsi_rx_urb_submit(struct rsi_hw *adapter, u8 ep_num) rsi_rx_done_handler, rx_cb); - status =usb_submit_urb (urb,GFP_KERNEL ); -if (status) + status =usb_submit_urb (urb, mem_flags); +if (status) {rsi_dbg (ERR_ZONE ,"%s: Failed in urb submission\n" , __func__); +dev_kfree_skb (skb); + }return status; }
@@ -781,12 +784,12 @@ static int rsi_probe(struct usb_interface *pfunction,rsi_dbg (INIT_ZONE ,"%s: Device Init Done\n" , __func__); } - status =rsi_rx_urb_submit (adapter,WLAN_EP ); + status =rsi_rx_urb_submit (adapter,WLAN_EP ,GFP_KERNEL );if (status) goto err1;if (adapter->priv->coex_mode >1 ) { - status =rsi_rx_urb_submit (adapter,BT_EP ); + status =rsi_rx_urb_submit (adapter,BT_EP ,GFP_KERNEL );if (status) goto err1; }
drivers/net/wireless/zydas/zd1211rw/zd_usb.c +1 -1
@@ -1275,7 +1275,7 @@ static void print_id(struct usb_device *udev)static int eject_installer (struct usb_interface *intf) {struct usb_device *udev =interface_to_usbdev (intf); -struct usb_host_interface *iface_desc = &intf->altsetting[0 ]; +struct usb_host_interface *iface_desc = intf->cur_altsetting;struct usb_endpoint_descriptor *endpoint;unsigned char *cmd;u8 bulk_out_ep;
drivers/pci/quirks.c +34 -0
@@ -3986,6 +3986,40 @@ static void quirk_mic_x200_dma_alias(struct pci_dev *pdev)DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x2260 , quirk_mic_x200_dma_alias);DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x2264 , quirk_mic_x200_dma_alias); +/* +* Intel Visual Compute Accelerator (VCA) is a family of PCIe add-in devices +* exposing computational units via Non Transparent Bridges (NTB, PEX 87xx). +* +* Similarly to MIC x200, we need to add DMA aliases to allow buffer access +* when IOMMU is enabled. These aliases allow computational unit access to +* host memory. These aliases mark the whole VCA device as one IOMMU +* group. +* +* All possible slot numbers (0x20) are used, since we are unable to tell +* what slot is used on other side. This quirk is intended for both host +* and computational unit sides. The VCA devices have up to five functions +* (four for DMA channels and one additional). +*/ +static void quirk_pex_vca_alias (struct pci_dev *pdev) +{ +const unsigned int num_pci_slots =0x20 ; +unsigned int slot; + +for (slot =0 ; slot < num_pci_slots; slot++) { +pci_add_dma_alias (pdev,PCI_DEVFN (slot,0x0 )); +pci_add_dma_alias (pdev,PCI_DEVFN (slot,0x1 )); +pci_add_dma_alias (pdev,PCI_DEVFN (slot,0x2 )); +pci_add_dma_alias (pdev,PCI_DEVFN (slot,0x3 )); +pci_add_dma_alias (pdev,PCI_DEVFN (slot,0x4 )); + } +} +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x2954 , quirk_pex_vca_alias); +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x2955 , quirk_pex_vca_alias); +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x2956 , quirk_pex_vca_alias); +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x2958 , quirk_pex_vca_alias); +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x2959 , quirk_pex_vca_alias); +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,0x295A , quirk_pex_vca_alias); +/* * The IOMMU and interrupt controller on Broadcom Vulcan/Cavium ThunderX2 are * associated not at the root bus, but at a bridge below. This quirk avoids
drivers/phy/motorola/phy-cpcap-usb.c +15 -3
@@ -115,7 +115,7 @@ struct cpcap_usb_ints_state {enum cpcap_gpio_mode {CPCAP_DM_DP ,CPCAP_MDM_RX_TX , -CPCAP_UNKNOWN , +CPCAP_UNKNOWN_DISABLED ,/* Seems to disable USB lines */ CPCAP_OTG_DM_DP , };
@@ -379,7 +379,8 @@ static int cpcap_usb_set_uart_mode(struct cpcap_phy_ddata *ddata) {int error; - error =cpcap_usb_gpio_set_mode (ddata,CPCAP_DM_DP ); +/* Disable lines to prevent glitches from waking up mdm6600 */ + error =cpcap_usb_gpio_set_mode (ddata,CPCAP_UNKNOWN_DISABLED );if (error) goto out_err;
@@ -406,6 +407,11 @@ static int cpcap_usb_set_uart_mode(struct cpcap_phy_ddata *ddata)if (error) goto out_err; +/* Enable UART mode */ + error =cpcap_usb_gpio_set_mode (ddata,CPCAP_DM_DP ); +if (error) + goto out_err; +return 0 ; out_err:
@@ -418,7 +424,8 @@ static int cpcap_usb_set_usb_mode(struct cpcap_phy_ddata *ddata) {int error; - error =cpcap_usb_gpio_set_mode (ddata,CPCAP_OTG_DM_DP ); +/* Disable lines to prevent glitches from waking up mdm6600 */ + error =cpcap_usb_gpio_set_mode (ddata,CPCAP_UNKNOWN_DISABLED );if (error)return error;
@@ -458,6 +465,11 @@ static int cpcap_usb_set_usb_mode(struct cpcap_phy_ddata *ddata)if (error) goto out_err; +/* Enable USB mode */ + error =cpcap_usb_gpio_set_mode (ddata,CPCAP_OTG_DM_DP ); +if (error) + goto out_err; +return 0 ; out_err:
drivers/phy/qualcomm/phy-qcom-qmp.c +1 -1
@@ -66,7 +66,7 @@/* QPHY_V3_PCS_MISC_CLAMP_ENABLE register bits */ #define CLAMP_EN BIT(0)/* enables i/o clamp_n */ -#define PHY_INIT_COMPLETE_TIMEOUT 1000 +#define PHY_INIT_COMPLETE_TIMEOUT 10000#define POWER_DOWN_DELAY_US_MIN 10#define POWER_DOWN_DELAY_US_MAX 11
drivers/platform/x86/dell-laptop.c +26 -0
@@ -37,6 +37,7 @@struct quirk_entry {bool touchpad_led; +bool kbd_led_not_present;bool kbd_led_levels_off_1;bool kbd_missing_ac_tag;
@@ -77,6 +78,10 @@ static struct quirk_entry quirk_dell_latitude_e6410 = { .kbd_led_levels_off_1 = true, }; +static struct quirk_entry quirk_dell_inspiron_1012 = { + .kbd_led_not_present = true, +}; +static struct platform_driver platform_driver = { .driver = { .name ="dell-laptop" ,
@@ -314,6 +319,24 @@ static const struct dmi_system_id dell_quirks[] __initconst = { }, .driver_data = &quirk_dell_latitude_e6410, }, + { + .callback = dmi_matched, + .ident = "Dell Inspiron 1012", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1012"), + }, + .driver_data = &quirk_dell_inspiron_1012, + }, + { + .callback = dmi_matched, + .ident = "Dell Inspiron 1018", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1018"), + }, + .driver_data = &quirk_dell_inspiron_1012, + }, { } };
@@ -1497,6 +1520,9 @@ static void kbd_init(void) {int ret; +if (quirks && quirks->kbd_led_not_present) +return ; + ret =kbd_init_info ();kbd_init_tokens ();
drivers/spi/spi-dw.c +12 -3
@@ -179,9 +179,11 @@ static inline u32 rx_max(struct dw_spi *dws)static void dw_writer (struct dw_spi *dws) { -u32 max =tx_max (dws); +u32 max;u16 txw =0 ; +spin_lock (&dws->buf_lock); + max =tx_max (dws);while (max--) {/* Set the tx word if the transfer's original "tx" is not null */ if (dws->tx_end - dws->len) {
@@ -193,13 +195,16 @@ static void dw_writer(struct dw_spi *dws)dw_write_io_reg (dws,DW_SPI_DR , txw); dws->tx += dws->n_bytes; } +spin_unlock (&dws->buf_lock); }static void dw_reader (struct dw_spi *dws) { -u32 max =rx_max (dws); +u32 max;u16 rxw; +spin_lock (&dws->buf_lock); + max =rx_max (dws);while (max--) { rxw =dw_read_io_reg (dws,DW_SPI_DR );/* Care rx only if the transfer's original "rx" is not null */
@@ -211,6 +216,7 @@ static void dw_reader(struct dw_spi *dws) } dws->rx += dws->n_bytes; } +spin_unlock (&dws->buf_lock); }static void int_error_stop (struct dw_spi *dws,const char *msg)
@@ -283,18 +289,20 @@ static int dw_spi_transfer_one(struct spi_controller *master, {struct dw_spi *dws =spi_controller_get_devdata (master);struct chip_data *chip =spi_get_ctldata (spi); +unsigned long flags;u8 imask =0 ;u16 txlevel =0 ;u32 cr0;int ret; dws->dma_mapped =0 ; - +spin_lock_irqsave (&dws->buf_lock, flags); dws->tx = (void *)transfer->tx_buf; dws->tx_end = dws->tx + transfer->len; dws->rx = transfer->rx_buf; dws->rx_end = dws->rx + transfer->len; dws->len = transfer->len; +spin_unlock_irqrestore (&dws->buf_lock, flags);spi_enable_chip (dws,0 );
@@ -485,6 +493,7 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws) dws->type =SSI_MOTO_SPI ; dws->dma_inited =0 ; dws->dma_addr = (dma_addr_t)(dws->paddr +DW_SPI_DR ); +spin_lock_init (&dws->buf_lock);spi_controller_set_devdata (master, dws);
drivers/spi/spi-dw.h +1 -0
@@ -118,6 +118,7 @@ struct dw_spi {size_t len;void *tx;void *tx_end; +spinlock_t buf_lock;void *rx;void *rx_end;int dma_mapped;
drivers/staging/most/net/net.c +10 -0
@@ -81,6 +81,11 @@ static int skb_to_mamac(const struct sk_buff *skb, struct mbo *mbo)unsigned int payload_len = skb->len -ETH_HLEN ;unsigned int mdp_len = payload_len +MDP_HDR_LEN ; +if (mdp_len < skb->len) { +pr_err ("drop: too large packet! (%u)\n" , skb->len); +return -EINVAL ; + } +if (mbo->buffer_length < mdp_len) {pr_err ("drop: too small buffer! (%d for %d)\n" , mbo->buffer_length, mdp_len);
@@ -128,6 +133,11 @@ static int skb_to_mep(const struct sk_buff *skb, struct mbo *mbo)u8 *buff = mbo->virt_address;unsigned int mep_len = skb->len +MEP_HDR_LEN ; +if (mep_len < skb->len) { +pr_err ("drop: too large packet! (%u)\n" , skb->len); +return -EINVAL ; + } +if (mbo->buffer_length < mep_len) {pr_err ("drop: too small buffer! (%d for %d)\n" , mbo->buffer_length, mep_len);
drivers/staging/vt6656/device.h +2 -0
@@ -52,6 +52,8 @@#define RATE_AUTO 12#define MAX_RATE 12 +#define VNT_B_RATES (BIT(RATE_1M) | BIT(RATE_2M) |\ + BIT(RATE_5M) | BIT(RATE_11M))/* * device specific
drivers/staging/vt6656/int.c +4 -2
@@ -97,9 +97,11 @@ static int vnt_int_report_rate(struct vnt_private *priv, u8 pkt_no, u8 tsr) info->status.rates[0 ].count = tx_retry; -if (!(tsr & (TSR_TMO |TSR_RETRYTMO ))) { +if (!(tsr &TSR_TMO )) { info->status.rates[0 ].idx = idx; - info->flags |=IEEE80211_TX_STAT_ACK ; + +if (!(info->flags &IEEE80211_TX_CTL_NO_ACK )) + info->flags |=IEEE80211_TX_STAT_ACK ; }ieee80211_tx_status_irqsafe (priv->hw, context->skb);
drivers/staging/vt6656/main_usb.c +1 -0
@@ -978,6 +978,7 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id)ieee80211_hw_set (priv->hw,RX_INCLUDES_FCS );ieee80211_hw_set (priv->hw,REPORTS_TX_ACK_STATUS );ieee80211_hw_set (priv->hw,SUPPORTS_PS ); +ieee80211_hw_set (priv->hw,PS_NULLFUNC_STACK ); priv->hw->max_signal =100 ;
drivers/staging/vt6656/rxtx.c +13 -13
@@ -278,11 +278,9 @@ static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context, PK_TYPE_11B, &buf->b);/* Get Duration and TimeStamp */ -if (ieee80211_is_pspoll (hdr->frame_control)) { -__le16 dur =cpu_to_le16 (priv->current_aid |BIT (14 ) |BIT (15 )); - - buf->duration_a = dur; - buf->duration_b = dur; +if (ieee80211_is_nullfunc (hdr->frame_control)) { + buf->duration_a = hdr->duration_id; + buf->duration_b = hdr->duration_id; }else { buf->duration_a =vnt_get_duration_le (priv, tx_context->pkt_type, need_ack);
@@ -371,10 +369,8 @@ static u16 vnt_rxtx_datahead_ab(struct vnt_usb_send_context *tx_context, tx_context->pkt_type, &buf->ab);/* Get Duration and TimeStampOff */ -if (ieee80211_is_pspoll (hdr->frame_control)) { -__le16 dur =cpu_to_le16 (priv->current_aid |BIT (14 ) |BIT (15 )); - - buf->duration = dur; +if (ieee80211_is_nullfunc (hdr->frame_control)) { + buf->duration = hdr->duration_id; }else { buf->duration =vnt_get_duration_le (priv, tx_context->pkt_type, need_ack);
@@ -815,10 +811,14 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb)if (info->band ==NL80211_BAND_5GHZ ) { pkt_type =PK_TYPE_11A ; }else { -if (tx_rate->flags &IEEE80211_TX_RC_USE_CTS_PROTECT ) - pkt_type =PK_TYPE_11GB ; -else - pkt_type =PK_TYPE_11GA ; +if (tx_rate->flags &IEEE80211_TX_RC_USE_CTS_PROTECT ) { +if (priv->basic_rates &VNT_B_RATES ) + pkt_type =PK_TYPE_11GB ; +else + pkt_type =PK_TYPE_11GA ; + }else { + pkt_type =PK_TYPE_11A ; + } } }else { pkt_type =PK_TYPE_11B ;
drivers/staging/wlan-ng/prism2mgmt.c +1 -1
@@ -959,7 +959,7 @@ int prism2mgmt_flashdl_state(struct wlandevice *wlandev, void *msgp) } } -return 0 ; +return result; }/*----------------------------------------------------------------
drivers/tty/serial/8250/8250_bcm2835aux.c +1 -1
@@ -115,7 +115,7 @@ static int bcm2835aux_serial_remove(struct platform_device *pdev) {struct bcm2835aux_data *data =platform_get_drvdata (pdev); -serial8250_unregister_port (data->uart.port.line); +serial8250_unregister_port (data->line);clk_disable_unprepare (data->clk);return 0 ;
drivers/usb/dwc3/core.c +3 -0
@@ -1199,6 +1199,9 @@ static void dwc3_core_exit_mode(struct dwc3 *dwc)/* do nothing */ break ; } + +/* de-assert DRVVBUS for HOST and OTG mode */ +dwc3_set_prtcap (dwc,DWC3_GCTL_PRTCAP_DEVICE ); }static void dwc3_get_properties (struct dwc3 *dwc)
drivers/usb/dwc3/dwc3-pci.c +4 -0
@@ -34,6 +34,7 @@#define PCI_DEVICE_ID_INTEL_GLK 0x31aa#define PCI_DEVICE_ID_INTEL_CNPLP 0x9dee#define PCI_DEVICE_ID_INTEL_CNPH 0xa36e +#define PCI_DEVICE_ID_INTEL_CNPV 0xa3b0#define PCI_DEVICE_ID_INTEL_ICLLP 0x34ee#define PCI_INTEL_BXT_DSM_GUID "732b85d5-b7a7-4a1b-9ba0-4bbd00ffd511"
@@ -340,6 +341,9 @@ static const struct pci_device_id dwc3_pci_id_table[] = { {PCI_VDEVICE (INTEL ,PCI_DEVICE_ID_INTEL_CNPH ), (kernel_ulong_t) &dwc3_pci_intel_properties, }, + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_CNPV), + (kernel_ulong_t) &dwc3_pci_intel_properties, }, + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ICLLP), (kernel_ulong_t) &dwc3_pci_intel_properties, },
drivers/usb/serial/ir-usb.c +104 -32
196 lines not on this page · raw message
drivers/usb/storage/unusual_uas.h +5 -2
@@ -87,12 +87,15 @@ UNUSUAL_DEV(0x2537, 0x1068, 0x0000, 0x9999, USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_IGNORE_UAS), -/* Reported-by: Takeo Nakayama <[email protected]> */ +/* +* Initially Reported-by: Takeo Nakayama <[email protected]> +* UAS Ignore Reported by Steven Ellis <[email protected]> +*/ UNUSUAL_DEV (0x357d ,0x7788 ,0x0000 ,0x9999 ,"JMicron" ,"JMS566" ,USB_SC_DEVICE ,USB_PR_DEVICE ,NULL , -US_FL_NO_REPORT_OPCODES ), +US_FL_NO_REPORT_OPCODES |US_FL_IGNORE_UAS ),/* Reported-by: Hans de Goede <[email protected]> */ UNUSUAL_DEV(0x4971, 0x1012, 0x0000, 0x9999,
drivers/watchdog/Kconfig +1 -0
@@ -594,6 +594,7 @@ config MAX63XX_WATCHDOG config MAX77620_WATCHDOG tristate "Maxim Max77620 Watchdog Timer" depends on MFD_MAX77620 || COMPILE_TEST + select WATCHDOG_CORE help This is the driver for the Max77620 watchdog timer. Say 'Y' here to enable the watchdog timer support for
drivers/watchdog/rn5t618_wdt.c +1 -0
@@ -193,6 +193,7 @@ static struct platform_driver rn5t618_wdt_driver = {module_platform_driver (rn5t618_wdt_driver); +MODULE_ALIAS ("platform:rn5t618-wdt" );MODULE_AUTHOR ("Beniamino Galvani <[email protected]>" );MODULE_DESCRIPTION ("RN5T618 watchdog driver" );MODULE_LICENSE ("GPL v2" );
fs/cifs/smb2misc.c +1 -1
@@ -750,7 +750,7 @@ __smb2_handle_cancelled_close(struct cifs_tcon *tcon, __u64 persistent_fid, {struct close_cancelled_open *cancelled; - cancelled =kzalloc (sizeof (*cancelled),GFP_KERNEL ); + cancelled =kzalloc (sizeof (*cancelled),GFP_ATOMIC );if (!cancelled)return -ENOMEM ;
include/linux/power/smartreflex.h +3 -0
@@ -296,6 +296,9 @@ struct omap_sr_data {struct voltagedomain *voltdm; }; + +extern struct omap_sr_data omap_sr_pdata[OMAP_SR_NR ]; +#ifdef CONFIG_POWER_AVS_OMAP /* Smartreflex module enable/disable interface */
include/linux/usb/irda.h +12 -1
@@ -119,11 +119,22 @@ struct usb_irda_cs_descriptor {* 6 - 115200 bps * 7 - 576000 bps * 8 - 1.152 Mbps -* 9 - 5 mbps +* 9 - 4 Mbps * 10..15 - Reserved */ #define USB_IRDA_STATUS_LINK_SPEED 0x0f +#define USB_IRDA_LS_NO_CHANGE 0 +#define USB_IRDA_LS_2400 1 +#define USB_IRDA_LS_9600 2 +#define USB_IRDA_LS_19200 3 +#define USB_IRDA_LS_38400 4 +#define USB_IRDA_LS_57600 5 +#define USB_IRDA_LS_115200 6 +#define USB_IRDA_LS_576000 7 +#define USB_IRDA_LS_1152000 8 +#define USB_IRDA_LS_4000000 9 +/* The following is a 4-bit value used only for * outbound header: *
include/net/pkt_cls.h +19 -14
@@ -206,31 +206,38 @@ __cls_set_class(unsigned long *clp, unsigned long cl)return xchg (clp, cl); } -static inline unsigned long -cls_set_class (struct Qdisc *q,unsigned long *clp,unsigned long cl) +static inline void +__tcf_bind_filter (struct Qdisc *q,struct tcf_result *r,unsigned long base) { -unsigned long old_cl; +unsigned long cl; -sch_tree_lock (q); - old_cl =__cls_set_class (clp, cl); -sch_tree_unlock (q); -return old_cl; + cl = q->ops->cl_ops->bind_tcf (q, base, r->classid); + cl =__cls_set_class (&r->class, cl); +if (cl) + q->ops->cl_ops->unbind_tcf (q, cl); }static inline void tcf_bind_filter (struct tcf_proto *tp,struct tcf_result *r,unsigned long base) {struct Qdisc *q = tp->chain->block->q; -unsigned long cl;/* Check q as it is not set for shared blocks. In that case, * setting class is not supported. */ if (!q)return ; - cl = q->ops->cl_ops->bind_tcf (q, base, r->classid); - cl =cls_set_class (q, &r->class, cl); -if (cl) +sch_tree_lock (q); +__tcf_bind_filter (q, r, base); +sch_tree_unlock (q); +} + +static inline void +__tcf_unbind_filter (struct Qdisc *q,struct tcf_result *r) +{ +unsigned long cl; + +if ((cl =__cls_set_class (&r->class,0 )) !=0 ) q->ops->cl_ops->unbind_tcf (q, cl); }
@@ -238,12 +245,10 @@ static inline void tcf_unbind_filter(struct tcf_proto *tp, struct tcf_result *r) { struct Qdisc *q = tp->chain->block->q; -unsigned long cl;if (!q)return ; -if ((cl =__cls_set_class (&r->class,0 )) !=0 ) - q->ops->cl_ops->unbind_tcf (q, cl); +__tcf_unbind_filter (q, r); } struct tcf_exts {
include/net/sch_generic.h +2 -1
@@ -273,7 +273,8 @@ struct tcf_proto_ops {int (*reoffload)(struct tcf_proto *tp,bool add,tc_setup_cb_t *cb,void *cb_priv,struct netlink_ext_ack *extack); -void (*bind_class)(void *,u32 ,unsigned long ); +void (*bind_class)(void *,u32 ,unsigned long , +void *,unsigned long ); void * (*tmplt_create)(struct net *net, struct tcf_chain *chain, struct nlattr **tca,
kernel/sched/fair.c +96 -57
195 lines not on this page · raw message
net/sched/cls_basic.c +8 -3
@@ -254,12 +254,17 @@ static void basic_walk(struct tcf_proto *tp, struct tcf_walker *arg) } } -static void basic_bind_class (void *fh,u32 classid,unsigned long cl) +static void basic_bind_class (void *fh,u32 classid,unsigned long cl,void *q, +unsigned long base) {struct basic_filter *f = fh; -if (f && f->res.classid == classid) - f->res.class = cl; +if (f && f->res.classid == classid) { +if (cl) +__tcf_bind_filter (q, &f->res, base); +else +__tcf_unbind_filter (q, &f->res); + } } static int basic_dump(struct net *net, struct tcf_proto *tp, void *fh,
net/sched/cls_bpf.c +8 -3
@@ -627,12 +627,17 @@ static int cls_bpf_dump(struct net *net, struct tcf_proto *tp, void *fh,return -1 ; } -static void cls_bpf_bind_class (void *fh,u32 classid,unsigned long cl) +static void cls_bpf_bind_class (void *fh,u32 classid,unsigned long cl, +void *q,unsigned long base) {struct cls_bpf_prog *prog = fh; -if (prog && prog->res.classid == classid) - prog->res.class = cl; +if (prog && prog->res.classid == classid) { +if (cl) +__tcf_bind_filter (q, &prog->res, base); +else +__tcf_unbind_filter (q, &prog->res); + } }static void cls_bpf_walk (struct tcf_proto *tp,struct tcf_walker *arg)
net/sched/cls_flower.c +8 -3
@@ -1942,12 +1942,17 @@ static int fl_tmplt_dump(struct sk_buff *skb, struct net *net, void *tmplt_priv)return -EMSGSIZE ; } -static void fl_bind_class (void *fh,u32 classid,unsigned long cl) +static void fl_bind_class (void *fh,u32 classid,unsigned long cl,void *q, +unsigned long base) {struct cls_fl_filter *f = fh; -if (f && f->res.classid == classid) - f->res.class = cl; +if (f && f->res.classid == classid) { +if (cl) +__tcf_bind_filter (q, &f->res, base); +else +__tcf_unbind_filter (q, &f->res); + } }static struct tcf_proto_ops cls_fl_ops__read_mostly = {
net/sched/cls_fw.c +8 -3
@@ -432,12 +432,17 @@ static int fw_dump(struct net *net, struct tcf_proto *tp, void *fh,return -1 ; } -static void fw_bind_class (void *fh,u32 classid,unsigned long cl) +static void fw_bind_class (void *fh,u32 classid,unsigned long cl,void *q, +unsigned long base) {struct fw_filter *f = fh; -if (f && f->res.classid == classid) - f->res.class = cl; +if (f && f->res.classid == classid) { +if (cl) +__tcf_bind_filter (q, &f->res, base); +else +__tcf_unbind_filter (q, &f->res); + } }static struct tcf_proto_ops cls_fw_ops__read_mostly = {
net/sched/cls_matchall.c +8 -3
@@ -310,12 +310,17 @@ static int mall_dump(struct net *net, struct tcf_proto *tp, void *fh,return -1 ; } -static void mall_bind_class (void *fh,u32 classid,unsigned long cl) +static void mall_bind_class (void *fh,u32 classid,unsigned long cl,void *q, +unsigned long base) {struct cls_mall_head *head = fh; -if (head && head->res.classid == classid) - head->res.class = cl; +if (head && head->res.classid == classid) { +if (cl) +__tcf_bind_filter (q, &head->res, base); +else +__tcf_unbind_filter (q, &head->res); + } }static struct tcf_proto_ops cls_mall_ops__read_mostly = {
net/sched/cls_route.c +8 -3
@@ -645,12 +645,17 @@ static int route4_dump(struct net *net, struct tcf_proto *tp, void *fh,return -1 ; } -static void route4_bind_class (void *fh,u32 classid,unsigned long cl) +static void route4_bind_class (void *fh,u32 classid,unsigned long cl,void *q, +unsigned long base) {struct route4_filter *f = fh; -if (f && f->res.classid == classid) - f->res.class = cl; +if (f && f->res.classid == classid) { +if (cl) +__tcf_bind_filter (q, &f->res, base); +else +__tcf_unbind_filter (q, &f->res); + } }static struct tcf_proto_ops cls_route4_ops__read_mostly = {
net/sched/cls_rsvp.h +8 -3
@@ -736,12 +736,17 @@ static int rsvp_dump(struct net *net, struct tcf_proto *tp, void *fh,return -1 ; } -static void rsvp_bind_class (void *fh,u32 classid,unsigned long cl) +static void rsvp_bind_class (void *fh,u32 classid,unsigned long cl,void *q, +unsigned long base) {struct rsvp_filter *f = fh; -if (f && f->res.classid == classid) - f->res.class = cl; +if (f && f->res.classid == classid) { +if (cl) +__tcf_bind_filter (q, &f->res, base); +else +__tcf_unbind_filter (q, &f->res); + } }static struct tcf_proto_ops RSVP_OPS __read_mostly = {
net/sched/cls_tcindex.c +8 -3
@@ -652,12 +652,17 @@ static int tcindex_dump(struct net *net, struct tcf_proto *tp, void *fh,return -1 ; } -static void tcindex_bind_class (void *fh,u32 classid,unsigned long cl) +static void tcindex_bind_class (void *fh,u32 classid,unsigned long cl, +void *q,unsigned long base) {struct tcindex_filter_result *r = fh; -if (r && r->res.classid == classid) - r->res.class = cl; +if (r && r->res.classid == classid) { +if (cl) +__tcf_bind_filter (q, &r->res, base); +else +__tcf_unbind_filter (q, &r->res); + } }static struct tcf_proto_ops cls_tcindex_ops__read_mostly = {
net/sched/cls_u32.c +8 -3
@@ -1315,12 +1315,17 @@ static int u32_reoffload(struct tcf_proto *tp, bool add, tc_setup_cb_t *cb,return 0 ; } -static void u32_bind_class (void *fh,u32 classid,unsigned long cl) +static void u32_bind_class (void *fh,u32 classid,unsigned long cl,void *q, +unsigned long base) {struct tc_u_knode *n = fh; -if (n && n->res.classid == classid) - n->res.class = cl; +if (n && n->res.classid == classid) { +if (cl) +__tcf_bind_filter (q, &n->res, base); +else +__tcf_unbind_filter (q, &n->res); + } } static int u32_dump(struct net *net, struct tcf_proto *tp, void *fh,
net/sched/ematch.c +3 -0
@@ -242,6 +242,9 @@ static int tcf_em_validate(struct tcf_proto *tp, goto errout;if (em->ops->change) { + err = -EINVAL ; +if (em_hdr->flags &TCF_EM_SIMPLE ) + goto errout; err = em->ops->change (net, data, data_len, em);if (err <0 ) goto errout;
net/sched/sch_api.c +4 -2
@@ -1803,8 +1803,9 @@ static int tclass_del_notify(struct net *net,struct tcf_bind_args {struct tcf_walker w; -u32 classid; +unsigned long base;unsigned long cl; +u32 classid; };static int tcf_node_bind (struct tcf_proto *tp,void *n,struct tcf_walker *arg)
@@ -1815,7 +1816,7 @@ static int tcf_node_bind(struct tcf_proto *tp, void *n, struct tcf_walker *arg)struct Qdisc *q =tcf_block_q (tp->chain->block);sch_tree_lock (q); - tp->ops->bind_class (n, a->classid, a->cl); + tp->ops->bind_class (n, a->classid, a->cl, q, a->base);sch_tree_unlock (q); }return 0 ;
@@ -1846,6 +1847,7 @@ static void tc_bind_tclass(struct Qdisc *q, u32 portid, u32 clid, arg.w.fn = tcf_node_bind; arg.classid = clid; + arg.base = cl; arg.cl = new_cl; tp->ops->walk (tp, &arg.w); }