Linux 5.10.159
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.159 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.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/alpha/kernel/rtc.c | 7 arch/arm/boot/dts/imx7s.dtsi | 4 arch/arm/boot/dts/rk3036-evb.dts | 2 arch/arm/boot/dts/rk3188-radxarock.dts | 2 arch/arm/boot/dts/rk3188.dtsi | 3 arch/arm/boot/dts/rk3288-evb-act8846.dts | 2 arch/arm/boot/dts/rk3288-firefly.dtsi | 2 arch/arm/boot/dts/rk3288-miqi.dts | 2 arch/arm/boot/dts/rk3288-rock2-square.dts | 2 arch/arm/boot/dts/rk3xxx.dtsi | 7 arch/arm/include/asm/perf_event.h | 2 arch/arm/include/asm/pgtable-nommu.h | 6 arch/arm/include/asm/pgtable.h | 16 - arch/arm/mm/nommu.c | 19 + arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts | 2 arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi | 1 arch/s390/kvm/vsie.c | 4 arch/x86/kernel/hpet.c | 8 drivers/base/power/trace.c | 6 drivers/bluetooth/btusb.c | 5 drivers/gpio/gpio-amd8111.c | 4 drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 6 drivers/gpu/drm/bridge/ti-sn65dsi86.c | 4 drivers/gpu/drm/drm_gem_shmem_helper.c | 18 - drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 4 drivers/hid/hid-core.c | 3 drivers/hid/hid-ids.h | 3 drivers/hid/hid-lg4ff.c | 6 drivers/hid/hid-quirks.c | 3 drivers/media/common/videobuf2/videobuf2-core.c | 102 +++++--- drivers/media/v4l2-core/v4l2-dv-timings.c | 20 + drivers/net/can/usb/esd_usb2.c | 6 drivers/net/dsa/sja1105/sja1105_devlink.c | 2 drivers/net/ethernet/aeroflex/greth.c | 1 drivers/net/ethernet/cavium/thunder/nicvf_main.c | 4 drivers/net/ethernet/hisilicon/hisi_femac.c | 2 drivers/net/ethernet/hisilicon/hix5hd2_gmac.c | 2 drivers/net/ethernet/intel/e1000e/netdev.c | 4 drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 6 drivers/net/ethernet/intel/i40e/i40e_main.c | 19 + drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 2 drivers/net/ethernet/intel/igb/igb_ethtool.c | 2 drivers/net/ethernet/marvell/mvneta.c | 2 drivers/net/ethernet/microchip/encx24j600-regmap.c | 4 drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | 8 drivers/net/ieee802154/ca8210.c | 2 drivers/net/ieee802154/cc2520.c | 2 drivers/net/macsec.c | 1 drivers/net/plip/plip.c | 4 drivers/net/usb/qmi_wwan.c | 1 drivers/net/vmxnet3/vmxnet3_drv.c | 11 drivers/net/xen-netback/common.h | 14 - drivers/net/xen-netback/interface.c | 22 - drivers/net/xen-netback/netback.c | 229 +++++++++--------- drivers/net/xen-netback/rx.c | 10 drivers/net/xen-netfront.c | 6 drivers/nvme/host/core.c | 8 drivers/regulator/slg51000-regulator.c | 2 drivers/regulator/twl6030-regulator.c | 15 - drivers/rtc/rtc-cmos.c | 209 ++++++++++------ drivers/rtc/rtc-mc146818-lib.c | 169 +++++++++++-- drivers/usb/dwc3/gadget.c | 3 drivers/video/fbdev/core/fbcon.c | 2 fs/btrfs/send.c | 24 + include/asm-generic/tlb.h | 4 include/linux/cgroup.h | 1 include/linux/hugetlb.h | 8 include/linux/mc146818rtc.h | 6 kernel/cgroup/cgroup-internal.h | 1 mm/gup.c | 16 + mm/hugetlb.c | 27 +- mm/khugepaged.c | 47 +++ mm/memcontrol.c | 15 + mm/mmu_gather.c | 4 net/9p/trans_fd.c | 6 net/9p/trans_xen.c | 9 net/bluetooth/6lowpan.c | 1 net/bluetooth/af_bluetooth.c | 4 net/bluetooth/hci_core.c | 3 net/can/af_can.c | 4 net/dsa/tag_ksz.c | 3 net/ipv4/fib_frontend.c | 3 net/ipv4/fib_semantics.c | 1 net/ipv4/ip_gre.c | 48 ++- net/ipv6/ip6_output.c | 5 net/mac802154/iface.c | 1 net/netfilter/nf_conntrack_netlink.c | 19 - net/netfilter/nft_set_pipapo.c | 5 net/nfc/nci/ntf.c | 6 net/tipc/link.c | 4 net/tipc/node.c | 12 net/unix/diag.c | 20 - sound/core/seq/seq_memory.c | 11 sound/soc/codecs/wm8962.c | 8 sound/soc/soc-pcm.c | 2 tools/testing/selftests/net/fib_tests.sh | 37 ++ tools/testing/selftests/net/rtnetlink.sh | 2 98 files changed, 981 insertions(+), 437 deletions(-)
Akihiko Odaki (2):
e1000e: Fix TX dispatch condition
igb: Allocate MSI-X vector when testing
Anastasia Belova (1):
HID: hid-lg4ff: Add check for empty lbuf
Andreas Kemnade (1):
regulator: twl6030: fix get status of twl6032 regulators
Ankit Patel (1):
HID: usbhid: Add ALWAYS_POLL quirk for some mice
Artem Chernyshev (1):
net: dsa: ksz: Check return value
Baolin Wang (1):
mm/hugetlb: fix races when looking up a CONT-PTE/PMD size hugetlb page
Chancel Liu (1):
ASoC: wm8962: Wait for updated value of WM8962_CLOCKING1 register
Chen Zhongjin (1):
Bluetooth: Fix not cleanup led when bt_init fails
Chris Wilson (1):
rtc: cmos: Disable irq around direct invocation of cmos_interrupt()
Dan Carpenter (3):
rtc: mc146818-lib: fix signedness bug in mc146818_get_time()
net: mvneta: Prevent out of bounds read in mvneta_config_rss()
net: mvneta: Fix an out of bounds check
Davide Tronchin (1):
net: usb: qmi_wwan: add u-blox 0x1342 composition
Dominique Martinet (1):
9p/xen: check logical size for buffer size
Emeel Hakim (1):
macsec: add missing attribute validation for offload
Eric Dumazet (1):
ipv6: avoid use-after-free in ip6_fragment()
FUKAUMI Naoki (1):
arm64: dts: rockchip: keep I2S1 disabled for GPIO function on ROCK Pi 4 series
Filipe Manana (1):
btrfs: send: avoid unaligned encoded writes when attempting to clone range
Francesco Dolcini (1):
Revert "ARM: dts: imx7: Fix NAND controller size-cells"
Frank Jungclaus (1):
can: esd_usb: Allow REC and TEC to return to zero
GUO Zihua (1):
9p/fd: Use P9_HDRSZ for header size
Giulio Benetti (1):
ARM: 9266/1: mm: fix no-MMU ZERO_PAGE() implementation
Greg Kroah-Hartman (1):
Linux 5.10.159
Guillaume BRUN (1):
drm: bridge: dw_hdmi: fix preference of RGB modes over YUV420
Hangbin Liu (1):
ip_gre: do not report erspan version on GRE interface
Hans Verkuil (2):
media: videobuf2-core: take mmap_lock in vb2_get_unmapped_area()
media: v4l2-dv-timings.c: fix too strict blanking sanity checks
Hauke Mehrtens (1):
ca8210: Fix crash by zero initializing data
Ido Schimmel (2):
ipv4: Fix incorrect route flushing when source address is deleted
ipv4: Fix incorrect route flushing when table ID 0 is used
Ismael Ferreras Morezuelas (1):
Bluetooth: btusb: Add debug message for CSR controllers
Jann Horn (3):
mm/khugepaged: take the right locks for page table retraction mm/khugepaged: fix GUP-fast interaction by sending IPI mm/khugepaged: invoke MMU notifiers in shmem/file collapse paths
Jisheng Zhang (1):
net: stmmac: fix "snps,axi-config" node property parsing
Johan Jonker (4):
ARM: dts: rockchip: fix ir-receiver node names
arm64: dts: rockchip: fix ir-receiver node names
ARM: dts: rockchip: rk3188: fix lcdc1-rgb24 node name
ARM: dts: rockchip: disable arm_global_timer on rk3066 and rk3188
John Starks (1):
mm/gup: fix gup_pud_range() for dax
Juergen Gross (3):
xen/netback: do some code cleanup
xen/netback: don't call kfree_skb() with interrupts disabled xen/netback: fix build warning
Kees Cook (2):
ALSA: seq: Fix function prototype mismatch in snd_seq_expand_var_event
NFC: nci: Bounds check struct nfc_target arrays
Konrad Dybcio (1):
regulator: slg51000: Wait after asserting CS pin
Kuniyuki Iwashima (1):
af_unix: Get user_ns from in_skb in unix_diag_get_exact().
Lin Liu (1):
xen-netfront: Fix NULL sring after live migration
Liu Jian (2):
net: hisilicon: Fix potential use-after-free in hisi_femac_rx()
net: hisilicon: Fix potential use-after-free in hix5hd2_rx()
Luiz Augusto von Dentz (1):
Bluetooth: Fix crash when replugging CSR fake controllers
Mateusz Jończyk (8):
rtc: cmos: remove stale REVISIT comments
rtc: mc146818-lib: change return values of mc146818_get_time()
rtc: Check return value from mc146818_get_time()
rtc: mc146818-lib: fix RTC presence check
rtc: mc146818-lib: extract mc146818_avoid_UIP
rtc: cmos: avoid UIP when writing alarm time
rtc: cmos: avoid UIP when reading alarm time
rtc: mc146818-lib: fix locking in mc146818_set_time
Michal Jaron (1):
i40e: Fix not setting default xps_cpus after reset
Oliver Hartkopp (1):
can: af_can: fix NULL pointer dereference in can_rcv_filter
Pablo Neira Ayuso (1):
netfilter: ctnetlink: fix compilation warning after data race fixes in ct mark
Pankaj Raghav (1):
nvme initialize core quirks before calling nvme_init_subsystem
Przemyslaw Patynowski (1):
i40e: Disallow ip4 and ip6 l4_4_bytes
Qiqi Zhang (1):
drm/bridge: ti-sn65dsi86: Fix output polarity setting bug
Rob Clark (2):
drm/shmem-helper: Remove errant put in error path drm/shmem-helper: Avoid vm_open error paths
Ronak Doshi (1):
vmxnet3: correctly report encapsulated LRO packet
Ross Lagerwall (1):
xen/netback: Ensure protocol headers don't fall in the non-linear area
Sebastian Reichel (1):
arm: dts: rockchip: fix node name for hym8563 rtc
Srinivasa Rao Mandadapu (1):
ASoC: soc-pcm: Add NULL check in BE reparenting
Stefano Brivio (1):
netfilter: nft_set_pipapo: Actually validate intervals in fields after the first one
Sylwester Dziedziuch (1):
i40e: Fix for VF MAC address 0
Tejun Heo (1):
memcg: fix possible use-after-free in memcg_write_event_control()
Tetsuo Handa (1):
fbcon: Use kzalloc() in fbcon_prepare_logo()
Thinh Nguyen (1):
usb: dwc3: gadget: Disable GUSB2PHYCFG.SUSPHY for End Transfer
Thomas Gleixner (4):
rtc: mc146818: Prevent reading garbage
rtc: mc146818: Detect and handle broken RTCs
rtc: mc146818: Dont test for bit 0-5 in Register D
rtc: mc146818: Reduce spinlock section in mc146818_set_time()
Thomas Huth (1):
KVM: s390: vsie: Fix the initialization of the epoch extension (epdx) field
Tomislav Novak (1):
ARM: 9251/1: perf: Fix stacktraces for tracepoint events in THUMB2 kernels
Valentina Goncharenko (2):
net: encx24j600: Add parentheses to fix precedence
net: encx24j600: Fix invalid logic in reading of MISTAT register
Wang ShaoBo (1):
Bluetooth: 6LoWPAN: add missing hci_dev_put() in get_l2cap_conn()
Wei Yongjun (1):
mac802154: fix missing INIT_LIST_HEAD in ieee802154_if_add()
Xiaofei Tan (1):
rtc: cmos: Replace spin_lock_irqsave with spin_lock in hard IRQ
Xin Long (1):
tipc: call tipc_lxc_xmit without holding node_read_lock
Xiongfeng Wang (1):
gpio: amd8111: Fix PCI device reference count leak
Yang Yingliang (1):
net: plip: don't call kfree_skb/dev_kfree_skb() under spin_lock_irq()
Yongqiang Liu (1):
net: thunderx: Fix missing destroy_workqueue of nicvf_rx_mode_wq
YueHaibing (1):
tipc: Fix potential OOB in tipc_link_proto_rcv()
Zack Rusin (1):
drm/vmwgfx: Don't use screen objects when SEV is active
Zhang Changzhong (1):
ethernet: aeroflex: fix potential skb leak in greth_init_rings()
ZhangPeng (1):
HID: core: fix shift-out-of-bounds in hid_report_raw_event
Zhengchao Shao (2):
selftests: rtnetlink: correct xfrm policy rule in kci_test_ipsec_offload
net: dsa: sja1105: fix memory leak in sja1105_setup_devlink_regions()
Ziyang Xuan (1):
ieee802154: cc2520: Fix error return code in cc2520_hw_init()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 158 +SUBLEVEL = 159 EXTRAVERSION = NAME = Dare mighty things
arch/alpha/kernel/rtc.c +6 -1
@@ -80,7 +80,12 @@ init_rtc_epoch(void)static int alpha_rtc_read_time (struct device *dev,struct rtc_time *tm) { -mc146818_get_time (tm); +int ret =mc146818_get_time (tm); + +if (ret <0 ) { +dev_err_ratelimited (dev,"unable to read current time\n" ); +return ret; + }/* Adjust for non-default epochs. It's easier to depend on the generic __get_rtc_time and adjust the epoch here than create
arch/arm/boot/dts/imx7s.dtsi +2 -2
@@ -1221,10 +1221,10 @@ dma_apbh: dma-apbh@33000000 { clocks = <&clks IMX7D_NAND_USDHC_BUS_RAWNAND_CLK>; }; - gpmi: nand-controller@33002000 { + gpmi: nand-controller@33002000{ compatible = "fsl,imx7d-gpmi-nand"; #address-cells = <1>; - #size-cells = <0>; + #size-cells = <1>; reg = <0x33002000 0x2000>, <0x33004000 0x4000>; reg-names = "gpmi-nand", "bch"; interrupts = <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>;
arch/arm/boot/dts/rk3036-evb.dts +1 -1
@@ -31,7 +31,7 @@ phy0: ethernet-phy@0 { &i2c1 { status = "okay"; - hym8563: hym8563@51 { + hym8563: rtc@51 { compatible = "haoyu,hym8563"; reg = <0x51>; #clock-cells = <0>;
arch/arm/boot/dts/rk3188-radxarock.dts +1 -1
@@ -67,7 +67,7 @@ spdif_out: spdif-out { #sound-dai-cells = <0>; }; - ir_recv: gpio-ir-receiver { + ir_recv: ir-receiver { compatible = "gpio-ir-receiver"; gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>; pinctrl-names = "default";
arch/arm/boot/dts/rk3188.dtsi +1 -2
@@ -402,7 +402,7 @@ lcdc1_vsync: lcdc1-vsync { rockchip,pins = <2 RK_PD3 1 &pcfg_pull_none>; }; - lcdc1_rgb24: ldcd1-rgb24 { + lcdc1_rgb24: lcdc1-rgb24 { rockchip,pins = <2 RK_PA0 1 &pcfg_pull_none>, <2 RK_PA1 1 &pcfg_pull_none>, <2 RK_PA2 1 &pcfg_pull_none>,
@@ -630,7 +630,6 @@ &emac { &global_timer { interrupts = <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_EDGE_RISING)>; - status = "disabled"; }; &local_timer {
arch/arm/boot/dts/rk3288-evb-act8846.dts +1 -1
@@ -54,7 +54,7 @@ vdd_gpu: syr828@41 { vin-supply = <&vcc_sys>; }; - hym8563@51 { + rtc@51 { compatible = "haoyu,hym8563"; reg = <0x51>;
arch/arm/boot/dts/rk3288-firefly.dtsi +1 -1
@@ -233,7 +233,7 @@ vdd_gpu: syr828@41 { vin-supply = <&vcc_sys>; }; - hym8563: hym8563@51 { + hym8563: rtc@51 { compatible = "haoyu,hym8563"; reg = <0x51>; #clock-cells = <0>;
arch/arm/boot/dts/rk3288-miqi.dts +1 -1
@@ -157,7 +157,7 @@ vdd_gpu: syr828@41 { vin-supply = <&vcc_sys>; }; - hym8563: hym8563@51 { + hym8563: rtc@51 { compatible = "haoyu,hym8563"; reg = <0x51>; #clock-cells = <0>;
arch/arm/boot/dts/rk3288-rock2-square.dts +1 -1
@@ -165,7 +165,7 @@ &hdmi { }; &i2c0 { - hym8563: hym8563@51 { + hym8563: rtc@51 { compatible = "haoyu,hym8563"; reg = <0x51>; #clock-cells = <0>;
arch/arm/boot/dts/rk3xxx.dtsi +7 -0
@@ -111,6 +111,13 @@ global_timer: global-timer@1013c200 { reg = <0x1013c200 0x20>; interrupts = <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_EDGE_RISING)>; clocks = <&cru CORE_PERI>; + status = "disabled"; + /* The clock source and the sched_clock provided by the arm_global_timer + * on Rockchip rk3066a/rk3188 are quite unstable because their rates + * depend on the CPU frequency. + * Keep the arm_global_timer disabled in order to have the + * DW_APB_TIMER (rk3066a) or ROCKCHIP_TIMER (rk3188) selected by default. + */ }; local_timer: local-timer@1013c600 {
arch/arm/include/asm/perf_event.h +1 -1
@@ -17,7 +17,7 @@ extern unsigned long perf_misc_flags(struct pt_regs *regs);#define perf_arch_fetch_caller_regs (regs, __ip) { \ (regs)->ARM_pc = (__ip); \ - (regs)->ARM_fp = (unsigned long) __builtin_frame_address(0); \ + frame_pointer((regs)) = (unsigned long) __builtin_frame_address(0); \ (regs)->ARM_sp = current_stack_pointer; \ (regs)->ARM_cpsr = SVC_MODE; \ }
arch/arm/include/asm/pgtable-nommu.h +0 -6
@@ -44,12 +44,6 @@typedef pte_t *pte_addr_t ; -/* -* ZERO_PAGE is a global shared page that is always zero: used -* for zero-mapped memory areas etc.. -*/ -#define ZERO_PAGE (vaddr) (virt_to_page(0)) -/* * Mark the prot value as uncacheable and unbufferable. */
arch/arm/include/asm/pgtable.h +9 -7
@@ -10,6 +10,15 @@#include <linux/const.h> #include <asm/proc-fns.h> +#ifndef __ASSEMBLY__ +/* +* ZERO_PAGE is a global shared page that is always zero: used +* for zero-mapped memory areas etc.. +*/ +extern struct page *empty_zero_page; +#define ZERO_PAGE (vaddr) (empty_zero_page) +#endif +#ifndef CONFIG_MMU #include <asm-generic/pgtable-nopud.h>
@@ -156,13 +165,6 @@ extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,#define __S111 __PAGE_SHARED_EXEC#ifndef __ASSEMBLY__ -/* -* ZERO_PAGE is a global shared page that is always zero: used -* for zero-mapped memory areas etc.. -*/ -extern struct page *empty_zero_page; -#define ZERO_PAGE (vaddr) (empty_zero_page) -extern pgd_t swapper_pg_dir[PTRS_PER_PGD ];
arch/arm/mm/nommu.c +19 -0
@@ -26,6 +26,13 @@unsigned long vectors_base; +/* +* empty_zero_page is a special page that is used for +* zero-initialized data and COW. +*/ +struct page *empty_zero_page; +EXPORT_SYMBOL (empty_zero_page); +#ifdef CONFIG_ARM_MPU struct mpu_rgn_info mpu_rgn_info;#endif
@@ -148,9 +155,21 @@ void __init adjust_lowmem_bounds(void)*/ void __init paging_init (const struct machine_desc *mdesc) { +void *zero_page; +early_trap_init ((void *)vectors_base);mpu_setup (); + +/* allocate the zero page. */ + zero_page =memblock_alloc (PAGE_SIZE ,PAGE_SIZE ); +if (!zero_page) +panic ("%s: Failed to allocate %lu bytes align=0x%lx\n" , + __func__,PAGE_SIZE ,PAGE_SIZE ); +bootmem_init (); + + empty_zero_page =virt_to_page (zero_page); +flush_dcache_page (empty_zero_page); }/*
arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts +1 -1
@@ -13,7 +13,7 @@ chosen { stdout-path = "serial2:1500000n8"; }; - ir_rx { + ir-receiver { compatible = "gpio-ir-receiver"; gpios = <&gpio0 RK_PC0 GPIO_ACTIVE_HIGH>; pinctrl-names = "default";
arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi +0 -1
@@ -448,7 +448,6 @@ &i2s0 { &i2s1 { rockchip,playback-channels = <2>; rockchip,capture-channels = <2>; - status = "okay"; }; &i2s2 {
arch/s390/kvm/vsie.c +3 -1
@@ -535,8 +535,10 @@ static int shadow_scb(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)if (test_kvm_cpu_feat (vcpu->kvm,KVM_S390_VM_CPU_FEAT_CEI )) scb_s->eca |= scb_o->eca &ECA_CEI ;/* Epoch Extension */ -if (test_kvm_facility (vcpu->kvm,139 )) +if (test_kvm_facility (vcpu->kvm,139 )) { scb_s->ecd |= scb_o->ecd &ECD_MEF ; + scb_s->epdx = scb_o->epdx; + }/* etoken */ if (test_kvm_facility (vcpu->kvm,156 ))
arch/x86/kernel/hpet.c +6 -2
@@ -1325,8 +1325,12 @@ irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id)hpet_rtc_timer_reinit ();memset (&curr_time,0 ,sizeof (struct rtc_time )); -if (hpet_rtc_flags & (RTC_UIE |RTC_AIE )) -mc146818_get_time (&curr_time); +if (hpet_rtc_flags & (RTC_UIE |RTC_AIE )) { +if (unlikely (mc146818_get_time (&curr_time) <0 )) { +pr_err_ratelimited ("unable to read current time from RTC\n" ); +return IRQ_HANDLED ; + } + }if (hpet_rtc_flags &RTC_UIE && curr_time.tm_sec != hpet_prev_update_sec) {
drivers/base/power/trace.c +5 -1
@@ -120,7 +120,11 @@ static unsigned int read_magic_time(void)struct rtc_time time;unsigned int val; -mc146818_get_time (&time); +if (mc146818_get_time (&time) <0 ) { +pr_err ("Unable to read current time from RTC\n" ); +return 0 ; + } +pr_info ("RTC time: %ptRt, date: %ptRd\n" , &time, &time); val = time.tm_year;/* 100 years */ if (val >100 )
drivers/bluetooth/btusb.c +5 -0
@@ -1833,6 +1833,11 @@ static int btusb_setup_csr(struct hci_dev *hdev) rp = (struct hci_rp_read_local_version *)skb->data; +bt_dev_info (hdev,"CSR: Setting up dongle with HCI ver=%u rev=%04x; LMP ver=%u subver=%04x; manufacturer=%u" , +le16_to_cpu (rp->hci_ver),le16_to_cpu (rp->hci_rev), +le16_to_cpu (rp->lmp_ver),le16_to_cpu (rp->lmp_subver), +le16_to_cpu (rp->manufacturer)); +/* Detect a wide host of Chinese controllers that aren't CSR. * * Known fake bcdDevices: 0x0100, 0x0134, 0x1915, 0x2520, 0x7558, 0x8891
drivers/gpio/gpio-amd8111.c +4 -0
@@ -231,7 +231,10 @@ static int __init amd_gpio_init(void)ioport_unmap (gp.pm); goto out; } +return 0 ; + out: +pci_dev_put (pdev);return err; }
@@ -239,6 +242,7 @@ static void __exit amd_gpio_exit(void) {gpiochip_remove (&gp.chip);ioport_unmap (gp.pm); +pci_dev_put (gp.pdev); }module_init (amd_gpio_init);
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +3 -3
@@ -2609,6 +2609,9 @@ static u32 *dw_hdmi_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge,* if supported. In any case the default RGB888 format is added */ +/* Default 8bit RGB fallback */ + output_fmts[i++] =MEDIA_BUS_FMT_RGB888_1X24 ; +if (max_bpc >=16 && info->bpc ==16 ) {if (info->color_formats &DRM_COLOR_FORMAT_YCRCB444 ) output_fmts[i++] =MEDIA_BUS_FMT_YUV16_1X48 ;
@@ -2642,9 +2645,6 @@ static u32 *dw_hdmi_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge,if (info->color_formats &DRM_COLOR_FORMAT_YCRCB444 ) output_fmts[i++] =MEDIA_BUS_FMT_YUV8_1X24 ; -/* Default 8bit RGB fallback */ - output_fmts[i++] =MEDIA_BUS_FMT_RGB888_1X24 ; - *num_output_fmts = i;return output_fmts;
drivers/gpu/drm/bridge/ti-sn65dsi86.c +2 -2
@@ -621,9 +621,9 @@ static void ti_sn_bridge_set_video_timings(struct ti_sn_bridge *pdata) &pdata->bridge.encoder->crtc->state->adjusted_mode;u8 hsync_polarity =0 , vsync_polarity =0 ; -if (mode->flags &DRM_MODE_FLAG_PHSYNC ) +if (mode->flags &DRM_MODE_FLAG_NHSYNC ) hsync_polarity =CHA_HSYNC_POLARITY ; -if (mode->flags &DRM_MODE_FLAG_PVSYNC ) +if (mode->flags &DRM_MODE_FLAG_NVSYNC ) vsync_polarity =CHA_VSYNC_POLARITY ; ti_sn_bridge_write_u16(pdata, SN_CHA_ACTIVE_LINE_LENGTH_LOW_REG,
drivers/gpu/drm/drm_gem_shmem_helper.c +12 -6
@@ -563,12 +563,20 @@ static void drm_gem_shmem_vm_open(struct vm_area_struct *vma) {struct drm_gem_object *obj = vma->vm_private_data;struct drm_gem_shmem_object *shmem =to_drm_gem_shmem_obj (obj); -int ret;WARN_ON (shmem->base.import_attach); - ret =drm_gem_shmem_get_pages (shmem); -WARN_ON_ONCE (ret !=0 ); +mutex_lock (&shmem->pages_lock); + +/* +* We should have already pinned the pages when the buffer was first +* mmap'd, vm_open() just grabs an additional reference for the new +* mm the vma is getting copied into (ie. on fork()). +*/ +if (!WARN_ON_ONCE (!shmem->pages_use_count)) + shmem->pages_use_count++; + +mutex_unlock (&shmem->pages_lock);drm_gem_vm_open (vma); }
@@ -616,10 +624,8 @@ int drm_gem_shmem_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) shmem =to_drm_gem_shmem_obj (obj); ret =drm_gem_shmem_get_pages (shmem); -if (ret) { -drm_gem_vm_close (vma); +if (ret)return ret; - } vma->vm_flags |=VM_MIXEDMAP |VM_DONTEXPAND ; vma->vm_page_prot =vm_get_page_prot (vma->vm_flags);
drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c +4 -0
@@ -949,6 +949,10 @@ int vmw_kms_sou_init_display(struct vmw_private *dev_priv)struct drm_device *dev = dev_priv->dev;int i, ret; +/* Screen objects won't work if GMR's aren't available */ +if (!dev_priv->has_gmr) +return -ENOSYS ; +if (!(dev_priv->capabilities &SVGA_CAP_SCREEN_OBJECT_2 )) {DRM_INFO ("Not using screen objects," " missing cap SCREEN_OBJECT_2\n" );
drivers/hid/hid-core.c +3 -0
@@ -1310,6 +1310,9 @@ static s32 snto32(__u32 value, unsigned n)if (!value || !n)return 0 ; +if (n >32 ) + n =32 ; +switch (n) {case 8 :return ((__s8 )value);case 16 :return ((__s16 )value);
drivers/hid/hid-ids.h +3 -0
@@ -257,6 +257,7 @@#define USB_DEVICE_ID_CH_AXIS_295 0x001c#define USB_VENDOR_ID_CHERRY 0x046a +#define USB_DEVICE_ID_CHERRY_MOUSE_000C 0x000c#define USB_DEVICE_ID_CHERRY_CYMOTION 0x0023#define USB_DEVICE_ID_CHERRY_CYMOTION_SOLAR 0x0027
@@ -874,6 +875,7 @@#define USB_DEVICE_ID_MS_XBOX_ONE_S_CONTROLLER 0x02fd#define USB_DEVICE_ID_MS_PIXART_MOUSE 0x00cb#define USB_DEVICE_ID_8BITDO_SN30_PRO_PLUS 0x02e0 +#define USB_DEVICE_ID_MS_MOUSE_0783 0x0783#define USB_VENDOR_ID_MOJO 0x8282#define USB_DEVICE_ID_RETRO_ADAPTER 0x3201
@@ -1302,6 +1304,7 @@#define USB_VENDOR_ID_PRIMAX 0x0461#define USB_DEVICE_ID_PRIMAX_MOUSE_4D22 0x4d22 +#define USB_DEVICE_ID_PRIMAX_MOUSE_4E2A 0x4e2a#define USB_DEVICE_ID_PRIMAX_KEYBOARD 0x4e05#define USB_DEVICE_ID_PRIMAX_REZEL 0x4e72#define USB_DEVICE_ID_PRIMAX_PIXART_MOUSE_4D0F 0x4d0f
drivers/hid/hid-lg4ff.c +6 -0
@@ -872,6 +872,12 @@ static ssize_t lg4ff_alternate_modes_store(struct device *dev, struct device_attreturn -ENOMEM ; i =strlen (lbuf); + +if (i ==0 ) { +kfree (lbuf); +return -EINVAL ; + } +if (lbuf[i-1 ] =='\n' ) {if (i ==1 ) {kfree (lbuf);
drivers/hid/hid-quirks.c +3 -0
@@ -54,6 +54,7 @@ static const struct hid_device_id hid_quirks[] = { { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_YOKE), HID_QUIRK_NOGET }, { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_PRO_PEDALS), HID_QUIRK_NOGET }, { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_PRO_THROTTLE), HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_MOUSE_000C), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB), HID_QUIRK_NO_INIT_REPORTS }, { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB_RAPIDFIRE), HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K70RGB), HID_QUIRK_NO_INIT_REPORTS },
@@ -122,6 +123,7 @@ static const struct hid_device_id hid_quirks[] = { { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C05A), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C06A), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_MCS, USB_DEVICE_ID_MCS_GAMEPADBLOCK), HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_MOUSE_0783), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PIXART_MOUSE), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER), HID_QUIRK_NO_INIT_REPORTS }, { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_SURFACE3_COVER), HID_QUIRK_NO_INIT_REPORTS },
@@ -146,6 +148,7 @@ static const struct hid_device_id hid_quirks[] = { { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN), HID_QUIRK_NO_INIT_REPORTS }, { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_MOUSE_4D22), HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_MOUSE_4E2A), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_PIXART_MOUSE_4D0F), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_PIXART_MOUSE_4D65), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_PIXART_MOUSE_4E22), HID_QUIRK_ALWAYS_POLL },
drivers/media/common/videobuf2/videobuf2-core.c +73 -29
214 lines not on this page · raw message
drivers/media/v4l2-core/v4l2-dv-timings.c +14 -6
@@ -145,6 +145,8 @@ bool v4l2_valid_dv_timings(const struct v4l2_dv_timings *t,const struct v4l2_bt_timings *bt = &t->bt;const struct v4l2_bt_timings_cap *cap = &dvcap->bt;u32 caps = cap->capabilities; +const u32 max_vert =10240 ; +u32 max_hor =3 * bt->width;if (t->type !=V4L2_DV_BT_656_1120 )return false;
@@ -166,14 +168,20 @@ bool v4l2_valid_dv_timings(const struct v4l2_dv_timings *t,if (!bt->interlaced && (bt->il_vbackporch || bt->il_vsync || bt->il_vfrontporch))return false; -if (bt->hfrontporch >2 * bt->width || - bt->hsync >1024 || bt->hbackporch >1024 ) +/* +* Some video receivers cannot properly separate the frontporch, +* backporch and sync values, and instead they only have the total +* blanking. That can be assigned to any of these three fields. +* So just check that none of these are way out of range. +*/ +if (bt->hfrontporch > max_hor || + bt->hsync > max_hor || bt->hbackporch > max_hor)return false; -if (bt->vfrontporch >4096 || - bt->vsync >128 || bt->vbackporch >4096 ) +if (bt->vfrontporch > max_vert || + bt->vsync > max_vert || bt->vbackporch > max_vert)return false; -if (bt->interlaced && (bt->il_vfrontporch >4096 || - bt->il_vsync >128 || bt->il_vbackporch >4096 )) +if (bt->interlaced && (bt->il_vfrontporch > max_vert || + bt->il_vsync > max_vert || bt->il_vbackporch > max_vert))return false;return fnc ==NULL ||fnc (t, fnc_handle); }
drivers/net/can/usb/esd_usb2.c +6 -0
@@ -227,6 +227,10 @@ static void esd_usb2_rx_event(struct esd_usb2_net_priv *priv,u8 rxerr = msg->msg.rx.data[2 ];u8 txerr = msg->msg.rx.data[3 ]; +netdev_dbg (priv->netdev, +"CAN_ERR_EV_EXT: dlc=%#02x state=%02x ecc=%02x rec=%02x tec=%02x\n" , + msg->msg.rx.dlc, state, ecc, rxerr, txerr); + skb =alloc_can_err_skb (priv->netdev, &cf);if (skb ==NULL ) { stats->rx_dropped++;
@@ -253,6 +257,8 @@ static void esd_usb2_rx_event(struct esd_usb2_net_priv *priv,break ;default : priv->can.state =CAN_STATE_ERROR_ACTIVE ; + txerr =0 ; + rxerr =0 ;break ; } }else {
drivers/net/dsa/sja1105/sja1105_devlink.c +2 -0
@@ -95,6 +95,8 @@ static int sja1105_setup_devlink_regions(struct dsa_switch *ds)if (IS_ERR (region)) {while (--i >=0 )dsa_devlink_region_destroy (priv->regions[i]); + +kfree (priv->regions);return PTR_ERR (region); }
drivers/net/ethernet/aeroflex/greth.c +1 -0
@@ -258,6 +258,7 @@ static int greth_init_rings(struct greth_private *greth)if (dma_mapping_error (greth->dev, dma_addr)) {if (netif_msg_ifup (greth))dev_err (greth->dev,"Could not create initial DMA mapping\n" ); +dev_kfree_skb (skb); goto cleanup; } greth->rx_skbuff[i] = skb;
drivers/net/ethernet/cavium/thunder/nicvf_main.c +3 -1
@@ -2258,7 +2258,7 @@ static int nicvf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) err =register_netdev (netdev);if (err) {dev_err (dev,"Failed to register netdevice\n" ); - goto err_unregister_interrupts; + goto err_destroy_workqueue; } nic->msg_enable = debug;
@@ -2267,6 +2267,8 @@ static int nicvf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)return 0 ; +err_destroy_workqueue: +destroy_workqueue (nic->nicvf_rx_mode_wq); err_unregister_interrupts:nicvf_unregister_interrupts (nic); err_free_netdev:
drivers/net/ethernet/hisilicon/hisi_femac.c +1 -1
@@ -283,7 +283,7 @@ static int hisi_femac_rx(struct net_device *dev, int limit) skb->protocol =eth_type_trans (skb, dev);napi_gro_receive (&priv->napi, skb); dev->stats.rx_packets++; - dev->stats.rx_bytes += skb->len; + dev->stats.rx_bytes += len; next: pos = (pos +1 ) % rxq->num;if (rx_pkts_num >= limit)
drivers/net/ethernet/hisilicon/hix5hd2_gmac.c +1 -1
@@ -550,7 +550,7 @@ static int hix5hd2_rx(struct net_device *dev, int limit) skb->protocol =eth_type_trans (skb, dev);napi_gro_receive (&priv->napi, skb); dev->stats.rx_packets++; - dev->stats.rx_bytes += skb->len; + dev->stats.rx_bytes += len; next: pos =dma_ring_incr (pos,RX_DESC_NUM ); }
drivers/net/ethernet/intel/e1000e/netdev.c +2 -2
@@ -5937,9 +5937,9 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,e1000_tx_queue (tx_ring, tx_flags, count);/* Make sure there is space in the ring for the next send. */ e1000_maybe_stop_tx (tx_ring, - (MAX_SKB_FRAGS * + ((MAX_SKB_FRAGS +1 ) *DIV_ROUND_UP (PAGE_SIZE , - adapter->tx_fifo_limit) +2 )); + adapter->tx_fifo_limit) +4 ));if (!netdev_xmit_more () ||netif_xmit_stopped (netdev_get_tx_queue (netdev,0 ))) {
drivers/net/ethernet/intel/i40e/i40e_ethtool.c +1 -5
@@ -4234,11 +4234,7 @@ static int i40e_check_fdir_input_set(struct i40e_vsi *vsi,return -EOPNOTSUPP ;/* First 4 bytes of L4 header */ -if (usr_ip4_spec->l4_4_bytes ==htonl (0xFFFFFFFF )) - new_mask |=I40E_L4_SRC_MASK |I40E_L4_DST_MASK ; -else if (!usr_ip4_spec->l4_4_bytes) - new_mask &= ~(I40E_L4_SRC_MASK |I40E_L4_DST_MASK ); -else +if (usr_ip4_spec->l4_4_bytes)return -EOPNOTSUPP ;/* Filtering on Type of Service is not supported. */
drivers/net/ethernet/intel/i40e/i40e_main.c +18 -1
@@ -10065,6 +10065,21 @@ static int i40e_rebuild_channels(struct i40e_vsi *vsi)return 0 ; } +/** +* i40e_clean_xps_state - clean xps state for every tx_ring +* @vsi: ptr to the VSI +**/ +static void i40e_clean_xps_state (struct i40e_vsi *vsi) +{ +int i; + +if (vsi->tx_rings) +for (i =0 ; i < vsi->num_queue_pairs; i++) +if (vsi->tx_rings[i]) +clear_bit (__I40E_TX_XPS_INIT_DONE, + vsi->tx_rings[i]->state); +} +/** * i40e_prep_for_reset - prep for the core to reset * @pf: board private structure
@@ -10096,8 +10111,10 @@ static void i40e_prep_for_reset(struct i40e_pf *pf, bool lock_acquired)rtnl_unlock ();for (v =0 ; v < pf->num_alloc_vsi; v++) { -if (pf->vsi[v]) +if (pf->vsi[v]) { +i40e_clean_xps_state (pf->vsi[v]); pf->vsi[v]->seid =0 ; + } }i40e_shutdown_adminq (&pf->hw);
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +2 -0
@@ -1525,6 +1525,7 @@ bool i40e_reset_vf(struct i40e_vf *vf, bool flr)i40e_cleanup_reset_vf (vf);i40e_flush (hw); +usleep_range (20000 ,40000 );clear_bit (I40E_VF_STATE_RESETTING , &vf->vf_states);return true;
@@ -1648,6 +1649,7 @@ bool i40e_reset_all_vfs(struct i40e_pf *pf, bool flr) }i40e_flush (hw); +usleep_range (20000 ,40000 );clear_bit (__I40E_VF_DISABLE, pf->state);return true;
drivers/net/ethernet/intel/igb/igb_ethtool.c +2 -0
@@ -1413,6 +1413,8 @@ static int igb_intr_test(struct igb_adapter *adapter, u64 *data) *data =1 ;return -1 ; } +wr32 (E1000_IVAR_MISC ,E1000_IVAR_VALID <<8 ); +wr32 (E1000_EIMS ,BIT (0 )); }else if (adapter->flags &IGB_FLAG_HAS_MSI ) { shared_int = false; if (request_irq(irq,
drivers/net/ethernet/marvell/mvneta.c +1 -1
@@ -4140,7 +4140,7 @@ static void mvneta_percpu_elect(struct mvneta_port *pp)/* Use the cpu associated to the rxq when it is online, in all * the other cases, use the cpu 0 which can't be offline. */ -if (cpu_online (pp->rxq_def)) +if (pp->rxq_def < nr_cpu_ids &&cpu_online (pp->rxq_def)) elected_cpu = pp->rxq_def; max_cpu =num_present_cpus ();
drivers/net/ethernet/microchip/encx24j600-regmap.c +2 -2
@@ -359,7 +359,7 @@ static int regmap_encx24j600_phy_reg_read(void *context, unsigned int reg, goto err_out;usleep_range (26 ,100 ); -while ((ret =regmap_read (ctx->regmap,MISTAT , &mistat) !=0 ) && +while (((ret =regmap_read (ctx->regmap,MISTAT , &mistat)) ==0 ) && (mistat &BUSY ))cpu_relax ();
@@ -397,7 +397,7 @@ static int regmap_encx24j600_phy_reg_write(void *context, unsigned int reg, goto err_out;usleep_range (26 ,100 ); -while ((ret =regmap_read (ctx->regmap,MISTAT , &mistat) !=0 ) && +while (((ret =regmap_read (ctx->regmap,MISTAT , &mistat)) ==0 ) && (mistat &BUSY ))cpu_relax ();
drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c +4 -4
@@ -108,10 +108,10 @@ static struct stmmac_axi *stmmac_axi_setup(struct platform_device *pdev) axi->axi_lpi_en =of_property_read_bool (np,"snps,lpi_en" ); axi->axi_xit_frm =of_property_read_bool (np,"snps,xit_frm" ); - axi->axi_kbbe =of_property_read_bool (np,"snps,axi_kbbe" ); - axi->axi_fb =of_property_read_bool (np,"snps,axi_fb" ); - axi->axi_mb =of_property_read_bool (np,"snps,axi_mb" ); - axi->axi_rb =of_property_read_bool (np,"snps,axi_rb" ); + axi->axi_kbbe =of_property_read_bool (np,"snps,kbbe" ); + axi->axi_fb =of_property_read_bool (np,"snps,fb" ); + axi->axi_mb =of_property_read_bool (np,"snps,mb" ); + axi->axi_rb =of_property_read_bool (np,"snps,rb" );if (of_property_read_u32 (np,"snps,wr_osr_lmt" , &axi->axi_wr_osr_lmt)) axi->axi_wr_osr_lmt =1 ;
drivers/net/ieee802154/ca8210.c +1 -1
@@ -926,7 +926,7 @@ static int ca8210_spi_transfer(dev_dbg (&spi->dev,"%s called\n" , __func__); - cas_ctl =kmalloc (sizeof (*cas_ctl),GFP_ATOMIC ); + cas_ctl =kzalloc (sizeof (*cas_ctl),GFP_ATOMIC );if (!cas_ctl)return -ENOMEM ;
drivers/net/ieee802154/cc2520.c +1 -1
@@ -970,7 +970,7 @@ static int cc2520_hw_init(struct cc2520_private *priv)if (timeout-- <=0 ) {dev_err (&priv->spi->dev,"oscillator start failed!\n" ); -return ret; +return -ETIMEDOUT ; }udelay (1 ); }while (!(status &CC2520_STATUS_XOSC32M_STABLE ));
drivers/net/macsec.c +1 -0
@@ -3680,6 +3680,7 @@ static const struct nla_policy macsec_rtnl_policy[IFLA_MACSEC_MAX + 1] = { [IFLA_MACSEC_SCB] = { .type = NLA_U8 }, [IFLA_MACSEC_REPLAY_PROTECT] = { .type = NLA_U8 }, [IFLA_MACSEC_VALIDATION] = { .type = NLA_U8 }, + [IFLA_MACSEC_OFFLOAD] = { .type = NLA_U8 }, };static void macsec_free_netdev (struct net_device *dev)
drivers/net/plip/plip.c +2 -2
@@ -444,12 +444,12 @@ plip_bh_timeout_error(struct net_device *dev, struct net_local *nl, } rcv->state =PLIP_PK_DONE ;if (rcv->skb) { -kfree_skb (rcv->skb); +dev_kfree_skb_irq (rcv->skb); rcv->skb =NULL ; } snd->state =PLIP_PK_DONE ;if (snd->skb) { -dev_kfree_skb (snd->skb); +dev_consume_skb_irq (snd->skb); snd->skb =NULL ; }spin_unlock_irq (&nl->lock);
drivers/net/usb/qmi_wwan.c +1 -0
@@ -1352,6 +1352,7 @@ static const struct usb_device_id products[] = { {QMI_FIXED_INTF(0x0489, 0xe0b4, 0)}, /* Foxconn T77W968 LTE */ {QMI_FIXED_INTF(0x0489, 0xe0b5, 0)}, /* Foxconn T77W968 LTE with eSIM support*/ {QMI_FIXED_INTF(0x2692, 0x9025, 4)}, /* Cellient MPL200 (rebranded Qualcomm 05c6:9025) */ + {QMI_QUIRK_SET_DTR(0x1546, 0x1342, 4)}, /* u-blox LARA-L6 *//* 4. Gobi 1000 devices */ {QMI_GOBI1K_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */
drivers/net/vmxnet3/vmxnet3_drv.c +9 -2
@@ -1356,6 +1356,7 @@ vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq, };u32 num_pkts =0 ;bool skip_page_frags = false; +bool encap_lro = false;struct Vmxnet3_RxCompDesc *rcd;struct vmxnet3_rx_ctx *ctx = &rq->rx_ctx;u16 segCnt =0 , mss =0 ;
@@ -1496,13 +1497,18 @@ vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq,if (VMXNET3_VERSION_GE_2 (adapter) && rcd->type ==VMXNET3_CDTYPE_RXCOMP_LRO ) {struct Vmxnet3_RxCompDescExt *rcdlro; +union Vmxnet3_GenericDesc *gdesc; + rcdlro = (struct Vmxnet3_RxCompDescExt *)rcd; + gdesc = (union Vmxnet3_GenericDesc *)rcd; segCnt = rcdlro->segCnt;WARN_ON_ONCE (segCnt ==0 ); mss = rcdlro->mss;if (unlikely (segCnt <=1 )) segCnt =0 ; + encap_lro = (le32_to_cpu (gdesc->dword[0 ]) & + (1UL <<VMXNET3_RCD_HDR_INNER_SHIFT )); }else { segCnt =0 ; }
@@ -1570,7 +1576,7 @@ vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq,vmxnet3_rx_csum (adapter, skb, (union Vmxnet3_GenericDesc *)rcd); skb->protocol =eth_type_trans (skb, adapter->netdev); -if (!rcd->tcp || +if ((!rcd->tcp && !encap_lro) || !(adapter->netdev->features &NETIF_F_LRO )) goto not_lro;
@@ -1579,7 +1585,7 @@ vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq, SKB_GSO_TCPV4 :SKB_GSO_TCPV6 ;skb_shinfo (skb)->gso_size = mss;skb_shinfo (skb)->gso_segs = segCnt; - }else if (segCnt !=0 || skb->len > mtu) { + }else if ((segCnt !=0 || skb->len > mtu) && !encap_lro) {u32 hlen; hlen = vmxnet3_get_hdr_len(adapter, skb,
@@ -1608,6 +1614,7 @@ vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq,napi_gro_receive (&rq->napi, skb); ctx->skb =NULL ; + encap_lro = false; num_pkts++; }
drivers/net/xen-netback/common.h +1 -13
@@ -48,7 +48,6 @@#include <linux/debugfs.h> typedef unsigned int pending_ring_idx_t ; -#define INVALID_PENDING_RING_IDX (~0U)struct pending_tx_info {struct xen_netif_tx_request req;/* tx request */
@@ -82,8 +81,6 @@ struct xenvif_rx_meta {/* Discriminate from any valid pending_idx value. */ #define INVALID_PENDING_IDX 0xFFFF -#define MAX_BUFFER_OFFSET XEN_PAGE_SIZE -#define MAX_PENDING_REQS XEN_NETIF_TX_RING_SIZE/* The maximum number of frags is derived from the size of a grant (same
@@ -367,11 +364,6 @@ void xenvif_free(struct xenvif *vif);int xenvif_xenbus_init (void );void xenvif_xenbus_fini (void ); -int xenvif_schedulable (struct xenvif *vif); - -int xenvif_queue_stopped (struct xenvif_queue *queue); -void xenvif_wake_queue (struct xenvif_queue *queue); -/* (Un)Map communication rings. */ void xenvif_unmap_frontend_data_rings (struct xenvif_queue *queue); int xenvif_map_frontend_data_rings(struct xenvif_queue *queue,
@@ -394,17 +386,13 @@ int xenvif_dealloc_kthread(void *data);irqreturn_t xenvif_ctrl_irq_fn (int irq,void *data);bool xenvif_have_rx_work (struct xenvif_queue *queue,bool test_kthread); -void xenvif_rx_action (struct xenvif_queue *queue); -void xenvif_rx_queue_tail (struct xenvif_queue *queue,struct sk_buff *skb); +bool xenvif_rx_queue_tail (struct xenvif_queue *queue,struct sk_buff *skb);void xenvif_carrier_on (struct xenvif *vif);/* Callback from stack when TX packet can be released */ void xenvif_zerocopy_callback (struct ubuf_info *ubuf,bool zerocopy_success); -/* Unmap a pending page and release it back to the guest */ -void xenvif_idx_unmap (struct xenvif_queue *queue,u16 pending_idx); -static inline pending_ring_idx_t nr_pending_reqs (struct xenvif_queue *queue) { return MAX_PENDING_REQS -
drivers/net/xen-netback/interface.c +5 -17
@@ -70,7 +70,7 @@ void xenvif_skb_zerocopy_complete(struct xenvif_queue *queue)wake_up (&queue->dealloc_wq); } -int xenvif_schedulable (struct xenvif *vif) +static int xenvif_schedulable (struct xenvif *vif) {return netif_running (vif->dev) && test_bit(VIF_STATUS_CONNECTED, &vif->status) &&
@@ -178,20 +178,6 @@ irqreturn_t xenvif_interrupt(int irq, void *dev_id)return IRQ_HANDLED ; } -int xenvif_queue_stopped (struct xenvif_queue *queue) -{ -struct net_device *dev = queue->vif->dev; -unsigned int id = queue->id; -return netif_tx_queue_stopped (netdev_get_tx_queue (dev, id)); -} - -void xenvif_wake_queue (struct xenvif_queue *queue) -{ -struct net_device *dev = queue->vif->dev; -unsigned int id = queue->id; -netif_tx_wake_queue (netdev_get_tx_queue (dev, id)); -} -static u16 xenvif_select_queue (struct net_device *dev,struct sk_buff *skb,struct net_device *sb_dev) {
@@ -269,14 +255,16 @@ xenvif_start_xmit(struct sk_buff *skb, struct net_device *dev)if (vif->hash.alg ==XEN_NETIF_CTRL_HASH_ALGORITHM_NONE )skb_clear_hash (skb); -xenvif_rx_queue_tail (queue, skb); +if (!xenvif_rx_queue_tail (queue, skb)) + goto drop; +xenvif_kick_thread (queue);return NETDEV_TX_OK ; drop: vif->dev->stats.tx_dropped++; -dev_kfree_skb (skb); +dev_kfree_skb_any (skb);return NETDEV_TX_OK ; }
drivers/net/xen-netback/netback.c +127 -102
353 lines not on this page · raw message
drivers/net/xen-netback/rx.c +6 -4
@@ -82,9 +82,10 @@ static bool xenvif_rx_ring_slots_available(struct xenvif_queue *queue)return false; } -void xenvif_rx_queue_tail (struct xenvif_queue *queue,struct sk_buff *skb) +bool xenvif_rx_queue_tail (struct xenvif_queue *queue,struct sk_buff *skb) {unsigned long flags; +bool ret = true;spin_lock_irqsave (&queue->rx_queue.lock, flags);
@@ -92,8 +93,7 @@ void xenvif_rx_queue_tail(struct xenvif_queue *queue, struct sk_buff *skb)struct net_device *dev = queue->vif->dev;netif_tx_stop_queue (netdev_get_tx_queue (dev, queue->id)); -kfree_skb (skb); - queue->vif->dev->stats.rx_dropped++; + ret = false; }else {if (skb_queue_empty (&queue->rx_queue))xenvif_update_needed_slots (queue, skb);
@@ -104,6 +104,8 @@ void xenvif_rx_queue_tail(struct xenvif_queue *queue, struct sk_buff *skb) }spin_unlock_irqrestore (&queue->rx_queue.lock, flags); + +return ret; }static struct sk_buff *xenvif_rx_dequeue (struct xenvif_queue *queue)
@@ -486,7 +488,7 @@ static void xenvif_rx_skb(struct xenvif_queue *queue)#define RX_BATCH_SIZE 64 -void xenvif_rx_action (struct xenvif_queue *queue) +static void xenvif_rx_action (struct xenvif_queue *queue) {struct sk_buff_head completed_skbs;unsigned int work_done =0 ;
drivers/net/xen-netfront.c +6 -0
@@ -1868,6 +1868,12 @@ static int netfront_resume(struct xenbus_device *dev)netif_tx_unlock_bh (info->netdev);xennet_disconnect_backend (info); + +rtnl_lock (); +if (info->queues) +xennet_destroy_queues (info); +rtnl_unlock (); +return 0 ; }
drivers/nvme/host/core.c +4 -4
@@ -3092,10 +3092,6 @@ int nvme_init_identify(struct nvme_ctrl *ctrl)if (!ctrl->identified) {int i; - ret =nvme_init_subsystem (ctrl, id); -if (ret) - goto out_free; -/* * Check for quirks. Quirk can depend on firmware version, * so, in principle, the set of quirks present can change
@@ -3108,6 +3104,10 @@ int nvme_init_identify(struct nvme_ctrl *ctrl)if (quirk_matches (id, &core_quirks[i])) ctrl->quirks |= core_quirks[i].quirks; } + + ret =nvme_init_subsystem (ctrl, id); +if (ret) + goto out_free; }memcpy (ctrl->subsys->firmware_rev, id->fr,sizeof (ctrl->subsys->firmware_rev));
drivers/regulator/slg51000-regulator.c +2 -0
@@ -457,6 +457,8 @@ static int slg51000_i2c_probe(struct i2c_client *client) chip->cs_gpiod = cs_gpiod; } +usleep_range (10000 ,11000 ); +i2c_set_clientdata (client, chip); chip->chip_irq = client->irq; chip->dev = dev;
drivers/regulator/twl6030-regulator.c +11 -4
@@ -67,6 +67,7 @@ struct twlreg_info {#define TWL6030_CFG_STATE_SLEEP 0x03#define TWL6030_CFG_STATE_GRP_SHIFT 5#define TWL6030_CFG_STATE_APP_SHIFT 2 +#define TWL6030_CFG_STATE_MASK 0x03#define TWL6030_CFG_STATE_APP_MASK (0x03 << TWL6030_CFG_STATE_APP_SHIFT)#define TWL6030_CFG_STATE_APP (v) (((v) & TWL6030_CFG_STATE_APP_MASK) >>\ TWL6030_CFG_STATE_APP_SHIFT)
@@ -128,13 +129,14 @@ static int twl6030reg_is_enabled(struct regulator_dev *rdev)if (grp <0 )return grp; grp &=P1_GRP_6030 ; + val =twlreg_read (info,TWL_MODULE_PM_RECEIVER ,VREG_STATE ); + val =TWL6030_CFG_STATE_APP (val); }else { + val =twlreg_read (info,TWL_MODULE_PM_RECEIVER ,VREG_STATE ); + val &=TWL6030_CFG_STATE_MASK ; grp =1 ; } - val =twlreg_read (info,TWL_MODULE_PM_RECEIVER ,VREG_STATE ); - val =TWL6030_CFG_STATE_APP (val); -return grp && (val ==TWL6030_CFG_STATE_ON ); }
@@ -187,7 +189,12 @@ static int twl6030reg_get_status(struct regulator_dev *rdev) val =twlreg_read (info,TWL_MODULE_PM_RECEIVER ,VREG_STATE ); -switch (TWL6030_CFG_STATE_APP (val)) { +if (info->features &TWL6032_SUBCLASS ) + val &=TWL6030_CFG_STATE_MASK ; +else + val =TWL6030_CFG_STATE_APP (val); + +switch (val) {case TWL6030_CFG_STATE_ON :return REGULATOR_STATUS_NORMAL ;
drivers/rtc/rtc-cmos.c +134 -75
299 lines not on this page · raw message
drivers/rtc/rtc-mc146818-lib.c +143 -26
235 lines not on this page · raw message
drivers/usb/dwc3/gadget.c +2 -1
@@ -291,7 +291,8 @@ int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned int cmd,* * DWC_usb3 3.30a and DWC_usb31 1.90a programming guide section 3.2.2 */ -if (dwc->gadget->speed <=USB_SPEED_HIGH ) { +if (dwc->gadget->speed <=USB_SPEED_HIGH || +DWC3_DEPCMD_CMD (cmd) ==DWC3_DEPCMD_ENDTRANSFER ) { reg =dwc3_readl (dwc->regs,DWC3_GUSB2PHYCFG (0 ));if (unlikely (reg &DWC3_GUSB2PHYCFG_SUSPHY )) { saved_config |=DWC3_GUSB2PHYCFG_SUSPHY ;
drivers/video/fbdev/core/fbcon.c +1 -1
@@ -609,7 +609,7 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info,if (scr_readw (r) != vc->vc_video_erase_char)break ;if (r != q && new_rows >= rows + logo_lines) { - save =kmalloc (array3_size (logo_lines, new_cols,2 ), + save =kzalloc (array3_size (logo_lines, new_cols,2 ),GFP_KERNEL );if (save) {int i = cols < new_cols ? cols : new_cols;
fs/btrfs/send.c +23 -1
@@ -5398,6 +5398,7 @@ static int clone_range(struct send_ctx *sctx,u64 ext_len;u64 clone_len;u64 clone_data_offset; +bool crossed_src_i_size = false;if (slot >=btrfs_header_nritems (leaf)) { ret =btrfs_next_leaf (clone_root->root, path);
@@ -5454,8 +5455,10 @@ static int clone_range(struct send_ctx *sctx,if (key.offset >= clone_src_i_size)break ; -if (key.offset + ext_len > clone_src_i_size) +if (key.offset + ext_len > clone_src_i_size) { ext_len = clone_src_i_size - key.offset; + crossed_src_i_size = true; + } clone_data_offset =btrfs_file_extent_offset (leaf, ei);if (btrfs_file_extent_disk_bytenr (leaf, ei) == disk_byte) {
@@ -5515,6 +5518,25 @@ static int clone_range(struct send_ctx *sctx, ret =send_clone (sctx, offset, clone_len, clone_root); } + }else if (crossed_src_i_size && clone_len < len) { +/* +* If we are at i_size of the clone source inode and we +* can not clone from it, terminate the loop. This is +* to avoid sending two write operations, one with a +* length matching clone_len and the final one after +* this loop with a length of len - clone_len. +* +* When using encoded writes (BTRFS_SEND_FLAG_COMPRESSED +* was passed to the send ioctl), this helps avoid +* sending an encoded write for an offset that is not +* sector size aligned, in case the i_size of the source +* inode is not sector size aligned. That will make the +* receiver fallback to decompression of the data and +* writing it using regular buffered IO, therefore while +* not incorrect, it's not optimal due decompression and +* possible re-compression at the receiver. +*/ +break ; }else { ret =send_extent_data (sctx, offset, clone_len); }
include/asm-generic/tlb.h +4 -0
@@ -205,12 +205,16 @@ extern void tlb_remove_table(struct mmu_gather *tlb, void *table);#define tlb_needs_table_invalidate () (true)#endif +void tlb_remove_table_sync_one (void ); +#else #ifdef tlb_needs_table_invalidate#error tlb_needs_table_invalidate() requires MMU_GATHER_RCU_TABLE_FREE#endif +static inline void tlb_remove_table_sync_one (void ) { } +#endif /* CONFIG_MMU_GATHER_RCU_TABLE_FREE */
include/linux/cgroup.h +1 -0
@@ -68,6 +68,7 @@ struct css_task_iter {struct list_head iters_node;/* css_set->task_iters */ }; +extern struct file_system_type cgroup_fs_type;extern struct cgroup_root cgrp_dfl_root;extern struct css_set init_css_set;
include/linux/hugetlb.h +4 -4
@@ -174,8 +174,8 @@ struct page *follow_huge_addr(struct mm_struct *mm, unsigned long address,struct page *follow_huge_pd (struct vm_area_struct *vma,unsigned long address,hugepd_t hpd,int flags,int pdshift); -struct page *follow_huge_pmd (struct mm_struct *mm,unsigned long address, -pmd_t *pmd,int flags); +struct page *follow_huge_pmd_pte (struct vm_area_struct *vma,unsigned long address, +int flags);struct page *follow_huge_pud (struct mm_struct *mm,unsigned long address,pud_t *pud,int flags); struct page *follow_huge_pgd(struct mm_struct *mm, unsigned long address,
@@ -261,8 +261,8 @@ static inline struct page *follow_huge_pd(struct vm_area_struct *vma,return NULL ; } -static inline struct page *follow_huge_pmd (struct mm_struct *mm, -unsigned long address,pmd_t *pmd,int flags) +static inline struct page *follow_huge_pmd_pte (struct vm_area_struct *vma, +unsigned long address,int flags) {return NULL ; }
include/linux/mc146818rtc.h +5 -1
@@ -125,7 +125,11 @@ struct cmos_rtc_board_info {#define RTC_IO_EXTENT_USED RTC_IO_EXTENT#endif /* ARCH_RTC_LOCATION */ -unsigned int mc146818_get_time (struct rtc_time *time); +bool mc146818_does_rtc_work (void ); +int mc146818_get_time (struct rtc_time *time);int mc146818_set_time (struct rtc_time *time); +bool mc146818_avoid_UIP (void (*callback)(unsigned char seconds,void *param), +void *param); +#endif /* _MC146818RTC_H */
kernel/cgroup/cgroup-internal.h +0 -1
@@ -169,7 +169,6 @@ extern struct mutex cgroup_mutex;extern spinlock_t css_set_lock;extern struct cgroup_subsys *cgroup_subsys[];extern struct list_head cgroup_roots; -extern struct file_system_type cgroup_fs_type;/* iterate across the hierarchies */ #define for_each_root (root) \
mm/gup.c +14 -2
@@ -405,6 +405,18 @@ static struct page *follow_page_pte(struct vm_area_struct *vma,if (WARN_ON_ONCE ((flags & (FOLL_PIN |FOLL_GET )) == (FOLL_PIN |FOLL_GET )))return ERR_PTR (-EINVAL ); + +/* +* Considering PTE level hugetlb, like continuous-PTE hugetlb on +* ARM64 architecture. +*/ +if (is_vm_hugetlb_page (vma)) { + page =follow_huge_pmd_pte (vma, address, flags); +if (page) +return page; +return no_page_table (vma, flags); + } + retry:if (unlikely (pmd_bad (*pmd)))return no_page_table (vma, flags);
@@ -560,7 +572,7 @@ static struct page *follow_pmd_mask(struct vm_area_struct *vma,if (pmd_none (pmdval))return no_page_table (vma, flags);if (pmd_huge (pmdval) &&is_vm_hugetlb_page (vma)) { - page =follow_huge_pmd (mm, address, pmd, flags); + page =follow_huge_pmd_pte (vma, address, flags);if (page)return page;return no_page_table (vma, flags);
@@ -2564,7 +2576,7 @@ static int gup_pud_range(p4d_t *p4dp, p4d_t p4d, unsigned long addr, unsigned lo next =pud_addr_end (addr, end);if (unlikely (!pud_present (pud)))return 0 ; -if (unlikely (pud_huge (pud))) { +if (unlikely (pud_huge (pud) ||pud_devmap (pud))) {if (!gup_huge_pud (pud, pudp, addr, next, flags, pages, nr))return 0 ;
mm/hugetlb.c +13 -14
@@ -5585,12 +5585,13 @@ follow_huge_pd(struct vm_area_struct *vma, }struct page *__weak -follow_huge_pmd (struct mm_struct *mm,unsigned long address, -pmd_t *pmd,int flags) +follow_huge_pmd_pte (struct vm_area_struct *vma,unsigned long address,int flags) { +struct hstate *h =hstate_vma (vma); +struct mm_struct *mm = vma->vm_mm;struct page *page =NULL ;spinlock_t *ptl; -pte_t pte; +pte_t *ptep, pte;/* FOLL_GET and FOLL_PIN are mutually exclusive. */ if (WARN_ON_ONCE((flags & (FOLL_PIN | FOLL_GET)) ==
@@ -5598,17 +5599,15 @@ follow_huge_pmd(struct mm_struct *mm, unsigned long address,return NULL ; retry: - ptl =pmd_lockptr (mm, pmd); -spin_lock (ptl); -/* -* make sure that the address range covered by this pmd is not -* unmapped from other threads. -*/ -if (!pmd_huge (*pmd)) - goto out; - pte =huge_ptep_get ((pte_t *)pmd); + ptep =huge_pte_offset (mm, address,huge_page_size (h)); +if (!ptep) +return NULL ; + + ptl =huge_pte_lock (h, mm, ptep); + pte =huge_ptep_get (ptep);if (pte_present (pte)) { - page =pmd_page (*pmd) + ((address & ~PMD_MASK ) >>PAGE_SHIFT ); + page =pte_page (pte) + + ((address & ~huge_page_mask (h)) >>PAGE_SHIFT );/* * try_grab_page() should always succeed here, because: a) we * hold the pmd (ptl) lock, and b) we've just checked that the
@@ -5624,7 +5623,7 @@ follow_huge_pmd(struct mm_struct *mm, unsigned long address, }else {if (is_hugetlb_entry_migration (pte)) {spin_unlock (ptl); -__migration_entry_wait (mm, (pte_t *)pmd, ptl); +__migration_entry_wait (mm, ptep, ptl); goto retry; }/*
mm/khugepaged.c +42 -5
103 lines not on this page · raw message
mm/memcontrol.c +13 -2
@@ -4866,6 +4866,7 @@ static ssize_t memcg_write_event_control(struct kernfs_open_file *of,unsigned int efd, cfd;struct fd efile;struct fd cfile; +struct dentry *cdentry;const char *name;char *endp;int ret;
@@ -4916,6 +4917,16 @@ static ssize_t memcg_write_event_control(struct kernfs_open_file *of,if (ret <0 ) goto out_put_cfile; +/* +* The control file must be a regular cgroup1 file. As a regular cgroup +* file can't be renamed, it's safe to access its name afterwards. +*/ + cdentry = cfile.file->f_path.dentry; +if (cdentry->d_sb->s_type != &cgroup_fs_type || !d_is_reg (cdentry)) { + ret = -EINVAL ; + goto out_put_cfile; + } +/* * Determine the event callbacks and set them in @event. This used * to be done via struct cftype but cgroup core no longer knows
@@ -4924,7 +4935,7 @@ static ssize_t memcg_write_event_control(struct kernfs_open_file *of,* * DO NOT ADD NEW FILES. */ - name = cfile.file->f_path.dentry->d_name.name; + name = cdentry->d_name.name;if (!strcmp (name,"memory.usage_in_bytes" )) { event->register_event = mem_cgroup_usage_register_event;
@@ -4948,7 +4959,7 @@ static ssize_t memcg_write_event_control(struct kernfs_open_file *of,* automatically removed on cgroup destruction but the removal is * asynchronous, so take an extra ref on @css. */ - cfile_css =css_tryget_online_from_dir (cfile.file->f_path.dentry->d_parent, + cfile_css =css_tryget_online_from_dir (cdentry->d_parent, &memory_cgrp_subsys); ret = -EINVAL ;if (IS_ERR (cfile_css))
mm/mmu_gather.c +1 -3
@@ -139,7 +139,7 @@ static void tlb_remove_table_smp_sync(void *arg)/* Simply deliver the interrupt */ } -static void tlb_remove_table_sync_one (void ) +void tlb_remove_table_sync_one (void ) {/* * This isn't an RCU grace period and hence the page-tables cannot be
@@ -163,8 +163,6 @@ static void tlb_remove_table_free(struct mmu_table_batch *batch)#else /* !CONFIG_MMU_GATHER_RCU_TABLE_FREE */ -static void tlb_remove_table_sync_one (void ) { } -static void tlb_remove_table_free (struct mmu_table_batch *batch) {__tlb_remove_table_free (batch);
net/9p/trans_fd.c +3 -3
@@ -118,7 +118,7 @@ struct p9_conn {struct list_head unsent_req_list;struct p9_req_t *rreq;struct p9_req_t *wreq; -char tmp_buf[7 ]; +char tmp_buf[P9_HDRSZ ];struct p9_fcall rc;int wpos;int wsize;
@@ -291,7 +291,7 @@ static void p9_read_work(struct work_struct *work)if (!m->rc.sdata) { m->rc.sdata = m->tmp_buf; m->rc.offset =0 ; - m->rc.capacity =7 ;/* start by reading header */ + m->rc.capacity =P9_HDRSZ ;/* start by reading header */ }clear_bit (Rpending, &m->wsched);
@@ -314,7 +314,7 @@ static void p9_read_work(struct work_struct *work)p9_debug (P9_DEBUG_TRANS ,"got new header\n" );/* Header size */ - m->rc.size =7 ; + m->rc.size =P9_HDRSZ ; err =p9_parse_header (&m->rc, &m->rc.size,NULL ,NULL ,0 );if (err) { p9_debug(P9_DEBUG_ERROR,
net/9p/trans_xen.c +9 -0
@@ -231,6 +231,14 @@ static void p9_xen_response(struct work_struct *work)continue ; } +if (h.size > req->rc.capacity) { +dev_warn (&priv->dev->dev, +"requested packet size too big: %d for tag %d with capacity %zd\n" , + h.size, h.tag, req->rc.capacity); + req->status =REQ_STATUS_ERROR ; + goto recv_error; + } +memcpy (&req->rc, &h,sizeof (h)); req->rc.offset =0 ;
@@ -240,6 +248,7 @@ static void p9_xen_response(struct work_struct *work) masked_prod, &masked_cons, XEN_9PFS_RING_SIZE(ring)); +recv_error:virt_mb (); cons += h.size; ring->intf->in_cons = cons;
net/bluetooth/6lowpan.c +1 -0
@@ -1010,6 +1010,7 @@ static int get_l2cap_conn(char *buf, bdaddr_t *addr, u8 *addr_type,hci_dev_lock (hdev); hcon =hci_conn_hash_lookup_le (hdev, addr, *addr_type);hci_dev_unlock (hdev); +hci_dev_put (hdev);if (!hcon)return -ENOENT ;
net/bluetooth/af_bluetooth.c +3 -1
@@ -736,7 +736,7 @@ static int __init bt_init(void) err =bt_sysfs_init ();if (err <0 ) -return err; + goto cleanup_led; err =sock_register (&bt_sock_family_ops);if (err)
@@ -772,6 +772,8 @@ static int __init bt_init(void)sock_unregister (PF_BLUETOOTH ); cleanup_sysfs:bt_sysfs_cleanup (); +cleanup_led: +bt_leds_cleanup ();return err; }
net/bluetooth/hci_core.c +2 -1
@@ -3799,7 +3799,8 @@ int hci_register_dev(struct hci_dev *hdev)hci_sock_dev_event (hdev,HCI_DEV_REG );hci_dev_hold (hdev); -if (!test_bit (HCI_QUIRK_NO_SUSPEND_NOTIFIER , &hdev->quirks)) { +if (!hdev->suspend_notifier.notifier_call && + !test_bit (HCI_QUIRK_NO_SUSPEND_NOTIFIER , &hdev->quirks)) { hdev->suspend_notifier.notifier_call = hci_suspend_notifier; error =register_pm_notifier (&hdev->suspend_notifier);if (error)
net/can/af_can.c +2 -2
@@ -680,7 +680,7 @@ static int can_rcv(struct sk_buff *skb, struct net_device *dev, {struct canfd_frame *cfd = (struct canfd_frame *)skb->data; -if (unlikely (dev->type !=ARPHRD_CAN || skb->len !=CAN_MTU )) { +if (unlikely (dev->type !=ARPHRD_CAN || !can_get_ml_priv (dev) || skb->len !=CAN_MTU )) {pr_warn_once ("PF_CAN: dropped non conform CAN skbuff: dev type %d, len %d\n" , dev->type, skb->len); goto free_skb;
@@ -706,7 +706,7 @@ static int canfd_rcv(struct sk_buff *skb, struct net_device *dev, {struct canfd_frame *cfd = (struct canfd_frame *)skb->data; -if (unlikely (dev->type !=ARPHRD_CAN || skb->len !=CANFD_MTU )) { +if (unlikely (dev->type !=ARPHRD_CAN || !can_get_ml_priv (dev) || skb->len !=CANFD_MTU )) {pr_warn_once ("PF_CAN: dropped non conform CAN FD skbuff: dev type %d, len %d\n" , dev->type, skb->len); goto free_skb;
net/dsa/tag_ksz.c +2 -1
@@ -22,7 +22,8 @@ static struct sk_buff *ksz_common_rcv(struct sk_buff *skb,if (!skb->dev)return NULL ; -pskb_trim_rcsum (skb, skb->len - len); +if (pskb_trim_rcsum (skb, skb->len - len)) +return NULL ; skb->offload_fwd_mark = true;
net/ipv4/fib_frontend.c +3 -0
@@ -830,6 +830,9 @@ static int rtm_to_fib_config(struct net *net, struct sk_buff *skb,return -EINVAL ; } +if (!cfg->fc_table) + cfg->fc_table =RT_TABLE_MAIN ; +return 0 ; errout:return err;
net/ipv4/fib_semantics.c +1 -0
@@ -423,6 +423,7 @@ static struct fib_info *fib_find_info(struct fib_info *nfi) nfi->fib_prefsrc == fi->fib_prefsrc && nfi->fib_priority == fi->fib_priority && nfi->fib_type == fi->fib_type && + nfi->fib_tb_id == fi->fib_tb_id &&memcmp (nfi->fib_metrics, fi->fib_metrics,sizeof (u32) *RTAX_MAX ) ==0 && !((nfi->fib_flags ^ fi->fib_flags) & ~RTNH_COMPARE_MASK) &&
net/ipv4/ip_gre.c +29 -19
66 lines not on this page · raw message
net/ipv6/ip6_output.c +5 -0
@@ -919,6 +919,9 @@ int ip6_fragment(struct net *net, struct sock *sk, struct sk_buff *skb,if (err <0 ) goto fail; +/* We prevent @rt from being freed. */ +rcu_read_lock (); +for (;;) {/* Prepare header of the next frame, * before previous one went down. */
@@ -942,6 +945,7 @@ int ip6_fragment(struct net *net, struct sock *sk, struct sk_buff *skb,if (err ==0 ) {IP6_INC_STATS (net,ip6_dst_idev (&rt->dst),IPSTATS_MIB_FRAGOKS ); +rcu_read_unlock ();return 0 ; }
@@ -949,6 +953,7 @@ int ip6_fragment(struct net *net, struct sock *sk, struct sk_buff *skb,IP6_INC_STATS (net,ip6_dst_idev (&rt->dst),IPSTATS_MIB_FRAGFAILS ); +rcu_read_unlock ();return err; slow_path_clean:
net/mac802154/iface.c +1 -0
@@ -661,6 +661,7 @@ ieee802154_if_add(struct ieee802154_local *local, const char *name, sdata->dev = ndev; sdata->wpan_dev.wpan_phy = local->hw.phy; sdata->local = local; +INIT_LIST_HEAD (&sdata->wpan_dev.list);/* setup type-dependent data */ ret =ieee802154_setup_sdata (sdata, type);
net/netfilter/nf_conntrack_netlink.c +10 -9
@@ -317,8 +317,13 @@ ctnetlink_dump_timestamp(struct sk_buff *skb, const struct nf_conn *ct) }#ifdef CONFIG_NF_CONNTRACK_MARK -static int ctnetlink_dump_mark (struct sk_buff *skb,u32 mark) +static int ctnetlink_dump_mark (struct sk_buff *skb,const struct nf_conn *ct) { +u32 mark =READ_ONCE (ct->mark); + +if (!mark) +return 0 ; +if (nla_put_be32 (skb,CTA_MARK ,htonl (mark))) goto nla_put_failure;return 0 ;
@@ -532,7 +537,7 @@ static int ctnetlink_dump_extinfo(struct sk_buff *skb,static int ctnetlink_dump_info (struct sk_buff *skb,struct nf_conn *ct) { if (ctnetlink_dump_status(skb, ct) < 0 || - ctnetlink_dump_mark(skb, READ_ONCE(ct->mark)) < 0 || + ctnetlink_dump_mark(skb, ct) < 0 || ctnetlink_dump_secctx(skb, ct) < 0 || ctnetlink_dump_id(skb, ct) < 0 || ctnetlink_dump_use(skb, ct) < 0 ||
@@ -711,7 +716,6 @@ ctnetlink_conntrack_event(unsigned int events, struct nf_ct_event *item)struct sk_buff *skb;unsigned int type;unsigned int flags =0 , group; -u32 mark;int err;if (events & (1 <<IPCT_DESTROY )) {
@@ -812,9 +816,8 @@ ctnetlink_conntrack_event(unsigned int events, struct nf_ct_event *item) }#ifdef CONFIG_NF_CONNTRACK_MARK - mark =READ_ONCE (ct->mark); -if ((events & (1 <<IPCT_MARK ) || mark) && -ctnetlink_dump_mark (skb, mark) <0 ) +if (events & (1 <<IPCT_MARK ) && +ctnetlink_dump_mark (skb, ct) <0 ) goto nla_put_failure;#endif nlmsg_end (skb, nlh);
@@ -2671,7 +2674,6 @@ static int __ctnetlink_glue_build(struct sk_buff *skb, struct nf_conn *ct) {const struct nf_conntrack_zone *zone;struct nlattr *nest_parms; -u32 mark; zone =nf_ct_zone (ct);
@@ -2729,8 +2731,7 @@ static int __ctnetlink_glue_build(struct sk_buff *skb, struct nf_conn *ct) goto nla_put_failure;#ifdef CONFIG_NF_CONNTRACK_MARK - mark =READ_ONCE (ct->mark); -if (mark &&ctnetlink_dump_mark (skb, mark) <0 ) +if (ctnetlink_dump_mark (skb, ct) <0 ) goto nla_put_failure;#endif if (ctnetlink_dump_labels (skb, ct) <0 )
net/netfilter/nft_set_pipapo.c +3 -2
@@ -1162,6 +1162,7 @@ static int nft_pipapo_insert(const struct net *net, const struct nft_set *set,struct nft_pipapo_match *m = priv->clone;u8 genmask =nft_genmask_next (net);struct nft_pipapo_field *f; +const u8 *start_p, *end_p;int i, bsize_max, err =0 ;if (nft_set_ext_exists (ext,NFT_SET_EXT_KEY_END ))
@@ -1202,9 +1203,9 @@ static int nft_pipapo_insert(const struct net *net, const struct nft_set *set, }/* Validate */ + start_p = start; + end_p = end;nft_pipapo_for_each_field (f, i, m) { -const u8 *start_p = start, *end_p = end; -if (f->rules >= (unsigned long )NFT_PIPAPO_RULE0_MAX )return -ENOSPC ;
net/nfc/nci/ntf.c +6 -0
@@ -218,6 +218,8 @@ static int nci_add_new_protocol(struct nci_dev *ndev, target->sens_res = nfca_poll->sens_res; target->sel_res = nfca_poll->sel_res; target->nfcid1_len = nfca_poll->nfcid1_len; +if (target->nfcid1_len >ARRAY_SIZE (target->nfcid1)) +return -EPROTO ;if (target->nfcid1_len >0 ) {memcpy (target->nfcid1, nfca_poll->nfcid1, target->nfcid1_len);
@@ -226,6 +228,8 @@ static int nci_add_new_protocol(struct nci_dev *ndev, nfcb_poll = (struct rf_tech_specific_params_nfcb_poll *)params; target->sensb_res_len = nfcb_poll->sensb_res_len; +if (target->sensb_res_len >ARRAY_SIZE (target->sensb_res)) +return -EPROTO ;if (target->sensb_res_len >0 ) {memcpy (target->sensb_res, nfcb_poll->sensb_res, target->sensb_res_len);
@@ -234,6 +238,8 @@ static int nci_add_new_protocol(struct nci_dev *ndev, nfcf_poll = (struct rf_tech_specific_params_nfcf_poll *)params; target->sensf_res_len = nfcf_poll->sensf_res_len; +if (target->sensf_res_len >ARRAY_SIZE (target->sensf_res)) +return -EPROTO ;if (target->sensf_res_len >0 ) {memcpy (target->sensf_res, nfcf_poll->sensf_res, target->sensf_res_len);
net/tipc/link.c +3 -1
@@ -2188,7 +2188,9 @@ static int tipc_link_proto_rcv(struct tipc_link *l, struct sk_buff *skb,if (tipc_own_addr (l->net) >msg_prevnode (hdr)) l->net_plane =msg_net_plane (hdr); -skb_linearize (skb); +if (skb_linearize (skb)) + goto exit; + hdr =buf_msg (skb); data =msg_data (hdr);
net/tipc/node.c +9 -3
@@ -1660,6 +1660,7 @@ int tipc_node_xmit(struct net *net, struct sk_buff_head *list,struct tipc_node *n;struct sk_buff_head xmitq;bool node_up = false; +struct net *peer_net;int bearer_id;int rc;
@@ -1676,18 +1677,23 @@ int tipc_node_xmit(struct net *net, struct sk_buff_head *list,return -EHOSTUNREACH ; } +rcu_read_lock ();tipc_node_read_lock (n); node_up =node_is_up (n); -if (node_up && n->peer_net &&check_net (n->peer_net)) { + peer_net = n->peer_net; +tipc_node_read_unlock (n); +if (node_up && peer_net &&check_net (peer_net)) {/* xmit inner linux container */ -tipc_lxc_xmit (n->peer_net, list); +tipc_lxc_xmit (peer_net, list);if (likely (skb_queue_empty (list))) { -tipc_node_read_unlock (n); +rcu_read_unlock ();tipc_node_put (n);return 0 ; } } +rcu_read_unlock (); +tipc_node_read_lock (n); bearer_id = n->active_links[selector &1 ];if (unlikely (bearer_id ==INVALID_BEARER_ID )) {tipc_node_read_unlock (n);
net/unix/diag.c +12 -8
@@ -113,14 +113,16 @@ static int sk_diag_show_rqlen(struct sock *sk, struct sk_buff *nlskb)return nla_put (nlskb,UNIX_DIAG_RQLEN ,sizeof (rql), &rql); } -static int sk_diag_dump_uid (struct sock *sk,struct sk_buff *nlskb) +static int sk_diag_dump_uid (struct sock *sk,struct sk_buff *nlskb, +struct user_namespace *user_ns) { -uid_t uid =from_kuid_munged (sk_user_ns (nlskb->sk),sock_i_uid (sk)); +uid_t uid =from_kuid_munged (user_ns,sock_i_uid (sk));return nla_put (nlskb,UNIX_DIAG_UID ,sizeof (uid_t), &uid); }static int sk_diag_fill (struct sock *sk,struct sk_buff *skb,struct unix_diag_req *req, -u32 portid,u32 seq,u32 flags,int sk_ino) +struct user_namespace *user_ns, +u32 portid,u32 seq,u32 flags,int sk_ino) {struct nlmsghdr *nlh;struct unix_diag_msg *rep;
@@ -166,7 +168,7 @@ static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct unix_diag_r goto out_nlmsg_trim;if ((req->udiag_show &UDIAG_SHOW_UID ) && -sk_diag_dump_uid (sk, skb)) +sk_diag_dump_uid (sk, skb, user_ns)) goto out_nlmsg_trim;nlmsg_end (skb, nlh);
@@ -178,7 +180,8 @@ static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct unix_diag_r }static int sk_diag_dump (struct sock *sk,struct sk_buff *skb,struct unix_diag_req *req, -u32 portid,u32 seq,u32 flags) +struct user_namespace *user_ns, +u32 portid,u32 seq,u32 flags) {int sk_ino;
@@ -189,7 +192,7 @@ static int sk_diag_dump(struct sock *sk, struct sk_buff *skb, struct unix_diag_rif (!sk_ino)return 0 ; -return sk_diag_fill (sk, skb, req, portid, seq, flags, sk_ino); +return sk_diag_fill (sk, skb, req, user_ns, portid, seq, flags, sk_ino); }static int unix_diag_dump (struct sk_buff *skb,struct netlink_callback *cb)
@@ -217,7 +220,7 @@ static int unix_diag_dump(struct sk_buff *skb, struct netlink_callback *cb) goto next;if (!(req->udiag_states & (1 << sk->sk_state))) goto next; -if (sk_diag_dump (sk, skb, req, +if (sk_diag_dump (sk, skb, req,sk_user_ns (skb->sk),NETLINK_CB (cb->skb).portid, cb->nlh->nlmsg_seq,NLM_F_MULTI ) <0 )
@@ -285,7 +288,8 @@ static int unix_diag_get_exact(struct sk_buff *in_skb,if (!rep) goto out; - err =sk_diag_fill (sk, rep, req,NETLINK_CB (in_skb).portid, + err =sk_diag_fill (sk, rep, req,sk_user_ns (NETLINK_CB (in_skb).sk), +NETLINK_CB (in_skb).portid, nlh->nlmsg_seq,0 , req->udiag_ino);if (err <0 ) {nlmsg_free (rep);
sound/core/seq/seq_memory.c +7 -4
@@ -112,15 +112,19 @@ EXPORT_SYMBOL(snd_seq_dump_var_event);* expand the variable length event to linear buffer space. */ -static int seq_copy_in_kernel (char **bufptr,const void *src,int size) +static int seq_copy_in_kernel (void *ptr,void *src,int size) { +char **bufptr = ptr; +memcpy (*bufptr, src, size); *bufptr += size;return 0 ; } -static int seq_copy_in_user (char __user **bufptr,const void *src,int size) +static int seq_copy_in_user (void *ptr,void *src,int size) { +char __user **bufptr = ptr; +if (copy_to_user (*bufptr, src, size))return -EFAULT ; *bufptr += size;
@@ -149,8 +153,7 @@ int snd_seq_expand_var_event(const struct snd_seq_event *event, int count, charreturn newlen; } err =snd_seq_dump_var_event (event, - in_kernel ? (snd_seq_dump_func_t )seq_copy_in_kernel : - (snd_seq_dump_func_t )seq_copy_in_user, + in_kernel ? seq_copy_in_kernel : seq_copy_in_user, &buf);return err <0 ? err : newlen; }
sound/soc/codecs/wm8962.c +8 -0
@@ -2489,6 +2489,14 @@ static void wm8962_configure_bclk(struct snd_soc_component *component)snd_soc_component_update_bits (component,WM8962_CLOCKING2 ,WM8962_SYSCLK_ENA_MASK ,WM8962_SYSCLK_ENA ); +/* DSPCLK_DIV field in WM8962_CLOCKING1 register is used to generate +* correct frequency of LRCLK and BCLK. Sometimes the read-only value +* can't be updated timely after enabling SYSCLK. This results in wrong +* calculation values. Delay is introduced here to wait for newest +* value from register. The time of the delay should be at least +* 500~1000us according to test. +*/ +usleep_range (500 ,1000 ); dspclk =snd_soc_component_read (component,WM8962_CLOCKING1 );if (snd_soc_component_get_bias_level (component) !=SND_SOC_BIAS_ON )
sound/soc/soc-pcm.c +2 -0
@@ -1154,6 +1154,8 @@ static void dpcm_be_reparent(struct snd_soc_pcm_runtime *fe,return ; be_substream =snd_soc_dpcm_get_substream (be, stream); +if (!be_substream) +return ;for_each_dpcm_fe (be, stream, dpcm) {if (dpcm->fe == fe)
tools/testing/selftests/net/fib_tests.sh +37 -0
@@ -1622,13 +1622,21 @@ ipv4_del_addr_test() $IP addr add dev dummy1 172.16.104.1/24 $IP addr add dev dummy1 172.16.104.11/24 + $IP addr add dev dummy1 172.16.104.12/24 + $IP addr add dev dummy1 172.16.104.13/24 $IP addr add dev dummy2 172.16.104.1/24 $IP addr add dev dummy2 172.16.104.11/24 + $IP addr add dev dummy2 172.16.104.12/24 $IP route add 172.16.105.0/24 via 172.16.104.2 src 172.16.104.11 + $IP route add 172.16.106.0/24 dev lo src 172.16.104.12 + $IP route add table 0 172.16.107.0/24 via 172.16.104.2 src 172.16.104.13 $IP route add vrf red 172.16.105.0/24 via 172.16.104.2 src 172.16.104.11 + $IP route add vrf red 172.16.106.0/24 dev lo src 172.16.104.12 set +e # removing address from device in vrf should only remove route from vrf table + echo " Regular FIB info" + $IP addr del dev dummy2 172.16.104.11/24 $IP ro ls vrf red | grep -q 172.16.105.0/24 log_test $? 1 "Route removed from VRF when source address deleted"
@@ -1646,6 +1654,35 @@ ipv4_del_addr_test() $IP ro ls vrf red | grep -q 172.16.105.0/24 log_test $? 0 "Route in VRF is not removed by address delete" + # removing address from device in vrf should only remove route from vrf + # table even when the associated fib info only differs in table ID + echo " Identical FIB info with different table ID" + + $IP addr del dev dummy2 172.16.104.12/24 + $IP ro ls vrf red | grep -q 172.16.106.0/24 + log_test $? 1 "Route removed from VRF when source address deleted" + + $IP ro ls | grep -q 172.16.106.0/24 + log_test $? 0 "Route in default VRF not removed" + + $IP addr add dev dummy2 172.16.104.12/24 + $IP route add vrf red 172.16.106.0/24 dev lo src 172.16.104.12 + + $IP addr del dev dummy1 172.16.104.12/24 + $IP ro ls | grep -q 172.16.106.0/24 + log_test $? 1 "Route removed in default VRF when source address deleted" + + $IP ro ls vrf red | grep -q 172.16.106.0/24 + log_test $? 0 "Route in VRF is not removed by address delete" + + # removing address from device in default vrf should remove route from + # the default vrf even when route was inserted with a table ID of 0. + echo " Table ID 0" + + $IP addr del dev dummy1 172.16.104.13/24 + $IP ro ls | grep -q 172.16.107.0/24 + log_test $? 1 "Route removed in default VRF when source address deleted" + $IP li del dummy1 $IP li del dummy2 cleanup
tools/testing/selftests/net/rtnetlink.sh +1 -1
@@ -782,7 +782,7 @@ kci_test_ipsec_offload() tmpl proto esp src $srcip dst $dstip spi 9 \ mode transport reqid 42 check_err $? - ip x p add dir out src $dstip/24 dst $srcip/24 \ + ip x p add dir in src $dstip/24 dst $srcip/24 \ tmpl proto esp src $dstip dst $srcip spi 9 \ mode transport reqid 42 check_err $?