Linux 5.4.208
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.208 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.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/Kconfig | 21 - arch/alpha/kernel/srmcons.c | 2 arch/arm/Kconfig | 1 arch/arm64/Kconfig | 1 arch/riscv/Makefile | 1 arch/s390/configs/debug_defconfig | 1 arch/x86/Kconfig | 1 arch/x86/include/asm/asm.h | 6 arch/x86/include/asm/refcount.h | 126 -------- arch/x86/include/asm/uaccess.h | 154 +++++++++- arch/x86/include/asm/uaccess_32.h | 27 - arch/x86/include/asm/uaccess_64.h | 108 ------- arch/x86/kernel/cpu/mce/core.c | 34 +- arch/x86/mm/extable.c | 49 --- drivers/crypto/chelsio/chtls/chtls_cm.c | 6 drivers/gpio/gpio-pca953x.c | 3 drivers/gpu/drm/i915/Kconfig.debug | 1 drivers/i2c/busses/i2c-cadence.c | 30 -- drivers/misc/lkdtm/refcount.c | 8 drivers/net/ethernet/emulex/benet/be_cmds.c | 10 drivers/net/ethernet/emulex/benet/be_cmds.h | 2 drivers/net/ethernet/emulex/benet/be_ethtool.c | 31 +- drivers/net/ethernet/intel/i40e/i40e_main.c | 13 drivers/net/ethernet/intel/iavf/iavf_txrx.c | 5 drivers/net/ethernet/intel/igc/igc_regs.h | 2 drivers/net/ethernet/intel/ixgbe/ixgbe.h | 1 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 3 drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 6 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c | 2 drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c | 3 drivers/net/usb/ax88179_178a.c | 16 - drivers/pci/controller/pci-hyperv.c | 100 +++++- drivers/pinctrl/stm32/pinctrl-stm32.c | 18 - drivers/power/reset/arm-versatile-reboot.c | 1 drivers/s390/char/keyboard.h | 4 drivers/spi/spi-bcm2835.c | 12 drivers/staging/mt7621-pinctrl/pinctrl-rt2880.c | 2 drivers/staging/speakup/spk_ttyio.c | 4 drivers/tty/cyclades.c | 6 drivers/tty/goldfish.c | 2 drivers/tty/moxa.c | 4 drivers/tty/pty.c | 14 drivers/tty/serial/lpc32xx_hs.c | 2 drivers/tty/serial/mvebu-uart.c | 25 - drivers/tty/tty_buffer.c | 66 ++-- drivers/tty/vt/keyboard.c | 6 drivers/tty/vt/vt.c | 2 drivers/xen/gntdev.c | 3 fs/dlm/lock.c | 3 include/linux/bitfield.h | 19 + include/linux/mm.h | 1 include/linux/mmap_lock.h | 54 +++ include/linux/refcount.h | 269 +++++++++++++++--- include/linux/tty_flip.h | 4 include/net/bluetooth/bluetooth.h | 65 ++++ include/net/inet_sock.h | 5 include/net/ip.h | 4 include/net/tcp.h | 9 include/net/udp.h | 2 kernel/bpf/core.c | 8 kernel/events/core.c | 45 ++- lib/refcount.c | 255 +---------------- mm/mempolicy.c | 2 net/bluetooth/rfcomm/core.c | 50 ++- net/bluetooth/rfcomm/sock.c | 46 --- net/bluetooth/sco.c | 30 -- net/core/filter.c | 4 net/core/secure_seq.c | 4 net/ipv4/af_inet.c | 4 net/ipv4/fib_semantics.c | 2 net/ipv4/icmp.c | 2 net/ipv4/igmp.c | 23 - net/ipv4/route.c | 2 net/ipv4/syncookies.c | 9 net/ipv4/tcp.c | 10 net/ipv4/tcp_fastopen.c | 4 net/ipv4/tcp_input.c | 51 ++- net/ipv4/tcp_ipv4.c | 2 net/ipv4/tcp_metrics.c | 3 net/ipv4/tcp_minisocks.c | 2 net/ipv4/tcp_output.c | 29 + net/ipv4/tcp_recovery.c | 6 net/ipv4/tcp_timer.c | 20 - net/ipv6/af_inet6.c | 2 net/ipv6/syncookies.c | 3 net/sctp/protocol.c | 2 net/tls/tls_device.c | 8 net/xfrm/xfrm_policy.c | 5 net/xfrm/xfrm_state.c | 2 security/integrity/ima/Kconfig | 12 security/integrity/ima/ima_policy.c | 4 sound/core/memalloc.c | 1 93 files changed, 1045 insertions(+), 989 deletions(-)
Al Viro (1):
x86: get rid of small constant size cases in raw_copy_{to,from}_user()
Alexander Aring (1):
dlm: fix pending remove if msg allocation fails
Ben Dooks (1):
riscv: add as-options for modules with assembly compontents
Dawid Lukwinski (1):
i40e: Fix erroneous adapter reinitialization during recovery process
Demi Marie Obenour (1):
xen/gntdev: Ignore failure to unmap INVALID_GRANT_HANDLE
Eric Dumazet (1):
bpf: Make sure mac_header was set before using it
Eric Snowberg (1):
lockdown: Fix kexec lockdown bypass with ima policy
Fabien Dessenne (1):
pinctrl: stm32: fix optional IRQ support to gpios
GUO Zihua (1):
ima: remove the IMA_TEMPLATE Kconfig option
Greg Kroah-Hartman (1):
Linux 5.4.208
Haibo Chen (1):
gpio: pca953x: only use single read/write for No AI mode
Hangyu Hua (1):
xfrm: xfrm_policy: fix a possible double xfrm_pols_put() in xfrm_bundle_lookup()
Hristo Venev (1):
be2net: Fix buffer overflow in be_get_module_eeprom
Ido Schimmel (1):
mlxsw: spectrum_router: Fix IPv4 nexthop gateway indication
Jan Beulich (1):
x86: drop bogus "cc" clobber from __try_cmpxchg_user_asm()
Jeffrey Hugo (4):
PCI: hv: Fix multi-MSI to allow more than one MSI vector
PCI: hv: Fix hv_arch_irq_unmask() for multi-MSI
PCI: hv: Reuse existing IRTE allocation in compose_msi_msg()
PCI: hv: Fix interrupt mapping for multi-MSI
Jiri Slaby (5):
tty: drivers/tty/, stop using tty_schedule_flip()
tty: the rest, stop using tty_schedule_flip()
tty: drop tty_schedule_flip()
tty: extract tty_flip_buffer_commit() from tty_flip_buffer_push()
tty: use new tty_insert_flip_string_and_push_buffer() in pty_write()
Jose Alonso (1):
net: usb: ax88179_178a needs FLAG_SEND_ZLP
Junxiao Chang (1):
net: stmmac: fix dma queue left shift overflow issue
Kuniyuki Iwashima (31):
ip: Fix data-races around sysctl_ip_no_pmtu_disc.
ip: Fix data-races around sysctl_ip_fwd_use_pmtu.
ip: Fix data-races around sysctl_ip_nonlocal_bind.
ip: Fix a data-race around sysctl_fwmark_reflect. tcp/dccp: Fix a data-race around sysctl_tcp_fwmark_accept.
tcp: Fix data-races around sysctl_tcp_mtu_probing.
tcp: Fix data-races around sysctl_tcp_base_mss.
tcp: Fix data-races around sysctl_tcp_min_snd_mss.
tcp: Fix a data-race around sysctl_tcp_mtu_probe_floor.
tcp: Fix a data-race around sysctl_tcp_probe_threshold.
tcp: Fix a data-race around sysctl_tcp_probe_interval.
igmp: Fix data-races around sysctl_igmp_llm_reports.
igmp: Fix a data-race around sysctl_igmp_max_memberships.
tcp: Fix data-races around sysctl_tcp_syncookies.
tcp: Fix data-races around sysctl_tcp_reordering.
tcp: Fix data-races around some timeout sysctl knobs.
tcp: Fix a data-race around sysctl_tcp_notsent_lowat.
tcp: Fix a data-race around sysctl_tcp_tw_reuse.
tcp: Fix data-races around sysctl_max_syn_backlog.
tcp: Fix data-races around sysctl_tcp_fastopen.
ipv4: Fix a data-race around sysctl_fib_multipath_use_neigh.
udp: Fix a data-race around sysctl_udp_l3mdev_accept.
tcp: Fix data-races around sysctl knobs related to SYN option.
tcp: Fix a data-race around sysctl_tcp_early_retrans.
tcp: Fix data-races around sysctl_tcp_recovery.
tcp: Fix a data-race around sysctl_tcp_thin_linear_timeouts.
tcp: Fix data-races around sysctl_tcp_slow_start_after_idle.
tcp: Fix a data-race around sysctl_tcp_retrans_collapse.
tcp: Fix a data-race around sysctl_tcp_stdurg.
tcp: Fix a data-race around sysctl_tcp_rfc1337.
tcp: Fix data-races around sysctl_tcp_max_reordering.
Lennert Buytenhek (1):
igc: Reinstate IGC_REMOVED logic and implement it properly
Luiz Augusto von Dentz (7):
Bluetooth: Add bt_skb_sendmsg helper
Bluetooth: Add bt_skb_sendmmsg helper
Bluetooth: SCO: Replace use of memcpy_from_msg with bt_skb_sendmsg
Bluetooth: RFCOMM: Replace use of memcpy_from_msg with bt_skb_sendmmsg
Bluetooth: Fix passing NULL to PTR_ERR
Bluetooth: SCO: Fix sco_send_frame returning skb->len
Bluetooth: Fix bt_skb_sendmmsg not allocating partial chunks
Marc Kleine-Budde (1):
spi: bcm2835: bcm2835_spi_handle_err(): fix NULL pointer deref for non DMA transfers
Miaoqian Lin (1):
power/reset: arm-versatile: Fix refcount leak in versatile_reboot_probe
Michel Lespinasse (1):
mmap locking API: initial implementation as rwsem wrappers
Pali Rohár (1):
serial: mvebu-uart: correctly report configured baudrate value
Peter Zijlstra (3):
perf/core: Fix data race between perf_event_set_output() and perf_mmap_close() x86/uaccess: Implement macros for CMPXCHG on user addresses bitfield.h: Fix "type of reg too small for mask" test
Piotr Skajewski (1):
ixgbe: Add locking to prevent panic when setting sriov_numvfs to zero
Przemyslaw Patynowski (1):
iavf: Fix handling of dummy receive descriptors
Robert Hancock (1):
i2c: cadence: Change large transfer count reset logic to be unconditional
Takashi Iwai (1):
ALSA: memalloc: Align buffer allocations in page size
Tariq Toukan (1):
net/tls: Fix race in TLS device down flow
Thomas Gleixner (1):
x86/mce: Deduplicate exception handling
Wang Cheng (1):
mm/mempolicy: fix uninit-value in mpol_rebind_policy()
Will Deacon (8):
locking/refcount: Define constants for saturation and max refcount values locking/refcount: Ensure integer operands are treated as signed
locking/refcount: Remove unused refcount_*_checked() variants
locking/refcount: Move the bulk of the REFCOUNT_FULL implementation into the <linux/refcount.h> header locking/refcount: Improve performance of generic REFCOUNT_FULL code locking/refcount: Move saturation warnings out of line
locking/refcount: Consolidate REFCOUNT_{MAX,SATURATED} definitions
locking/refcount: Consolidate implementations of refcount_t
William Dean (1):
pinctrl: ralink: Check for null return of devm_kcalloc
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 207 +SUBLEVEL = 208 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/Kconfig +0 -21
@@ -915,27 +915,6 @@ config STRICT_MODULE_RWX config ARCH_HAS_PHYS_TO_DMA bool -config ARCH_HAS_REFCOUNT - bool - help - An architecture selects this when it has implemented refcount_t - using open coded assembly primitives that provide an optimized - refcount_t implementation, possibly at the expense of some full - refcount state checks of CONFIG_REFCOUNT_FULL=y. - - The refcount overflow check behavior, however, must be retained. - Catching overflows is the primary security concern for protecting - against bugs in reference counts. - -config REFCOUNT_FULL - bool "Perform full reference count validation at the expense of speed" - help - Enabling this switches the refcounting infrastructure from a fast - unchecked atomic_t implementation to a fully state checked - implementation, which can be (slightly) slower but provides protections - against various use-after-free conditions that can be used in - security flaw exploits. - config HAVE_ARCH_COMPILER_H bool help
arch/alpha/kernel/srmcons.c +1 -1
@@ -59,7 +59,7 @@ srmcons_do_receive_chars(struct tty_port *port) }while ((result.bits.status &1 ) && (++loops <10 ));if (count) -tty_schedule_flip (port); +tty_flip_buffer_push (port);return count; }
arch/arm/Kconfig +0 -1
@@ -119,7 +119,6 @@ config ARM select OLD_SIGSUSPEND3 select PCI_SYSCALL if PCI select PERF_USE_VMALLOC - select REFCOUNT_FULL select RTC_LIB select SYS_SUPPORTS_APM_EMULATION # Above selects are sorted alphabetically; please add new ones
arch/arm64/Kconfig +0 -1
@@ -181,7 +181,6 @@ config ARM64 select PCI_SYSCALL if PCI select POWER_RESET select POWER_SUPPLY - select REFCOUNT_FULL select SPARSE_IRQ select SWIOTLB select SYSCTL_EXCEPTION_TRACE
arch/riscv/Makefile +1 -0
@@ -74,6 +74,7 @@ ifeq ($(CONFIG_PERF_EVENTS),y) endif KBUILD_CFLAGS_MODULE += $(call cc-option,-mno-relax) +KBUILD_AFLAGS_MODULE += $(call as-option,-Wa$(comma)-mno-relax) # GCC versions that support the "-mstrict-align" option default to allowing # unaligned accesses. While unaligned accesses are explicitly allowed in the
arch/s390/configs/debug_defconfig +0 -1
@@ -62,7 +62,6 @@ CONFIG_OPROFILE=m CONFIG_KPROBES=y CONFIG_JUMP_LABEL=y CONFIG_STATIC_KEYS_SELFTEST=y -CONFIG_REFCOUNT_FULL=y CONFIG_LOCK_EVENT_COUNTS=y CONFIG_MODULES=y CONFIG_MODULE_FORCE_LOAD=y
arch/x86/Kconfig +0 -1
@@ -73,7 +73,6 @@ config X86 select ARCH_HAS_PMEM_API if X86_64 select ARCH_HAS_PTE_DEVMAP if X86_64 select ARCH_HAS_PTE_SPECIAL - select ARCH_HAS_REFCOUNT select ARCH_HAS_UACCESS_FLUSHCACHE if X86_64 select ARCH_HAS_UACCESS_MCSAFE if X86_64 && X86_MCE select ARCH_HAS_SET_MEMORY
arch/x86/include/asm/asm.h +0 -6
@@ -141,9 +141,6 @@# define _ASM_EXTABLE_EX (from, to) \ _ASM_EXTABLE_HANDLE(from, to, ex_handler_ext) -# define _ASM_EXTABLE_REFCOUNT (from, to) \ - _ASM_EXTABLE_HANDLE(from, to, ex_handler_refcount) -# define _ASM_NOKPROBE (entry) \ .pushsection "_kprobe_blacklist","aw" ; \ _ASM_ALIGN ; \
@@ -172,9 +169,6 @@# define _ASM_EXTABLE_EX (from, to) \ _ASM_EXTABLE_HANDLE(from, to, ex_handler_ext) -# define _ASM_EXTABLE_REFCOUNT (from, to) \ - _ASM_EXTABLE_HANDLE(from, to, ex_handler_refcount) -/* For C file, we already have NOKPROBE_SYMBOL macro */ #endif
arch/x86/include/asm/refcount.h deleted +0 -126
126 lines not on this page · raw message
arch/x86/include/asm/uaccess.h +142 -12
172 lines not on this page · raw message
arch/x86/include/asm/uaccess_32.h +0 -27
@@ -23,33 +23,6 @@ raw_copy_to_user(void __user *to, const void *from, unsigned long n)static __always_inline unsigned long raw_copy_from_user (void *to,const void __user *from,unsigned long n) { -if (__builtin_constant_p (n)) { -unsigned long ret; - -switch (n) { -case 1 : - ret =0 ; -__uaccess_begin_nospec (); -__get_user_asm_nozero (*(u8 *)to, from, ret, -"b" ,"b" ,"=q" ,1 ); -__uaccess_end (); -return ret; -case 2 : - ret =0 ; -__uaccess_begin_nospec (); -__get_user_asm_nozero (*(u16 *)to, from, ret, -"w" ,"w" ,"=r" ,2 ); -__uaccess_end (); -return ret; -case 4 : - ret =0 ; -__uaccess_begin_nospec (); -__get_user_asm_nozero (*(u32 *)to, from, ret, -"l" ,"k" ,"=r" ,4 ); -__uaccess_end (); -return ret; - } - }return __copy_user_ll (to, (__force const void *)from, n); }
arch/x86/include/asm/uaccess_64.h +2 -106
119 lines not on this page · raw message
arch/x86/kernel/cpu/mce/core.c +17 -17
@@ -397,13 +397,16 @@ static int msr_to_offset(u32 msr)return -1 ; } -__visible bool ex_handler_rdmsr_fault(const struct exception_table_entry *fixup, -struct pt_regs *regs,int trapnr, -unsigned long error_code, -unsigned long fault_addr) +static void ex_handler_msr_mce (struct pt_regs *regs,bool wrmsr) { -pr_emerg ("MSR access error: RDMSR from 0x%x at rIP: 0x%lx (%pS)\n" , - (unsigned int )regs->cx, regs->ip, (void *)regs->ip); +if (wrmsr) { +pr_emerg ("MSR access error: WRMSR to 0x%x (tried to write 0x%08x%08x) at rIP: 0x%lx (%pS)\n" , + (unsigned int )regs->cx, (unsigned int )regs->dx, (unsigned int )regs->ax, + regs->ip, (void *)regs->ip); + }else { +pr_emerg ("MSR access error: RDMSR from 0x%x at rIP: 0x%lx (%pS)\n" , + (unsigned int )regs->cx, regs->ip, (void *)regs->ip); + }show_stack_regs (regs);
@@ -411,7 +414,14 @@ __visible bool ex_handler_rdmsr_fault(const struct exception_table_entry *fixup,while (true)cpu_relax (); +} +__visible bool ex_handler_rdmsr_fault(const struct exception_table_entry *fixup, +struct pt_regs *regs,int trapnr, +unsigned long error_code, +unsigned long fault_addr) +{ +ex_handler_msr_mce (regs, false);return true; }
@@ -447,17 +457,7 @@ __visible bool ex_handler_wrmsr_fault(const struct exception_table_entry *fixup,unsigned long error_code, unsigned long fault_addr) { - pr_emerg("MSR access error: WRMSR to 0x%x (tried to write 0x%08x%08x) at rIP: 0x%lx (%pS)\n", - (unsigned int )regs->cx, (unsigned int )regs->dx, (unsigned int )regs->ax, - regs->ip, (void *)regs->ip); - -show_stack_regs (regs); - -panic ("MCA architectural violation!\n" ); - -while (true) -cpu_relax (); - +ex_handler_msr_mce (regs ,true );return true; }
arch/x86/mm/extable.c +0 -49
55 lines not on this page · raw message
drivers/crypto/chelsio/chtls/chtls_cm.c +3 -3
@@ -1103,8 +1103,8 @@ static struct sock *chtls_recv_sock(struct sock *lsk, csk->sndbuf = newsk->sk_sndbuf; csk->smac_idx = ((struct port_info *)netdev_priv (ndev))->smt_idx;RCV_WSCALE (tp) =select_rcv_wscale (tcp_full_space (newsk), -sock_net (newsk)-> - ipv4.sysctl_tcp_window_scaling, +READ_ONCE (sock_net (newsk)-> + ipv4.sysctl_tcp_window_scaling), tp->window_clamp);neigh_release (n);inet_inherit_port (&tcp_hashinfo, lsk, newsk);
@@ -1235,7 +1235,7 @@ static void chtls_pass_accept_request(struct sock *sk,chtls_set_req_addr (oreq, iph->daddr, iph->saddr); ip_dsfield =ipv4_get_dsfield (iph);if (req->tcpopt.wsf <=14 && -sock_net (sk)->ipv4.sysctl_tcp_window_scaling) { +READ_ONCE (sock_net (sk)->ipv4.sysctl_tcp_window_scaling)) {inet_rsk (oreq)->wscale_ok =1 ;inet_rsk (oreq)->snd_wscale = req->tcpopt.wsf; }
drivers/gpio/gpio-pca953x.c +3 -0
@@ -379,6 +379,9 @@ static const struct regmap_config pca953x_i2c_regmap = { .reg_bits = 8, .val_bits = 8, + .use_single_read = true, + .use_single_write = true, + .readable_reg = pca953x_readable_register, .writeable_reg = pca953x_writeable_register, .volatile_reg = pca953x_volatile_register,
drivers/gpu/drm/i915/Kconfig.debug +0 -1
@@ -21,7 +21,6 @@ config DRM_I915_DEBUG depends on DRM_I915 select DEBUG_FS select PREEMPT_COUNT - select REFCOUNT_FULL select I2C_CHARDEV select STACKDEPOT select DRM_DP_AUX_CHARDEV
drivers/i2c/busses/i2c-cadence.c +5 -25
@@ -198,9 +198,9 @@ static inline bool cdns_is_holdquirk(struct cdns_i2c *id, bool hold_wrkaround)*/ static irqreturn_t cdns_i2c_isr (int irq,void *ptr) { -unsigned int isr_status, avail_bytes, updatetx; +unsigned int isr_status, avail_bytes;unsigned int bytes_to_send; -bool hold_quirk; +bool updatetx;struct cdns_i2c *id = ptr;/* Signal completion only after everything is updated */ int done_flag =0 ;
@@ -219,11 +219,7 @@ static irqreturn_t cdns_i2c_isr(int irq, void *ptr)* Check if transfer size register needs to be updated again for a * large data receive operation. */ - updatetx =0 ; -if (id->recv_count > id->curr_recv_count) - updatetx =1 ; - - hold_quirk = (id->quirks &CDNS_I2C_BROKEN_HOLD_BIT ) && updatetx; + updatetx = id->recv_count > id->curr_recv_count;/* When receiving, handle data interrupt and completion interrupt */ if (id->p_recv_buf &&
@@ -246,7 +242,7 @@ static irqreturn_t cdns_i2c_isr(int irq, void *ptr) id->recv_count--; id->curr_recv_count--; -if (cdns_is_holdquirk (id, hold_quirk)) +if (cdns_is_holdquirk (id, updatetx))break ; }
@@ -257,7 +253,7 @@ static irqreturn_t cdns_i2c_isr(int irq, void *ptr)* maintain transfer size non-zero while performing a large * receive operation. */ -if (cdns_is_holdquirk (id, hold_quirk)) { +if (cdns_is_holdquirk (id, updatetx)) {/* wait while fifo is full */ while (cdns_i2c_readreg (CDNS_I2C_XFER_SIZE_OFFSET ) != (id->curr_recv_count -CDNS_I2C_FIFO_DEPTH ))
@@ -279,22 +275,6 @@ static irqreturn_t cdns_i2c_isr(int irq, void *ptr) CDNS_I2C_XFER_SIZE_OFFSET); id->curr_recv_count = id->recv_count; } - }else if (id->recv_count && !hold_quirk && - !id->curr_recv_count) { - -/* Set the slave address in address register*/ -cdns_i2c_writereg (id->p_msg->addr &CDNS_I2C_ADDR_MASK , -CDNS_I2C_ADDR_OFFSET ); - -if (id->recv_count >CDNS_I2C_TRANSFER_SIZE ) { -cdns_i2c_writereg (CDNS_I2C_TRANSFER_SIZE , -CDNS_I2C_XFER_SIZE_OFFSET ); - id->curr_recv_count =CDNS_I2C_TRANSFER_SIZE ; - }else { -cdns_i2c_writereg (id->recv_count, -CDNS_I2C_XFER_SIZE_OFFSET ); - id->curr_recv_count = id->recv_count; - } }/* Clear hold (if not repeated start) and signal completion */
drivers/misc/lkdtm/refcount.c +0 -8
@@ -6,14 +6,6 @@#include "lkdtm.h" #include <linux/refcount.h> -#ifdef CONFIG_REFCOUNT_FULL -#define REFCOUNT_MAX (UINT_MAX - 1) -#define REFCOUNT_SATURATED UINT_MAX -#else -#define REFCOUNT_MAX INT_MAX -#define REFCOUNT_SATURATED (INT_MIN / 2) -#endif -static void overflow_check (refcount_t *ref) {switch (refcount_read (ref)) {
drivers/net/ethernet/emulex/benet/be_cmds.c +5 -5
@@ -2287,7 +2287,7 @@ int be_cmd_get_beacon_state(struct be_adapter *adapter, u8 port_num, u32 *state)/* Uses sync mcc */ int be_cmd_read_port_transceiver_data (struct be_adapter *adapter, -u8 page_num,u8 *data) +u8 page_num,u32 off,u32 len,u8 *data) {struct be_dma_mem cmd;struct be_mcc_wrb *wrb;
@@ -2321,10 +2321,10 @@ int be_cmd_read_port_transceiver_data(struct be_adapter *adapter, req->port =cpu_to_le32 (adapter->hba_port_num); req->page_num =cpu_to_le32 (page_num); status =be_mcc_notify_wait (adapter); -if (!status) { +if (!status && len >0 ) {struct be_cmd_resp_port_type *resp = cmd.va; -memcpy (data, resp->page_data,PAGE_DATA_LEN ); +memcpy (data, resp->page_data + off, len); } err:mutex_unlock (&adapter->mcc_lock);
@@ -2415,7 +2415,7 @@ int be_cmd_query_cable_type(struct be_adapter *adapter)int status; status =be_cmd_read_port_transceiver_data (adapter,TR_PAGE_A0 , - page_data); +0 ,PAGE_DATA_LEN , page_data);if (!status) {switch (adapter->phy.interface_type) {case PHY_TYPE_QSFP :
@@ -2440,7 +2440,7 @@ int be_cmd_query_sfp_info(struct be_adapter *adapter)int status; status =be_cmd_read_port_transceiver_data (adapter,TR_PAGE_A0 , - page_data); +0 ,PAGE_DATA_LEN , page_data);if (!status) {strlcpy (adapter->phy.vendor_name, page_data +SFP_VENDOR_NAME_OFFSET ,SFP_VENDOR_NAME_LEN -1 );
drivers/net/ethernet/emulex/benet/be_cmds.h +1 -1
@@ -2427,7 +2427,7 @@ int be_cmd_set_beacon_state(struct be_adapter *adapter, u8 port_num, u8 beacon,int be_cmd_get_beacon_state (struct be_adapter *adapter,u8 port_num,u32 *state);int be_cmd_read_port_transceiver_data (struct be_adapter *adapter, -u8 page_num,u8 *data); +u8 page_num,u32 off,u32 len,u8 *data);int be_cmd_query_cable_type (struct be_adapter *adapter);int be_cmd_query_sfp_info (struct be_adapter *adapter); int lancer_cmd_read_object(struct be_adapter *adapter, struct be_dma_mem *cmd,
drivers/net/ethernet/emulex/benet/be_ethtool.c +19 -12
@@ -1339,7 +1339,7 @@ static int be_get_module_info(struct net_device *netdev,return -EOPNOTSUPP ; status =be_cmd_read_port_transceiver_data (adapter,TR_PAGE_A0 , - page_data); +0 ,PAGE_DATA_LEN , page_data);if (!status) {if (!page_data[SFP_PLUS_SFF_8472_COMP ]) { modinfo->type =ETH_MODULE_SFF_8079 ;
@@ -1357,25 +1357,32 @@ static int be_get_module_eeprom(struct net_device *netdev, {struct be_adapter *adapter =netdev_priv (netdev);int status; +u32 begin, end;if (!check_privilege (adapter,MAX_PRIVILEGES ))return -EOPNOTSUPP ; - status =be_cmd_read_port_transceiver_data (adapter,TR_PAGE_A0 , - data); -if (status) - goto err; + begin = eeprom->offset; + end = eeprom->offset + eeprom->len; + +if (begin <PAGE_DATA_LEN ) { + status =be_cmd_read_port_transceiver_data (adapter,TR_PAGE_A0 , begin, +min_t (u32, end,PAGE_DATA_LEN ) - begin, + data); +if (status) + goto err; + + data +=PAGE_DATA_LEN - begin; + begin =PAGE_DATA_LEN ; + } -if (eeprom->offset + eeprom->len >PAGE_DATA_LEN ) { - status =be_cmd_read_port_transceiver_data (adapter, -TR_PAGE_A2 , - data + -PAGE_DATA_LEN ); +if (end >PAGE_DATA_LEN ) { + status =be_cmd_read_port_transceiver_data (adapter,TR_PAGE_A2 , + begin -PAGE_DATA_LEN , + end - begin, data);if (status) goto err; } -if (eeprom->offset) -memcpy (data, data + eeprom->offset, eeprom->len); err:return be_cmd_status (status); }
drivers/net/ethernet/intel/i40e/i40e_main.c +5 -8
@@ -10068,7 +10068,7 @@ static int i40e_reset(struct i40e_pf *pf)**/ static void i40e_rebuild (struct i40e_pf *pf,bool reinit,bool lock_acquired) { -int old_recovery_mode_bit =test_bit (__I40E_RECOVERY_MODE, pf->state); +const bool is_recovery_mode_reported =i40e_check_recovery_mode (pf);struct i40e_vsi *vsi = pf->vsi[pf->lan_vsi];struct i40e_hw *hw = &pf->hw;i40e_status ret;
@@ -10076,13 +10076,11 @@ static void i40e_rebuild(struct i40e_pf *pf, bool reinit, bool lock_acquired)int v;if (test_bit (__I40E_EMP_RESET_INTR_RECEIVED, pf->state) && -i40e_check_recovery_mode (pf)) { + is_recovery_mode_reported)i40e_set_ethtool_ops (pf->vsi[pf->lan_vsi]->netdev); - }if (test_bit (__I40E_DOWN, pf->state) && - !test_bit (__I40E_RECOVERY_MODE, pf->state) && - !old_recovery_mode_bit) + !test_bit (__I40E_RECOVERY_MODE, pf->state)) goto clear_recovery;dev_dbg (&pf->pdev->dev,"Rebuilding internal switch\n" );
@@ -10109,13 +10107,12 @@ static void i40e_rebuild(struct i40e_pf *pf, bool reinit, bool lock_acquired)* accordingly with regard to resources initialization * and deinitialization */ -if (test_bit (__I40E_RECOVERY_MODE, pf->state) || - old_recovery_mode_bit) { +if (test_bit (__I40E_RECOVERY_MODE, pf->state)) {if (i40e_get_capabilities (pf, i40e_aqc_opc_list_func_capabilities)) goto end_unlock; -if (test_bit (__I40E_RECOVERY_MODE, pf->state)) { +if (is_recovery_mode_reported) {/* we're staying in recovery mode so we'll reinitialize * misc vector here */
drivers/net/ethernet/intel/iavf/iavf_txrx.c +2 -3
@@ -1263,11 +1263,10 @@ static struct iavf_rx_buffer *iavf_get_rx_buffer(struct iavf_ring *rx_ring, {struct iavf_rx_buffer *rx_buffer; -if (!size) -return NULL ; - rx_buffer = &rx_ring->rx_bi[rx_ring->next_to_clean];prefetchw (rx_buffer->page); +if (!size) +return rx_buffer;/* we are reusing so sync this buffer for CPU use */ dma_sync_single_range_for_cpu(rx_ring->dev,
drivers/net/ethernet/intel/igc/igc_regs.h +2 -0
@@ -236,4 +236,6 @@ do { \#define array_rd32 (reg, offset) (igc_rd32(hw, (reg) + ((offset) << 2))) +#define IGC_REMOVED (h) unlikely(!(h)) +#endif
drivers/net/ethernet/intel/ixgbe/ixgbe.h +1 -0
@@ -773,6 +773,7 @@ struct ixgbe_adapter {#ifdef CONFIG_IXGBE_IPSEC struct ixgbe_ipsec *ipsec;#endif /* CONFIG_IXGBE_IPSEC */ +spinlock_t vfs_lock; };static inline u8 ixgbe_max_rss_indices (struct ixgbe_adapter *adapter)
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +3 -0
@@ -6396,6 +6396,9 @@ static int ixgbe_sw_init(struct ixgbe_adapter *adapter,/* n-tuple support exists, always init our spinlock */ spin_lock_init (&adapter->fdir_perfect_lock); +/* init spinlock to avoid concurrency of VF resources */ +spin_lock_init (&adapter->vfs_lock); +#ifdef CONFIG_IXGBE_DCB ixgbe_init_dcb (adapter);#endif
drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c +6 -0
@@ -204,10 +204,13 @@ void ixgbe_enable_sriov(struct ixgbe_adapter *adapter, unsigned int max_vfs)int ixgbe_disable_sriov (struct ixgbe_adapter *adapter) {unsigned int num_vfs = adapter->num_vfs, vf; +unsigned long flags;int rss; +spin_lock_irqsave (&adapter->vfs_lock, flags);/* set num VFs to 0 to prevent access to vfinfo */ adapter->num_vfs =0 ; +spin_unlock_irqrestore (&adapter->vfs_lock, flags);/* put the reference to all of the vf devices */ for (vf =0 ; vf < num_vfs; ++vf) {
@@ -1305,8 +1308,10 @@ static void ixgbe_rcv_ack_from_vf(struct ixgbe_adapter *adapter, u32 vf)void ixgbe_msg_task (struct ixgbe_adapter *adapter) {struct ixgbe_hw *hw = &adapter->hw; +unsigned long flags;u32 vf; +spin_lock_irqsave (&adapter->vfs_lock, flags);for (vf =0 ; vf < adapter->num_vfs; vf++) {/* process any reset requests */ if (!ixgbe_check_for_rst (hw, vf))
@@ -1320,6 +1325,7 @@ void ixgbe_msg_task(struct ixgbe_adapter *adapter)if (!ixgbe_check_for_ack (hw, vf))ixgbe_rcv_ack_from_vf (adapter, vf); } +spin_unlock_irqrestore (&adapter->vfs_lock, flags); }void ixgbe_disable_tx_rx (struct ixgbe_adapter *adapter)
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +1 -1
@@ -3871,7 +3871,7 @@ static bool mlxsw_sp_fi_is_gateway(const struct mlxsw_sp *mlxsw_sp, {const struct fib_nh *nh =fib_info_nh (fi,0 ); -return nh->fib_nh_scope ==RT_SCOPE_LINK || +return nh->fib_nh_gw_family ||mlxsw_sp_nexthop4_ipip_type (mlxsw_sp, nh,NULL ); }
drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c +3 -0
@@ -215,6 +215,9 @@ static void dwmac4_map_mtl_dma(struct mac_device_info *hw, u32 queue, u32 chan)if (queue ==0 || queue ==4 ) { value &= ~MTL_RXQ_DMA_Q04MDMACH_MASK ; value |=MTL_RXQ_DMA_Q04MDMACH (chan); + }else if (queue >4 ) { + value &= ~MTL_RXQ_DMA_QXMDMACH_MASK (queue -4 ); + value |=MTL_RXQ_DMA_QXMDMACH (chan, queue -4 ); }else { value &= ~MTL_RXQ_DMA_QXMDMACH_MASK (queue); value |=MTL_RXQ_DMA_QXMDMACH (chan, queue);
drivers/net/usb/ax88179_178a.c +8 -8
@@ -1690,7 +1690,7 @@ static const struct driver_info ax88179_info = { .link_reset = ax88179_link_reset, .reset = ax88179_reset, .stop = ax88179_stop, - .flags = FLAG_ETHER | FLAG_FRAMING_AX, + .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_SEND_ZLP, .rx_fixup = ax88179_rx_fixup, .tx_fixup = ax88179_tx_fixup, };
@@ -1703,7 +1703,7 @@ static const struct driver_info ax88178a_info = { .link_reset = ax88179_link_reset, .reset = ax88179_reset, .stop = ax88179_stop, - .flags = FLAG_ETHER | FLAG_FRAMING_AX, + .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_SEND_ZLP, .rx_fixup = ax88179_rx_fixup, .tx_fixup = ax88179_tx_fixup, };
@@ -1716,7 +1716,7 @@ static const struct driver_info cypress_GX3_info = { .link_reset = ax88179_link_reset, .reset = ax88179_reset, .stop = ax88179_stop, - .flags = FLAG_ETHER | FLAG_FRAMING_AX, + .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_SEND_ZLP, .rx_fixup = ax88179_rx_fixup, .tx_fixup = ax88179_tx_fixup, };
@@ -1729,7 +1729,7 @@ static const struct driver_info dlink_dub1312_info = { .link_reset = ax88179_link_reset, .reset = ax88179_reset, .stop = ax88179_stop, - .flags = FLAG_ETHER | FLAG_FRAMING_AX, + .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_SEND_ZLP, .rx_fixup = ax88179_rx_fixup, .tx_fixup = ax88179_tx_fixup, };
@@ -1742,7 +1742,7 @@ static const struct driver_info sitecom_info = { .link_reset = ax88179_link_reset, .reset = ax88179_reset, .stop = ax88179_stop, - .flags = FLAG_ETHER | FLAG_FRAMING_AX, + .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_SEND_ZLP, .rx_fixup = ax88179_rx_fixup, .tx_fixup = ax88179_tx_fixup, };
@@ -1755,7 +1755,7 @@ static const struct driver_info samsung_info = { .link_reset = ax88179_link_reset, .reset = ax88179_reset, .stop = ax88179_stop, - .flags = FLAG_ETHER | FLAG_FRAMING_AX, + .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_SEND_ZLP, .rx_fixup = ax88179_rx_fixup, .tx_fixup = ax88179_tx_fixup, };
@@ -1768,7 +1768,7 @@ static const struct driver_info lenovo_info = { .link_reset = ax88179_link_reset, .reset = ax88179_reset, .stop = ax88179_stop, - .flags = FLAG_ETHER | FLAG_FRAMING_AX, + .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_SEND_ZLP, .rx_fixup = ax88179_rx_fixup, .tx_fixup = ax88179_tx_fixup, };
@@ -1781,7 +1781,7 @@ static const struct driver_info belkin_info = { .link_reset = ax88179_link_reset, .reset = ax88179_reset, .stop = ax88179_stop, - .flags = FLAG_ETHER | FLAG_FRAMING_AX, + .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_SEND_ZLP, .rx_fixup = ax88179_rx_fixup, .tx_fixup = ax88179_tx_fixup, };
drivers/pci/controller/pci-hyperv.c +82 -18
198 lines not on this page · raw message
drivers/pinctrl/stm32/pinctrl-stm32.c +11 -7
@@ -1215,15 +1215,17 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl, bank->bank_ioport_nr = bank_ioport_nr;spin_lock_init (&bank->lock); -/* create irq hierarchical domain */ - bank->fwnode =of_node_to_fwnode (np); +if (pctl->domain) { +/* create irq hierarchical domain */ + bank->fwnode =of_node_to_fwnode (np); - bank->domain =irq_domain_create_hierarchy (pctl->domain,0 , -STM32_GPIO_IRQ_LINE , bank->fwnode, - &stm32_gpio_domain_ops, bank); + bank->domain =irq_domain_create_hierarchy (pctl->domain,0 ,STM32_GPIO_IRQ_LINE , + bank->fwnode, &stm32_gpio_domain_ops, + bank); -if (!bank->domain) -return -ENODEV ; +if (!bank->domain) +return -ENODEV ; + } err =gpiochip_add_data (&bank->gpio_chip, bank);if (err) {
@@ -1393,6 +1395,8 @@ int stm32_pctl_probe(struct platform_device *pdev) pctl->domain =stm32_pctrl_get_irq_domain (np);if (IS_ERR (pctl->domain))return PTR_ERR (pctl->domain); +if (!pctl->domain) +dev_warn (dev,"pinctrl without interrupt support\n" );/* hwspinlock is optional */ hwlock_id =of_hwspin_lock_get_id (pdev->dev.of_node,0 );
drivers/power/reset/arm-versatile-reboot.c +1 -0
@@ -146,6 +146,7 @@ static int __init versatile_reboot_probe(void) versatile_reboot_type = (enum versatile_reboot )reboot_id->data; syscon_regmap =syscon_node_to_regmap (np); +of_node_put (np);if (IS_ERR (syscon_regmap))return PTR_ERR (syscon_regmap);
drivers/s390/char/keyboard.h +2 -2
@@ -56,7 +56,7 @@ static inline void kbd_put_queue(struct tty_port *port, int ch) { tty_insert_flip_char(port, ch, 0); -tty_schedule_flip (port); +tty_flip_buffer_push (port); } static inline void
@@ -64,5 +64,5 @@ kbd_puts_queue(struct tty_port *port, char *cp) {while (*cp)tty_insert_flip_char (port, *cp++,0 ); -tty_schedule_flip (port); +tty_flip_buffer_push (port); }
drivers/spi/spi-bcm2835.c +8 -4
@@ -1159,10 +1159,14 @@ static void bcm2835_spi_handle_err(struct spi_controller *ctlr,struct bcm2835_spi *bs =spi_controller_get_devdata (ctlr);/* if an error occurred and we have an active dma, then terminate */ -dmaengine_terminate_sync (ctlr->dma_tx); - bs->tx_dma_active = false; -dmaengine_terminate_sync (ctlr->dma_rx); - bs->rx_dma_active = false; +if (ctlr->dma_tx) { +dmaengine_terminate_sync (ctlr->dma_tx); + bs->tx_dma_active = false; + } +if (ctlr->dma_rx) { +dmaengine_terminate_sync (ctlr->dma_rx); + bs->rx_dma_active = false; + }bcm2835_spi_undo_prologue (bs);/* and reset */
drivers/staging/mt7621-pinctrl/pinctrl-rt2880.c +2 -0
@@ -267,6 +267,8 @@ static int rt2880_pinmux_pins(struct rt2880_priv *p) p->func[i]->pin_count,sizeof (int ), GFP_KERNEL); +if (!p->func[i]->pins) +return -ENOMEM ;for (j =0 ; j < p->func[i]->pin_count; j++) p->func[i]->pins[j] = p->func[i]->pin_first + j;
drivers/staging/speakup/spk_ttyio.c +2 -2
@@ -88,7 +88,7 @@ static int spk_ttyio_receive_buf2(struct tty_struct *tty, }if (!ldisc_data->buf_free) -/* ttyio_in will tty_schedule_flip */ +/* ttyio_in will tty_flip_buffer_push */ return 0 ;/* Make sure the consumer has read buf before we have seen
@@ -325,7 +325,7 @@ static unsigned char ttyio_in(int timeout)mb (); ldisc_data->buf_free = true;/* Let TTY push more characters */ -tty_schedule_flip (speakup_tty->port); +tty_flip_buffer_push (speakup_tty->port);return rv; }
drivers/tty/cyclades.c +3 -3
@@ -556,7 +556,7 @@ static void cyy_chip_rx(struct cyclades_card *cinfo, int chip, } info->idle_stats.recv_idle = jiffies; } -tty_schedule_flip (port); +tty_flip_buffer_push (port);/* end of service */ cyy_writeb (info, CyRIR, save_xir &0x3f );
@@ -996,7 +996,7 @@ static void cyz_handle_rx(struct cyclades_port *info)mod_timer (&info->rx_full_timer, jiffies +1 );#endif info->idle_stats.recv_idle = jiffies; -tty_schedule_flip (&info->port); +tty_flip_buffer_push (&info->port);/* Update rx_get */ cy_writel (&buf_ctrl->rx_get, new_rx_get);
@@ -1172,7 +1172,7 @@ static void cyz_handle_cmd(struct cyclades_card *cinfo)if (delta_count)wake_up_interruptible (&info->port.delta_msr_wait);if (special_count) -tty_schedule_flip (&info->port); +tty_flip_buffer_push (&info->port); } }
drivers/tty/goldfish.c +1 -1
@@ -151,7 +151,7 @@ static irqreturn_t goldfish_tty_interrupt(int irq, void *dev_id) address = (unsigned long )(void *)buf;goldfish_tty_rw (qtty, address, count,0 ); -tty_schedule_flip (&qtty->port); +tty_flip_buffer_push (&qtty->port);return IRQ_HANDLED ; }
drivers/tty/moxa.c +2 -2
@@ -1385,7 +1385,7 @@ static int moxa_poll_port(struct moxa_port *p, unsigned int handle,if (inited && !tty_throttled (tty) &&MoxaPortRxQueue (p) >0 ) {/* RX */ MoxaPortReadData (p); -tty_schedule_flip (&p->port); +tty_flip_buffer_push (&p->port); } }else {clear_bit (EMPTYWAIT , &p->statusflags);
@@ -1410,7 +1410,7 @@ static int moxa_poll_port(struct moxa_port *p, unsigned int handle,if (tty && (intr & IntrBreak) && !I_IGNBRK (tty)) {/* BREAK */ tty_insert_flip_char (&p->port,0 ,TTY_BREAK ); -tty_schedule_flip (&p->port); +tty_flip_buffer_push (&p->port); }if (intr & IntrLine)
drivers/tty/pty.c +2 -12
@@ -111,21 +111,11 @@ static void pty_unthrottle(struct tty_struct *tty)static int pty_write (struct tty_struct *tty,const unsigned char *buf,int c) {struct tty_struct *to = tty->link; -unsigned long flags; -if (tty->stopped) +if (tty->stopped || !c)return 0 ; -if (c >0 ) { -spin_lock_irqsave (&to->port->lock, flags); -/* Stuff the data into the input queue of the other end */ - c =tty_insert_flip_string (to->port, buf, c); -spin_unlock_irqrestore (&to->port->lock, flags); -/* And shovel */ -if (c) -tty_flip_buffer_push (to->port); - } -return c; +return tty_insert_flip_string_and_push_buffer (to->port, buf, c); }/**
drivers/tty/serial/lpc32xx_hs.c +1 -1
@@ -345,7 +345,7 @@ static irqreturn_t serial_lpc32xx_interrupt(int irq, void *dev_id) LPC32XX_HSUART_IIR(port->membase)); port->icount.overrun++;tty_insert_flip_char (tport,0 ,TTY_OVERRUN ); -tty_schedule_flip (tport); +tty_flip_buffer_push (tport); }/* Data received? */
drivers/tty/serial/mvebu-uart.c +13 -12
@@ -443,13 +443,13 @@ static void mvebu_uart_shutdown(struct uart_port *port) } } -static int mvebu_uart_baud_rate_set (struct uart_port *port,unsigned int baud) +static unsigned int mvebu_uart_baud_rate_set (struct uart_port *port,unsigned int baud) {unsigned int d_divisor, m_divisor;u32 brdv, osamp;if (!port->uartclk) -return -EOPNOTSUPP ; +return 0 ;/* * The baudrate is derived from the UART clock thanks to two divisors:
@@ -473,7 +473,7 @@ static int mvebu_uart_baud_rate_set(struct uart_port *port, unsigned int baud) osamp &= ~OSAMP_DIVISORS_MASK ;writel (osamp, port->membase +UART_OSAMP ); -return 0 ; +return DIV_ROUND_CLOSEST (port->uartclk, d_divisor * m_divisor); } static void mvebu_uart_set_termios(struct uart_port *port,
@@ -510,15 +510,11 @@ static void mvebu_uart_set_termios(struct uart_port *port, max_baud =230400 ; baud =uart_get_baud_rate (port, termios, old, min_baud, max_baud); -if (mvebu_uart_baud_rate_set (port, baud)) { -/* No clock available, baudrate cannot be changed */ -if (old) - baud =uart_get_baud_rate (port, old,NULL , - min_baud, max_baud); - }else { -tty_termios_encode_baud_rate (termios, baud, baud); -uart_update_timeout (port, termios->c_cflag, baud); - } + baud =mvebu_uart_baud_rate_set (port, baud); + +/* In case baudrate cannot be changed, report previous old value */ +if (baud ==0 && old) + baud =tty_termios_baud_rate (old);/* Only the following flag changes are supported */ if (old) {
@@ -529,6 +525,11 @@ static void mvebu_uart_set_termios(struct uart_port *port, termios->c_cflag |=CS8 ; } +if (baud !=0 ) { +tty_termios_encode_baud_rate (termios, baud, baud); +uart_update_timeout (port, termios->c_cflag, baud); + } +spin_unlock_irqrestore (&port->lock, flags); }
drivers/tty/tty_buffer.c +44 -22
87 lines not on this page · raw message
drivers/tty/vt/keyboard.c +3 -3
@@ -310,7 +310,7 @@ int kbd_rate(struct kbd_repeat *rpt)static void put_queue (struct vc_data *vc,int ch) {tty_insert_flip_char (&vc->port, ch,0 ); -tty_schedule_flip (&vc->port); +tty_flip_buffer_push (&vc->port); }static void puts_queue (struct vc_data *vc,char *cp)
@@ -319,7 +319,7 @@ static void puts_queue(struct vc_data *vc, char *cp)tty_insert_flip_char (&vc->port, *cp,0 ); cp++; } -tty_schedule_flip (&vc->port); +tty_flip_buffer_push (&vc->port); }static void applkey (struct vc_data *vc,int key,char mode)
@@ -564,7 +564,7 @@ static void fn_inc_console(struct vc_data *vc)static void fn_send_intr (struct vc_data *vc) {tty_insert_flip_char (&vc->port,0 ,TTY_BREAK ); -tty_schedule_flip (&vc->port); +tty_flip_buffer_push (&vc->port); }static void fn_scroll_forw (struct vc_data *vc)
drivers/tty/vt/vt.c +1 -1
@@ -1837,7 +1837,7 @@ static void respond_string(const char *p, struct tty_port *port)tty_insert_flip_char (port, *p,0 ); p++; } -tty_schedule_flip (port); +tty_flip_buffer_push (port); }static void cursor_report (struct vc_data *vc,struct tty_struct *tty)
drivers/xen/gntdev.c +2 -1
@@ -413,7 +413,8 @@ static void __unmap_grant_pages_done(int result,unsigned int offset = data->unmap_ops - map->unmap_ops;for (i =0 ; i < data->count; i++) { -WARN_ON (map->unmap_ops[offset+i].status); +WARN_ON (map->unmap_ops[offset+i].status && + map->unmap_ops[offset+i].handle !=-1 );pr_debug ("unmap handle=%d st=%d\n" , map->unmap_ops[offset+i].handle, map->unmap_ops[offset+i].status);
fs/dlm/lock.c +2 -1
@@ -4067,13 +4067,14 @@ static void send_repeat_remove(struct dlm_ls *ls, char *ms_name, int len) rv =_create_message (ls,sizeof (struct dlm_message ) + len, dir_nodeid,DLM_MSG_REMOVE , &ms, &mh);if (rv) -return ; + goto out;memcpy (ms->m_extra, name, len); ms->m_hash = hash;send_message (mh, ms); +out:spin_lock (&ls->ls_remove_spin); ls->ls_remove_len =0 ;memset (ls->ls_remove_name,0 ,DLM_RESNAME_MAXLEN );
include/linux/bitfield.h +18 -1
@@ -41,6 +41,22 @@#define __bf_shf (x) (__builtin_ffsll(x) - 1) +#define __scalar_type_to_unsigned_cases (type) \ + unsigned type: (unsigned type)0, \ + signed type: (unsigned type)0 + +#define __unsigned_scalar_typeof (x) typeof( \ + _Generic((x), \ + char: (unsigned char)0, \ + __scalar_type_to_unsigned_cases(char), \ + __scalar_type_to_unsigned_cases(short), \ + __scalar_type_to_unsigned_cases(int), \ + __scalar_type_to_unsigned_cases(long), \ + __scalar_type_to_unsigned_cases(long long), \ + default: (x))) + +#define __bf_cast_unsigned (type, x) ((__unsigned_scalar_typeof(type))(x)) +#define __BF_FIELD_CHECK (_mask, _reg, _val, _pfx) \ ({ \ BUILD_BUG_ON_MSG(!__builtin_constant_p(_mask), \
@@ -49,7 +65,8 @@BUILD_BUG_ON_MSG (__builtin_constant_p (_val) ? \ ~((_mask) >>__bf_shf (_mask)) & (_val) :0 , \ _pfx"value too large for the field" ); \ -BUILD_BUG_ON_MSG ((_mask) > (typeof (_reg ))~0ull , \ +BUILD_BUG_ON_MSG (__bf_cast_unsigned (_mask, _mask) > \ +__bf_cast_unsigned (_reg, ~0ull ), \ _pfx"type of reg too small for mask" ); \__BUILD_BUG_ON_NOT_POWER_OF_2 ((_mask) + \ (1ULL <<__bf_shf (_mask))); \
include/linux/mm.h +1 -0
@@ -15,6 +15,7 @@#include <linux/atomic.h> #include <linux/debug_locks.h> #include <linux/mm_types.h> +#include <linux/mmap_lock.h> #include <linux/range.h> #include <linux/pfn.h> #include <linux/percpu-refcount.h>
include/linux/mmap_lock.h new file +54 -0
54 lines not on this page · raw message
include/linux/refcount.h +229 -40
328 lines not on this page · raw message
include/linux/tty_flip.h +3 -1
@@ -12,7 +12,6 @@ extern int tty_insert_flip_string_fixed_flag(struct tty_port *port,extern int tty_prepare_flip_string (struct tty_port *port,unsigned char **chars,size_t size);extern void tty_flip_buffer_push (struct tty_port *port); -void tty_schedule_flip (struct tty_port *port);int __tty_insert_flip_char (struct tty_port *port,unsigned char ch,char flag); static inline int tty_insert_flip_char(struct tty_port *port,
@@ -40,4 +39,7 @@ static inline int tty_insert_flip_string(struct tty_port *port,extern void tty_buffer_lock_exclusive (struct tty_port *port);extern void tty_buffer_unlock_exclusive (struct tty_port *port); +int tty_insert_flip_string_and_push_buffer (struct tty_port *port, +const unsigned char *chars,size_t cnt); +#endif /* _LINUX_TTY_FLIP_H */
include/net/bluetooth/bluetooth.h +65 -0
71 lines not on this page · raw message
include/net/inet_sock.h +3 -2
@@ -107,7 +107,8 @@ static inline struct inet_request_sock *inet_rsk(const struct request_sock *sk)static inline u32 inet_request_mark (const struct sock *sk,struct sk_buff *skb) { -if (!sk->sk_mark &&sock_net (sk)->ipv4.sysctl_tcp_fwmark_accept) +if (!sk->sk_mark && +READ_ONCE (sock_net (sk)->ipv4.sysctl_tcp_fwmark_accept))return skb->mark;return sk->sk_mark;
@@ -375,7 +376,7 @@ static inline bool inet_get_convert_csum(struct sock *sk)static inline bool inet_can_nonlocal_bind (struct net *net,struct inet_sock *inet) { -return net->ipv4.sysctl_ip_nonlocal_bind || +return READ_ONCE (net->ipv4.sysctl_ip_nonlocal_bind) || inet->freebind || inet->transparent; }
include/net/ip.h +2 -2
@@ -381,7 +381,7 @@ void ipfrag_init(void);void ip_static_sysctl_init (void );#define IP4_REPLY_MARK (net, mark) \ - ((net)->ipv4.sysctl_fwmark_reflect ? (mark) : 0) + (READ_ONCE((net)->ipv4.sysctl_fwmark_reflect) ? (mark) : 0)static inline bool ip_is_fragment (const struct iphdr *iph) {
@@ -442,7 +442,7 @@ static inline unsigned int ip_dst_mtu_maybe_forward(const struct dst_entry *dst,struct net *net =dev_net (dst->dev);unsigned int mtu; -if (net->ipv4.sysctl_ip_fwd_use_pmtu || +if (READ_ONCE (net->ipv4.sysctl_ip_fwd_use_pmtu) ||ip_mtu_locked (dst) || !forwarding)return dst_mtu (dst);
include/net/tcp.h +5 -4
@@ -1373,8 +1373,8 @@ static inline void tcp_slow_start_after_idle_check(struct sock *sk)struct tcp_sock *tp =tcp_sk (sk);s32 delta; -if (!sock_net (sk)->ipv4.sysctl_tcp_slow_start_after_idle || tp->packets_out || - ca_ops->cong_control) +if (!READ_ONCE (sock_net (sk)->ipv4.sysctl_tcp_slow_start_after_idle) || + tp->packets_out || ca_ops->cong_control)return ; delta = tcp_jiffies32 - tp->lsndtime;if (delta >inet_csk (sk)->icsk_rto)
@@ -1465,7 +1465,8 @@ static inline u32 keepalive_time_elapsed(const struct tcp_sock *tp)static inline int tcp_fin_time (const struct sock *sk) { -int fin_timeout =tcp_sk (sk)->linger2 ? :sock_net (sk)->ipv4.sysctl_tcp_fin_timeout; +int fin_timeout =tcp_sk (sk)->linger2 ? : +READ_ONCE (sock_net (sk)->ipv4.sysctl_tcp_fin_timeout);const int rto =inet_csk (sk)->icsk_rto;if (fin_timeout < (rto <<2 ) - (rto >>1 ))
@@ -1946,7 +1947,7 @@ void __tcp_v4_send_check(struct sk_buff *skb, __be32 saddr, __be32 daddr);static inline u32 tcp_notsent_lowat (const struct tcp_sock *tp) {struct net *net =sock_net ((struct sock *)tp); -return tp->notsent_lowat ?: net->ipv4.sysctl_tcp_notsent_lowat; +return tp->notsent_lowat ?:READ_ONCE (net->ipv4.sysctl_tcp_notsent_lowat); }/* @wake is one when sk_stream_write_space() calls us.
include/net/udp.h +1 -1
@@ -252,7 +252,7 @@ static inline bool udp_sk_bound_dev_eq(struct net *net, int bound_dev_if, int dif, int sdif) {#if IS_ENABLED (CONFIG_NET_L3_MASTER_DEV ) -return inet_bound_dev_eq (!!net->ipv4.sysctl_udp_l3mdev_accept, +return inet_bound_dev_eq (!!READ_ONCE (net->ipv4.sysctl_udp_l3mdev_accept), bound_dev_if, dif, sdif);#else return inet_bound_dev_eq (true, bound_dev_if, dif, sdif);
kernel/bpf/core.c +5 -3
@@ -64,11 +64,13 @@ void *bpf_internal_load_pointer_neg_helper(const struct sk_buff *skb, int k, uns {u8 *ptr =NULL ; -if (k >=SKF_NET_OFF ) +if (k >=SKF_NET_OFF ) { ptr =skb_network_header (skb) + k -SKF_NET_OFF ; -else if (k >=SKF_LL_OFF ) + }else if (k >=SKF_LL_OFF ) { +if (unlikely (!skb_mac_header_was_set (skb))) +return NULL ; ptr =skb_mac_header (skb) + k -SKF_LL_OFF ; - + }if (ptr >= skb->head && ptr + size <=skb_tail_pointer (skb))return ptr;
kernel/events/core.c +31 -14
89 lines not on this page · raw message
lib/refcount.c +27 -228
288 lines not on this page · raw message
mm/mempolicy.c +1 -1
@@ -348,7 +348,7 @@ static void mpol_rebind_preferred(struct mempolicy *pol,*/ static void mpol_rebind_policy (struct mempolicy *pol,const nodemask_t *newmask) { -if (!pol) +if (!pol || pol->mode ==MPOL_LOCAL )return ;if (!mpol_store_user_nodemask (pol) && !(pol->flags &MPOL_F_LOCAL ) &&nodes_equal (pol->w.cpuset_mems_allowed, *newmask))
net/bluetooth/rfcomm/core.c +43 -7
65 lines not on this page · raw message
net/bluetooth/rfcomm/sock.c +10 -36
56 lines not on this page · raw message
net/bluetooth/sco.c +10 -20
@@ -279,12 +279,10 @@ static int sco_connect(struct hci_dev *hdev, struct sock *sk)return err; } -static int sco_send_frame (struct sock *sk,void *buf,int len, -unsigned int msg_flags) +static int sco_send_frame (struct sock *sk,struct sk_buff *skb) {struct sco_conn *conn =sco_pi (sk)->conn; -struct sk_buff *skb; -int err; +int len = skb->len;/* Check outgoing MTU */ if (len > conn->mtu)
@@ -292,11 +290,6 @@ static int sco_send_frame(struct sock *sk, void *buf, int len,BT_DBG ("sk %p len %d" , sk, len); - skb =bt_skb_send_alloc (sk, len, msg_flags &MSG_DONTWAIT , &err); -if (!skb) -return err; - -memcpy (skb_put (skb, len), buf, len);hci_send_sco (conn->hcon, skb);return len;
@@ -715,7 +708,7 @@ static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg, size_t len) {struct sock *sk = sock->sk; -void *buf; +struct sk_buff *skb;int err;BT_DBG ("sock %p, sk %p" , sock, sk);
@@ -727,24 +720,21 @@ static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg,if (msg->msg_flags &MSG_OOB )return -EOPNOTSUPP ; - buf =kmalloc (len,GFP_KERNEL ); -if (!buf) -return -ENOMEM ; - -if (memcpy_from_msg (buf, msg, len)) { -kfree (buf); -return -EFAULT ; - } + skb =bt_skb_sendmsg (sk, msg, len, len,0 ,0 ); +if (IS_ERR (skb)) +return PTR_ERR (skb);lock_sock (sk);if (sk->sk_state ==BT_CONNECTED ) - err =sco_send_frame (sk, buf, len, msg->msg_flags); + err =sco_send_frame (sk, skb);else err = -ENOTCONN ;release_sock (sk); -kfree (buf); + +if (err <0 ) +kfree_skb (skb);return err; }
net/core/filter.c +2 -2
@@ -5839,7 +5839,7 @@ BPF_CALL_5(bpf_tcp_check_syncookie, struct sock *, sk, void *, iph, u32, iph_lenif (sk->sk_protocol !=IPPROTO_TCP || sk->sk_state !=TCP_LISTEN )return -EINVAL ; -if (!sock_net (sk)->ipv4.sysctl_tcp_syncookies) +if (!READ_ONCE (sock_net (sk)->ipv4.sysctl_tcp_syncookies))return -EINVAL ;if (!th->ack || th->rst || th->syn)
@@ -5914,7 +5914,7 @@ BPF_CALL_5(bpf_tcp_gen_syncookie, struct sock *, sk, void *, iph, u32, iph_len,if (sk->sk_protocol !=IPPROTO_TCP || sk->sk_state !=TCP_LISTEN )return -EINVAL ; -if (!sock_net (sk)->ipv4.sysctl_tcp_syncookies) +if (!READ_ONCE (sock_net (sk)->ipv4.sysctl_tcp_syncookies))return -ENOENT ;if (!th->syn || th->ack || th->fin || th->rst)
net/core/secure_seq.c +2 -2
@@ -65,7 +65,7 @@ u32 secure_tcpv6_ts_off(const struct net *net, .daddr = *(struct in6_addr *)daddr, }; -if (net->ipv4.sysctl_tcp_timestamps !=1 ) +if (READ_ONCE (net->ipv4.sysctl_tcp_timestamps) !=1 )return 0 ;ts_secret_init ();
@@ -121,7 +121,7 @@ EXPORT_SYMBOL(secure_ipv6_port_ephemeral);#ifdef CONFIG_INET u32 secure_tcp_ts_off (const struct net *net,__be32 saddr,__be32 daddr) { -if (net->ipv4.sysctl_tcp_timestamps !=1 ) +if (READ_ONCE (net->ipv4.sysctl_tcp_timestamps) !=1 )return 0 ;ts_secret_init ();
net/ipv4/af_inet.c +2 -2
@@ -219,7 +219,7 @@ int inet_listen(struct socket *sock, int backlog)* because the socket was in TCP_LISTEN state previously but * was shutdown() rather than close(). */ - tcp_fastopen =sock_net (sk)->ipv4.sysctl_tcp_fastopen; + tcp_fastopen =READ_ONCE (sock_net (sk)->ipv4.sysctl_tcp_fastopen);if ((tcp_fastopen &TFO_SERVER_WO_SOCKOPT1 ) && (tcp_fastopen &TFO_SERVER_ENABLE ) && !inet_csk (sk)->icsk_accept_queue.fastopenq.max_qlen) {
@@ -337,7 +337,7 @@ static int inet_create(struct net *net, struct socket *sock, int protocol, inet->hdrincl =1 ; } -if (net->ipv4.sysctl_ip_no_pmtu_disc) +if (READ_ONCE (net->ipv4.sysctl_ip_no_pmtu_disc)) inet->pmtudisc =IP_PMTUDISC_DONT ;else inet->pmtudisc =IP_PMTUDISC_WANT ;
net/ipv4/fib_semantics.c +1 -1
@@ -2209,7 +2209,7 @@ void fib_select_multipath(struct fib_result *res, int hash) }change_nexthops (fi) { -if (net->ipv4.sysctl_fib_multipath_use_neigh) { +if (READ_ONCE (net->ipv4.sysctl_fib_multipath_use_neigh)) {if (!fib_good_nh (nexthop_nh))continue ;if (!first) {
net/ipv4/icmp.c +1 -1
@@ -886,7 +886,7 @@ static bool icmp_unreach(struct sk_buff *skb)* values please see * Documentation/networking/ip-sysctl.txt */ -switch (net->ipv4.sysctl_ip_no_pmtu_disc) { +switch (READ_ONCE (net->ipv4.sysctl_ip_no_pmtu_disc)) {default :net_dbg_ratelimited ("%pI4: fragmentation needed and DF set\n" , &iph->daddr);
net/ipv4/igmp.c +14 -9
@@ -469,7 +469,8 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ip_mc_list *pmc,if (pmc->multiaddr ==IGMP_ALL_HOSTS )return skb; -if (ipv4_is_local_multicast (pmc->multiaddr) && !net->ipv4.sysctl_igmp_llm_reports) +if (ipv4_is_local_multicast (pmc->multiaddr) && + !READ_ONCE (net->ipv4.sysctl_igmp_llm_reports))return skb; mtu =READ_ONCE (dev->mtu);
@@ -595,7 +596,7 @@ static int igmpv3_send_report(struct in_device *in_dev, struct ip_mc_list *pmc)if (pmc->multiaddr ==IGMP_ALL_HOSTS )continue ;if (ipv4_is_local_multicast (pmc->multiaddr) && - !net->ipv4.sysctl_igmp_llm_reports) + !READ_ONCE (net->ipv4.sysctl_igmp_llm_reports))continue ;spin_lock_bh (&pmc->lock);if (pmc->sfcount[MCAST_EXCLUDE ])
@@ -738,7 +739,8 @@ static int igmp_send_report(struct in_device *in_dev, struct ip_mc_list *pmc,if (type ==IGMPV3_HOST_MEMBERSHIP_REPORT )return igmpv3_send_report (in_dev, pmc); -if (ipv4_is_local_multicast (group) && !net->ipv4.sysctl_igmp_llm_reports) +if (ipv4_is_local_multicast (group) && + !READ_ONCE (net->ipv4.sysctl_igmp_llm_reports))return 0 ;if (type ==IGMP_HOST_LEAVE_MESSAGE )
@@ -922,7 +924,8 @@ static bool igmp_heard_report(struct in_device *in_dev, __be32 group)if (group ==IGMP_ALL_HOSTS )return false; -if (ipv4_is_local_multicast (group) && !net->ipv4.sysctl_igmp_llm_reports) +if (ipv4_is_local_multicast (group) && + !READ_ONCE (net->ipv4.sysctl_igmp_llm_reports))return false;rcu_read_lock ();
@@ -1047,7 +1050,7 @@ static bool igmp_heard_query(struct in_device *in_dev, struct sk_buff *skb,if (im->multiaddr ==IGMP_ALL_HOSTS )continue ;if (ipv4_is_local_multicast (im->multiaddr) && - !net->ipv4.sysctl_igmp_llm_reports) + !READ_ONCE (net->ipv4.sysctl_igmp_llm_reports))continue ;spin_lock_bh (&im->lock);if (im->tm_running)
@@ -1298,7 +1301,8 @@ static void __igmp_group_dropped(struct ip_mc_list *im, gfp_t gfp)#ifdef CONFIG_IP_MULTICAST if (im->multiaddr ==IGMP_ALL_HOSTS )return ; -if (ipv4_is_local_multicast (im->multiaddr) && !net->ipv4.sysctl_igmp_llm_reports) +if (ipv4_is_local_multicast (im->multiaddr) && + !READ_ONCE (net->ipv4.sysctl_igmp_llm_reports))return ; reporter = im->reporter;
@@ -1340,7 +1344,8 @@ static void igmp_group_added(struct ip_mc_list *im)#ifdef CONFIG_IP_MULTICAST if (im->multiaddr ==IGMP_ALL_HOSTS )return ; -if (ipv4_is_local_multicast (im->multiaddr) && !net->ipv4.sysctl_igmp_llm_reports) +if (ipv4_is_local_multicast (im->multiaddr) && + !READ_ONCE (net->ipv4.sysctl_igmp_llm_reports))return ;if (in_dev->dead)
@@ -1644,7 +1649,7 @@ static void ip_mc_rejoin_groups(struct in_device *in_dev)if (im->multiaddr ==IGMP_ALL_HOSTS )continue ;if (ipv4_is_local_multicast (im->multiaddr) && - !net->ipv4.sysctl_igmp_llm_reports) + !READ_ONCE (net->ipv4.sysctl_igmp_llm_reports))continue ;/* a failover is happening and switches
@@ -2194,7 +2199,7 @@ static int __ip_mc_join_group(struct sock *sk, struct ip_mreqn *imr, count++; } err = -ENOBUFS ; -if (count >= net->ipv4.sysctl_igmp_max_memberships) +if (count >=READ_ONCE (net->ipv4.sysctl_igmp_max_memberships)) goto done; iml =sock_kmalloc (sk,sizeof (*iml),GFP_KERNEL );if (!iml)
net/ipv4/route.c +1 -1
@@ -1423,7 +1423,7 @@ u32 ip_mtu_from_fib_result(struct fib_result *res, __be32 daddr)struct fib_info *fi = res->fi;u32 mtu =0 ; -if (dev_net (dev)->ipv4.sysctl_ip_fwd_use_pmtu || +if (READ_ONCE (dev_net (dev)->ipv4.sysctl_ip_fwd_use_pmtu) || fi->fib_metrics->metrics[RTAX_LOCK -1 ] & (1 <<RTAX_MTU )) mtu = fi->fib_mtu;
net/ipv4/syncookies.c +5 -4
@@ -243,12 +243,12 @@ bool cookie_timestamp_decode(const struct net *net,return true; } -if (!net->ipv4.sysctl_tcp_timestamps) +if (!READ_ONCE (net->ipv4.sysctl_tcp_timestamps))return false; tcp_opt->sack_ok = (options &TS_OPT_SACK ) ?TCP_SACK_SEEN :0 ; -if (tcp_opt->sack_ok && !net->ipv4.sysctl_tcp_sack) +if (tcp_opt->sack_ok && !READ_ONCE (net->ipv4.sysctl_tcp_sack))return false;if ((options &TS_OPT_WSCALE_MASK ) ==TS_OPT_WSCALE_MASK )
@@ -257,7 +257,7 @@ bool cookie_timestamp_decode(const struct net *net, tcp_opt->wscale_ok =1 ; tcp_opt->snd_wscale = options &TS_OPT_WSCALE_MASK ; -return net->ipv4.sysctl_tcp_window_scaling !=0 ; +return READ_ONCE (net->ipv4.sysctl_tcp_window_scaling) !=0 ; }EXPORT_SYMBOL (cookie_timestamp_decode);
@@ -297,7 +297,8 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb)struct flowi4 fl4;u32 tsoff =0 ; -if (!sock_net (sk)->ipv4.sysctl_tcp_syncookies || !th->ack || th->rst) +if (!READ_ONCE (sock_net (sk)->ipv4.sysctl_tcp_syncookies) || + !th->ack || th->rst) goto out;if (tcp_synq_no_recent_overflow (sk))
net/ipv4/tcp.c +6 -4
@@ -437,7 +437,7 @@ void tcp_init_sock(struct sock *sk) tp->snd_cwnd_clamp = ~0 ; tp->mss_cache =TCP_MSS_DEFAULT ; - tp->reordering =sock_net (sk)->ipv4.sysctl_tcp_reordering; + tp->reordering =READ_ONCE (sock_net (sk)->ipv4.sysctl_tcp_reordering);tcp_assign_congestion_control (sk); tp->tsoffset =0 ;
@@ -1148,7 +1148,8 @@ static int tcp_sendmsg_fastopen(struct sock *sk, struct msghdr *msg,struct sockaddr *uaddr = msg->msg_name;int err, flags; -if (!(sock_net (sk)->ipv4.sysctl_tcp_fastopen &TFO_CLIENT_ENABLE ) || +if (!(READ_ONCE (sock_net (sk)->ipv4.sysctl_tcp_fastopen) & +TFO_CLIENT_ENABLE ) || (uaddr && msg->msg_namelen >=sizeof (uaddr->sa_family) && uaddr->sa_family ==AF_UNSPEC ))return -EOPNOTSUPP ;
@@ -3127,7 +3128,8 @@ static int do_tcp_setsockopt(struct sock *sk, int level,case TCP_FASTOPEN_CONNECT :if (val >1 || val <0 ) { err = -EINVAL ; - }else if (net->ipv4.sysctl_tcp_fastopen &TFO_CLIENT_ENABLE ) { + }else if (READ_ONCE (net->ipv4.sysctl_tcp_fastopen) & +TFO_CLIENT_ENABLE ) {if (sk->sk_state ==TCP_CLOSE ) tp->fastopen_connect = val;else
@@ -3466,7 +3468,7 @@ static int do_tcp_getsockopt(struct sock *sk, int level,case TCP_LINGER2 : val = tp->linger2;if (val >=0 ) - val = (val ? : net->ipv4.sysctl_tcp_fin_timeout) /HZ ; + val = (val ? :READ_ONCE (net->ipv4.sysctl_tcp_fin_timeout)) /HZ ;break ;case TCP_DEFER_ACCEPT : val = retrans_to_secs(icsk->icsk_accept_queue.rskq_defer_accept,
net/ipv4/tcp_fastopen.c +2 -2
@@ -349,7 +349,7 @@ static bool tcp_fastopen_no_cookie(const struct sock *sk, const struct dst_entry *dst, int flag) { - return (sock_net(sk)->ipv4.sysctl_tcp_fastopen & flag) || + return (READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_fastopen) & flag) || tcp_sk(sk)->fastopen_no_cookie || (dst && dst_metric(dst, RTAX_FASTOPEN_NO_COOKIE)); }
@@ -364,7 +364,7 @@ struct sock *tcp_try_fastopen(struct sock *sk, struct sk_buff *skb, const struct dst_entry *dst) {bool syn_data =TCP_SKB_CB (skb)->end_seq !=TCP_SKB_CB (skb)->seq +1 ; -int tcp_fastopen =sock_net (sk)->ipv4.sysctl_tcp_fastopen; +int tcp_fastopen =READ_ONCE (sock_net (sk)->ipv4.sysctl_tcp_fastopen);struct tcp_fastopen_cookie valid_foc = { .len =-1 };struct sock *child;
Lines of this file are not shown. View the raw message.
net/ipv4/tcp_input.c +31 -20
51 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.