Linux 5.5.1
Greg KH
maintainerI'm announcing the release of the 5.5.1 kernel.
All users of the 5.5 kernel series must upgrade.
The updated 5.5.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.5.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/arm64/kvm/debug.c | 6 arch/um/include/asm/common.lds.S | 2 arch/um/kernel/dyn.lds.S | 1 crypto/af_alg.c | 6 crypto/pcrypt.c | 3 drivers/android/binder.c | 37 ++-- drivers/base/component.c | 8 - drivers/base/test/test_async_driver_probe.c | 3 drivers/bluetooth/btusb.c | 2 drivers/crypto/caam/ctrl.c | 6 drivers/crypto/chelsio/chcr_algo.c | 16 -- drivers/crypto/vmx/aes_xts.c | 3 drivers/iio/adc/stm32-dfsdm-adc.c | 2 drivers/iio/gyro/st_gyro_core.c | 75 +++++++++ drivers/misc/mei/hdcp/mei_hdcp.c | 33 +++- drivers/misc/mei/hw-me-regs.h | 6 drivers/misc/mei/pci-me.c | 4 drivers/net/ethernet/marvell/mvneta.c | 6 drivers/net/ethernet/mellanox/mlxsw/minimal.c | 2 drivers/net/ethernet/socionext/netsec.c | 4 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 | 37 +++- drivers/net/wireless/zydas/zd1211rw/zd_usb.c | 2 drivers/power/supply/ingenic-battery.c | 15 + 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/tty/serial/imx.c | 51 ++++-- drivers/usb/dwc3/core.c | 3 drivers/usb/dwc3/dwc3-pci.c | 4 drivers/usb/host/xhci-tegra.c | 1 drivers/usb/serial/ir-usb.c | 136 +++++++++++++---- drivers/usb/typec/tcpm/fusb302.c | 2 drivers/usb/typec/tcpm/wcove.c | 2 fs/cifs/cifsglob.h | 1 fs/cifs/smb2misc.c | 2 fs/cifs/smb2ops.c | 9 - fs/cifs/smb2transport.c | 2 fs/cifs/transport.c | 3 fs/debugfs/file.c | 17 +- include/linux/usb/irda.h | 13 + include/net/pkt_cls.h | 33 ++-- include/net/sch_generic.h | 3 include/net/udp.h | 3 init/Kconfig | 1 kernel/gcov/Kconfig | 2 net/ipv4/nexthop.c | 4 net/rxrpc/input.c | 12 - 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 | 47 ++++- 68 files changed, 590 insertions(+), 217 deletions(-)
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
Bin Liu (1):
usb: dwc3: turn off VBUS when leaving host mode
Christophe JAILLET (1):
mlxsw: minimal: Fix an error handling path in 'mlxsw_m_port_create()'
Colin Ian King (1):
staging: wlan-ng: ensure error return is actually returned
Cong Wang (2):
net_sched: fix ops->bind_class() implementations
net_sched: walk through all child classes in tc_bind_tclass()
Daniel Axtens (1):
crypto: vmx - reject xts inputs that are too short
David Howells (1):
rxrpc: Fix use-after-free in rxrpc_receive_data()
Eric Biggers (1):
crypto: chelsio - fix writing tfm flags to wrong place
Eric Dumazet (1):
net_sched: ematch: reject invalid TCF_EM_SIMPLE
Eric Snowberg (1):
debugfs: Return -EPERM when locked down
Greg Kroah-Hartman (1):
Linux 5.5.1
Guenter Roeck (1):
driver core: Fix test_async_driver_probe if NUMA is disabled
Heikki Krogerus (1):
usb: dwc3: pci: add ID for the Intel Comet Lake -V variant
Herbert Xu (2):
crypto: af_alg - Use bh_lock_sock in sk_destruct
crypto: pcrypt - Fix user-after-free on module unload
Iuliana Prodan (1):
crypto: caam - do not reset pointer size from MCFGR register
Johan Hovold (14):
Bluetooth: btusb: fix non-atomic allocation in completion handler
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 failed probe and unbind
rsi: fix use-after-free on probe errors
rsi: fix memory leak on failed URB submission
rsi: fix non-atomic allocation in completion handler
Johannes Berg (1):
Revert "um: Enable CONFIG_CONSTRUCTORS"
Lorenzo Bianconi (2):
net: socionext: fix possible user-after-free in netsec_process_rx
net: socionext: fix xdp_result initialization in netsec_process_rx
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.
Martin Fuzzey (1):
binder: fix log spam for existing debugfs file creation.
Olivier Moysan (1):
iio: adc: stm32-dfsdm: fix single conversion
Paul Cercueil (1):
power/supply: ingenic-battery: Don't change scale if there's only one
Paulo Alcantara (SUSE) (1):
cifs: Fix memory allocation in __smb2_handle_cancelled_cmd()
Peter Robinson (1):
usb: host: xhci-tegra: set MODULE_FIRMWARE for tegra186
Ronnie Sahlberg (1):
cifs: set correct max-buffer-size for smb2_ioctl_init()
Stephen Worley (1):
net: include struct nhmsg size in nh nlmsg size
Sven Auhagen (1):
mvneta driver disallow XDP program on hardware buffer management
Thomas Hebb (2):
usb: typec: wcove: fix "op-sink-microwatt" default that was in mW
usb: typec: fusb302: fix "op-sink-microwatt" default that was in mW
Tomas Winkler (3):
mei: hdcp: bind only with i915 on the same PCH
mei: me: add comet point (lake) H device ids
mei: me: add jasper point DID
Uwe Kleine-König (1):
serial: imx: fix a race condition in receive path
Vincent Whitchurch (1):
CIFS: Fix task struct use-after-free on reconnect
Willem de Bruijn (1):
udp: segment looped gso packets correctly
Greg KH
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 5 -SUBLEVEL = 0 +SUBLEVEL = 1 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm64/kvm/debug.c +5 -1
@@ -101,7 +101,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);
@@ -197,6 +197,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 )); }
arch/um/include/asm/common.lds.S +1 -1
@@ -82,8 +82,8 @@ __preinit_array_end = .; } .init_array : { - /* dummy - we call this ourselves */ __init_array_start = .; + *(.init_array) __init_array_end = .; } .fini_array : {
arch/um/kernel/dyn.lds.S +1 -0
@@ -103,6 +103,7 @@ SECTIONS be empty, which isn't pretty. */ . = ALIGN(32 / 8); .preinit_array : { *(.preinit_array) } + .init_array : { *(.init_array) } .fini_array : { *(.fini_array) } .data : { INIT_TASK_DATA(KERNEL_STACK_SIZE)
crypto/af_alg.c +4 -2
@@ -134,11 +134,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);
crypto/pcrypt.c +2 -1
@@ -362,11 +362,12 @@ static int __init pcrypt_init(void) static void __exit pcrypt_exit(void) { +crypto_unregister_template (&pcrypt_tmpl); +pcrypt_fini_padata (pencrypt);pcrypt_fini_padata (pdecrypt);kset_unregister (pcrypt_kset); -crypto_unregister_template (&pcrypt_tmpl); }subsys_initcall (pcrypt_init);
drivers/android/binder.c +19 -18
@@ -5199,10 +5199,11 @@ static int binder_mmap(struct file *filp, struct vm_area_struct *vma)static int binder_open (struct inode *nodp,struct file *filp) { -struct binder_proc *proc; +struct binder_proc *proc, *itr;struct binder_device *binder_dev;struct binderfs_info *info;struct dentry *binder_binderfs_dir_entry_proc =NULL ; +bool existing_pid = false;binder_debug (BINDER_DEBUG_OPEN_CLOSE ,"%s: %d:%d\n" , __func__, current->group_leader->pid, current->pid);
@@ -5235,19 +5236,24 @@ static int binder_open(struct inode *nodp, struct file *filp) filp->private_data = proc;mutex_lock (&binder_procs_lock); +hlist_for_each_entry (itr, &binder_procs, proc_node) { +if (itr->pid == proc->pid) { + existing_pid = true; +break ; + } + }hlist_add_head (&proc->proc_node, &binder_procs);mutex_unlock (&binder_procs_lock); -if (binder_debugfs_dir_entry_proc) { +if (binder_debugfs_dir_entry_proc && !existing_pid) {char strbuf[11 ];snprintf (strbuf,sizeof (strbuf),"%u" , proc->pid);/* -* proc debug entries are shared between contexts, so -* this will fail if the process tries to open the driver -* again with a different context. The priting code will -* anyway print all contexts that a given PID has, so this -* is not a problem. +* proc debug entries are shared between contexts. +* Only create for the first PID to avoid debugfs log spamming +* The printing code will anyway print all contexts for a given +* PID so this is not a problem. */ proc->debugfs_entry = debugfs_create_file(strbuf, 0444, binder_debugfs_dir_entry_proc,
@@ -5255,19 +5261,16 @@ static int binder_open(struct inode *nodp, struct file *filp) &proc_fops); } -if (binder_binderfs_dir_entry_proc) { +if (binder_binderfs_dir_entry_proc && !existing_pid) {char strbuf[11 ];struct dentry *binderfs_entry;snprintf (strbuf,sizeof (strbuf),"%u" , proc->pid);/* * Similar to debugfs, the process specific log file is shared -* between contexts. If the file has already been created for a -* process, the following binderfs_create_file() call will -* fail with error code EEXIST if another context of the same -* process invoked binder_open(). This is ok since same as -* debugfs, the log file will contain information on all -* contexts of a given PID. +* between contexts. Only create for the first PID. +* This is ok since same as debugfs, the log file will contain +* information on all contexts of a given PID. */ binderfs_entry =binderfs_create_file (binder_binderfs_dir_entry_proc, strbuf, &proc_fops, (void *)(unsigned long )proc->pid);
@@ -5277,10 +5280,8 @@ static int binder_open(struct inode *nodp, struct file *filp)int error; error =PTR_ERR (binderfs_entry); -if (error != -EEXIST ) { -pr_warn ("Unable to create file %s in binderfs (error %d)\n" , - strbuf, error); - } +pr_warn ("Unable to create file %s in binderfs (error %d)\n" , + strbuf, error); } }
drivers/base/component.c +4 -4
@@ -102,11 +102,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/base/test/test_async_driver_probe.c +2 -1
@@ -44,7 +44,8 @@ static int test_probe(struct platform_device *pdev)* performing an async init on that node. */ if (dev->driver->probe_type ==PROBE_PREFER_ASYNCHRONOUS ) { -if (dev_to_node (dev) !=numa_node_id ()) { +if (IS_ENABLED (CONFIG_NUMA ) && +dev_to_node (dev) !=numa_node_id ()) {dev_warn (dev,"NUMA node mismatch %d != %d\n" ,dev_to_node (dev),numa_node_id ());atomic_inc (&warnings);
drivers/bluetooth/btusb.c +1 -1
@@ -2602,7 +2602,7 @@ static void btusb_mtk_wmt_recv(struct urb *urb)* and being processed the events from there then. */ if (test_bit (BTUSB_TX_WAIT_VND_EVT , &data->flags)) { - data->evt_skb =skb_clone (skb,GFP_KERNEL ); + data->evt_skb =skb_clone (skb,GFP_ATOMIC );if (!data->evt_skb) goto err_out; }
drivers/crypto/caam/ctrl.c +2 -4
@@ -671,11 +671,9 @@ static int caam_probe(struct platform_device *pdev)of_node_put (np);if (!ctrlpriv->mc_en) -clrsetbits_32 (&ctrl->mcr,MCFGR_AWCACHE_MASK |MCFGR_LONG_PTR , +clrsetbits_32 (&ctrl->mcr,MCFGR_AWCACHE_MASK ,MCFGR_AWCACHE_CACH |MCFGR_AWCACHE_BUFF | -MCFGR_WDENABLE |MCFGR_LARGE_BURST | - (sizeof (dma_addr_t) ==sizeof (u64) ? -MCFGR_LONG_PTR :0 )); +MCFGR_WDENABLE |MCFGR_LARGE_BURST );handle_imx6_err005766 (&ctrl->mcr);
drivers/crypto/chelsio/chcr_algo.c +3 -13
@@ -3195,9 +3195,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);
@@ -3222,8 +3219,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);
@@ -3264,8 +3259,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);
@@ -3290,8 +3283,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 ; }
@@ -3329,8 +3321,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 ; }
@@ -3380,8 +3371,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/crypto/vmx/aes_xts.c +3 -0
@@ -84,6 +84,9 @@ static int p8_aes_xts_crypt(struct skcipher_request *req, int enc)u8 tweak[AES_BLOCK_SIZE ];int ret; +if (req->cryptlen <AES_BLOCK_SIZE ) +return -EINVAL ; +if (!crypto_simd_usable () || (req->cryptlen %XTS_BLOCK_SIZE ) !=0 ) {struct skcipher_request *subreq =skcipher_request_ctx (req);
drivers/iio/adc/stm32-dfsdm-adc.c +2 -0
@@ -1204,6 +1204,8 @@ static int stm32_dfsdm_single_conv(struct iio_dev *indio_dev,stm32_dfsdm_stop_conv (adc); +stm32_dfsdm_process_data (adc, res); + stop_dfsdm:stm32_dfsdm_stop_dfsdm (adc->dfsdm);
drivers/iio/gyro/st_gyro_core.c +74 -1
87 lines not on this page · raw message
drivers/misc/mei/hdcp/mei_hdcp.c +30 -3
@@ -757,11 +757,38 @@ static const struct component_master_ops mei_component_master_ops = { .unbind = mei_component_master_unbind, }; +/** +* mei_hdcp_component_match - compare function for matching mei hdcp. +* +* The function checks if the driver is i915, the subcomponent is HDCP +* and the grand parent of hdcp and the parent of i915 are the same +* PCH device. +* +* @dev: master device +* @subcomponent: subcomponent to match (I915_COMPONENT_HDCP) +* @data: compare data (mei hdcp device) +* +* Return: +* * 1 - if components match +* * 0 - otherwise +*/ static int mei_hdcp_component_match (struct device *dev,int subcomponent,void *data) { -return !strcmp (dev->driver->name,"i915" ) && - subcomponent ==I915_COMPONENT_HDCP ; +struct device *base = data; + +if (strcmp (dev->driver->name,"i915" ) || + subcomponent !=I915_COMPONENT_HDCP ) +return 0 ; + + base = base->parent; +if (!base) +return 0 ; + + base = base->parent; + dev = dev->parent; + +return (base && dev && dev == base); } static int mei_hdcp_probe(struct mei_cl_device *cldev,
@@ -785,7 +812,7 @@ static int mei_hdcp_probe(struct mei_cl_device *cldev, master_match =NULL ;component_match_add_typed (&cldev->dev, &master_match, - mei_hdcp_component_match, comp_master); + mei_hdcp_component_match, &cldev->dev);if (IS_ERR_OR_NULL (master_match)) { ret = -ENOMEM ; goto err_exit;
drivers/misc/mei/hw-me-regs.h +6 -0
@@ -81,10 +81,16 @@#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_JSP_N 0x4DE0/* Jasper Lake Point N */ +#define MEI_DEV_ID_TGP_LP 0xA0E0/* Tiger Lake Point LP */ #define MEI_DEV_ID_MCC 0x4B70/* Mule Creek Canyon (EHL) */
drivers/misc/mei/pci-me.c +4 -0
@@ -99,11 +99,15 @@ 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)}, {MEI_PCI_DEVICE(MEI_DEV_ID_TGP_LP, MEI_ME_PCH15_CFG)}, + {MEI_PCI_DEVICE(MEI_DEV_ID_JSP_N, MEI_ME_PCH15_CFG)}, + {MEI_PCI_DEVICE(MEI_DEV_ID_MCC, MEI_ME_PCH15_CFG)}, {MEI_PCI_DEVICE(MEI_DEV_ID_MCC_4, MEI_ME_PCH8_CFG)},
drivers/net/ethernet/marvell/mvneta.c +6 -0
@@ -4226,6 +4226,12 @@ static int mvneta_xdp_setup(struct net_device *dev, struct bpf_prog *prog,return -EOPNOTSUPP ; } +if (pp->bm_priv) { +NL_SET_ERR_MSG_MOD (extack, +"Hardware Buffer Management not supported on XDP" ); +return -EOPNOTSUPP ; + } + need_update = !!pp->xdp_prog != !!prog;if (running && need_update)mvneta_stop (dev);
drivers/net/ethernet/mellanox/mlxsw/minimal.c +1 -1
@@ -213,8 +213,8 @@ mlxsw_m_port_create(struct mlxsw_m *mlxsw_m, u8 local_port, u8 module) err_register_netdev: mlxsw_m->ports[local_port] =NULL ; -free_netdev (dev); err_dev_addr_get: +free_netdev (dev); err_alloc_etherdev:mlxsw_core_port_fini (mlxsw_m->core, local_port);return err;
drivers/net/ethernet/socionext/netsec.c +2 -2
@@ -929,7 +929,6 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)struct netsec_rx_pkt_info rx_info;enum dma_data_direction dma_dir;struct bpf_prog *xdp_prog; -struct sk_buff *skb =NULL ;u16 xdp_xmit =0 ;u32 xdp_act =0 ;int done =0 ;
@@ -943,7 +942,8 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)struct netsec_de *de = dring->vaddr + (DESC_SZ * idx);struct netsec_desc *desc = &dring->desc[idx];struct page *page =virt_to_page (desc->addr); -u32 xdp_result =XDP_PASS ; +u32 xdp_result =NETSEC_XDP_PASS ; +struct sk_buff *skb =NULL ;u16 pkt_len, desc_len;dma_addr_t dma_handle;struct xdp_buff xdp;
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
@@ -1348,7 +1348,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 )) {
@@ -1361,7 +1361,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
@@ -1608,9 +1608,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
@@ -6384,7 +6384,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
@@ -622,6 +622,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);
@@ -737,10 +738,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 ; }
@@ -828,10 +828,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 ; }
@@ -849,6 +848,7 @@ static int rsi_hal_prepare_fwload(struct rsi_hw *adapter) ®out_val, RSI_COMMON_REG_SIZE);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 +28 -9
@@ -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);
@@ -285,20 +286,29 @@ 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)dev_kfree_skb (rx_cb->rx_skb); } +static void rsi_rx_urb_kill (struct rsi_hw *adapter,u8 ep_num) +{ +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 ]; +struct urb *urb = rx_cb->rx_urb; + +usb_kill_urb (urb); +} +/** * rsi_rx_urb_submit() - This function submits the given URB to the USB stack. * @adapter: Pointer to the adapter structure. * * 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 ];
@@ -328,9 +338,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; }
@@ -816,17 +828,20 @@ 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; + goto err_kill_wlan_urb; }return 0 ; + +err_kill_wlan_urb: +rsi_rx_urb_kill (adapter,WLAN_EP ); err1:rsi_deinit_usb_interface (adapter); err:
@@ -857,6 +872,10 @@ static void rsi_disconnect(struct usb_interface *pfunction) adapter->priv->bt_adapter =NULL ; } +if (adapter->priv->coex_mode >1 ) +rsi_rx_urb_kill (adapter,BT_EP ); +rsi_rx_urb_kill (adapter,WLAN_EP ); +rsi_reset_card (adapter);rsi_deinit_usb_interface (adapter);rsi_91x_deinit (adapter);
drivers/net/wireless/zydas/zd1211rw/zd_usb.c +1 -1
@@ -1263,7 +1263,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/power/supply/ingenic-battery.c +11 -4
@@ -100,10 +100,17 @@ static int ingenic_battery_set_scale(struct ingenic_battery *bat)return -EINVAL ; } -return iio_write_channel_attribute (bat->channel, - scale_raw[best_idx], - scale_raw[best_idx +1 ], -IIO_CHAN_INFO_SCALE ); +/* Only set scale if there is more than one (fractional) entry */ +if (scale_len >2 ) { + ret =iio_write_channel_attribute (bat->channel, + scale_raw[best_idx], + scale_raw[best_idx +1 ], +IIO_CHAN_INFO_SCALE ); +if (ret) +return ret; + } + +return 0 ; }static enum power_supply_property ingenic_battery_properties[] = {
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
@@ -99,9 +99,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
@@ -1015,6 +1015,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
@@ -113,7 +113,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/tty/serial/imx.c +38 -13
124 lines not on this page · raw message
drivers/usb/dwc3/core.c +3 -0
@@ -1246,6 +1246,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_DEVICE_ID_INTEL_EHLLP 0x4b7e#define PCI_DEVICE_ID_INTEL_TGPLP 0xa0ee
@@ -342,6 +343,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/host/xhci-tegra.c +1 -0
@@ -1432,6 +1432,7 @@ MODULE_FIRMWARE("nvidia/tegra210/xusb.bin");static const char *const tegra186_supply_names[] = { }; +MODULE_FIRMWARE ("nvidia/tegra186/xusb.bin" );static const struct tegra_xusb_phy_type tegra186_phy_types[] = { { .name ="usb3" , .num =3 , },
drivers/usb/serial/ir-usb.c +104 -32
196 lines not on this page · raw message
drivers/usb/typec/tcpm/fusb302.c +1 -1
@@ -1666,7 +1666,7 @@ static const struct property_entry port_props[] = {PROPERTY_ENTRY_STRING ("try-power-role" ,"sink" ),PROPERTY_ENTRY_U32_ARRAY ("source-pdos" , src_pdo),PROPERTY_ENTRY_U32_ARRAY ("sink-pdos" , snk_pdo), - PROPERTY_ENTRY_U32("op-sink-microwatt", 2500), + PROPERTY_ENTRY_U32("op-sink-microwatt", 2500000), { } };
drivers/usb/typec/tcpm/wcove.c +1 -1
@@ -597,7 +597,7 @@ static const struct property_entry wcove_props[] = {PROPERTY_ENTRY_STRING ("try-power-role" ,"sink" ),PROPERTY_ENTRY_U32_ARRAY ("source-pdos" , src_pdo),PROPERTY_ENTRY_U32_ARRAY ("sink-pdos" , snk_pdo), - PROPERTY_ENTRY_U32("op-sink-microwatt", 15000), + PROPERTY_ENTRY_U32("op-sink-microwatt", 15000000), { } };
fs/cifs/cifsglob.h +1 -0
@@ -1588,6 +1588,7 @@ struct mid_q_entry {mid_callback_t *callback;/* call completion callback */ mid_handle_t *handle;/* call handle mid callback */ void *callback_data;/* general purpose pointer for callback */ +struct task_struct *creator;void *resp_buf;/* pointer to received SMB header */ unsigned int resp_buf_size;int mid_state;/* wish this were enum but can not pass to wait_event */
fs/cifs/smb2misc.c +1 -1
@@ -743,7 +743,7 @@ __smb2_handle_cancelled_cmd(struct cifs_tcon *tcon, __u16 cmd, __u64 mid, {struct close_cancelled_open *cancelled; - cancelled =kzalloc (sizeof (*cancelled),GFP_KERNEL ); + cancelled =kzalloc (sizeof (*cancelled),GFP_ATOMIC );if (!cancelled)return -ENOMEM ;
fs/cifs/smb2ops.c +7 -2
@@ -1523,7 +1523,9 @@ smb2_ioctl_query_info(const unsigned int xid,COMPOUND_FID ,COMPOUND_FID , qi.info_type, true, buffer, qi.output_buffer_length, - CIFSMaxBufSize); + CIFSMaxBufSize - +MAX_SMB2_CREATE_RESPONSE_SIZE - + MAX_SMB2_CLOSE_RESPONSE_SIZE); } }else if (qi.flags ==PASSTHRU_SET_INFO ) {/* Can eventually relax perm check since server enforces too */
@@ -2697,7 +2699,10 @@ smb2_query_symlink(const unsigned int xid, struct cifs_tcon *tcon, rc =SMB2_ioctl_init (tcon, &rqst[1 ], fid.persistent_fid, fid.volatile_fid,FSCTL_GET_REPARSE_POINT , - true/* is_fctl */ ,NULL ,0 , CIFSMaxBufSize); + true/* is_fctl */ ,NULL ,0 , + CIFSMaxBufSize - +MAX_SMB2_CREATE_RESPONSE_SIZE - +MAX_SMB2_CLOSE_RESPONSE_SIZE );if (rc) goto querty_exit;
fs/cifs/smb2transport.c +2 -0
@@ -685,6 +685,8 @@ smb2_mid_entry_alloc(const struct smb2_sync_hdr *shdr,* The default is for the mid to be synchronous, so the * default callback just wakes up the current task. */ +get_task_struct (current); + temp->creator = current; temp->callback = cifs_wake_up_task; temp->callback_data = current;
fs/cifs/transport.c +3 -0
@@ -76,6 +76,8 @@ AllocMidQEntry(const struct smb_hdr *smb_buffer, struct TCP_Server_Info *server)* The default is for the mid to be synchronous, so the * default callback just wakes up the current task. */ +get_task_struct (current); + temp->creator = current; temp->callback = cifs_wake_up_task; temp->callback_data = current;
@@ -158,6 +160,7 @@ static void _cifs_mid_q_entry_release(struct kref *refcount) } }#endif +put_task_struct (midEntry->creator);mempool_free (midEntry, cifs_mid_poolp); }
fs/debugfs/file.c +10 -7
@@ -142,18 +142,21 @@ EXPORT_SYMBOL_GPL(debugfs_file_put);* We also need to exclude any file that has ways to write or alter it as root * can bypass the permissions check. */ -static bool debugfs_is_locked_down (struct inode *inode, -struct file *filp, -const struct file_operations *real_fops) +static int debugfs_locked_down (struct inode *inode, +struct file *filp, +const struct file_operations *real_fops) {if ((inode->i_mode &07777 ) ==0444 && !(filp->f_mode &FMODE_WRITE ) && !real_fops->unlocked_ioctl && !real_fops->compat_ioctl && !real_fops->mmap) -return false; +return 0 ; -return security_locked_down (LOCKDOWN_DEBUGFS ); +if (security_locked_down (LOCKDOWN_DEBUGFS )) +return -EPERM ; + +return 0 ; }static int open_proxy_open (struct inode *inode,struct file *filp)
@@ -168,7 +171,7 @@ static int open_proxy_open(struct inode *inode, struct file *filp) real_fops =debugfs_real_fops (filp); - r =debugfs_is_locked_down (inode, filp, real_fops); + r =debugfs_locked_down (inode, filp, real_fops);if (r) goto out;
@@ -298,7 +301,7 @@ static int full_proxy_open(struct inode *inode, struct file *filp) real_fops =debugfs_real_fops (filp); - r =debugfs_is_locked_down (inode, filp, real_fops); + r =debugfs_locked_down (inode, filp, real_fops);if (r) goto out;
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
@@ -141,31 +141,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); }
@@ -173,12 +180,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
@@ -318,7 +318,8 @@ struct tcf_proto_ops { void *type_data);void (*hw_del)(struct tcf_proto *tp,void *type_data); -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,
include/net/udp.h +3 -0
@@ -476,6 +476,9 @@ static inline struct sk_buff *udp_rcv_segment(struct sock *sk,if (!inet_get_convert_csum (sk)) features |=NETIF_F_IP_CSUM |NETIF_F_IPV6_CSUM ; +if (skb->pkt_type ==PACKET_LOOPBACK ) + skb->ip_summed =CHECKSUM_PARTIAL ; +/* the GSO CB lays after the UDP one, no need to save and restore any * CB fragment */
init/Kconfig +1 -0
@@ -54,6 +54,7 @@ config CC_DISABLE_WARN_MAYBE_UNINITIALIZED config CONSTRUCTORS bool + depends on !UML config IRQ_WORK bool
kernel/gcov/Kconfig +1 -1
@@ -4,7 +4,7 @@ menu "GCOV-based kernel profiling" config GCOV_KERNEL bool "Enable gcov-based kernel profiling" depends on DEBUG_FS - select CONSTRUCTORS + select CONSTRUCTORS if !UML default n ---help--- This option enables gcov-based code profiling (e.g. for code coverage
net/ipv4/nexthop.c +3 -1
@@ -321,7 +321,9 @@ static size_t nh_nlmsg_size_single(struct nexthop *nh)static size_t nh_nlmsg_size (struct nexthop *nh) { -size_t sz =nla_total_size (4 );/* NHA_ID */ +size_t sz =NLMSG_ALIGN (sizeof (struct nhmsg )); + + sz +=nla_total_size (4 );/* NHA_ID */ if (nh->is_group) sz +=nh_nlmsg_size_grp (nh);
net/rxrpc/input.c +7 -5
@@ -413,7 +413,7 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb) {struct rxrpc_skb_priv *sp =rxrpc_skb (skb);enum rxrpc_call_state state; -unsigned int j; +unsigned int j, nr_subpackets;rxrpc_serial_t serial = sp->hdr.serial, ack_serial =0 ;rxrpc_seq_t seq0 = sp->hdr.seq, hard_ack;bool immediate_ack = false, jumbo_bad = false;
@@ -457,7 +457,8 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb) call->ackr_prev_seq = seq0; hard_ack =READ_ONCE (call->rx_hard_ack); -if (sp->nr_subpackets >1 ) { + nr_subpackets = sp->nr_subpackets; +if (nr_subpackets >1 ) {if (call->nr_jumbo_bad >3 ) { ack =RXRPC_ACK_NOSPACE ; ack_serial = serial;
@@ -465,11 +466,11 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb) } } -for (j =0 ; j < sp->nr_subpackets; j++) { +for (j =0 ; j < nr_subpackets; j++) {rxrpc_serial_t serial = sp->hdr.serial + j;rxrpc_seq_t seq = seq0 + j;unsigned int ix = seq &RXRPC_RXTX_BUFF_MASK ; -bool terminal = (j == sp->nr_subpackets -1 ); +bool terminal = (j == nr_subpackets -1 );bool last = terminal && (sp->rx_flags &RXRPC_SKB_INCL_LAST );u8 flags, annotation = j;
@@ -506,7 +507,7 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb) }if (call->rxtx_buffer[ix]) { -rxrpc_input_dup_data (call, seq, sp->nr_subpackets >1 , +rxrpc_input_dup_data (call, seq, nr_subpackets >1 , &jumbo_bad);if (ack !=RXRPC_ACK_DUPLICATE ) { ack =RXRPC_ACK_DUPLICATE ;
@@ -564,6 +565,7 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb)* ring. */ skb =NULL ; + sp =NULL ; }if (last) {
net/sched/cls_basic.c +8 -3
@@ -263,12 +263,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
@@ -631,12 +631,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
@@ -2765,12 +2765,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 bool fl_delete_empty (struct tcf_proto *tp)
net/sched/cls_fw.c +8 -3
@@ -419,12 +419,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
@@ -393,12 +393,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
@@ -641,12 +641,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
@@ -738,12 +738,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
@@ -654,12 +654,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
@@ -1255,12 +1255,17 @@ static int u32_reoffload(struct tcf_proto *tp, bool add, flow_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
@@ -238,6 +238,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 +34 -13
81 lines not on this page · raw message