Linux 4.19.193
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.19.193 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/mips/alchemy/board-xxs1500.c | 1 arch/mips/ralink/of.c | 2 arch/openrisc/include/asm/barrier.h | 9 drivers/char/hpet.c | 4 drivers/dma/qcom/hidma_mgmt.c | 14 drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c | 3 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 1 drivers/gpu/drm/amd/display/dc/core/dc_link.c | 18 + drivers/gpu/drm/meson/meson_drv.c | 9 drivers/i2c/busses/i2c-i801.c | 6 drivers/i2c/busses/i2c-s3c2410.c | 3 drivers/iio/adc/ad7793.c | 1 drivers/iommu/dmar.c | 4 drivers/isdn/hardware/mISDN/mISDNinfineon.c | 24 + drivers/md/dm-snap.c | 2 drivers/media/dvb-frontends/sp8870.c | 4 drivers/media/usb/gspca/m5602/m5602_po1030.c | 10 drivers/misc/kgdbts.c | 3 drivers/misc/lis3lv02d/lis3lv02d.h | 1 drivers/misc/mei/interrupt.c | 3 drivers/net/caif/caif_serial.c | 1 drivers/net/dsa/mt7530.c | 8 drivers/net/ethernet/broadcom/bnx2.c | 2 drivers/net/ethernet/brocade/bna/bnad.c | 7 drivers/net/ethernet/dec/tulip/de4x5.c | 4 drivers/net/ethernet/dec/tulip/media.c | 5 drivers/net/ethernet/freescale/fec_main.c | 11 drivers/net/ethernet/fujitsu/fmvj18x_cs.c | 5 drivers/net/ethernet/hisilicon/hns3/hns3_enet.c | 10 drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 16 - drivers/net/ethernet/mellanox/mlx4/en_ethtool.c | 4 drivers/net/ethernet/mellanox/mlx4/en_tx.c | 2 drivers/net/ethernet/mellanox/mlx4/port.c | 107 ++++++- drivers/net/ethernet/micrel/ksz884x.c | 3 drivers/net/ethernet/microchip/lan743x_main.c | 6 drivers/net/ethernet/neterion/vxge/vxge-traffic.c | 32 -- drivers/net/ethernet/sfc/falcon/farch.c | 29 - drivers/net/ethernet/sis/sis900.c | 5 drivers/net/ethernet/synopsys/dwc-xlgmac-common.c | 2 drivers/net/ethernet/ti/davinci_emac.c | 5 drivers/net/ethernet/ti/netcp_core.c | 2 drivers/net/ethernet/ti/tlan.c | 4 drivers/net/ethernet/via/via-velocity.c | 13 drivers/net/phy/mdio-octeon.c | 2 drivers/net/phy/mdio-thunder.c | 1 drivers/net/usb/hso.c | 4 drivers/net/usb/smsc75xx.c | 8 drivers/net/wireless/ath/ath10k/htt_rx.c | 61 +++- drivers/net/wireless/marvell/libertas/mesh.c | 28 - drivers/platform/x86/hp-wireless.c | 2 drivers/platform/x86/hp_accel.c | 22 + drivers/platform/x86/intel_punit_ipc.c | 1 drivers/scsi/BusLogic.c | 6 drivers/scsi/BusLogic.h | 2 drivers/scsi/libsas/sas_port.c | 4 drivers/spi/spi-gpio.c | 8 drivers/staging/emxx_udc/emxx_udc.c | 4 drivers/staging/iio/cdc/ad7746.c | 1 drivers/staging/mt7621-spi/spi-mt7621.c | 10 drivers/thunderbolt/dma_port.c | 11 drivers/tty/serial/max310x.c | 6 drivers/tty/serial/rp2.c | 52 +-- drivers/tty/serial/sh-sci.c | 4 drivers/usb/core/devio.c | 11 drivers/usb/core/hub.h | 6 drivers/usb/dwc3/gadget.c | 17 - drivers/usb/gadget/udc/renesas_usb3.c | 5 drivers/usb/misc/trancevibrator.c | 4 drivers/usb/misc/uss720.c | 1 drivers/usb/serial/ftdi_sio.c | 3 drivers/usb/serial/ftdi_sio_ids.h | 7 drivers/usb/serial/option.c | 4 drivers/usb/serial/pl2303.c | 1 drivers/usb/serial/pl2303.h | 1 drivers/usb/serial/ti_usb_3410_5052.c | 3 fs/btrfs/tree-log.c | 2 fs/cifs/smb2pdu.c | 13 fs/hugetlbfs/inode.c | 4 fs/nfs/filelayout/filelayout.c | 2 fs/nfs/nfs4file.c | 2 fs/nfs/pagelist.c | 12 fs/nfs/pnfs.c | 15 - fs/proc/base.c | 4 include/linux/bpf_verifier.h | 5 include/linux/hugetlb.h | 2 include/net/cfg80211.h | 4 include/net/nfc/nci_core.h | 1 kernel/bpf/verifier.c | 300 +++++++++++++------- mm/hugetlb.c | 10 mm/userfaultfd.c | 2 mm/vmstat.c | 3 net/bluetooth/cmtp/core.c | 5 net/core/filter.c | 1 net/dsa/master.c | 5 net/dsa/slave.c | 12 net/ipv6/mcast.c | 3 net/ipv6/reassembly.c | 4 net/mac80211/ieee80211_i.h | 36 -- net/mac80211/iface.c | 11 net/mac80211/key.c | 7 net/mac80211/key.h | 2 net/mac80211/rx.c | 150 +++++++--- net/mac80211/sta_info.c | 6 net/mac80211/sta_info.h | 32 ++ net/mac80211/wpa.c | 13 net/nfc/nci/core.c | 1 net/nfc/nci/hci.c | 5 net/openvswitch/meter.c | 8 net/sched/sch_dsmark.c | 3 net/tipc/msg.c | 9 net/tipc/socket.c | 5 net/wireless/util.c | 7 sound/soc/codecs/cs35l33.c | 1 sound/soc/codecs/cs43130.c | 28 - tools/perf/pmu-events/jevents.c | 2 tools/perf/util/intel-pt-decoder/intel-pt-decoder.c | 6 tools/perf/util/intel-pt.c | 5 tools/testing/selftests/bpf/test_verifier.c | 112 +++++-- 119 files changed, 1049 insertions(+), 518 deletions(-)
Adrian Hunter (2):
perf intel-pt: Fix sample instruction bytes perf intel-pt: Fix transaction abort handling
Alaa Emad (1):
media: dvb: Add check on sp8870_readreg return
Alan Stern (1):
USB: usbfs: Don't WARN about excessively large memory allocations
Alexander Usyskin (1):
mei: request autosuspend after sending rx flow control
Alexei Starovoitov (1):
bpf: extend is_branch_taken to registers
Andrey Ignatov (1):
selftests/bpf: Test narrow loads with off > 0 in test_verifier
Andy Shevchenko (1):
platform/x86: intel_punit_ipc: Append MODULE_DEVICE_TABLE for ACPI
Anirudh Rayabharam (1):
net: fujitsu: fix potential null-ptr-deref
Anna Schumaker (1):
NFSv4: Fix a NULL pointer dereference in pnfs_mark_matching_lsegs_return()
Atul Gopinathan (1):
serial: max310x: unregister uart driver in case of failure and abort
Aurelien Aptel (1):
cifs: set server->cipher_type to AES-128-CCM for SMB3.0
Chris Park (1):
drm/amd/display: Disconnect non-DP with no EDID
Christophe JAILLET (3):
net: netcp: Fix an error message
net: mdio: thunder: Fix a double free issue in the .remove function
net: mdio: octeon: Fix some double free issues
Chunfeng Yun (1):
usb: core: reduce power-on-good delay time of root hub
DENG Qingfang (1):
net: dsa: mt7530: fix VLAN traffic leaks
Dan Carpenter (5):
NFS: fix an incorrect limit in filelayout_decode_layout()
net: dsa: fix a crash if ->get_sset_count() fails
staging: emxx_udc: fix loop in _nbu2ss_nuke()
ASoC: cs35l33: fix an error code in probe()
scsi: libsas: Use _safe() loop in sas_resume_port()
Daniel Borkmann (13):
bpf, test_verifier: switch bpf_get_stack's 0 s> r8 test
bpf: Move off_reg into sanitize_ptr_alu
bpf: Ensure off_reg has no mixed signed bounds for all types
bpf: Rework ptr_limit into alu_limit and add common error path
bpf: Improve verifier error messages for users
bpf: Refactor and streamline bounds check into helper
bpf: Move sanitize_val_alu out of op switch
bpf: Tighten speculative pointer arithmetic mask
bpf: Update selftests to reflect new error states
bpf: Fix leakage of uninitialized bpf stack under speculation
bpf: Wrap aux data inside bpf_sanitize_info container
bpf: Fix mask direction swap upon off reg sign change
bpf: No need to simulate speculative domain for immediates
Daniele Palmas (1):
USB: serial: option: add Telit LE910-S1 compositions 0x7010, 0x7011
Dominik Andreas Schorpp (1):
USB: serial: ftdi_sio: add IDs for IDS GmbH Products
Dongliang Mu (2):
NFC: nci: fix memory leak in nci_allocate_device misc/uss720: fix memory leak in uss720_probe
Du Cheng (1):
net: caif: remove BUG_ON(dev == NULL) in caif_xmit
Felix Fietkau (1):
perf jevents: Fix getting maximum number of fds
Francesco Ruggeri (1):
ipv6: record frag_max_size in atomic fragments in input path
Fugang Duan (1):
net: fec: fix the potential memory leak in fec_enet_init()
Geert Uytterhoeven (1):
serial: sh-sci: Fix off-by-one error in FIFO threshold register setting
Greg Kroah-Hartman (5):
kgdb: fix gcc-11 warnings harder
libertas: register sysfs groups properly
ASoC: cs43130: handle errors in cs43130_probe() properly
media: gspca: properly check for errors in po1030_probe() Linux 4.19.193
Hoang Le (1):
Revert "net:tipc: Fix a double free in tipc_sk_mcast_rcv"
Jack Pham (1):
usb: dwc3: gadget: Enable suspend events
Jean Delvare (1):
i2c: i801: Don't generate an interrupt on bus reset
Jesse Brandeburg (2):
ixgbe: fix large MTU request from VF drivers/net/ethernet: clean up unused assignments
Jingwen Chen (1):
drm/amd/amdgpu: fix refcount leak
Johan Hovold (2):
net: hso: fix control-request directions
USB: trancevibrator: fix control-request direction
Johannes Berg (5):
mac80211: drop A-MSDUs on old ciphers
mac80211: add fragment cache to sta_info
mac80211: check defrag PN against current frame
mac80211: prevent attacks on TKIP/WEP as well
mac80211: do not accept/forward invalid EAPOL frames
John Fastabend (1):
bpf: Test_verifier, bpf_get_stack return value add <0
Josef Bacik (1):
btrfs: do not BUG_ON in link_to_fixup_dir
Jussi Maki (1):
bpf: Set mac_len in bpf_skb_change_head
Kai-Heng Feng (1):
platform/x86: hp_accel: Avoid invoking _INI to speed up resume
Kees Cook (1):
proc: Check /proc/$pid/attr/ writes against file opener
Krzysztof Kozlowski (1):
i2c: s3c2410: fix possible NULL pointer deref on read message after write
Lucas Stankus (1):
staging: iio: cdc: ad7746: avoid overwrite of num_channels
Lukas Wunner (3):
spi: gpio: Don't leak SPI master in probe error path
spi: mt7621: Disable clock in probe error path
spi: mt7621: Don't leak SPI master in probe error path
Mathias Nyman (1):
thunderbolt: dma_port: Fix NVM read buffer bounds and offset issue
Mathy Vanhoef (4):
mac80211: assure all fragments are encrypted
mac80211: prevent mixed key and fragment cache attacks
mac80211: properly handle A-MSDUs that start with an RFC 1042 header
cfg80211: mitigate A-MSDU aggregation attacks
Matt Wang (1):
scsi: BusLogic: Fix 64-bit system enumeration error for Buslogic
Mike Kravetz (1):
hugetlbfs: hugetlb_fault_mutex_hash() cleanup
Mikulas Patocka (1):
dm snapshot: properly fix a crash when an origin has no snapshots
Neil Armstrong (1):
drm/meson: fix shutdown crash when component not probed
Ovidiu Panait (2):
bpf: fix up selftests after backports were fixed selftests/bpf: add selftest part of "bpf: improve verifier branch analysis"
Pavel Skripkin (1):
net: usb: fix memory leak in smsc75xx_bind
Peter Zijlstra (1):
openrisc: Define memory barrier mb
Phillip Potter (2):
isdn: mISDNinfineon: check/cleanup ioremap failure correctly in setup_io
dmaengine: qcom_hidma: comment platform_driver_register call
Piotr Krysiuk (1):
bpf, selftests: Fix up some test_verifier cases for unprivileged
Randy Dunlap (2):
MIPS: alchemy: xxs1500: add gpio-au1000.h header file
MIPS: ralink: export rt_sysc_membase for rt2880_wdt.c
Rolf Eike Beer (1):
iommu/vt-d: Fix sysfs leak in alloc_iommu()
Sean MacLennan (1):
USB: serial: ti_usb_3410_5052: add startech.com device id
Shyam Sundar S K (1):
platform/x86: hp-wireless: add AMD's hardware id to the supported list
Sriram R (1):
ath10k: Validate first subframe of A-MSDU before processing the list
Stephen Brennan (1):
mm, vmstat: drop zone->lock in /proc/pagetypeinfo
Steve French (1):
SMB3: incorrect file id in requests compounded with open
Taehee Yoo (2):
mld: fix panic in mld_newpack()
sch_dsmark: fix a NULL deref in qdisc_reset()
Tao Liu (1):
openvswitch: meter: fix race when getting now_ms.
Thadeu Lima de Souza Cascardo (1):
Bluetooth: cmtp: fix file refcount when cmtp_attach_device fails
Thinh Nguyen (1):
usb: dwc3: gadget: Properly track pending and queued SG
Tom Seewald (1):
char: hpet: add checks after calling ioremap
Trond Myklebust (1):
NFS: Don't corrupt the value of pg_bytes_written in nfs_do_recoalesce()
Vladimir Oltean (1):
net: dsa: fix error code getting shifted with 4 in dsa_slave_get_sset_count
Vladyslav Tarasiuk (1):
net/mlx4: Fix EEPROM dump support
Wen Gong (1):
mac80211: extend protection against mixed key and fragment cache attacks
Xin Long (1):
tipc: skb_linearize the head skb when reassembling msgs
Yoshihiro Shimoda (1):
usb: gadget: udc: renesas_usb3: Fix a race in usb3_start_pipen()
YueHaibing (1):
iio: adc: ad7793: Add missing error code in ad7793_setup()
Yunsheng Lin (1):
net: hns3: check the return of skb_checksum_help()
Zhang Xiaoxu (1):
NFSv4: Fix v4.0/v4.1 SEEK_DATA return -ENOTSUPP when set NFS_V4_2 config
Zhen Lei (1):
net: bnx2: Fix error return code in bnx2_init_board()
Zheyu Ma (1):
serial: rp2: use 'request_firmware' instead of 'request_firmware_nowait'
Zolton Jheng (1):
USB: serial: pl2303: add device id for ADLINK ND-6530 GC
xinhui pan (1):
drm/amdgpu: Fix a use-after-free
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 192 +SUBLEVEL = 193 EXTRAVERSION = NAME = "People's Front"
arch/mips/alchemy/board-xxs1500.c +1 -0
@@ -31,6 +31,7 @@#include <asm/reboot.h> #include <asm/setup.h> #include <asm/mach-au1x00/au1000.h> +#include <asm/mach-au1x00/gpio-au1000.h> #include <prom.h> const char *get_system_type (void )
arch/mips/ralink/of.c +2 -0
@@ -10,6 +10,7 @@#include <linux/io.h> #include <linux/clk.h> +#include <linux/export.h> #include <linux/init.h> #include <linux/sizes.h> #include <linux/of_fdt.h>
@@ -27,6 +28,7 @@__iomem void *rt_sysc_membase;__iomem void *rt_memc_membase; +EXPORT_SYMBOL_GPL (rt_sysc_membase);__iomem void *plat_of_remap_node (const char *node) {
arch/openrisc/include/asm/barrier.h new file +9 -0
@@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_BARRIER_H +#define __ASM_BARRIER_H + +#define mb () asm volatile ("l.msync" ::: "memory") + +#include <asm-generic/barrier.h> + +#endif /* __ASM_BARRIER_H */
drivers/char/hpet.c +4 -0
@@ -975,6 +975,8 @@ static acpi_status hpet_resources(struct acpi_resource *res, void *data)if (ACPI_SUCCESS (status)) { hdp->hd_phys_address = addr.address.minimum; hdp->hd_address =ioremap (addr.address.minimum, addr.address.address_length); +if (!hdp->hd_address) +return AE_ERROR ;if (hpet_is_known (hdp)) {iounmap (hdp->hd_address);
@@ -988,6 +990,8 @@ static acpi_status hpet_resources(struct acpi_resource *res, void *data) hdp->hd_phys_address = fixmem32->address; hdp->hd_address =ioremap (fixmem32->address,HPET_RANGE_SIZE ); +if (!hdp->hd_address) +return AE_ERROR ;if (hpet_is_known (hdp)) {iounmap (hdp->hd_address);
drivers/dma/qcom/hidma_mgmt.c +14 -0
@@ -423,6 +423,20 @@ static int __init hidma_mgmt_init(void) hidma_mgmt_of_populate_channels(child); }#endif +/* +* We do not check for return value here, as it is assumed that +* platform_driver_register must not fail. The reason for this is that +* the (potential) hidma_mgmt_of_populate_channels calls above are not +* cleaned up if it does fail, and to do this work is quite +* complicated. In particular, various calls of of_address_to_resource, +* of_irq_to_resource, platform_device_register_full, of_dma_configure, +* and of_msi_configure which then call other functions and so on, must +* be cleaned up - this is not a trivial exercise. +* +* Currently, this module is not intended to be unloaded, and there is +* no module_exit function defined which does the needed cleanup. For +* this reason, we have to assume success here. +*/ platform_driver_register (&hidma_mgmt_driver);return 0 ;
drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c +3 -0
@@ -297,10 +297,13 @@ static int amdgpufb_create(struct drm_fb_helper *helper,static int amdgpu_fbdev_destroy (struct drm_device *dev,struct amdgpu_fbdev *rfbdev) {struct amdgpu_framebuffer *rfb = &rfbdev->rfb; +int i;drm_fb_helper_unregister_fbi (&rfbdev->helper);if (rfb->base.obj[0 ]) { +for (i =0 ; i < rfb->base.format->num_planes; i++) +drm_gem_object_put (rfb->base.obj[0 ]);amdgpufb_destroy_pinned_object (rfb->base.obj[0 ]); rfb->base.obj[0 ] =NULL ;drm_framebuffer_unregister_private (&rfb->base);
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +1 -0
@@ -1277,6 +1277,7 @@ static void amdgpu_ttm_tt_unpopulate(struct ttm_tt *ttm)if (gtt && gtt->userptr) {amdgpu_ttm_tt_set_user_pages (ttm,NULL );kfree (ttm->sg); + ttm->sg =NULL ; ttm->page_flags &= ~TTM_PAGE_FLAG_SG ;return ; }
drivers/gpu/drm/amd/display/dc/core/dc_link.c +18 -0
@@ -768,6 +768,24 @@ bool dc_link_detect(struct dc_link *link, enum dc_detect_reason reason) dc_is_dvi_signal(link->connector_signal)) {if (prev_sink !=NULL )dc_sink_release (prev_sink); +link_disconnect_sink (link); + +return false; + } +/* +* Abort detection for DP connectors if we have +* no EDID and connector is active converter +* as there are no display downstream +* +*/ +if (dc_is_dp_sst_signal (link->connector_signal) && + (link->dpcd_caps.dongle_type == +DISPLAY_DONGLE_DP_VGA_CONVERTER || + link->dpcd_caps.dongle_type == +DISPLAY_DONGLE_DP_DVI_CONVERTER )) { +if (prev_sink) +dc_sink_release (prev_sink); +link_disconnect_sink (link);return false; }
drivers/gpu/drm/meson/meson_drv.c +5 -4
@@ -387,11 +387,12 @@ static int meson_probe_remote(struct platform_device *pdev,static void meson_drv_shutdown (struct platform_device *pdev) {struct meson_drm *priv =dev_get_drvdata (&pdev->dev); -struct drm_device *drm = priv->drm; -DRM_DEBUG_DRIVER ("\n" ); -drm_kms_helper_poll_fini (drm); -drm_atomic_helper_shutdown (drm); +if (!priv) +return ; + +drm_kms_helper_poll_fini (priv->drm); +drm_atomic_helper_shutdown (priv->drm); }static int meson_drv_probe (struct platform_device *pdev)
drivers/i2c/busses/i2c-i801.c +2 -4
@@ -384,11 +384,9 @@ static int i801_check_post(struct i801_priv *priv, int status)dev_err (&priv->pci_dev->dev,"Transaction timeout\n" );/* try to stop the current command */ dev_dbg (&priv->pci_dev->dev,"Terminating the current operation\n" ); -outb_p (inb_p (SMBHSTCNT (priv)) |SMBHSTCNT_KILL , -SMBHSTCNT (priv)); +outb_p (SMBHSTCNT_KILL ,SMBHSTCNT (priv));usleep_range (1000 ,2000 ); -outb_p (inb_p (SMBHSTCNT (priv)) & (~SMBHSTCNT_KILL ), -SMBHSTCNT (priv)); +outb_p (0 ,SMBHSTCNT (priv));/* Check if it worked */ status =inb_p (SMBHSTSTS (priv));
drivers/i2c/busses/i2c-s3c2410.c +3 -0
@@ -493,7 +493,10 @@ static int i2c_s3c_irq_nextbyte(struct s3c24xx_i2c *i2c, unsigned long iicstat)* forces us to send a new START * when we change direction */ +dev_dbg (i2c->dev, +"missing START before write->read\n" );s3c24xx_i2c_stop (i2c, -EINVAL ); +break ; } goto retry_write;
drivers/iio/adc/ad7793.c +1 -0
@@ -279,6 +279,7 @@ static int ad7793_setup(struct iio_dev *indio_dev, id &=AD7793_ID_MASK ;if (id != st->chip_info->id) { + ret = -ENODEV ;dev_err (&st->sd.spi->dev,"device ID query failed\n" ); goto out; }
drivers/iommu/dmar.c +3 -1
@@ -1119,7 +1119,7 @@ static int alloc_iommu(struct dmar_drhd_unit *drhd) err =iommu_device_register (&iommu->iommu);if (err) - goto err_unmap; + goto err_sysfs; } drhd->iommu = iommu;
@@ -1127,6 +1127,8 @@ static int alloc_iommu(struct dmar_drhd_unit *drhd)return 0 ; +err_sysfs: +iommu_device_sysfs_remove (&iommu->iommu); err_unmap:unmap_iommu (iommu); error_free_seq_id:
drivers/isdn/hardware/mISDN/mISDNinfineon.c +16 -8
@@ -645,17 +645,19 @@ static void release_io(struct inf_hw *hw) {if (hw->cfg.mode) { -if (hw->cfg.p) { +if (hw->cfg.mode ==AM_MEMIO ) {release_mem_region (hw->cfg.start, hw->cfg.size); -iounmap (hw->cfg.p); +if (hw->cfg.p) +iounmap (hw->cfg.p); }else release_region (hw->cfg.start, hw->cfg.size); hw->cfg.mode =AM_NONE ; }if (hw->addr.mode) { -if (hw->addr.p) { +if (hw->addr.mode ==AM_MEMIO ) {release_mem_region (hw->addr.start, hw->addr.size); -iounmap (hw->addr.p); +if (hw->addr.p) +iounmap (hw->addr.p); }else release_region (hw->addr.start, hw->addr.size); hw->addr.mode =AM_NONE ;
@@ -685,9 +687,12 @@ setup_io(struct inf_hw *hw) (ulong)hw->cfg.start, (ulong)hw->cfg.size);return err; } -if (hw->ci->cfg_mode ==AM_MEMIO ) - hw->cfg.p =ioremap (hw->cfg.start, hw->cfg.size); hw->cfg.mode = hw->ci->cfg_mode; +if (hw->ci->cfg_mode ==AM_MEMIO ) { + hw->cfg.p =ioremap (hw->cfg.start, hw->cfg.size); +if (!hw->cfg.p) +return -ENOMEM ; + }if (debug &DEBUG_HW ) pr_notice("%s: IO cfg %lx (%lu bytes) mode%d\n", hw->name, (ulong)hw->cfg.start,
@@ -712,9 +717,12 @@ setup_io(struct inf_hw *hw) (ulong)hw->addr.start, (ulong)hw->addr.size);return err; } -if (hw->ci->addr_mode ==AM_MEMIO ) - hw->addr.p =ioremap (hw->addr.start, hw->addr.size); hw->addr.mode = hw->ci->addr_mode; +if (hw->ci->addr_mode ==AM_MEMIO ) { + hw->addr.p =ioremap (hw->addr.start, hw->addr.size); +if (!hw->addr.p) +return -ENOMEM ; + }if (debug &DEBUG_HW ) pr_notice("%s: IO addr %lx (%lu bytes) mode%d\n", hw->name, (ulong)hw->addr.start,
drivers/md/dm-snap.c +1 -1
@@ -794,7 +794,7 @@ static int dm_add_exception(void *context, chunk_t old, chunk_t new)static uint32_t __minimum_chunk_size (struct origin *o) {struct dm_snapshot *snap; -unsigned chunk_size =0 ; +unsigned chunk_size =rounddown_pow_of_two (UINT_MAX );if (o)list_for_each_entry (snap, &o->snapshots, list)
drivers/media/dvb-frontends/sp8870.c +3 -1
@@ -293,7 +293,9 @@ static int sp8870_set_frontend_parameters(struct dvb_frontend *fe)sp8870_writereg (state,0xc05 , reg0xc05);// read status reg in order to clear pending irqs -sp8870_readreg (state,0x200 ); + err =sp8870_readreg (state,0x200 ); +if (err <0 ) +return err;// system controller start sp8870_microcontroller_start (state);
drivers/media/usb/gspca/m5602/m5602_po1030.c +7 -3
@@ -159,6 +159,7 @@ static const struct v4l2_ctrl_config po1030_greenbal_cfg = {int po1030_probe (struct sd *sd) {u8 dev_id_h =0 , i; +int err;struct gspca_dev *gspca_dev = (struct gspca_dev *)sd;if (force_sensor) {
@@ -177,10 +178,13 @@ int po1030_probe(struct sd *sd)for (i =0 ; i <ARRAY_SIZE (preinit_po1030); i++) {u8 data = preinit_po1030[i][2 ];if (preinit_po1030[i][0 ] ==SENSOR ) -m5602_write_sensor (sd, - preinit_po1030[i][1 ], &data,1 ); + err =m5602_write_sensor (sd, preinit_po1030[i][1 ], + &data,1 );else -m5602_write_bridge (sd, preinit_po1030[i][1 ], data); + err =m5602_write_bridge (sd, preinit_po1030[i][1 ], + data); +if (err <0 ) +return err; }if (m5602_read_sensor (sd,PO1030_DEVID_H , &dev_id_h,1 ))
drivers/misc/kgdbts.c +2 -1
@@ -112,8 +112,9 @@ printk(KERN_INFO a); \ }while (0 ) #define v2printk(a...) do { \ -if (verbose >1 ) \ +if (verbose >1 ) { \ printk(KERN_INFO a); \ + } \touch_nmi_watchdog (); \ } while (0) #define eprintk(a...) do { \
drivers/misc/lis3lv02d/lis3lv02d.h +1 -0
@@ -284,6 +284,7 @@ struct lis3lv02d {int regs_size;u8 *reg_cache;bool regs_stored; +bool init_required;u8 odr_mask;/* ODR bit mask */ u8 whoami;/* indicates measurement precision */ s16 (*read_data) (struct lis3lv02d *lis3,int reg);
drivers/misc/mei/interrupt.c +3 -0
@@ -224,6 +224,9 @@ static int mei_cl_irq_read(struct mei_cl *cl, struct mei_cl_cb *cb,return ret; } +pm_runtime_mark_last_busy (dev->dev); +pm_request_autosuspend (dev->dev); +list_move_tail (&cb->list, &cl->rd_pending);return 0 ;
drivers/net/caif/caif_serial.c +0 -1
@@ -279,7 +279,6 @@ static int caif_xmit(struct sk_buff *skb, struct net_device *dev) {struct ser_device *ser; -BUG_ON (dev ==NULL ); ser =netdev_priv (dev);/* Send flow off once, on high water mark */
drivers/net/dsa/mt7530.c +0 -8
@@ -851,14 +851,6 @@ mt7530_port_set_vlan_aware(struct dsa_switch *ds, int port) {struct mt7530_priv *priv = ds->priv; -/* The real fabric path would be decided on the membership in the -* entry of VLAN table. PCR_MATRIX set up here with ALL_MEMBERS -* means potential VLAN can be consisting of certain subset of all -* ports. -*/ -mt7530_rmw (priv,MT7530_PCR_P (port), -PCR_MATRIX_MASK ,PCR_MATRIX (MT7530_ALL_MEMBERS )); -/* Trapped into security mode allows packet forwarding through VLAN * table lookup. CPU port is set to fallback mode to let untagged * frames pass through.
drivers/net/ethernet/broadcom/bnx2.c +1 -1
@@ -8253,9 +8253,9 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)BNX2_WR (bp,PCI_COMMAND , reg); }else if ((BNX2_CHIP_ID (bp) ==BNX2_CHIP_ID_5706_A1 ) && !(bp->flags &BNX2_FLAG_PCIX )) { -dev_err (&pdev->dev,"5706 A1 can only be used in a PCIX bus, aborting\n" ); + rc = -EPERM ; goto err_out_unmap; }
drivers/net/ethernet/brocade/bna/bnad.c +2 -5
@@ -3290,7 +3290,7 @@ bnad_change_mtu(struct net_device *netdev, int new_mtu) {int err, mtu;struct bnad *bnad =netdev_priv (netdev); -u32 rx_count =0 , frame, new_frame; +u32 frame, new_frame;mutex_lock (&bnad->conf_mutex);
@@ -3306,12 +3306,9 @@ bnad_change_mtu(struct net_device *netdev, int new_mtu)/* only when transition is over 4K */ if ((frame <=4096 && new_frame >4096 ) || (frame >4096 && new_frame <=4096 )) - rx_count =bnad_reinit_rx (bnad); +bnad_reinit_rx (bnad); } -/* rx_count > 0 - new rx created -* - Linux set err = 0 and return -*/ err =bnad_mtu_set (bnad, new_frame);if (err) err = -EBUSY ;
drivers/net/ethernet/dec/tulip/de4x5.c +2 -2
@@ -4927,11 +4927,11 @@ mii_get_oui(u_char phyaddr, u_long ioaddr)u_char breg[2]; } a; int i, r2, r3, ret=0;*/ -int r2, r3; +int r2;/* Read r2 and r3 */ r2 =mii_rd (MII_ID0 , phyaddr, ioaddr); - r3 =mii_rd (MII_ID1 , phyaddr, ioaddr); +mii_rd (MII_ID1 , phyaddr, ioaddr);/* SEEQ and Cypress way * / / * Shuffle r2 and r3 * / a.reg=0;
drivers/net/ethernet/dec/tulip/media.c +0 -5
@@ -319,13 +319,8 @@ void tulip_select_media(struct net_device *dev, int startup)break ; }case 5 :case 6 : { -u16 setup[5 ]; - new_csr6 =0 ;/* FIXME */ -for (i =0 ; i <5 ; i++) - setup[i] =get_u16 (&p[i*2 +1 ]); -if (startup && mtable->has_reset) {struct medialeaf *rleaf = &mtable->mleaf[mtable->has_reset];unsigned char *rst = rleaf->leafdata;
drivers/net/ethernet/freescale/fec_main.c +9 -2
@@ -3221,7 +3221,9 @@ static int fec_enet_init(struct net_device *ndev)return ret; } -fec_enet_alloc_queue (ndev); + ret =fec_enet_alloc_queue (ndev); +if (ret) +return ret; bd_size = (fep->total_tx_ring_size + fep->total_rx_ring_size) * dsize;
@@ -3229,7 +3231,8 @@ static int fec_enet_init(struct net_device *ndev) cbd_base =dmam_alloc_coherent (&fep->pdev->dev, bd_size, &bd_dma,GFP_KERNEL );if (!cbd_base) { -return -ENOMEM ; + ret = -ENOMEM ; + goto free_queue_mem; }memset (cbd_base,0 , bd_size);
@@ -3309,6 +3312,10 @@ static int fec_enet_init(struct net_device *ndev)fec_enet_update_ethtool_stats (ndev);return 0 ; + +free_queue_mem: +fec_enet_free_queue (ndev); +return ret; }#ifdef CONFIG_OF
drivers/net/ethernet/fujitsu/fmvj18x_cs.c +5 -0
@@ -547,6 +547,11 @@ static int fmvj18x_get_hwinfo(struct pcmcia_device *link, u_char *node_id)return -1 ; base =ioremap (link->resource[2 ]->start,resource_size (link->resource[2 ])); +if (!base) { +pcmcia_release_window (link, link->resource[2 ]); +return -1 ; + } +pcmcia_map_mem_page (link, link->resource[2 ],0 );/*
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +3 -7
@@ -702,8 +702,6 @@ static bool hns3_tunnel_csum_bug(struct sk_buff *skb)if (!(!skb->encapsulation && l4.udp->dest ==htons (IANA_VXLAN_PORT )))return false; -skb_checksum_help (skb); -return true; }
@@ -764,8 +762,7 @@ static int hns3_set_l3l4_type_csum(struct sk_buff *skb, u8 ol4_proto,/* the stack computes the IP header already, * driver calculate l4 checksum when not TSO. */ -skb_checksum_help (skb); -return 0 ; +return skb_checksum_help (skb); } l3.hdr =skb_inner_network_header (skb);
@@ -796,7 +793,7 @@ static int hns3_set_l3l4_type_csum(struct sk_buff *skb, u8 ol4_proto,break ;case IPPROTO_UDP :if (hns3_tunnel_csum_bug (skb)) -break ; +return skb_checksum_help (skb);hnae3_set_bit (*type_cs_vlan_tso,HNS3_TXD_L4CS_B ,1 ); hnae3_set_field(*type_cs_vlan_tso,
@@ -821,8 +818,7 @@ static int hns3_set_l3l4_type_csum(struct sk_buff *skb, u8 ol4_proto,/* the stack computes the IP header already, * driver calculate l4 checksum when not TSO. */ -skb_checksum_help (skb); -return 0 ; +return skb_checksum_help (skb); }return 0 ;
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c +7 -9
@@ -467,12 +467,16 @@ static int ixgbe_set_vf_vlan(struct ixgbe_adapter *adapter, int add, int vid,return err; } -static s32 ixgbe_set_vf_lpe (struct ixgbe_adapter *adapter,u32 *msgbuf,u32 vf) +static int ixgbe_set_vf_lpe (struct ixgbe_adapter *adapter,u32 max_frame,u32 vf) {struct ixgbe_hw *hw = &adapter->hw; -int max_frame = msgbuf[1 ];u32 max_frs; +if (max_frame <ETH_MIN_MTU || max_frame >IXGBE_MAX_JUMBO_FRAME_SIZE ) { +e_err (drv,"VF max_frame %d out of range\n" , max_frame); +return -EINVAL ; + } +/* * For 82599EB we have to keep all PFs and VFs operating with * the same max_frame value in order to avoid sending an oversize
@@ -532,12 +536,6 @@ static s32 ixgbe_set_vf_lpe(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf) } } -/* MTU < 68 is an error and causes problems on some kernels */ -if (max_frame >IXGBE_MAX_JUMBO_FRAME_SIZE ) { -e_err (drv,"VF max_frame %d out of range\n" , max_frame); -return -EINVAL ; - } -/* pull current max frame size from hardware */ max_frs =IXGBE_READ_REG (hw,IXGBE_MAXFRS ); max_frs &=IXGBE_MHADD_MFS_MASK ;
@@ -1240,7 +1238,7 @@ static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf) retval =ixgbe_set_vf_vlan_msg (adapter, msgbuf, vf);break ;case IXGBE_VF_SET_LPE : - retval =ixgbe_set_vf_lpe (adapter, msgbuf, vf); + retval =ixgbe_set_vf_lpe (adapter, msgbuf[1 ], vf);break ;case IXGBE_VF_SET_MACVLAN : retval =ixgbe_set_vf_macvlan_msg (adapter, msgbuf, vf);
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c +1 -3
@@ -2011,8 +2011,6 @@ static int mlx4_en_set_tunable(struct net_device *dev,return ret; } -#define MLX4_EEPROM_PAGE_LEN 256 -static int mlx4_en_get_module_info (struct net_device *dev,struct ethtool_modinfo *modinfo) {
@@ -2047,7 +2045,7 @@ static int mlx4_en_get_module_info(struct net_device *dev,break ;case MLX4_MODULE_ID_SFP : modinfo->type =ETH_MODULE_SFF_8472 ; - modinfo->eeprom_len =MLX4_EEPROM_PAGE_LEN ; + modinfo->eeprom_len =ETH_MODULE_SFF_8472_LEN ;break ;default :return -EINVAL ;
drivers/net/ethernet/mellanox/mlx4/en_tx.c +1 -1
@@ -862,6 +862,7 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev)struct mlx4_en_tx_desc *tx_desc;struct mlx4_wqe_data_seg *data;struct mlx4_en_tx_info *tx_info; +u32 __maybe_unused ring_cons;int tx_ind;int nr_txbb;int desc_size;
@@ -875,7 +876,6 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev)bool stop_queue;bool inline_ok;u8 data_offset; -u32 ring_cons;bool bf_ok; tx_ind =skb_get_queue_mapping (skb);
drivers/net/ethernet/mellanox/mlx4/port.c +103 -4
138 lines not on this page · raw message
drivers/net/ethernet/micrel/ksz884x.c +1 -2
@@ -1657,8 +1657,7 @@ static inline void set_tx_len(struct ksz_desc *desc, u32 len)#define HW_DELAY (hw, reg) \ do { \ - u16 dummy; \ - dummy = readw(hw->io + reg); \ + readw(hw->io + reg); \ } while (0)/**
drivers/net/ethernet/microchip/lan743x_main.c +2 -4
@@ -156,9 +156,8 @@ static void lan743x_tx_isr(void *context, u32 int_sts, u32 flags)struct lan743x_tx *tx = context;struct lan743x_adapter *adapter = tx->adapter;bool enable_flag = true; -u32 int_en =0 ; - int_en =lan743x_csr_read (adapter,INT_EN_SET ); +lan743x_csr_read (adapter,INT_EN_SET );if (flags &LAN743X_VECTOR_FLAG_SOURCE_ENABLE_CLEAR ) {lan743x_csr_write (adapter,INT_EN_CLR ,INT_BIT_DMA_TX_ (tx->channel_number));
@@ -1635,10 +1634,9 @@ static int lan743x_tx_napi_poll(struct napi_struct *napi, int weight)bool start_transmitter = false;unsigned long irq_flags =0 ;u32 ioc_bit =0 ; -u32 int_sts =0 ; ioc_bit =DMAC_INT_BIT_TX_IOC_ (tx->channel_number); - int_sts =lan743x_csr_read (adapter,DMAC_INT_STS ); +lan743x_csr_read (adapter,DMAC_INT_STS );if (tx->vector_flags &LAN743X_VECTOR_FLAG_SOURCE_STATUS_W2C )lan743x_csr_write (adapter,DMAC_INT_STS , ioc_bit);spin_lock_irqsave (&tx->ring_lock, irq_flags);
drivers/net/ethernet/neterion/vxge/vxge-traffic.c +11 -21
@@ -29,8 +29,6 @@*/ enum vxge_hw_status vxge_hw_vpath_intr_enable (struct __vxge_hw_vpath_handle *vp) { -u64 val64; -struct __vxge_hw_virtualpath *vpath;struct vxge_hw_vpath_reg __iomem *vp_reg;enum vxge_hw_status status =VXGE_HW_OK ;
@@ -83,7 +81,7 @@ enum vxge_hw_status vxge_hw_vpath_intr_enable(struct __vxge_hw_vpath_handle *vp)__vxge_hw_pio_mem_write32_upper ((u32 )VXGE_HW_INTR_MASK_ALL , &vp_reg->xgmac_vp_int_status); - val64 =readq (&vp_reg->vpath_general_int_status); +readq (&vp_reg->vpath_general_int_status);/* Mask unwanted interrupts */
@@ -156,8 +154,6 @@ enum vxge_hw_status vxge_hw_vpath_intr_enable(struct __vxge_hw_vpath_handle *vp)enum vxge_hw_status vxge_hw_vpath_intr_disable (struct __vxge_hw_vpath_handle *vp) { -u64 val64; -struct __vxge_hw_virtualpath *vpath;enum vxge_hw_status status =VXGE_HW_OK ;struct vxge_hw_vpath_reg __iomem *vp_reg;
@@ -178,8 +174,6 @@ enum vxge_hw_status vxge_hw_vpath_intr_disable( (u32 )VXGE_HW_INTR_MASK_ALL , &vp_reg->vpath_general_int_mask); - val64 =VXGE_HW_TIM_CLR_INT_EN_VP (1 << (16 - vpath->vp_id)); -writeq (VXGE_HW_INTR_MASK_ALL , &vp_reg->kdfcctl_errors_mask); __vxge_hw_pio_mem_write32_upper((u32)VXGE_HW_INTR_MASK_ALL,
@@ -486,9 +480,7 @@ void vxge_hw_device_unmask_all(struct __vxge_hw_device *hldev)*/ void vxge_hw_device_flush_io (struct __vxge_hw_device *hldev) { -u32 val32; - - val32 =readl (&hldev->common_reg->titan_general_int_status); +readl (&hldev->common_reg->titan_general_int_status); }/**
@@ -1726,8 +1718,8 @@ void vxge_hw_fifo_txdl_free(struct __vxge_hw_fifo *fifo, void *txdlh)enum vxge_hw_status vxge_hw_vpath_mac_addr_add (struct __vxge_hw_vpath_handle *vp, -u8 (macaddr )[ETH_ALEN ], -u8 (macaddr_mask )[ETH_ALEN ], +u8 *macaddr, +u8 *macaddr_mask,enum vxge_hw_vpath_mac_addr_add_mode duplicate_mode) {u32 i;
@@ -1789,8 +1781,8 @@ vxge_hw_vpath_mac_addr_add(enum vxge_hw_status vxge_hw_vpath_mac_addr_get (struct __vxge_hw_vpath_handle *vp, -u8 (macaddr )[ETH_ALEN ], -u8 (macaddr_mask )[ETH_ALEN ]) +u8 *macaddr, +u8 *macaddr_mask) {u32 i;u64 data1 =0ULL ;
@@ -1841,8 +1833,8 @@ vxge_hw_vpath_mac_addr_get(enum vxge_hw_status vxge_hw_vpath_mac_addr_get_next (struct __vxge_hw_vpath_handle *vp, -u8 (macaddr )[ETH_ALEN ], -u8 (macaddr_mask )[ETH_ALEN ]) +u8 *macaddr, +u8 *macaddr_mask) {u32 i;u64 data1 =0ULL ;
@@ -1894,8 +1886,8 @@ vxge_hw_vpath_mac_addr_get_next(enum vxge_hw_status vxge_hw_vpath_mac_addr_delete (struct __vxge_hw_vpath_handle *vp, -u8 (macaddr )[ETH_ALEN ], -u8 (macaddr_mask )[ETH_ALEN ]) +u8 *macaddr, +u8 *macaddr_mask) {u32 i;u64 data1 =0ULL ;
@@ -2385,7 +2377,6 @@ enum vxge_hw_status vxge_hw_vpath_poll_rx(struct __vxge_hw_ring *ring)u8 t_code;enum vxge_hw_status status =VXGE_HW_OK ;void *first_rxdh; -u64 val64 =0 ;int new_count =0 ; ring->cmpl_cnt =0 ;
@@ -2413,8 +2404,7 @@ enum vxge_hw_status vxge_hw_vpath_poll_rx(struct __vxge_hw_ring *ring) }writeq (VXGE_HW_PRC_RXD_DOORBELL_NEW_QW_CNT (new_count), &ring->vp_reg->prc_rxd_doorbell); - val64 = -readl (&ring->common_reg->titan_general_int_status); +readl (&ring->common_reg->titan_general_int_status); ring->doorbell_cnt =0 ; } }
drivers/net/ethernet/sfc/falcon/farch.c +11 -18
@@ -873,17 +873,12 @@ static u16 ef4_farch_handle_rx_not_ok(struct ef4_rx_queue *rx_queue, {struct ef4_channel *channel =ef4_rx_queue_channel (rx_queue);struct ef4_nic *efx = rx_queue->efx; -bool rx_ev_buf_owner_id_err, rx_ev_ip_hdr_chksum_err; +bool __maybe_unused rx_ev_buf_owner_id_err, rx_ev_ip_hdr_chksum_err;bool rx_ev_tcp_udp_chksum_err, rx_ev_eth_crc_err;bool rx_ev_frm_trunc, rx_ev_drib_nib, rx_ev_tobe_disc; -bool rx_ev_other_err, rx_ev_pause_frm; -bool rx_ev_hdr_type, rx_ev_mcast_pkt; -unsigned rx_ev_pkt_type; +bool rx_ev_pause_frm; - rx_ev_hdr_type =EF4_QWORD_FIELD (*event,FSF_AZ_RX_EV_HDR_TYPE ); - rx_ev_mcast_pkt =EF4_QWORD_FIELD (*event,FSF_AZ_RX_EV_MCAST_PKT ); rx_ev_tobe_disc =EF4_QWORD_FIELD (*event,FSF_AZ_RX_EV_TOBE_DISC ); - rx_ev_pkt_type =EF4_QWORD_FIELD (*event,FSF_AZ_RX_EV_PKT_TYPE ); rx_ev_buf_owner_id_err =EF4_QWORD_FIELD (*event,FSF_AZ_RX_EV_BUF_OWNER_ID_ERR ); rx_ev_ip_hdr_chksum_err = EF4_QWORD_FIELD(*event,
@@ -896,10 +891,6 @@ static u16 ef4_farch_handle_rx_not_ok(struct ef4_rx_queue *rx_queue, 0 : EF4_QWORD_FIELD(*event, FSF_AA_RX_EV_DRIB_NIB)); rx_ev_pause_frm =EF4_QWORD_FIELD (*event,FSF_AZ_RX_EV_PAUSE_FRM_ERR ); -/* Every error apart from tobe_disc and pause_frm */ - rx_ev_other_err = (rx_ev_drib_nib | rx_ev_tcp_udp_chksum_err | - rx_ev_buf_owner_id_err | rx_ev_eth_crc_err | - rx_ev_frm_trunc | rx_ev_ip_hdr_chksum_err);/* Count errors that are not in MAC stats. Ignore expected * checksum errors during self-test. */
@@ -919,6 +910,13 @@ static u16 ef4_farch_handle_rx_not_ok(struct ef4_rx_queue *rx_queue,* to a FIFO overflow. */ #ifdef DEBUG + { +/* Every error apart from tobe_disc and pause_frm */ + +bool rx_ev_other_err = (rx_ev_drib_nib | rx_ev_tcp_udp_chksum_err | + rx_ev_buf_owner_id_err | rx_ev_eth_crc_err | + rx_ev_frm_trunc | rx_ev_ip_hdr_chksum_err); +if (rx_ev_other_err &&net_ratelimit ()) {netif_dbg (efx, rx_err, efx->net_dev, " RX queue %d unexpected RX event "
@@ -935,6 +933,7 @@ static u16 ef4_farch_handle_rx_not_ok(struct ef4_rx_queue *rx_queue, rx_ev_tobe_disc ?" [TOBE_DISC]" :"" , rx_ev_pause_frm ? " [PAUSE]" : ""); } + }#endif /* The frame must be discarded if any of these are true. */
@@ -1646,15 +1645,11 @@ void ef4_farch_rx_push_indir_table(struct ef4_nic *efx)*/ void ef4_farch_dimension_resources (struct ef4_nic *efx,unsigned sram_lim_qw) { -unsigned vi_count, buftbl_min; +unsigned vi_count;/* Account for the buffer table entries backing the datapath channels * and the descriptor caches for those channels. */ - buftbl_min = ((efx->n_rx_channels *EF4_MAX_DMAQ_SIZE + - efx->n_tx_channels *EF4_TXQ_TYPES *EF4_MAX_DMAQ_SIZE + - efx->n_channels *EF4_MAX_EVQ_SIZE ) - *sizeof (ef4_qword_t) /EF4_BUF_SIZE ); vi_count =max (efx->n_channels, efx->n_tx_channels *EF4_TXQ_TYPES ); efx->tx_dc_base = sram_lim_qw - vi_count *TX_DC_ENTRIES ;
@@ -2535,7 +2530,6 @@ int ef4_farch_filter_remove_safe(struct ef4_nic *efx,enum ef4_farch_filter_table_id table_id;struct ef4_farch_filter_table *table;unsigned int filter_idx; -struct ef4_farch_filter_spec *spec;int rc; table_id =ef4_farch_filter_id_table_id (filter_id);
@@ -2546,7 +2540,6 @@ int ef4_farch_filter_remove_safe(struct ef4_nic *efx, filter_idx =ef4_farch_filter_id_index (filter_id);if (filter_idx >= table->size)return -ENOENT ; - spec = &table->spec[filter_idx];spin_lock_bh (&efx->filter_lock); rc =ef4_farch_filter_remove (efx, table, filter_idx, priority);
drivers/net/ethernet/sis/sis900.c +2 -3
@@ -783,10 +783,9 @@ static u16 sis900_default_phy(struct net_device * net_dev)static void sis900_set_capability (struct net_device *net_dev,struct mii_phy *phy) {u16 cap; -u16 status; - status =mdio_read (net_dev, phy->phy_addr,MII_STATUS ); - status =mdio_read (net_dev, phy->phy_addr,MII_STATUS ); +mdio_read (net_dev, phy->phy_addr,MII_STATUS ); +mdio_read (net_dev, phy->phy_addr,MII_STATUS ); cap =MII_NWAY_CSMA_CD | ((phy->status & MII_STAT_CAN_TX_FDX)? MII_NWAY_TX_FDX:0) |
drivers/net/ethernet/synopsys/dwc-xlgmac-common.c +1 -1
@@ -513,7 +513,7 @@ void xlgmac_get_all_hw_features(struct xlgmac_pdata *pdata)void xlgmac_print_all_hw_features (struct xlgmac_pdata *pdata) { -char *str =NULL ; +char __maybe_unused *str =NULL ;XLGMAC_PR ("\n" );XLGMAC_PR ("=====================================================\n" );
drivers/net/ethernet/ti/davinci_emac.c +2 -3
@@ -1240,7 +1240,7 @@ static int emac_poll(struct napi_struct *napi, int budget)struct net_device *ndev = priv->ndev;struct device *emac_dev = &ndev->dev;u32 status =0 ; -u32 num_tx_pkts =0 , num_rx_pkts =0 ; +u32 num_rx_pkts =0 ;/* Check interrupt vectors and call packet processing */ status =emac_read (EMAC_MACINVECTOR );
@@ -1251,8 +1251,7 @@ static int emac_poll(struct napi_struct *napi, int budget) mask =EMAC_DM646X_MAC_IN_VECTOR_TX_INT_VEC ;if (status & mask) { - num_tx_pkts =cpdma_chan_process (priv->txchan, -EMAC_DEF_TX_MAX_SERVICE ); +cpdma_chan_process (priv->txchan,EMAC_DEF_TX_MAX_SERVICE ); }/* TX processing */ mask =EMAC_DM644X_MAC_IN_VECTOR_RX_INT_VEC ;
drivers/net/ethernet/ti/netcp_core.c +1 -1
@@ -1364,9 +1364,9 @@ int netcp_txpipe_open(struct netcp_tx_pipe *tx_pipe) tx_pipe->dma_queue =knav_queue_open (name, tx_pipe->dma_queue_id,KNAV_QUEUE_SHARED );if (IS_ERR (tx_pipe->dma_queue)) { + ret =PTR_ERR (tx_pipe->dma_queue);dev_err (dev,"Could not open DMA queue for channel \"%s\": %d\n" , name, ret); - ret =PTR_ERR (tx_pipe->dma_queue); goto err; }
drivers/net/ethernet/ti/tlan.c +1 -3
@@ -671,7 +671,6 @@ module_exit(tlan_exit);static void __init tlan_eisa_probe (void ) {long ioaddr; -int rc = -ENODEV ;int irq;u16 device_id;
@@ -736,8 +735,7 @@ static void __init tlan_eisa_probe(void)/* Setup the newly found eisa adapter */ - rc =tlan_probe1 (NULL , ioaddr, irq, -12 ,NULL ); +tlan_probe1 (NULL , ioaddr, irq,12 ,NULL );continue ; out:
drivers/net/ethernet/via/via-velocity.c +0 -13
@@ -875,26 +875,13 @@ static u32 check_connection_type(struct mac_regs __iomem *regs)*/ static int velocity_set_media_mode (struct velocity_info *vptr,u32 mii_status) { -u32 curr_status;struct mac_regs __iomem *regs = vptr->mac_regs; vptr->mii_status =mii_check_media_mode (vptr->mac_regs); - curr_status = vptr->mii_status & (~VELOCITY_LINK_FAIL );/* Set mii link status */ set_mii_flow_control (vptr); -/* -Check if new status is consistent with current status -if (((mii_status & curr_status) & VELOCITY_AUTONEG_ENABLE) || -(mii_status==curr_status)) { -vptr->mii_status=mii_check_media_mode(vptr->mac_regs); -vptr->mii_status=check_connection_type(vptr->mac_regs); -VELOCITY_PRT(MSG_LEVEL_INFO, "Velocity link no change\n"); -return 0; -} -*/ -if (PHYID_GET_PHY_ID (vptr->phy_id) ==PHYID_CICADA_CS8201 )MII_REG_BITS_ON (AUXCR_MDPPS ,MII_NCONFIG , vptr->mac_regs);
drivers/net/phy/mdio-octeon.c +0 -2
@@ -75,7 +75,6 @@ static int octeon_mdiobus_probe(struct platform_device *pdev)return 0 ; fail_register: -mdiobus_free (bus->mii_bus); smi_en.u64 =0 ;oct_mdio_writeq (smi_en.u64, bus->register_base +SMI_EN );return err;
@@ -89,7 +88,6 @@ static int octeon_mdiobus_remove(struct platform_device *pdev) bus =platform_get_drvdata (pdev);mdiobus_unregister (bus->mii_bus); -mdiobus_free (bus->mii_bus); smi_en.u64 =0 ;oct_mdio_writeq (smi_en.u64, bus->register_base +SMI_EN );return 0 ;
drivers/net/phy/mdio-thunder.c +0 -1
@@ -129,7 +129,6 @@ static void thunder_mdiobus_pci_remove(struct pci_dev *pdev)continue ;mdiobus_unregister (bus->mii_bus); -mdiobus_free (bus->mii_bus);oct_mdio_writeq (0 , bus->register_base +SMI_EN ); }pci_set_drvdata (pdev,NULL );
drivers/net/usb/hso.c +2 -2
@@ -1703,7 +1703,7 @@ static int hso_serial_tiocmset(struct tty_struct *tty,spin_unlock_irqrestore (&serial->serial_lock, flags);return usb_control_msg (serial->parent->usb, -usb_rcvctrlpipe (serial->parent->usb,0 ),0x22 , +usb_sndctrlpipe (serial->parent->usb,0 ),0x22 ,0x21 , val, if_num,NULL ,0 ,USB_CTRL_SET_TIMEOUT ); }
@@ -2450,7 +2450,7 @@ static int hso_rfkill_set_block(void *data, bool blocked)if (hso_dev->usb_gone) rv =0 ;else - rv =usb_control_msg (hso_dev->usb,usb_rcvctrlpipe (hso_dev->usb,0 ), + rv =usb_control_msg (hso_dev->usb,usb_sndctrlpipe (hso_dev->usb,0 ), enabled ?0x82 :0x81 ,0x40 ,0 ,0 ,NULL ,0 ,USB_CTRL_SET_TIMEOUT );mutex_unlock (&hso_dev->mutex);
drivers/net/usb/smsc75xx.c +6 -2
@@ -1495,7 +1495,7 @@ static int smsc75xx_bind(struct usbnet *dev, struct usb_interface *intf) ret =smsc75xx_wait_ready (dev,0 );if (ret <0 ) {netdev_warn (dev->net,"device not ready in smsc75xx_bind\n" ); -return ret; + goto err; }smsc75xx_init_mac_address (dev);
@@ -1504,7 +1504,7 @@ static int smsc75xx_bind(struct usbnet *dev, struct usb_interface *intf) ret =smsc75xx_reset (dev);if (ret <0 ) {netdev_warn (dev->net,"smsc75xx_reset error %d\n" , ret); -return ret; + goto err; } dev->net->netdev_ops = &smsc75xx_netdev_ops;
@@ -1514,6 +1514,10 @@ static int smsc75xx_bind(struct usbnet *dev, struct usb_interface *intf) dev->hard_mtu = dev->net->mtu + dev->net->hard_header_len; dev->net->max_mtu =MAX_SINGLE_PACKET_SIZE ;return 0 ; + +err: +kfree (pdata); +return ret; }static void smsc75xx_unbind (struct usbnet *dev,struct usb_interface *intf)
drivers/net/wireless/ath/ath10k/htt_rx.c +57 -4
77 lines not on this page · raw message
drivers/net/wireless/marvell/libertas/mesh.c +4 -24
@@ -793,19 +793,6 @@ static const struct attribute_group mesh_ie_group = { .attrs = mesh_ie_attrs, }; -static void lbs_persist_config_init (struct net_device *dev) -{ -int ret; - ret =sysfs_create_group (&(dev->dev.kobj), &boot_opts_group); - ret =sysfs_create_group (&(dev->dev.kobj), &mesh_ie_group); -} - -static void lbs_persist_config_remove (struct net_device *dev) -{ -sysfs_remove_group (&(dev->dev.kobj), &boot_opts_group); -sysfs_remove_group (&(dev->dev.kobj), &mesh_ie_group); -} -/*************************************************************************** * Initializing and starting, stopping mesh
@@ -1005,6 +992,10 @@ static int lbs_add_mesh(struct lbs_private *priv)SET_NETDEV_DEV (priv->mesh_dev, priv->dev->dev.parent); mesh_dev->flags |=IFF_BROADCAST |IFF_MULTICAST ; + mesh_dev->sysfs_groups[0 ] = &lbs_mesh_attr_group; + mesh_dev->sysfs_groups[1 ] = &boot_opts_group; + mesh_dev->sysfs_groups[2 ] = &mesh_ie_group; +/* Register virtual mesh interface */ ret =register_netdev (mesh_dev);if (ret) {
@@ -1012,19 +1003,10 @@ static int lbs_add_mesh(struct lbs_private *priv) goto err_free_netdev; } - ret =sysfs_create_group (&(mesh_dev->dev.kobj), &lbs_mesh_attr_group); -if (ret) - goto err_unregister; - -lbs_persist_config_init (mesh_dev); -/* Everything successful */ ret =0 ; goto done; -err_unregister: -unregister_netdev (mesh_dev); - err_free_netdev:free_netdev (mesh_dev);
@@ -1045,8 +1027,6 @@ void lbs_remove_mesh(struct lbs_private *priv)netif_stop_queue (mesh_dev);netif_carrier_off (mesh_dev); -sysfs_remove_group (&(mesh_dev->dev.kobj), &lbs_mesh_attr_group); -lbs_persist_config_remove (mesh_dev);unregister_netdev (mesh_dev); priv->mesh_dev =NULL ;kfree (mesh_dev->ieee80211_ptr);
drivers/platform/x86/hp-wireless.c +2 -0
@@ -30,12 +30,14 @@ MODULE_LICENSE("GPL");MODULE_AUTHOR ("Alex Hung" );MODULE_ALIAS ("acpi*:HPQ6001:*" );MODULE_ALIAS ("acpi*:WSTADEF:*" ); +MODULE_ALIAS ("acpi*:AMDI0051:*" );static struct input_dev *hpwl_input_dev;static const struct acpi_device_id hpwl_ids[] = { {"HPQ6001" ,0 }, {"WSTADEF" ,0 }, + {"AMDI0051" ,0 }, {"" ,0 }, };
drivers/platform/x86/hp_accel.c +21 -1
@@ -101,6 +101,9 @@ MODULE_DEVICE_TABLE(acpi, lis3lv02d_device_ids);static int lis3lv02d_acpi_init (struct lis3lv02d *lis3) {struct acpi_device *dev = lis3->bus_priv; +if (!lis3->init_required) +return 0 ; +if (acpi_evaluate_object (dev->handle,METHOD_NAME__INI ,NULL ,NULL ) !=AE_OK )return -EINVAL ;
@@ -367,6 +370,7 @@ static int lis3lv02d_add(struct acpi_device *device) }/* call the core layer do its init */ + lis3_dev.init_required = true; ret =lis3lv02d_init_device (&lis3_dev);if (ret)return ret;
@@ -414,11 +418,27 @@ static int lis3lv02d_suspend(struct device *dev)static int lis3lv02d_resume (struct device *dev) { + lis3_dev.init_required = false; +lis3lv02d_poweron (&lis3_dev); +return 0 ; +} + +static int lis3lv02d_restore (struct device *dev) +{ + lis3_dev.init_required = true;lis3lv02d_poweron (&lis3_dev);return 0 ; } -static SIMPLE_DEV_PM_OPS(hp_accel_pm, lis3lv02d_suspend, lis3lv02d_resume); +static const struct dev_pm_ops hp_accel_pm = { + .suspend = lis3lv02d_suspend, + .resume = lis3lv02d_resume, + .freeze = lis3lv02d_suspend, + .thaw = lis3lv02d_resume, + .poweroff = lis3lv02d_suspend, + .restore = lis3lv02d_restore, +}; +#define HP_ACCEL_PM (&hp_accel_pm)#else #define HP_ACCEL_PM NULL
drivers/platform/x86/intel_punit_ipc.c +1 -0
@@ -331,6 +331,7 @@ static const struct acpi_device_id punit_ipc_acpi_ids[] = { { "INT34D4", 0 }, { } }; +MODULE_DEVICE_TABLE (acpi, punit_ipc_acpi_ids);static struct platform_driver intel_punit_ipc_driver = { .probe = intel_punit_ipc_probe,
drivers/scsi/BusLogic.c +3 -3
@@ -3081,11 +3081,11 @@ static int blogic_qcmd_lck(struct scsi_cmnd *command, ccb->opcode =BLOGIC_INITIATOR_CCB_SG ; ccb->datalen = count *sizeof (struct blogic_sg_seg );if (blogic_multimaster_type (adapter)) - ccb->data = (void *)((unsigned int ) ccb->dma_handle + + ccb->data = (unsigned int ) ccb->dma_handle + ((unsigned long ) &ccb->sglist - - (unsigned long ) ccb)); + (unsigned long ) ccb);else - ccb->data = ccb->sglist; + ccb->data =virt_to_32bit_virt (ccb->sglist);scsi_for_each_sg (command, sg, count, i) { ccb->sglist[i].segbytes =sg_dma_len (sg);
drivers/scsi/BusLogic.h +1 -1
@@ -821,7 +821,7 @@ struct blogic_ccb {unsigned char cdblen;/* Byte 2 */ unsigned char sense_datalen;/* Byte 3 */ u32 datalen;/* Bytes 4-7 */ -void *data;/* Bytes 8-11 */ +u32 data;/* Bytes 8-11 */ unsigned char:8; /* Byte 12 */ unsigned char:8; /* Byte 13 */enum blogic_adapter_status adapter_status;/* Byte 14 */
drivers/scsi/libsas/sas_port.c +2 -2
@@ -41,7 +41,7 @@ static bool phy_is_wideport_member(struct asd_sas_port *port, struct asd_sas_phystatic void sas_resume_port (struct asd_sas_phy *phy) { -struct domain_device *dev; +struct domain_device *dev, *n;struct asd_sas_port *port = phy->port;struct sas_ha_struct *sas_ha = phy->ha;struct sas_internal *si =to_sas_internal (sas_ha->core.shost->transportt);
@@ -60,7 +60,7 @@ static void sas_resume_port(struct asd_sas_phy *phy)* 1/ presume every device came back * 2/ force the next revalidation to check all expander phys */ -list_for_each_entry (dev, &port->dev_list, dev_list_node) { +list_for_each_entry_safe (dev, n, &port->dev_list, dev_list_node) {int i, rc; rc =sas_notify_lldd_dev_found (dev);
drivers/spi/spi-gpio.c +2 -6
@@ -382,7 +382,7 @@ static int spi_gpio_probe(struct platform_device *pdev)return -ENODEV ;#endif - master =spi_alloc_master (&pdev->dev,sizeof (*spi_gpio)); + master =devm_spi_alloc_master (&pdev->dev,sizeof (*spi_gpio));if (!master)return -ENOMEM ;
@@ -438,11 +438,7 @@ static int spi_gpio_probe(struct platform_device *pdev) } spi_gpio->bitbang.setup_transfer = spi_bitbang_setup_transfer; - status =spi_bitbang_start (&spi_gpio->bitbang); -if (status) -spi_master_put (master); - -return status; +return spi_bitbang_start (&spi_gpio->bitbang); }static int spi_gpio_remove (struct platform_device *pdev)
drivers/staging/emxx_udc/emxx_udc.c +2 -2
@@ -2148,7 +2148,7 @@ static int _nbu2ss_nuke(struct nbu2ss_udc *udc, struct nbu2ss_ep *ep, int status) { -struct nbu2ss_req *req; +struct nbu2ss_req *req, *n;/* Endpoint Disable */ _nbu2ss_epn_exit (udc, ep);
@@ -2160,7 +2160,7 @@ static int _nbu2ss_nuke(struct nbu2ss_udc *udc,return 0 ;/* called with irqs blocked */ -list_for_each_entry (req, &ep->queue, queue) { +list_for_each_entry_safe (req, n, &ep->queue, queue) {_nbu2ss_ep_done (ep, req, status); }
drivers/staging/iio/cdc/ad7746.c +0 -1
@@ -703,7 +703,6 @@ static int ad7746_probe(struct i2c_client *client, indio_dev->num_channels =ARRAY_SIZE (ad7746_channels); else indio_dev->num_channels = ARRAY_SIZE(ad7746_channels) - 2; - indio_dev->num_channels =ARRAY_SIZE (ad7746_channels); indio_dev->modes =INDIO_DIRECT_MODE ;if (pdata) {
drivers/staging/mt7621-spi/spi-mt7621.c +7 -3
@@ -452,7 +452,7 @@ static int mt7621_spi_probe(struct platform_device *pdev)if (status)return status; - master =spi_alloc_master (&pdev->dev,sizeof (*rs)); + master =devm_spi_alloc_master (&pdev->dev,sizeof (*rs));if (master ==NULL ) {dev_info (&pdev->dev,"master allocation failed\n" );clk_disable_unprepare (clk);
@@ -487,7 +487,11 @@ static int mt7621_spi_probe(struct platform_device *pdev)mt7621_spi_reset (rs,0 ); -return spi_register_master (master); + ret =spi_register_master (master); +if (ret) +clk_disable_unprepare (clk); + +return ret; }static int mt7621_spi_remove (struct platform_device *pdev)
@@ -498,8 +502,8 @@ static int mt7621_spi_remove(struct platform_device *pdev) master =dev_get_drvdata (&pdev->dev); rs =spi_master_get_devdata (master); -clk_disable (rs->clk);spi_unregister_master (master); +clk_disable_unprepare (rs->clk);return 0 ; }
drivers/thunderbolt/dma_port.c +6 -5
@@ -367,15 +367,15 @@ int dma_port_flash_read(struct tb_dma_port *dma, unsigned int address, void *buf, size_t size) {unsigned int retries =DMA_PORT_RETRIES ; -unsigned int offset; - - offset = address &3 ; - address = address & ~3 ; do { - u32 nbytes = min_t(u32, size, MAIL_DATA_DWORDS * 4); + unsigned int offset; + size_t nbytes; int ret; + offset = address & 3; + nbytes = min_t(size_t, size + offset, MAIL_DATA_DWORDS * 4); + ret = dma_port_flash_read_block(dma, address, dma->buf, ALIGN(nbytes, 4)); if (ret) {
@@ -387,6 +387,7 @@ int dma_port_flash_read(struct tb_dma_port *dma, unsigned int address,return ret; } + nbytes -= offset;memcpy (buf, dma->buf + offset, nbytes); size -= nbytes;
drivers/tty/serial/max310x.c +4 -2
@@ -1480,10 +1480,12 @@ static int __init max310x_uart_init(void)return ret;#ifdef CONFIG_SPI_MASTER -spi_register_driver (&max310x_spi_driver); + ret =spi_register_driver (&max310x_spi_driver); +if (ret) +uart_unregister_driver (&max310x_uart);#endif -return 0 ; +return ret; }module_init (max310x_uart_init);
drivers/tty/serial/rp2.c +17 -35
99 lines not on this page · raw message
drivers/tty/serial/sh-sci.c +2 -2
@@ -1026,10 +1026,10 @@ static int scif_set_rtrg(struct uart_port *port, int rx_trig) {unsigned int bits; +if (rx_trig >= port->fifosize) + rx_trig = port->fifosize -1 ;if (rx_trig <1 ) rx_trig =1 ; -if (rx_trig >= port->fifosize) - rx_trig = port->fifosize;/* HSCIF can be set to an arbitrary level. */ if (sci_getreg (port,HSRTRGR )->size) {
drivers/usb/core/devio.c +8 -3
@@ -1189,7 +1189,12 @@ static int proc_bulk(struct usb_dev_state *ps, void __user *arg) ret =usbfs_increase_memory_usage (len1 +sizeof (struct urb ));if (ret)return ret; - tbuf =kmalloc (len1,GFP_KERNEL ); + +/* +* len1 can be almost arbitrarily large. Don't WARN if it's +* too big, just fail the request. +*/ + tbuf =kmalloc (len1,GFP_KERNEL | __GFP_NOWARN);if (!tbuf) { ret = -ENOMEM ; goto done;
@@ -1631,7 +1636,7 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurbif (num_sgs) { as->urb->sg =kmalloc_array (num_sgs,sizeof (struct scatterlist ), -GFP_KERNEL ); +GFP_KERNEL | __GFP_NOWARN);if (!as->urb->sg) { ret = -ENOMEM ; goto error;
@@ -1666,7 +1671,7 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb (uurb_start - as->usbm->vm_start); }else { as->urb->transfer_buffer =kmalloc (uurb->buffer_length, -GFP_KERNEL ); +GFP_KERNEL | __GFP_NOWARN);if (!as->urb->transfer_buffer) { ret = -ENOMEM ; goto error;
drivers/usb/core/hub.h +4 -2
@@ -146,8 +146,10 @@ static inline unsigned hub_power_on_good_delay(struct usb_hub *hub) {unsigned delay = hub->descriptor->bPwrOn2PwrGood *2 ; -/* Wait at least 100 msec for power to become stable */ -return max (delay,100U ); +if (!hub->hdev->parent)/* root hub */ +return delay; +else /* Wait at least 100 msec for power to become stable */ +return max (delay,100U ); } static inline int hub_port_debounce_be_connected(struct usb_hub *hub,
drivers/usb/dwc3/gadget.c +11 -6
@@ -1162,6 +1162,7 @@ static void dwc3_prepare_one_trb_sg(struct dwc3_ep *dep, req->start_sg =sg_next (s); req->num_queued_sgs++; + req->num_pending_sgs--;/* * The number of pending SG entries may not correspond to the
@@ -1169,7 +1170,7 @@ static void dwc3_prepare_one_trb_sg(struct dwc3_ep *dep,* don't include unused SG entries. */ if (length ==0 ) { - req->num_pending_sgs -= req->request.num_mapped_sgs - req->num_queued_sgs; + req->num_pending_sgs =0 ;break ; }
@@ -1834,6 +1835,10 @@ static void dwc3_gadget_enable_irq(struct dwc3 *dwc)if (dwc->revision <DWC3_REVISION_250A ) reg |=DWC3_DEVTEN_ULSTCNGEN ; +/* On 2.30a and above this bit enables U3/L2-L1 Suspend Events */ +if (dwc->revision >=DWC3_REVISION_230A ) + reg |=DWC3_DEVTEN_EOPFEN ; +dwc3_writel (dwc->regs,DWC3_DEVTEN , reg); }
@@ -2357,15 +2362,15 @@ static int dwc3_gadget_ep_reclaim_trb_sg(struct dwc3_ep *dep,struct dwc3_trb *trb = &dep->trb_pool[dep->trb_dequeue];struct scatterlist *sg = req->sg;struct scatterlist *s; -unsigned int pending = req->num_pending_sgs; +unsigned int num_queued = req->num_queued_sgs;unsigned int i;int ret =0 ; -for_each_sg (sg, s, pending, i) { +for_each_sg (sg, s, num_queued, i) { trb = &dep->trb_pool[dep->trb_dequeue]; req->sg =sg_next (s); - req->num_pending_sgs--; + req->num_queued_sgs--; ret =dwc3_gadget_ep_reclaim_completed_trb (dep, req, trb, event, status, true);
@@ -2388,7 +2393,7 @@ static int dwc3_gadget_ep_reclaim_trb_linear(struct dwc3_ep *dep,static bool dwc3_gadget_ep_request_completed (struct dwc3_request *req) { -return req->num_pending_sgs ==0 ; +return req->num_pending_sgs ==0 && req->num_queued_sgs ==0 ; } static int dwc3_gadget_ep_cleanup_completed_request(struct dwc3_ep *dep,
@@ -2397,7 +2402,7 @@ static int dwc3_gadget_ep_cleanup_completed_request(struct dwc3_ep *dep, {int ret; -if (req->num_pending_sgs) +if (req->request.num_mapped_sgs) ret =dwc3_gadget_ep_reclaim_trb_sg (dep, req, event, status);else
drivers/usb/gadget/udc/renesas_usb3.c +3 -2
@@ -1466,7 +1466,7 @@ static void usb3_start_pipen(struct renesas_usb3_ep *usb3_ep, struct renesas_usb3_request *usb3_req) {struct renesas_usb3 *usb3 =usb3_ep_to_usb3 (usb3_ep); -struct renesas_usb3_request *usb3_req_first =usb3_get_request (usb3_ep); +struct renesas_usb3_request *usb3_req_first;unsigned long flags;int ret = -EAGAIN ;u32 enable_bits =0 ;
@@ -1474,7 +1474,8 @@ static void usb3_start_pipen(struct renesas_usb3_ep *usb3_ep,spin_lock_irqsave (&usb3->lock, flags);if (usb3_ep->halt || usb3_ep->started) goto out; -if (usb3_req != usb3_req_first) + usb3_req_first =__usb3_get_request (usb3_ep); +if (!usb3_req_first || usb3_req != usb3_req_first) goto out;if (usb3_pn_change (usb3, usb3_ep->num) <0 )
drivers/usb/misc/trancevibrator.c +2 -2
@@ -59,9 +59,9 @@ static ssize_t speed_store(struct device *dev, struct device_attribute *attr,/* Set speed */ retval =usb_control_msg (tv->udev,usb_sndctrlpipe (tv->udev,0 ),0x01 ,/* vendor request: set speed */ -USB_DIR_IN |USB_TYPE_VENDOR |USB_RECIP_OTHER , +USB_DIR_OUT |USB_TYPE_VENDOR |USB_RECIP_OTHER , tv->speed,/* speed value */ -0 ,NULL ,0 ,USB_CTRL_GET_TIMEOUT ); +0 ,NULL ,0 ,USB_CTRL_SET_TIMEOUT );if (retval) { tv->speed = old;dev_dbg (&tv->udev->dev,"retval = %d\n" , retval);
drivers/usb/misc/uss720.c +1 -0
@@ -736,6 +736,7 @@ static int uss720_probe(struct usb_interface *intf,parport_announce_port (pp);usb_set_intfdata (intf, pp); +usb_put_dev (usbdev);return 0 ; probe_abort:
drivers/usb/serial/ftdi_sio.c +3 -0
@@ -1024,6 +1024,9 @@ static const struct usb_device_id id_table_combined[] = {/* Sienna devices */ { USB_DEVICE(FTDI_VID, FTDI_SIENNA_PID) }, { USB_DEVICE(ECHELON_VID, ECHELON_U20_PID) }, +/* IDS GmbH devices */ + { USB_DEVICE(IDS_VID, IDS_SI31A_PID) }, + { USB_DEVICE(IDS_VID, IDS_CM31A_PID) },/* U-Blox devices */ { USB_DEVICE(UBLOX_VID, UBLOX_C099F9P_ZED_PID) }, { USB_DEVICE(UBLOX_VID, UBLOX_C099F9P_ODIN_PID) },
drivers/usb/serial/ftdi_sio_ids.h +7 -0
@@ -1567,6 +1567,13 @@#define UNJO_VID 0x22B7#define UNJO_ISODEBUG_V1_PID 0x150D +/* +* IDS GmbH +*/ +#define IDS_VID 0x2CAF +#define IDS_SI31A_PID 0x13A2 +#define IDS_CM31A_PID 0x13A3 +/* * U-Blox products (http://www.u-blox.com). */
drivers/usb/serial/option.c +4 -0
@@ -1240,6 +1240,10 @@ static const struct usb_device_id option_ids[] = { .driver_info = NCTRL(0) | RSVD(1) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1901, 0xff), /* Telit LN940 (MBIM) */ .driver_info = NCTRL(0) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x7010, 0xff), /* Telit LE910-S1 (RNDIS) */ + .driver_info = NCTRL(2) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x7011, 0xff), /* Telit LE910-S1 (ECM) */ + .driver_info = NCTRL(2) }, { USB_DEVICE(TELIT_VENDOR_ID, 0x9010), /* Telit SBL FN980 flashing device */ .driver_info = NCTRL(0) | ZLP }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */
drivers/usb/serial/pl2303.c +1 -0
@@ -107,6 +107,7 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) }, { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) }, { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) }, + { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530GC_PRODUCT_ID) }, { USB_DEVICE(SMART_VENDOR_ID, SMART_PRODUCT_ID) }, { USB_DEVICE(AT_VENDOR_ID, AT_VTKIT3_PRODUCT_ID) }, { } /* Terminating entry */
drivers/usb/serial/pl2303.h +1 -0
@@ -152,6 +152,7 @@/* ADLINK ND-6530 RS232,RS485 and RS422 adapter */ #define ADLINK_VENDOR_ID 0x0b63#define ADLINK_ND6530_PRODUCT_ID 0x6530 +#define ADLINK_ND6530GC_PRODUCT_ID 0x653a/* SMART USB Serial Adapter */ #define SMART_VENDOR_ID 0x0b8c
drivers/usb/serial/ti_usb_3410_5052.c +3 -0
@@ -37,6 +37,7 @@/* Vendor and product ids */ #define TI_VENDOR_ID 0x0451#define IBM_VENDOR_ID 0x04b3 +#define STARTECH_VENDOR_ID 0x14b0#define TI_3410_PRODUCT_ID 0x3410#define IBM_4543_PRODUCT_ID 0x4543#define IBM_454B_PRODUCT_ID 0x454b
@@ -374,6 +375,7 @@ static const struct usb_device_id ti_id_table_3410[] = { { USB_DEVICE(MXU1_VENDOR_ID, MXU1_1131_PRODUCT_ID) }, { USB_DEVICE(MXU1_VENDOR_ID, MXU1_1150_PRODUCT_ID) }, { USB_DEVICE(MXU1_VENDOR_ID, MXU1_1151_PRODUCT_ID) }, + { USB_DEVICE(STARTECH_VENDOR_ID, TI_3410_PRODUCT_ID) }, { } /* terminator */ };
@@ -412,6 +414,7 @@ static const struct usb_device_id ti_id_table_combined[] = { { USB_DEVICE(MXU1_VENDOR_ID, MXU1_1131_PRODUCT_ID) }, { USB_DEVICE(MXU1_VENDOR_ID, MXU1_1150_PRODUCT_ID) }, { USB_DEVICE(MXU1_VENDOR_ID, MXU1_1151_PRODUCT_ID) }, + { USB_DEVICE(STARTECH_VENDOR_ID, TI_3410_PRODUCT_ID) }, { } /* terminator */ };
fs/btrfs/tree-log.c +0 -2
@@ -1770,8 +1770,6 @@ static noinline int link_to_fixup_dir(struct btrfs_trans_handle *trans, ret =btrfs_update_inode (trans, root, inode); }else if (ret == -EEXIST ) { ret =0 ; - }else { -BUG ();/* Logic Error */ }iput (inode);
fs/cifs/smb2pdu.c +10 -3
@@ -791,6 +791,13 @@ SMB2_negotiate(const unsigned int xid, struct cifs_ses *ses)/* Internal types */ server->capabilities |=SMB2_NT_FIND |SMB2_LARGE_FILES ; +/* +* SMB3.0 supports only 1 cipher and doesn't have a encryption neg context +* Set the cipher type manually. +*/ +if (server->dialect ==SMB30_PROT_ID && (server->capabilities &SMB2_GLOBAL_CAP_ENCRYPTION )) + server->cipher_type =SMB2_ENCRYPTION_AES128_CCM ; + security_blob =smb2_get_data_area_len (&blob_offset, &blob_length, (struct smb2_sync_hdr *)rsp);/*
@@ -3117,10 +3124,10 @@ smb2_new_read_req(void **buf, unsigned int *total_len,* Related requests use info from previous read request * in chain. */ - shdr->SessionId =0xFFFFFFFF ; + shdr->SessionId =0xFFFFFFFFFFFFFFFF ; shdr->TreeId =0xFFFFFFFF ; - req->PersistentFileId =0xFFFFFFFF ; - req->VolatileFileId =0xFFFFFFFF ; + req->PersistentFileId =0xFFFFFFFFFFFFFFFF ; + req->VolatileFileId =0xFFFFFFFFFFFFFFFF ; } }if (remaining_bytes > io_parms->length)
fs/hugetlbfs/inode.c +2 -2
@@ -426,7 +426,7 @@ static void remove_inode_hugepages(struct inode *inode, loff_t lstart,u32 hash; index = page->index; - hash =hugetlb_fault_mutex_hash (h, mapping, index,0 ); + hash =hugetlb_fault_mutex_hash (h, mapping, index);mutex_lock (&hugetlb_fault_mutex_table[hash]);/*
@@ -623,7 +623,7 @@ static long hugetlbfs_fallocate(struct file *file, int mode, loff_t offset, addr = index * hpage_size;/* mutex taken here, fault path and hole punch */ - hash =hugetlb_fault_mutex_hash (h, mapping, index, addr); + hash =hugetlb_fault_mutex_hash (h, mapping, index);mutex_lock (&hugetlb_fault_mutex_table[hash]);/* See if already present in mapping to avoid alloc/free */
fs/nfs/filelayout/filelayout.c +1 -1
@@ -717,7 +717,7 @@ filelayout_decode_layout(struct pnfs_layout_hdr *flo,if (unlikely (!p)) goto out_err; fl->fh_array[i]->size =be32_to_cpup (p++); -if (sizeof (struct nfs_fh ) < fl->fh_array[i]->size) { +if (fl->fh_array[i]->size >NFS_MAXFHSIZE ) {printk (KERN_ERR "NFS: Too big fh %d received %d\n" , i, fl->fh_array[i]->size); goto out_err;
fs/nfs/nfs4file.c +1 -1
@@ -148,7 +148,7 @@ static loff_t nfs4_file_llseek(struct file *filep, loff_t offset, int whence)case SEEK_HOLE :case SEEK_DATA : ret =nfs42_proc_llseek (filep, offset, whence); -if (ret != -ENOTSUPP ) +if (ret != -EOPNOTSUPP )return ret;/* Fall through */ default :
fs/nfs/pagelist.c +5 -7
@@ -987,17 +987,16 @@ static void nfs_pageio_doio(struct nfs_pageio_descriptor *desc) {struct nfs_pgio_mirror *mirror =nfs_pgio_current_mirror (desc); -if (!list_empty (&mirror->pg_list)) {int error = desc->pg_ops->pg_doio (desc);if (error <0 ) desc->pg_error = error; -else +if (list_empty (&mirror->pg_list)) { mirror->pg_bytes_written += mirror->pg_count; - } -if (list_empty (&mirror->pg_list)) { - mirror->pg_count =0 ; - mirror->pg_base =0 ; + mirror->pg_count =0 ; + mirror->pg_base =0 ; + mirror->pg_recoalesce =0 ; + } } }
@@ -1095,7 +1094,6 @@ static int nfs_do_recoalesce(struct nfs_pageio_descriptor *desc) do { list_splice_init(&mirror->pg_list, &head); - mirror->pg_bytes_written -= mirror->pg_count; mirror->pg_count = 0; mirror->pg_base = 0; mirror->pg_recoalesce = 0;
fs/nfs/pnfs.c +7 -8
@@ -1268,6 +1268,11 @@ _pnfs_return_layout(struct inode *ino) {struct pnfs_layout_hdr *lo =NULL ;struct nfs_inode *nfsi =NFS_I (ino); +struct pnfs_layout_range range = { + .iomode =IOMODE_ANY , + .offset =0 , + .length =NFS4_MAX_UINT64 , + };LIST_HEAD (tmp_list);nfs4_stateid stateid;int status =0 ;
@@ -1294,16 +1299,10 @@ _pnfs_return_layout(struct inode *ino) } valid_layout =pnfs_layout_is_valid (lo);pnfs_clear_layoutcommit (ino, &tmp_list); -pnfs_mark_matching_lsegs_return (lo, &tmp_list,NULL ,0 ); +pnfs_mark_matching_lsegs_return (lo, &tmp_list, &range,0 ); -if (NFS_SERVER (ino)->pnfs_curr_ld->return_range) { -struct pnfs_layout_range range = { - .iomode =IOMODE_ANY , - .offset =0 , - .length =NFS4_MAX_UINT64 , - }; +if (NFS_SERVER (ino)->pnfs_curr_ld->return_range)NFS_SERVER (ino)->pnfs_curr_ld->return_range (lo, &range); - }/* Don't send a LAYOUTRETURN if list was initially empty */ if (!test_bit(NFS_LAYOUT_RETURN_REQUESTED, &lo->plh_flags) ||
fs/proc/base.c +4 -0
@@ -2564,6 +2564,10 @@ static ssize_t proc_pid_attr_write(struct file * file, const char __user * buf,void *page;int rv; +/* A task may only write when it was the opener. */ +if (file->f_cred !=current_real_cred ()) +return -EPERM ; +rcu_read_lock (); task =pid_task (proc_pid (inode),PIDTYPE_PID );if (!task) {
include/linux/bpf_verifier.h +3 -2
@@ -144,10 +144,11 @@ struct bpf_verifier_state_list { };/* Possible states for alu_state member. */ -#define BPF_ALU_SANITIZE_SRC 1U -#define BPF_ALU_SANITIZE_DST 2U +#define BPF_ALU_SANITIZE_SRC (1U << 0) +#define BPF_ALU_SANITIZE_DST (1U << 1)#define BPF_ALU_NEG_VALUE (1U << 2)#define BPF_ALU_NON_POINTER (1U << 3) +#define BPF_ALU_IMMEDIATE (1U << 4)#define BPF_ALU_SANITIZE (BPF_ALU_SANITIZE_SRC | \ BPF_ALU_SANITIZE_DST)
include/linux/hugetlb.h +1 -1
@@ -124,7 +124,7 @@ void free_huge_page(struct page *page);void hugetlb_fix_reserve_counts (struct inode *inode);extern struct mutex *hugetlb_fault_mutex_table;u32 hugetlb_fault_mutex_hash (struct hstate *h,struct address_space *mapping, -pgoff_t idx,unsigned long address); +pgoff_t idx);pte_t *huge_pmd_share (struct mm_struct *mm,unsigned long addr,pud_t *pud);
include/net/cfg80211.h +2 -2
@@ -4605,7 +4605,7 @@ unsigned int ieee80211_get_mesh_hdrlen(struct ieee80211s_hdr *meshhdr);*/ int ieee80211_data_to_8023_exthdr (struct sk_buff *skb,struct ethhdr *ehdr,const u8 *addr,enum nl80211_iftype iftype, -u8 data_offset); +u8 data_offset,bool is_amsdu);/** * ieee80211_data_to_8023 - convert an 802.11 data frame to 802.3
@@ -4617,7 +4617,7 @@ int ieee80211_data_to_8023_exthdr(struct sk_buff *skb, struct ethhdr *ehdr,static inline int ieee80211_data_to_8023 (struct sk_buff *skb,const u8 *addr,enum nl80211_iftype iftype) { -return ieee80211_data_to_8023_exthdr (skb,NULL , addr, iftype,0 ); +return ieee80211_data_to_8023_exthdr (skb,NULL , addr, iftype,0 , false); }/**
include/net/nfc/nci_core.h +1 -0
@@ -310,6 +310,7 @@ int nci_nfcc_loopback(struct nci_dev *ndev, void *data, size_t data_len, struct sk_buff **resp);struct nci_hci_dev *nci_hci_allocate (struct nci_dev *ndev); +void nci_hci_deallocate (struct nci_dev *ndev);int nci_hci_send_event (struct nci_dev *ndev,u8 gate,u8 event,const u8 *param,size_t param_len); int nci_hci_send_cmd(struct nci_dev *ndev, u8 gate,
kernel/bpf/verifier.c +205 -95
448 lines not on this page · raw message
mm/hugetlb.c +5 -5
@@ -3862,7 +3862,7 @@ static vm_fault_t hugetlb_no_page(struct mm_struct *mm,* handling userfault. Reacquire after handling * fault to make calling code simpler. */ - hash =hugetlb_fault_mutex_hash (h, mapping, idx, haddr); + hash =hugetlb_fault_mutex_hash (h, mapping, idx);mutex_unlock (&hugetlb_fault_mutex_table[hash]); ret =handle_userfault (&vmf,VM_UFFD_MISSING );mutex_lock (&hugetlb_fault_mutex_table[hash]);
@@ -3971,7 +3971,7 @@ static vm_fault_t hugetlb_no_page(struct mm_struct *mm,#ifdef CONFIG_SMP u32 hugetlb_fault_mutex_hash (struct hstate *h,struct address_space *mapping, -pgoff_t idx,unsigned long address) +pgoff_t idx) {unsigned long key[2 ];u32 hash;
@@ -3979,7 +3979,7 @@ u32 hugetlb_fault_mutex_hash(struct hstate *h, struct address_space *mapping, key[0 ] = (unsigned long ) mapping; key[1 ] = idx; - hash =jhash2 ((u32 *)&key,sizeof (key)/sizeof (u32),0 ); + hash =jhash2 ((u32 *)&key,sizeof (key)/(sizeof (u32)),0 );return hash & (num_fault_mutexes -1 ); }
@@ -3989,7 +3989,7 @@ u32 hugetlb_fault_mutex_hash(struct hstate *h, struct address_space *mapping,* return 0 and avoid the hashing overhead. */ u32 hugetlb_fault_mutex_hash (struct hstate *h,struct address_space *mapping, -pgoff_t idx,unsigned long address) +pgoff_t idx) {return 0 ; }
@@ -4033,7 +4033,7 @@ vm_fault_t hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,* get spurious allocation failures if two CPUs race to instantiate * the same page in the page cache. */ - hash =hugetlb_fault_mutex_hash (h, mapping, idx, haddr); + hash =hugetlb_fault_mutex_hash (h, mapping, idx);mutex_lock (&hugetlb_fault_mutex_table[hash]); entry =huge_ptep_get (ptep);
mm/userfaultfd.c +1 -1
@@ -271,7 +271,7 @@ static __always_inline ssize_t __mcopy_atomic_hugetlb(struct mm_struct *dst_mm,*/ idx =linear_page_index (dst_vma, dst_addr); mapping = dst_vma->vm_file->f_mapping; - hash =hugetlb_fault_mutex_hash (h, mapping, idx, dst_addr); + hash =hugetlb_fault_mutex_hash (h, mapping, idx);mutex_lock (&hugetlb_fault_mutex_table[hash]); err = -ENOMEM ;
mm/vmstat.c +3 -0
@@ -1384,6 +1384,9 @@ static void pagetypeinfo_showfree_print(struct seq_file *m,list_for_each (curr, &area->free_list[mtype]) freecount++;seq_printf (m,"%6lu " , freecount); +spin_unlock_irq (&zone->lock); +cond_resched (); +spin_lock_irq (&zone->lock); }seq_putc (m,'\n' ); }
net/bluetooth/cmtp/core.c +5 -0
@@ -391,6 +391,11 @@ int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock)if (!(session->flags &BIT (CMTP_LOOPBACK ))) { err =cmtp_attach_device (session);if (err <0 ) { +/* Caller will call fput in case of failure, and so +* will cmtp_session kthread. +*/ +get_file (session->sock->file); +atomic_inc (&session->terminate);wake_up_interruptible (sk_sleep (session->sock->sk));up_write (&cmtp_session_sem);
net/core/filter.c +1 -0
@@ -3020,6 +3020,7 @@ static inline int __bpf_skb_change_head(struct sk_buff *skb, u32 head_room,__skb_push (skb, head_room);memset (skb->data,0 , head_room);skb_reset_mac_header (skb); +skb_reset_mac_len (skb); }return ret;
net/dsa/master.c +3 -2
@@ -87,8 +87,7 @@ static void dsa_master_get_strings(struct net_device *dev, uint32_t stringset,struct dsa_switch *ds = cpu_dp->ds;int port = cpu_dp->index;int len =ETH_GSTRING_LEN ; -int mcount =0 , count; -unsigned int i; +int mcount =0 , count, i;uint8_t pfx[4 ];uint8_t *ndata;
@@ -118,6 +117,8 @@ static void dsa_master_get_strings(struct net_device *dev, uint32_t stringset,*/ ds->ops->get_strings (ds, port, stringset, ndata); count = ds->ops->get_sset_count (ds, port, stringset); +if (count <0 ) +return ;for (i =0 ; i < count; i++) {memmove (ndata + (i * len +sizeof (pfx)), ndata + i * len, len -sizeof (pfx));
net/dsa/slave.c +7 -5
@@ -598,13 +598,15 @@ static int dsa_slave_get_sset_count(struct net_device *dev, int sset)struct dsa_switch *ds = dp->ds;if (sset ==ETH_SS_STATS ) { -int count; +int count =0 ; - count =4 ; -if (ds->ops->get_sset_count) - count += ds->ops->get_sset_count (ds, dp->index, sset); +if (ds->ops->get_sset_count) { + count = ds->ops->get_sset_count (ds, dp->index, sset); +if (count <0 ) +return count; + } -return count; +return count +4 ; }return -EOPNOTSUPP ;
net/ipv6/mcast.c +0 -3
@@ -1606,10 +1606,7 @@ static struct sk_buff *mld_newpack(struct inet6_dev *idev, unsigned int mtu) IPV6_TLV_PADN, 0 };/* we assume size > sizeof(ra) here */ -/* limit our allocations to order-0 page */ - size =min_t (int, size,SKB_MAX_ORDER (0 ,0 )); skb =sock_alloc_send_skb (sk, size,1 , &err); -if (!skb)return NULL ;
net/ipv6/reassembly.c +3 -1
@@ -347,7 +347,7 @@ static int ipv6_frag_rcv(struct sk_buff *skb) hdr =ipv6_hdr (skb); fhdr = (struct frag_hdr *)skb_transport_header (skb); -if (!(fhdr->frag_off &htons (0xFFF9 ))) { +if (!(fhdr->frag_off &htons (IP6_OFFSET |IP6_MF ))) {/* It is not a fragmented frame */ skb->transport_header +=sizeof (struct frag_hdr ); __IP6_INC_STATS(net,
@@ -355,6 +355,8 @@ static int ipv6_frag_rcv(struct sk_buff *skb)IP6CB (skb)->nhoff = (u8 *)fhdr -skb_network_header (skb);IP6CB (skb)->flags |=IP6SKB_FRAGMENTED ; +IP6CB (skb)->frag_max_size =ntohs (hdr->payload_len) + +sizeof (struct ipv6hdr );return 1 ; }
net/mac80211/ieee80211_i.h +13 -23
@@ -53,12 +53,6 @@ struct ieee80211_local;#define IEEE80211_ENCRYPT_HEADROOM 8#define IEEE80211_ENCRYPT_TAILROOM 18 -/* IEEE 802.11 (Ch. 9.5 Defragmentation) requires support for concurrent -* reception of at least three fragmented frames. This limit can be increased -* by changing this define, at the cost of slower frame reassembly and -* increased memory use (about 2 kB of RAM per entry). */ -#define IEEE80211_FRAGMENT_MAX 4 -/* power level hasn't been configured (or set to automatic) */ #define IEEE80211_UNSET_POWER_LEVEL INT_MIN
@@ -91,18 +85,6 @@ extern const u8 ieee80211_ac_to_qos_mask[IEEE80211_NUM_ACS];#define IEEE80211_MAX_NAN_INSTANCE_ID 255 -struct ieee80211_fragment_entry { -struct sk_buff_head skb_list; -unsigned long first_frag_time; -u16 seq; -u16 extra_len; -u16 last_frag; -u8 rx_queue; -bool check_sequential_pn;/* needed for CCMP/GCMP */ -u8 last_pn[6 ];/* PN of the last fragment if CCMP was used */ -}; - -struct ieee80211_bss {u32 device_ts_beacon, device_ts_presp;
@@ -243,8 +225,15 @@ struct ieee80211_rx_data {*/ int security_idx; -u32 tkip_iv32; -u16 tkip_iv16; +union { +struct { +u32 iv32; +u16 iv16; + } tkip; +struct { +u8 pn[IEEE80211_CCMP_PN_LEN ]; + } ccm_gcm; + }; };struct ieee80211_csa_settings {
@@ -884,9 +873,7 @@ struct ieee80211_sub_if_data {char name[IFNAMSIZ ]; -/* Fragment table for host-based reassembly */ -struct ieee80211_fragment_entry fragments[IEEE80211_FRAGMENT_MAX ]; -unsigned int fragment_next; +struct ieee80211_fragment_cache frags;/* TID bitmap for NoAck policy */ u16 noack_map;
@@ -2204,4 +2191,7 @@ extern const struct ethtool_ops ieee80211_ethtool_ops;#define debug_noinline#endif +void ieee80211_init_frag_cache (struct ieee80211_fragment_cache *cache); +void ieee80211_destroy_frag_cache (struct ieee80211_fragment_cache *cache); +#endif /* IEEE80211_I_H */
net/mac80211/iface.c +3 -8
@@ -7,7 +7,7 @@* Copyright 2008, Johannes Berg <[email protected]> * Copyright 2013-2014 Intel Mobile Communications GmbH * Copyright (c) 2016 Intel Deutschland GmbH -* Copyright (C) 2018 Intel Corporation +* Copyright (C) 2018-2021 Intel Corporation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as
@@ -1111,16 +1111,12 @@ static void ieee80211_set_multicast_list(struct net_device *dev)*/ static void ieee80211_teardown_sdata (struct ieee80211_sub_if_data *sdata) { -int i; -/* free extra data */ ieee80211_free_keys (sdata, false);ieee80211_debugfs_remove_netdev (sdata); -for (i =0 ; i <IEEE80211_FRAGMENT_MAX ; i++) -__skb_queue_purge (&sdata->fragments[i].skb_list); - sdata->fragment_next =0 ; +ieee80211_destroy_frag_cache (&sdata->frags);if (ieee80211_vif_is_mesh (&sdata->vif))ieee80211_mesh_teardown_sdata (sdata);
@@ -1832,8 +1828,7 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name, sdata->wdev.wiphy = local->hw.wiphy; sdata->local = local; -for (i =0 ; i <IEEE80211_FRAGMENT_MAX ; i++) -skb_queue_head_init (&sdata->fragments[i].skb_list); +ieee80211_init_frag_cache (&sdata->frags);INIT_LIST_HEAD (&sdata->key_list);
net/mac80211/key.c +7 -0
@@ -653,6 +653,7 @@ int ieee80211_key_link(struct ieee80211_key *key,struct ieee80211_sub_if_data *sdata, struct sta_info *sta) { + static atomic_t key_color = ATOMIC_INIT(0);struct ieee80211_local *local = sdata->local;struct ieee80211_key *old_key;int idx = key->conf.keyidx;
@@ -688,6 +689,12 @@ int ieee80211_key_link(struct ieee80211_key *key, key->sdata = sdata; key->sta = sta; +/* +* Assign a unique ID to every key so we can easily prevent mixed +* key and fragment cache attacks. +*/ + key->color =atomic_inc_return (&key_color); +increment_tailroom_need_count (sdata);ieee80211_key_replace (sdata, sta, pairwise, old_key, key);
net/mac80211/key.h +2 -0
@@ -127,6 +127,8 @@ struct ieee80211_key { } debugfs;#endif +unsigned int color; +/* * key config, must be last because it contains key * material as variable length member
net/mac80211/rx.c +117 -33
283 lines not on this page · raw message
net/mac80211/sta_info.c +5 -1
@@ -3,7 +3,7 @@* Copyright 2006-2007 Jiri Benc <[email protected]> * Copyright 2013-2014 Intel Mobile Communications GmbH * Copyright (C) 2015 - 2017 Intel Deutschland GmbH -* Copyright (C) 2018-2020 Intel Corporation +* Copyright (C) 2018-2021 Intel Corporation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as
@@ -369,6 +369,8 @@ struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata,u64_stats_init (&sta->rx_stats.syncp); +ieee80211_init_frag_cache (&sta->frags); + sta->sta_state =IEEE80211_STA_NONE ;/* Mark TID as unreserved */
@@ -1032,6 +1034,8 @@ static void __sta_info_destroy_part2(struct sta_info *sta)rate_control_remove_sta_debugfs (sta);ieee80211_sta_debugfs_remove (sta); +ieee80211_destroy_frag_cache (&sta->frags); +cleanup_single_sta (sta); }
net/mac80211/sta_info.h +32 -0
@@ -2,6 +2,7 @@* Copyright 2002-2005, Devicescape Software, Inc. * Copyright 2013-2014 Intel Mobile Communications GmbH * Copyright(c) 2015-2017 Intel Deutschland GmbH +* Copyright(c) 2020-2021 Intel Corporation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as
@@ -411,6 +412,34 @@ struct ieee80211_sta_rx_stats {u64 msdu[IEEE80211_NUM_TIDS +1 ]; }; +/* +* IEEE 802.11-2016 (10.6 "Defragmentation") recommends support for "concurrent +* reception of at least one MSDU per access category per associated STA" +* on APs, or "at least one MSDU per access category" on other interface types. +* +* This limit can be increased by changing this define, at the cost of slower +* frame reassembly and increased memory use while fragments are pending. +*/ +#define IEEE80211_FRAGMENT_MAX 4 + +struct ieee80211_fragment_entry { +struct sk_buff_head skb_list; +unsigned long first_frag_time; +u16 seq; +u16 extra_len; +u16 last_frag; +u8 rx_queue; +u8 check_sequential_pn:1 ,/* needed for CCMP/GCMP */ + is_protected:1 ; +u8 last_pn[6 ];/* PN of the last fragment if CCMP was used */ +unsigned int key_color; +}; + +struct ieee80211_fragment_cache { +struct ieee80211_fragment_entry entries[IEEE80211_FRAGMENT_MAX ]; +unsigned int next; +}; +/* * The bandwidth threshold below which the per-station CoDel parameters will be * scaled to be more lenient (to prevent starvation of slow stations). This
@@ -482,6 +511,7 @@ struct ieee80211_sta_rx_stats {* @pcpu_rx_stats: per-CPU RX statistics, assigned only if the driver needs * this (by advertising the USES_RSS hw flag) * @status_stats: TX status statistics +* @frags: fragment cache */ struct sta_info {/* General information, mostly static */
@@ -583,6 +613,8 @@ struct sta_info {struct cfg80211_chan_def tdls_chandef; +struct ieee80211_fragment_cache frags; +/* keep last! */ struct ieee80211_sta sta; };
net/mac80211/wpa.c +9 -4
@@ -2,6 +2,7 @@* Copyright 2002-2004, Instant802 Networks, Inc. * Copyright 2008, Jouni Malinen <[email protected]> * Copyright (C) 2016-2017 Intel Deutschland GmbH +* Copyright (C) 2020-2021 Intel Corporation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as
@@ -170,8 +171,8 @@ ieee80211_rx_h_michael_mic_verify(struct ieee80211_rx_data *rx) update_iv:/* update IV in key information to be able to detect replays */ - rx->key->u.tkip.rx[rx->security_idx].iv32 = rx->tkip_iv32; - rx->key->u.tkip.rx[rx->security_idx].iv16 = rx->tkip_iv16; + rx->key->u.tkip.rx[rx->security_idx].iv32 = rx->tkip.iv32; + rx->key->u.tkip.rx[rx->security_idx].iv16 = rx->tkip.iv16;return RX_CONTINUE ;
@@ -297,8 +298,8 @@ ieee80211_crypto_tkip_decrypt(struct ieee80211_rx_data *rx) key, skb->data + hdrlen, skb->len - hdrlen, rx->sta->sta.addr, hdr->addr1, hwaccel, rx->security_idx, - &rx->tkip_iv32, - &rx->tkip_iv16); + &rx->tkip.iv32, + &rx->tkip.iv16);if (res !=TKIP_DECRYPT_OK )return RX_DROP_UNUSABLE ;
@@ -556,6 +557,8 @@ ieee80211_crypto_ccmp_decrypt(struct ieee80211_rx_data *rx, }memcpy (key->u.ccmp.rx_pn[queue], pn,IEEE80211_CCMP_PN_LEN ); +if (unlikely (ieee80211_is_frag (hdr))) +memcpy (rx->ccm_gcm.pn, pn,IEEE80211_CCMP_PN_LEN ); }/* Remove CCMP header and MIC */
@@ -784,6 +787,8 @@ ieee80211_crypto_gcmp_decrypt(struct ieee80211_rx_data *rx) }memcpy (key->u.gcmp.rx_pn[queue], pn,IEEE80211_GCMP_PN_LEN ); +if (unlikely (ieee80211_is_frag (hdr))) +memcpy (rx->ccm_gcm.pn, pn,IEEE80211_CCMP_PN_LEN ); }/* Remove GCMP header and MIC */
net/nfc/nci/core.c +1 -0
@@ -1187,6 +1187,7 @@ EXPORT_SYMBOL(nci_allocate_device);void nci_free_device (struct nci_dev *ndev) {nfc_free_device (ndev->nfc_dev); +nci_hci_deallocate (ndev);kfree (ndev); }EXPORT_SYMBOL (nci_free_device);
net/nfc/nci/hci.c +5 -0
@@ -807,3 +807,8 @@ struct nci_hci_dev *nci_hci_allocate(struct nci_dev *ndev)return hdev; } + +void nci_hci_deallocate (struct nci_dev *ndev) +{ +kfree (ndev->hci_dev); +}
net/openvswitch/meter.c +8 -0
@@ -464,6 +464,14 @@ bool ovs_meter_execute(struct datapath *dp, struct sk_buff *skb,spin_lock (&meter->lock); long_delta_ms = (now_ms - meter->used);/* ms */ +if (long_delta_ms <0 ) { +/* This condition means that we have several threads fighting +* for a meter lock, and the one who received the packets a +* bit later wins. Assuming that all racing threads received +* packets at the same time to avoid overflow. +*/ + long_delta_ms =0 ; + }/* Make sure delta_ms will not be too large, so that bucket will not
Lines of this file are not shown. View the raw message.
tools/perf/util/intel-pt-decoder/intel-pt-decoder.c +5 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/test_verifier.c +86 -26
112 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.
Samuel Zou
Tested-by Hulk RobotQuoted 4 lines · Greg Kroah-Hartman
I'm announcing the release of the 4.19.193 kernel.
All users of the 4.19 kernel series must upgrade.
Quoted 9 lines
The updated 4.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.gitlinux-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=summarythanks,
greg k-h
Tested on arm64 and x86 for 4.19.193,
Kernel repo:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Branch: linux-4.19.y
Version: 4.19.193
Commit: 1722257b8ececec9b3b83a8b14058f8209d78071
Compiler: gcc version 7.3.0 (GCC)
arm64:
--------------------------------------------------------------------
Testcase Result Summary:
total: 8860
passed: 8860
failed: 0
timeout: 0
--------------------------------------------------------------------
x86:
--------------------------------------------------------------------
Testcase Result Summary:
total: 8860
passed: 8860
failed: 0
timeout: 0
--------------------------------------------------------------------