Linux 5.4.150
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.150 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/alpha/include/asm/io.h | 6 arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts | 17 arch/arm64/boot/dts/marvell/armada-37xx.dtsi | 11 arch/arm64/kernel/process.c | 2 arch/m68k/include/asm/raw_io.h | 20 - arch/parisc/include/asm/page.h | 2 arch/sparc/kernel/ioport.c | 4 arch/sparc/kernel/mdesc.c | 3 arch/x86/xen/enlighten_pv.c | 15 block/blk-cgroup.c | 8 drivers/android/binder.c | 23 - drivers/edac/synopsys_edac.c | 2 drivers/fpga/machxo2-spi.c | 6 drivers/gpio/gpio-uniphier.c | 4 drivers/irqchip/Kconfig | 1 drivers/irqchip/irq-gic-v3-its.c | 2 drivers/mcb/mcb-core.c | 12 drivers/md/md.c | 5 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 8 drivers/net/ethernet/broadcom/bnxt/bnxt.h | 5 drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 2 drivers/net/ethernet/cadence/macb_pci.c | 2 drivers/net/ethernet/freescale/enetc/enetc.c | 5 drivers/net/ethernet/i825xx/82596.c | 2 drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 3 drivers/net/ethernet/qlogic/qed/qed_iwarp.c | 8 drivers/net/ethernet/qlogic/qed/qed_roce.c | 8 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 2 drivers/net/hamradio/6pack.c | 4 drivers/net/usb/hso.c | 12 drivers/nvme/host/multipath.c | 7 drivers/platform/x86/intel_punit_ipc.c | 3 drivers/scsi/lpfc/lpfc_attr.c | 3 drivers/scsi/qla2xxx/qla_init.c | 3 drivers/scsi/scsi_transport_iscsi.c | 8 drivers/spi/spi-tegra20-slink.c | 4 drivers/staging/greybus/uart.c | 62 +-- drivers/thermal/intel/int340x_thermal/processor_thermal_device.c | 5 drivers/thermal/thermal_core.c | 7 drivers/tty/serial/mvebu-uart.c | 2 drivers/tty/synclink_gt.c | 101 +---- drivers/usb/class/cdc-acm.c | 7 drivers/usb/class/cdc-acm.h | 2 drivers/usb/core/hcd.c | 29 + drivers/usb/dwc2/gadget.c | 193 +++++----- drivers/usb/gadget/udc/r8a66597-udc.c | 2 drivers/usb/host/xhci.c | 1 drivers/usb/musb/tusb6010.c | 1 drivers/usb/serial/cp210x.c | 1 drivers/usb/serial/mos7840.c | 2 drivers/usb/serial/option.c | 11 drivers/usb/storage/unusual_devs.h | 9 drivers/usb/storage/unusual_uas.h | 2 drivers/xen/balloon.c | 62 ++- fs/afs/dir.c | 46 -- fs/btrfs/space-info.c | 5 fs/cifs/connect.c | 5 fs/cifs/file.c | 2 fs/ocfs2/dlmglue.c | 3 fs/qnx4/dir.c | 69 ++- include/linux/compiler.h | 2 include/linux/usb/hcd.h | 2 include/trace/events/erofs.h | 6 kernel/bpf/verifier.c | 2 kernel/trace/blktrace.c | 8 net/ipv6/ip6_fib.c | 3 net/smc/smc_clc.c | 3 68 files changed, 508 insertions(+), 381 deletions(-)
Andreas Larsson (1):
sparc32: page align size in arch_dma_alloc
Andy Shevchenko (1):
platform/x86/intel: punit_ipc: Drop wrong use of ACPI_PTR()
Antoine Tenart (1):
thermal/drivers/int340x: Do not set a wrong tcc offset on resume
Anton Eidelman (1):
nvme-multipath: fix ANA state updates when a namespace is not present
Aya Levin (1):
net/mlx4_en: Don't allow aRFS for encapsulated packets
Baokun Li (1):
scsi: iscsi: Adjust iface sysfs attr detection
Bixuan Cui (1):
bpf: Add oversize check before call kvcalloc()
Carlo Lobrano (1):
USB: serial: option: add Telit LN920 compositions
Christoph Hellwig (1):
md: fix a lock order reversal in md_alloc
Claudiu Manoil (1):
enetc: Fix illegal access when reading affinity_hint
Dan Carpenter (6):
usb: gadget: r8a66597: fix a loop in set_feature()
usb: musb: tusb6010: uninitialized data in tusb_fifo_write_unaligned()
mcb: fix error handling in mcb_alloc_bus()
thermal/core: Potential buffer overflow in thermal_build_list_of_policies()
cifs: fix a sign extension bug
scsi: lpfc: Use correct scnprintf() limit
Dan Li (1):
arm64: Mark __stack_chk_guard as __ro_after_init
David Howells (1):
afs: Fix incorrect triggering of sillyrename on 3rd-party invalidation
Dmitry Bogdanov (1):
scsi: qla2xxx: Restore initiator in dual mode
Gao Xiang (1):
erofs: fix up erofs_lookup tracepoint
Greg Kroah-Hartman (1):
Linux 5.4.150
Guenter Roeck (5):
m68k: Double cast io functions to unsigned long
compiler.h: Introduce absolute_pointer macro
net: i825xx: Use absolute_pointer for memcpy from fixed memory location
alpha: Declare virt_to_phys and virt_to_bus parameter as pointer to volatile
net: 6pack: Fix tx timeout and slot time
Helge Deller (1):
parisc: Use absolute_pointer() to define PAGE0
Jan Beulich (1):
xen/x86: fix PV trap handling on secondary processors
Jesper Nilsson (1):
net: stmmac: allow CSR clock of 300MHz
Jiapeng Chong (1):
fpga: machxo2-spi: Fix missing error code in machxo2_write_complete()
Jiri Slaby (1):
tty: synclink_gt, drop unneeded forward declarations
Johan Hovold (3):
USB: cdc-acm: fix minor-number release
staging: greybus: uart: fix tty use after free
net: hso: fix muxed tty registration
Juergen Gross (2):
xen/balloon: use a kernel thread instead a workqueue xen/balloon: fix balloon kthread freezing
Julian Sikorski (1):
Re-enable UAS for LaCie Rugged USB3-FW with fk quirk
Kaige Fu (1):
irqchip/gic-v3-its: Fix potential VPE leak on error
Karsten Graul (1):
net/smc: add missing error check in smc_clc_prfx_set()
Kishon Vijay Abraham I (2):
usb: core: hcd: Add support for deferring roothub registration
xhci: Set HCD flag to defer primary roothub registration
Krzysztof Kozlowski (2):
USB: serial: mos7840: remove duplicated 0xac24 device ID
USB: serial: option: remove duplicate USB device ID
Kunihiko Hayashi (1):
gpio: uniphier: Fix void functions to remove return value
Li Jinlin (1):
blk-cgroup: fix UAF by grabbing blkcg lock before destroying blkg pd
Linus Torvalds (4):
sparc: avoid stringop-overread errors
qnx4: avoid stringop-overread errors
spi: Fix tegra20 build with CONFIG_PM=n
qnx4: work around gcc false positive warning bug
Michael Chan (1):
bnxt_en: Fix TX timeout when TX ring size is set to the smallest
Minas Harutyunyan (2):
usb: dwc2: gadget: Fix ISOC flow for BDMA and Slave
usb: dwc2: gadget: Fix ISOC transfer complete handling for DDMA
Ondrej Zary (1):
usb-storage: Add quirk for ScanLogic SL11R-IDE older than 2.6c
Pali Rohár (2):
serial: mvebu-uart: fix driver's tx_empty callback
arm64: dts: marvell: armada-37xx: Extend PCIe MEM space
Qu Wenruo (1):
btrfs: prevent __btrfs_dump_space_info() to underflow its free space
Randy Dunlap (2):
tty: synclink_gt: rename a conflicting function name irqchip/goldfish-pic: Select GENERIC_IRQ_CHIP to fix build
Sai Krishna Potthuri (1):
EDAC/synopsys: Fix wrong value type assignment for edac_mode
Shai Malin (1):
qed: rdma - don't wait for resources under hw error recovery flow
Slark Xiao (1):
USB: serial: option: add device id for Foxconn T99W265
Steve French (1):
cifs: fix incorrect check for null pointer in header_assemble
Todd Kjos (1):
binder: make sure fd closes complete
Tom Rix (1):
fpga: machxo2-spi: Return an error on failure
Tong Zhang (1):
net: macb: fix use after free on rmmod
Uwe Brandt (1):
USB: serial: cp210x: add ID for GW Instek GDM-834x Digital Multimeter
Wengang Wang (1):
ocfs2: drop acl cache for directories too
Zhihao Cheng (1):
blktrace: Fix uaf in blk_trace access after removing by sysfs
zhang kai (1):
ipv6: delay fib6_sernum increase in fib6_add
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 149 +SUBLEVEL = 150 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/alpha/include/asm/io.h +3 -3
@@ -61,7 +61,7 @@ extern inline void set_hae(unsigned long new_hae)* Change virtual addresses to physical addresses and vv. */ #ifdef USE_48_BIT_KSEG -static inline unsigned long virt_to_phys (void *address) +static inline unsigned long virt_to_phys (volatile void *address) {return (unsigned long )address -IDENT_ADDR ; }
@@ -71,7 +71,7 @@ static inline void * phys_to_virt(unsigned long address) return (void *) (address + IDENT_ADDR); }#else -static inline unsigned long virt_to_phys (void *address) +static inline unsigned long virt_to_phys (volatile void *address) {unsigned long phys = (unsigned long )address;
@@ -107,7 +107,7 @@ static inline void * phys_to_virt(unsigned long address)extern unsigned long __direct_map_base;extern unsigned long __direct_map_size; -static inline unsigned long __deprecated virt_to_bus (void *address) +static inline unsigned long __deprecated virt_to_bus (volatile void *address) {unsigned long phys =virt_to_phys (address);unsigned long bus = phys + __direct_map_base;
arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts +17 -0
@@ -138,6 +138,23 @@ max-link-speed = <2>; reset-gpios = <&gpiosb 3 GPIO_ACTIVE_LOW>; phys = <&comphy1 0>; + /* + * U-Boot port for Turris Mox has a bug which always expects that "ranges" DT property + * contains exactly 2 ranges with 3 (child) address cells, 2 (parent) address cells and + * 2 size cells and also expects that the second range starts at 16 MB offset. If these + * conditions are not met then U-Boot crashes during loading kernel DTB file. PCIe address + * space is 128 MB long, so the best split between MEM and IO is to use fixed 16 MB window + * for IO and the rest 112 MB (64+32+16) for MEM, despite that maximal IO size is just 64 kB. + * This bug is not present in U-Boot ports for other Armada 3700 devices and is fixed in + * U-Boot version 2021.07. See relevant U-Boot commits (the last one contains fix): + * https://source.denx.de/u-boot/u-boot/-/commit/cb2ddb291ee6fcbddd6d8f4ff49089dfe580f5d7 + * https://source.denx.de/u-boot/u-boot/-/commit/c64ac3b3185aeb3846297ad7391fc6df8ecd73bf + * https://source.denx.de/u-boot/u-boot/-/commit/4a82fca8e330157081fc132a591ebd99ba02ee33 + */ + #address-cells = <3>; + #size-cells = <2>; + ranges = <0x81000000 0 0xe8000000 0 0xe8000000 0 0x01000000 /* Port 0 IO */ + 0x82000000 0 0xe9000000 0 0xe9000000 0 0x07000000>; /* Port 0 MEM */ /* enabled by U-Boot if PCIe module is present */ status = "disabled";
arch/arm64/boot/dts/marvell/armada-37xx.dtsi +9 -2
@@ -487,8 +487,15 @@ #interrupt-cells = <1>; msi-parent = <&pcie0>; msi-controller; - ranges = <0x82000000 0 0xe8000000 0 0xe8000000 0 0x1000000 /* Port 0 MEM */ - 0x81000000 0 0xe9000000 0 0xe9000000 0 0x10000>; /* Port 0 IO*/ + /* + * The 128 MiB address range [0xe8000000-0xf0000000] is + * dedicated for PCIe and can be assigned to 8 windows + * with size a power of two. Use one 64 KiB window for + * IO at the end and the remaining seven windows + * (totaling 127 MiB) for MEM. + */ + ranges = <0x82000000 0 0xe8000000 0 0xe8000000 0 0x07f00000 /* Port 0 MEM */ + 0x81000000 0 0xefff0000 0 0xefff0000 0 0x00010000>; /* Port 0 IO */ interrupt-map-mask = <0 0 0 7>; interrupt-map = <0 0 0 1 &pcie_intc 0>, <0 0 0 2 &pcie_intc 1>,
arch/arm64/kernel/process.c +1 -1
@@ -56,7 +56,7 @@#if defined(CONFIG_STACKPROTECTOR ) && !defined(CONFIG_STACKPROTECTOR_PER_TASK )#include <linux/stackprotector.h> -unsigned long __stack_chk_guard__read_mostly ; +unsigned long __stack_chk_guard__ro_after_init ;EXPORT_SYMBOL (__stack_chk_guard);#endif
arch/m68k/include/asm/raw_io.h +10 -10
@@ -17,21 +17,21 @@* two accesses to memory, which may be undesirable for some devices. */ #define in_8 (addr) \ - ({ u8 __v = (*(__force volatile u8 *) (addr)); __v; }) + ({ u8 __v = (*(__force volatile u8 *) (unsigned long)(addr)); __v; })#define in_be16 (addr) \ - ({ u16 __v = (*(__force volatile u16 *) (addr)); __v; }) + ({ u16 __v = (*(__force volatile u16 *) (unsigned long)(addr)); __v; })#define in_be32 (addr) \ - ({ u32 __v = (*(__force volatile u32 *) (addr)); __v; }) + ({ u32 __v = (*(__force volatile u32 *) (unsigned long)(addr)); __v; })#define in_le16 (addr) \ - ({ u16 __v = le16_to_cpu(*(__force volatile __le16 *) (addr)); __v; }) + ({ u16 __v = le16_to_cpu(*(__force volatile __le16 *) (unsigned long)(addr)); __v; })#define in_le32 (addr) \ - ({ u32 __v = le32_to_cpu(*(__force volatile __le32 *) (addr)); __v; }) + ({ u32 __v = le32_to_cpu(*(__force volatile __le32 *) (unsigned long)(addr)); __v; }) -#define out_8 (addr,b) (void)((*(__force volatile u8 *) (addr)) = (b)) -#define out_be16 (addr,w) (void)((*(__force volatile u16 *) (addr)) = (w)) -#define out_be32 (addr,l) (void)((*(__force volatile u32 *) (addr)) = (l)) -#define out_le16 (addr,w) (void)((*(__force volatile __le16 *) (addr)) = cpu_to_le16(w)) -#define out_le32 (addr,l) (void)((*(__force volatile __le32 *) (addr)) = cpu_to_le32(l)) +#define out_8 (addr,b) (void)((*(__force volatile u8 *) (unsigned long)(addr)) = (b)) +#define out_be16 (addr,w) (void)((*(__force volatile u16 *) (unsigned long)(addr)) = (w)) +#define out_be32 (addr,l) (void)((*(__force volatile u32 *) (unsigned long)(addr)) = (l)) +#define out_le16 (addr,w) (void)((*(__force volatile __le16 *) (unsigned long)(addr)) = cpu_to_le16(w)) +#define out_le32 (addr,l) (void)((*(__force volatile __le32 *) (unsigned long)(addr)) = cpu_to_le32(l))#define raw_inb in_8#define raw_inw in_be16
arch/parisc/include/asm/page.h +1 -1
@@ -181,7 +181,7 @@ extern int npmem_ranges;#include <asm-generic/getorder.h> #include <asm/pdc.h> -#define PAGE0 ((struct zeropage *)__PAGE_OFFSET) +#define PAGE0 ((struct zeropage *)absolute_pointer(__PAGE_OFFSET))/* DEFINITION OF THE ZERO-PAGE (PAG0) */ /* based on work by Jason Eckhardt ([email protected]) */
arch/sparc/kernel/ioport.c +3 -1
@@ -356,7 +356,9 @@ void *arch_dma_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle,void arch_dma_free (struct device *dev,size_t size,void *cpu_addr,dma_addr_t dma_addr,unsigned long attrs) { -if (!sparc_dma_free_resource (cpu_addr,PAGE_ALIGN (size))) + size =PAGE_ALIGN (size); + +if (!sparc_dma_free_resource (cpu_addr, size))return ;dma_make_coherent (dma_addr, size);
arch/sparc/kernel/mdesc.c +2 -1
@@ -39,6 +39,7 @@ struct mdesc_hdr {u32 node_sz;/* node block size */ u32 name_sz;/* name block size */ u32 data_sz;/* data block size */ +char data[]; } __attribute__((aligned(16)));struct mdesc_elem {
@@ -612,7 +613,7 @@ EXPORT_SYMBOL(mdesc_get_node_info);static struct mdesc_elem *node_block (struct mdesc_hdr *mdesc) { -return (struct mdesc_elem *) (mdesc +1 ); +return (struct mdesc_elem *) mdesc->data; }static void *name_block (struct mdesc_hdr *mdesc)
arch/x86/xen/enlighten_pv.c +9 -6
@@ -727,8 +727,8 @@ static void xen_write_idt_entry(gate_desc *dt, int entrynum, const gate_desc *g)preempt_enable (); } -static void xen_convert_trap_info (const struct desc_ptr *desc, -struct trap_info *traps) +static unsigned xen_convert_trap_info (const struct desc_ptr *desc, +struct trap_info *traps,bool full) {unsigned in, out, count;
@@ -738,17 +738,18 @@ static void xen_convert_trap_info(const struct desc_ptr *desc,for (in = out =0 ; in < count; in++) {gate_desc *entry = (gate_desc *)(desc->address) + in; -if (cvt_gate_to_trap (in, entry, &traps[out])) +if (cvt_gate_to_trap (in, entry, &traps[out]) || full) out++; } - traps[out].address =0 ; + +return out; }void xen_copy_trap_info (struct trap_info *traps) {const struct desc_ptr *desc =this_cpu_ptr (&idt_desc); -xen_convert_trap_info (desc, traps); +xen_convert_trap_info (desc, traps, true); }/* Load a new IDT into Xen. In principle this can be per-CPU, so we
@@ -758,6 +759,7 @@ static void xen_load_idt(const struct desc_ptr *desc) {static DEFINE_SPINLOCK (lock);static struct trap_info traps[257 ]; +unsigned out;trace_xen_cpu_load_idt (desc);
@@ -765,7 +767,8 @@ static void xen_load_idt(const struct desc_ptr *desc)memcpy (this_cpu_ptr (&idt_desc), desc,sizeof (idt_desc)); -xen_convert_trap_info (desc, traps); + out =xen_convert_trap_info (desc, traps, false); +memset (&traps[out],0 ,sizeof (traps[0 ]));xen_mc_flush ();if (HYPERVISOR_set_trap_table (traps))
block/blk-cgroup.c +8 -0
@@ -1462,10 +1462,14 @@ int blkcg_activate_policy(struct request_queue *q,/* alloc failed, nothing's initialized yet, free everything */ spin_lock_irq (&q->queue_lock);list_for_each_entry (blkg, &q->blkg_list, q_node) { +struct blkcg *blkcg = blkg->blkcg; + +spin_lock (&blkcg->lock);if (blkg->pd[pol->plid]) { pol->pd_free_fn (blkg->pd[pol->plid]); blkg->pd[pol->plid] =NULL ; } +spin_unlock (&blkcg->lock); }spin_unlock_irq (&q->queue_lock); ret = -ENOMEM ;
@@ -1497,12 +1501,16 @@ void blkcg_deactivate_policy(struct request_queue *q,__clear_bit (pol->plid, q->blkcg_pols);list_for_each_entry (blkg, &q->blkg_list, q_node) { +struct blkcg *blkcg = blkg->blkcg; + +spin_lock (&blkcg->lock);if (blkg->pd[pol->plid]) {if (pol->pd_offline_fn) pol->pd_offline_fn (blkg->pd[pol->plid]); pol->pd_free_fn (blkg->pd[pol->plid]); blkg->pd[pol->plid] =NULL ; } +spin_unlock (&blkcg->lock); }spin_unlock_irq (&q->queue_lock);
drivers/android/binder.c +17 -6
@@ -2239,6 +2239,7 @@ static void binder_deferred_fd_close(int fd) }static void binder_transaction_buffer_release (struct binder_proc *proc, +struct binder_thread *thread,struct binder_buffer *buffer,binder_size_t failed_at,bool is_failure)
@@ -2398,8 +2399,16 @@ static void binder_transaction_buffer_release(struct binder_proc *proc, &proc->alloc, &fd, buffer, offset, sizeof(fd));WARN_ON (err); -if (!err) +if (!err) {binder_deferred_fd_close (fd); +/* +* Need to make sure the thread goes +* back to userspace to complete the +* deferred close +*/ +if (thread) + thread->looper_need_return = true; + } } }break ;default :
@@ -3469,7 +3478,7 @@ static void binder_transaction(struct binder_proc *proc, err_copy_data_failed:binder_free_txn_fixups (t);trace_binder_transaction_failed_buffer_release (t->buffer); -binder_transaction_buffer_release (target_proc, t->buffer, +binder_transaction_buffer_release (target_proc,NULL , t->buffer, buffer_offset, true);if (target_node)binder_dec_node_tmpref (target_node);
@@ -3546,7 +3555,9 @@ static void binder_transaction(struct binder_proc *proc,* Cleanup buffer and free it. */ static void -binder_free_buf (struct binder_proc *proc,struct binder_buffer *buffer) +binder_free_buf (struct binder_proc *proc, +struct binder_thread *thread, +struct binder_buffer *buffer) {binder_inner_proc_lock (proc);if (buffer->transaction) {
@@ -3574,7 +3585,7 @@ binder_free_buf(struct binder_proc *proc, struct binder_buffer *buffer)binder_node_inner_unlock (buf_node); }trace_binder_transaction_buffer_release (buffer); -binder_transaction_buffer_release (proc, buffer,0 , false); +binder_transaction_buffer_release (proc, thread, buffer,0 , false);binder_alloc_free_buf (&proc->alloc, buffer); }
@@ -3775,7 +3786,7 @@ static int binder_thread_write(struct binder_proc *proc, proc->pid, thread->pid, (u64 )data_ptr, buffer->debug_id, buffer->transaction ? "active" : "finished"); -binder_free_buf (proc, buffer); +binder_free_buf (proc, thread, buffer);break ; }
@@ -4463,7 +4474,7 @@ static int binder_thread_read(struct binder_proc *proc, buffer->transaction =NULL ;binder_cleanup_transaction (t,"fd fixups failed" ,BR_FAILED_REPLY ); -binder_free_buf (proc, buffer); +binder_free_buf (proc, thread, buffer); binder_debug(BINDER_DEBUG_FAILED_TRANSACTION, "%d:%d %stransaction %d fd fixups failed %d/%d, line %d\n", proc->pid, thread->pid,
drivers/edac/synopsys_edac.c +1 -1
@@ -782,7 +782,7 @@ static void init_csrows(struct mem_ctl_info *mci)for (j =0 ; j < csi->nr_channels; j++) { dimm = csi->channels[j]->dimm; - dimm->edac_mode =EDAC_FLAG_SECDED ; + dimm->edac_mode =EDAC_SECDED ; dimm->mtype = p_data->get_mtype (priv->baseaddr); dimm->nr_pages = (size >>PAGE_SHIFT ) / csi->nr_channels; dimm->grain =SYNPS_EDAC_ERR_GRAIN ;
drivers/fpga/machxo2-spi.c +5 -1
@@ -223,8 +223,10 @@ static int machxo2_write_init(struct fpga_manager *mgr, goto fail;get_status (spi, &status); -if (test_bit (FAIL , &status)) +if (test_bit (FAIL , &status)) { + ret = -EINVAL ; goto fail; + }dump_status_reg (&status);spi_message_init (&msg);
@@ -310,6 +312,7 @@ static int machxo2_write_complete(struct fpga_manager *mgr,dump_status_reg (&status);if (!test_bit (DONE , &status)) {machxo2_cleanup (mgr); + ret = -EINVAL ; goto fail; }
@@ -331,6 +334,7 @@ static int machxo2_write_complete(struct fpga_manager *mgr,break ;if (++refreshloop ==MACHXO2_MAX_REFRESH_LOOP ) {machxo2_cleanup (mgr); + ret = -EINVAL ; goto fail; } }while (1 );
drivers/gpio/gpio-uniphier.c +2 -2
@@ -188,7 +188,7 @@ static void uniphier_gpio_irq_mask(struct irq_data *data)uniphier_gpio_reg_update (priv,UNIPHIER_GPIO_IRQ_EN , mask,0 ); -return irq_chip_mask_parent (data); +irq_chip_mask_parent (data); }static void uniphier_gpio_irq_unmask (struct irq_data *data)
@@ -198,7 +198,7 @@ static void uniphier_gpio_irq_unmask(struct irq_data *data)uniphier_gpio_reg_update (priv,UNIPHIER_GPIO_IRQ_EN , mask, mask); -return irq_chip_unmask_parent (data); +irq_chip_unmask_parent (data); }static int uniphier_gpio_irq_set_type (struct irq_data *data,unsigned int type)
drivers/irqchip/Kconfig +1 -0
@@ -415,6 +415,7 @@ config MESON_IRQ_GPIO config GOLDFISH_PIC bool "Goldfish programmable interrupt controller" depends on MIPS && (GOLDFISH || COMPILE_TEST) + select GENERIC_IRQ_CHIP select IRQ_DOMAIN help Say yes here to enable Goldfish interrupt controller driver used
drivers/irqchip/irq-gic-v3-its.c +1 -1
@@ -3123,7 +3123,7 @@ static int its_vpe_irq_domain_alloc(struct irq_domain *domain, unsigned int virqif (err) {if (i >0 ) -its_vpe_irq_domain_free (domain, virq, i -1 ); +its_vpe_irq_domain_free (domain, virq, i);its_lpi_free (bitmap, base, nr_ids);its_free_prop_table (vprop_page);
drivers/mcb/mcb-core.c +6 -6
@@ -277,8 +277,8 @@ struct mcb_bus *mcb_alloc_bus(struct device *carrier) bus_nr =ida_simple_get (&mcb_ida,0 ,0 ,GFP_KERNEL );if (bus_nr <0 ) { - rc = bus_nr; - goto err_free; +kfree (bus); +return ERR_PTR (bus_nr); } bus->bus_nr = bus_nr;
@@ -293,12 +293,12 @@ struct mcb_bus *mcb_alloc_bus(struct device *carrier)dev_set_name (&bus->dev,"mcb:%d" , bus_nr); rc =device_add (&bus->dev);if (rc) - goto err_free; + goto err_put;return bus; -err_free: -put_device (carrier); -kfree (bus); + +err_put: +put_device (&bus->dev);return ERR_PTR (rc); }EXPORT_SYMBOL_GPL (mcb_alloc_bus);
drivers/md/md.c +0 -5
@@ -5535,10 +5535,6 @@ static int md_alloc(dev_t dev, char *name)*/ disk->flags |=GENHD_FL_EXT_DEVT ; mddev->gendisk = disk; -/* As soon as we call add_disk(), another thread could get -* through to md_open, so make sure it doesn't get too far -*/ -mutex_lock (&mddev->open_mutex);add_disk (disk); error =kobject_add (&mddev->kobj, &disk_to_dev (disk)->kobj,"%s" ,"md" );
@@ -5553,7 +5549,6 @@ static int md_alloc(dev_t dev, char *name)if (mddev->kobj.sd &&sysfs_create_group (&mddev->kobj, &md_bitmap_group))pr_debug ("pointless warning\n" ); -mutex_unlock (&mddev->open_mutex); abort:mutex_unlock (&disks_mutex);if (!error && mddev->kobj.sd) {
drivers/net/ethernet/broadcom/bnxt/bnxt.c +4 -4
@@ -372,7 +372,7 @@ static bool bnxt_txr_netif_try_stop_queue(struct bnxt *bp,* netif_tx_queue_stopped(). */ smp_mb (); -if (bnxt_tx_avail (bp, txr) > bp->tx_wake_thresh) { +if (bnxt_tx_avail (bp, txr) >= bp->tx_wake_thresh) {netif_tx_wake_queue (txq);return false; }
@@ -701,7 +701,7 @@ static void bnxt_tx_int(struct bnxt *bp, struct bnxt_napi *bnapi, int nr_pkts)smp_mb ();if (unlikely (netif_tx_queue_stopped (txq)) && -bnxt_tx_avail (bp, txr) > bp->tx_wake_thresh && +bnxt_tx_avail (bp, txr) >= bp->tx_wake_thresh &&READ_ONCE (txr->dev_state) !=BNXT_DEV_STATE_CLOSING )netif_tx_wake_queue (txq); }
@@ -2206,7 +2206,7 @@ static int __bnxt_poll_work(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,if (TX_CMP_TYPE (txcmp) ==CMP_TYPE_TX_L2_CMP ) { tx_pkts++;/* return full budget so NAPI will complete. */ -if (unlikely (tx_pkts > bp->tx_wake_thresh)) { +if (unlikely (tx_pkts >= bp->tx_wake_thresh)) { rx_pkts = budget; raw_cons =NEXT_RAW_CMP (raw_cons);if (budget)
@@ -3329,7 +3329,7 @@ static int bnxt_init_tx_rings(struct bnxt *bp)u16 i; bp->tx_wake_thresh =max_t (int, bp->tx_ring_size /2 , -MAX_SKB_FRAGS +1 ); +BNXT_MIN_TX_DESC_CNT );for (i =0 ; i < bp->tx_nr_rings; i++) {struct bnxt_tx_ring_info *txr = &bp->tx_ring[i];
drivers/net/ethernet/broadcom/bnxt/bnxt.h +5 -0
@@ -601,6 +601,11 @@ struct nqe_cn {#define BNXT_MAX_RX_JUM_DESC_CNT (RX_DESC_CNT * MAX_RX_AGG_PAGES - 1)#define BNXT_MAX_TX_DESC_CNT (TX_DESC_CNT * MAX_TX_PAGES - 1) +/* Minimum TX BDs for a TX packet with MAX_SKB_FRAGS + 1. We need one extra +* BD because the first TX BD is always a long BD. +*/ +#define BNXT_MIN_TX_DESC_CNT (MAX_SKB_FRAGS + 2) +#define RX_RING (x) (((x) & ~(RX_DESC_CNT - 1)) >> (BNXT_PAGE_SHIFT - 4))#define RX_IDX (x) ((x) & (RX_DESC_CNT - 1))
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +1 -1
@@ -744,7 +744,7 @@ static int bnxt_set_ringparam(struct net_device *dev,if ((ering->rx_pending >BNXT_MAX_RX_DESC_CNT ) || (ering->tx_pending >BNXT_MAX_TX_DESC_CNT ) || - (ering->tx_pending <=MAX_SKB_FRAGS )) + (ering->tx_pending <BNXT_MIN_TX_DESC_CNT ))return -EINVAL ;if (netif_running (dev))
drivers/net/ethernet/cadence/macb_pci.c +1 -1
@@ -112,9 +112,9 @@ static void macb_remove(struct pci_dev *pdev)struct platform_device *plat_dev =pci_get_drvdata (pdev);struct macb_platform_data *plat_data =dev_get_platdata (&plat_dev->dev); -platform_device_unregister (plat_dev);clk_unregister (plat_data->pclk);clk_unregister (plat_data->hclk); +platform_device_unregister (plat_dev); }static const struct pci_device_id dev_id_table[] = {
drivers/net/ethernet/freescale/enetc/enetc.c +1 -4
@@ -1222,7 +1222,6 @@ static void enetc_clear_bdrs(struct enetc_ndev_priv *priv)static int enetc_setup_irqs (struct enetc_ndev_priv *priv) {struct pci_dev *pdev = priv->si->pdev; -cpumask_t cpu_mask;int i, j, err;for (i =0 ; i < priv->bdr_int_num; i++) {
@@ -1249,9 +1248,7 @@ static int enetc_setup_irqs(struct enetc_ndev_priv *priv)enetc_wr (hw,ENETC_SIMSITRV (idx), entry); } -cpumask_clear (&cpu_mask); -cpumask_set_cpu (i %num_online_cpus (), &cpu_mask); -irq_set_affinity_hint (irq, &cpu_mask); +irq_set_affinity_hint (irq,get_cpu_mask (i %num_online_cpus ())); }return 0 ;
drivers/net/ethernet/i825xx/82596.c +1 -1
@@ -1155,7 +1155,7 @@ struct net_device * __init i82596_probe(int unit) err = -ENODEV ; goto out; } -memcpy (eth_addr, (void *)0xfffc1f2c ,ETH_ALEN );/* YUCK! Get addr from NOVRAM */ +memcpy (eth_addr,absolute_pointer (0xfffc1f2c ),ETH_ALEN );/* YUCK! Get addr from NOVRAM */ dev->base_addr =MVME_I596_BASE ; dev->irq = (unsigned ) MVME16x_IRQ_I596; goto found;
drivers/net/ethernet/mellanox/mlx4/en_netdev.c +3 -0
@@ -371,6 +371,9 @@ mlx4_en_filter_rfs(struct net_device *net_dev, const struct sk_buff *skb,int nhoff =skb_network_offset (skb);int ret =0 ; +if (skb->encapsulation) +return -EPROTONOSUPPORT ; +if (skb->protocol !=htons (ETH_P_IP ))return -EPROTONOSUPPORT ;
drivers/net/ethernet/qlogic/qed/qed_iwarp.c +8 -0
@@ -1307,6 +1307,14 @@ qed_iwarp_wait_cid_map_cleared(struct qed_hwfn *p_hwfn, struct qed_bmap *bmap) prev_weight = weight;while (weight) { +/* If the HW device is during recovery, all resources are +* immediately reset without receiving a per-cid indication +* from HW. In this case we don't expect the cid_map to be +* cleared. +*/ +if (p_hwfn->cdev->recov_in_prog) +return 0 ; +msleep (QED_IWARP_MAX_CID_CLEAN_TIME ); weight =bitmap_weight (bmap->bitmap, bmap->max_count);
drivers/net/ethernet/qlogic/qed/qed_roce.c +8 -0
@@ -107,6 +107,14 @@ void qed_roce_stop(struct qed_hwfn *p_hwfn)* Beyond the added delay we clear the bitmap anyway. */ while (bitmap_weight (rcid_map->bitmap, rcid_map->max_count)) { +/* If the HW device is during recovery, all resources are +* immediately reset without receiving a per-cid indication +* from HW. In this case we don't expect the cid bitmap to be +* cleared. +*/ +if (p_hwfn->cdev->recov_in_prog) +return ; +msleep (100 );if (wait_count++ >20 ) {DP_NOTICE (p_hwfn,"cid bitmap wait timed out\n" );
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +1 -1
@@ -225,7 +225,7 @@ static void stmmac_clk_csr_set(struct stmmac_priv *priv) priv->clk_csr =STMMAC_CSR_100_150M ; else if ((clk_rate >= CSR_F_150M) && (clk_rate < CSR_F_250M)) priv->clk_csr = STMMAC_CSR_150_250M; - else if ((clk_rate >= CSR_F_250M) && (clk_rate < CSR_F_300M)) + else if ((clk_rate >= CSR_F_250M) && (clk_rate <= CSR_F_300M)) priv->clk_csr = STMMAC_CSR_250_300M; }
drivers/net/hamradio/6pack.c +2 -2
@@ -68,9 +68,9 @@#define SIXP_DAMA_OFF 0/* default level 2 parameters */ -#define SIXP_TXDELAY (HZ/4)/* in 1 s */ +#define SIXP_TXDELAY 25/* 250 ms */ #define SIXP_PERSIST 50/* in 256ths */ -#define SIXP_SLOTTIME (HZ/10)/* in 1 s */ +#define SIXP_SLOTTIME 10/* 100 ms */ #define SIXP_INIT_RESYNC_TIMEOUT (3*HZ/2)/* in 1 s */ #define SIXP_RESYNC_TIMEOUT 5*HZ/* in 1 s */
drivers/net/usb/hso.c +5 -7
@@ -2704,14 +2704,14 @@ struct hso_device *hso_create_mux_serial_device(struct usb_interface *interface, serial =kzalloc (sizeof (*serial),GFP_KERNEL );if (!serial) - goto exit; + goto err_free_dev; hso_dev->port_data.dev_serial = serial; serial->parent = hso_dev;if (hso_serial_common_create (serial,1 ,CTRL_URB_RX_SIZE ,CTRL_URB_TX_SIZE )) - goto exit; + goto err_free_serial; serial->tx_data_length--; serial->write_data = hso_mux_serial_write_data;
@@ -2727,11 +2727,9 @@ struct hso_device *hso_create_mux_serial_device(struct usb_interface *interface,/* done, return it */ return hso_dev; -exit: -if (serial) { -tty_unregister_device (tty_drv, serial->minor); -kfree (serial); - } +err_free_serial: +kfree (serial); +err_free_dev:kfree (hso_dev);return NULL ;
drivers/nvme/host/multipath.c +5 -2
@@ -522,14 +522,17 @@ static int nvme_update_ana_state(struct nvme_ctrl *ctrl,down_read (&ctrl->namespaces_rwsem);list_for_each_entry (ns, &ctrl->namespaces, list) { -unsigned nsid =le32_to_cpu (desc->nsids[n]); - +unsigned nsid; +again: + nsid =le32_to_cpu (desc->nsids[n]);if (ns->head->ns_id < nsid)continue ;if (ns->head->ns_id == nsid)nvme_update_ns_ana_state (desc, ns);if (++n == nr_nsids)break ; +if (ns->head->ns_id > nsid) + goto again; }up_read (&ctrl->namespaces_rwsem);return 0 ;
drivers/platform/x86/intel_punit_ipc.c +1 -2
@@ -8,7 +8,6 @@* which provide mailbox interface for power management usage. */ -#include <linux/acpi.h> #include <linux/bitops.h> #include <linux/delay.h> #include <linux/device.h>
@@ -335,7 +334,7 @@ static struct platform_driver intel_punit_ipc_driver = { .remove = intel_punit_ipc_remove, .driver = { .name = "intel_punit_ipc", - .acpi_match_table = ACPI_PTR(punit_ipc_acpi_ids), + .acpi_match_table = punit_ipc_acpi_ids, }, };
drivers/scsi/lpfc/lpfc_attr.c +2 -1
@@ -5881,7 +5881,8 @@ lpfc_sg_seg_cnt_show(struct device *dev, struct device_attribute *attr, len =scnprintf (buf,PAGE_SIZE ,"SGL sz: %d total SGEs: %d\n" , phba->cfg_sg_dma_buf_size, phba->cfg_total_seg_cnt); - len +=scnprintf (buf + len,PAGE_SIZE ,"Cfg: %d SCSI: %d NVME: %d\n" , + len +=scnprintf (buf + len,PAGE_SIZE - len, +"Cfg: %d SCSI: %d NVME: %d\n" , phba->cfg_sg_seg_cnt, phba->cfg_scsi_seg_cnt, phba->cfg_nvme_seg_cnt);return len;
drivers/scsi/qla2xxx/qla_init.c +2 -1
@@ -6803,7 +6803,8 @@ qla2x00_abort_isp(scsi_qla_host_t *vha)return 0 ;break ;case QLA2XXX_INI_MODE_DUAL : -if (!qla_dual_mode_enabled (vha)) +if (!qla_dual_mode_enabled (vha) && + !qla_ini_mode_enabled (vha))return 0 ;break ;case QLA2XXX_INI_MODE_ENABLED :
drivers/scsi/scsi_transport_iscsi.c +4 -4
@@ -434,9 +434,7 @@ static umode_t iscsi_iface_attr_is_visible(struct kobject *kobj,struct iscsi_transport *t = iface->transport;int param =-1 ; -if (attr == &dev_attr_iface_enabled.attr) - param =ISCSI_NET_PARAM_IFACE_ENABLE ; -else if (attr == &dev_attr_iface_def_taskmgmt_tmo.attr) +if (attr == &dev_attr_iface_def_taskmgmt_tmo.attr) param =ISCSI_IFACE_PARAM_DEF_TASKMGMT_TMO ;else if (attr == &dev_attr_iface_header_digest.attr) param =ISCSI_IFACE_PARAM_HDRDGST_EN ;
@@ -476,7 +474,9 @@ static umode_t iscsi_iface_attr_is_visible(struct kobject *kobj,if (param !=-1 )return t->attr_is_visible (ISCSI_IFACE_PARAM , param); -if (attr == &dev_attr_iface_vlan_id.attr) +if (attr == &dev_attr_iface_enabled.attr) + param =ISCSI_NET_PARAM_IFACE_ENABLE ; +else if (attr == &dev_attr_iface_vlan_id.attr) param =ISCSI_NET_PARAM_VLAN_ID ;else if (attr == &dev_attr_iface_vlan_priority.attr) param =ISCSI_NET_PARAM_VLAN_PRIORITY ;
drivers/spi/spi-tegra20-slink.c +2 -2
@@ -1205,7 +1205,7 @@ static int tegra_slink_resume(struct device *dev) }#endif -static int tegra_slink_runtime_suspend (struct device *dev) +static int __maybe_unused tegra_slink_runtime_suspend (struct device *dev) {struct spi_master *master =dev_get_drvdata (dev);struct tegra_slink_data *tspi =spi_master_get_devdata (master);
@@ -1217,7 +1217,7 @@ static int tegra_slink_runtime_suspend(struct device *dev)return 0 ; } -static int tegra_slink_runtime_resume (struct device *dev) +static int __maybe_unused tegra_slink_runtime_resume (struct device *dev) {struct spi_master *master =dev_get_drvdata (dev);struct tegra_slink_data *tspi =spi_master_get_devdata (master);
drivers/staging/greybus/uart.c +32 -30
135 lines not on this page · raw message
drivers/thermal/intel/int340x_thermal/processor_thermal_device.c +3 -2
@@ -179,7 +179,7 @@ static int tcc_offset_update(unsigned int tcc)return 0 ; } -static unsigned int tcc_offset_save; +static int tcc_offset_save =-1 ; static ssize_t tcc_offset_degree_celsius_store(struct device *dev, struct device_attribute *attr, const char *buf,
@@ -703,7 +703,8 @@ static int proc_thermal_resume(struct device *dev) proc_dev =dev_get_drvdata (dev);proc_thermal_read_ppcc (proc_dev); -tcc_offset_update (tcc_offset_save); +if (tcc_offset_save >=0 ) +tcc_offset_update (tcc_offset_save);return 0 ; }
drivers/thermal/thermal_core.c +3 -4
@@ -228,15 +228,14 @@ int thermal_build_list_of_policies(char *buf) {struct thermal_governor *pos;ssize_t count =0 ; -ssize_t size =PAGE_SIZE ;mutex_lock (&thermal_governor_lock);list_for_each_entry (pos, &thermal_governor_list, governor_list) { - size =PAGE_SIZE - count; - count +=scnprintf (buf + count, size,"%s " , pos->name); + count +=scnprintf (buf + count,PAGE_SIZE - count,"%s " , + pos->name); } - count +=scnprintf (buf + count, size,"\n" ); + count +=scnprintf (buf + count,PAGE_SIZE - count,"\n" );mutex_unlock (&thermal_governor_lock);
drivers/tty/serial/mvebu-uart.c +1 -1
@@ -164,7 +164,7 @@ static unsigned int mvebu_uart_tx_empty(struct uart_port *port) st =readl (port->membase +UART_STAT );spin_unlock_irqrestore (&port->lock, flags); -return (st &STAT_TX_FIFO_EMP ) ?TIOCSER_TEMT :0 ; +return (st &STAT_TX_EMP ) ?TIOCSER_TEMT :0 ; }static unsigned int mvebu_uart_get_mctrl (struct uart_port *port)
drivers/tty/synclink_gt.c +23 -78
277 lines not on this page · raw message
drivers/usb/class/cdc-acm.c +5 -2
@@ -725,7 +725,8 @@ static void acm_port_destruct(struct tty_port *port) { struct acm *acm = container_of(port, struct acm, port); -acm_release_minor (acm); +if (acm->minor !=ACM_MINOR_INVALID ) +acm_release_minor (acm);usb_put_intf (acm->control);kfree (acm->country_codes);kfree (acm);
@@ -1356,8 +1357,10 @@ static int acm_probe(struct usb_interface *intf,usb_get_intf (acm->control);/* undone in destruct() */ minor =acm_alloc_minor (acm); -if (minor <0 ) +if (minor <0 ) { + acm->minor =ACM_MINOR_INVALID ; goto alloc_fail1; + } acm->minor = minor; acm->dev = usb_dev;
drivers/usb/class/cdc-acm.h +2 -0
@@ -22,6 +22,8 @@#define ACM_TTY_MAJOR 166#define ACM_TTY_MINORS 256 +#define ACM_MINOR_INVALID ACM_TTY_MINORS +/* * Requests. */
drivers/usb/core/hcd.c +23 -6
@@ -2636,6 +2636,7 @@ int usb_add_hcd(struct usb_hcd *hcd, {int retval;struct usb_device *rhdev; +struct usb_hcd *shared_hcd;if (!hcd->skip_phy_initialization &&usb_hcd_is_primary_hcd (hcd)) { hcd->phy_roothub =usb_phy_roothub_alloc (hcd->self.sysdev);
@@ -2792,13 +2793,26 @@ int usb_add_hcd(struct usb_hcd *hcd, goto err_hcd_driver_start; } +/* starting here, usbcore will pay attention to the shared HCD roothub */ + shared_hcd = hcd->shared_hcd; +if (!usb_hcd_is_primary_hcd (hcd) && shared_hcd &&HCD_DEFER_RH_REGISTER (shared_hcd)) { + retval =register_root_hub (shared_hcd); +if (retval !=0 ) + goto err_register_root_hub; + +if (shared_hcd->uses_new_polling &&HCD_POLL_RH (shared_hcd)) +usb_hcd_poll_rh_status (shared_hcd); + } +/* starting here, usbcore will pay attention to this root hub */ - retval =register_root_hub (hcd); -if (retval !=0 ) - goto err_register_root_hub; +if (!HCD_DEFER_RH_REGISTER (hcd)) { + retval =register_root_hub (hcd); +if (retval !=0 ) + goto err_register_root_hub; -if (hcd->uses_new_polling &&HCD_POLL_RH (hcd)) -usb_hcd_poll_rh_status (hcd); +if (hcd->uses_new_polling &&HCD_POLL_RH (hcd)) +usb_hcd_poll_rh_status (hcd); + }return retval;
@@ -2841,6 +2855,7 @@ EXPORT_SYMBOL_GPL(usb_add_hcd);void usb_remove_hcd (struct usb_hcd *hcd) {struct usb_device *rhdev = hcd->self.root_hub; +bool rh_registered;dev_info (hcd->self.controller,"remove, state %x\n" , hcd->state);
@@ -2851,6 +2866,7 @@ void usb_remove_hcd(struct usb_hcd *hcd)dev_dbg (hcd->self.controller,"roothub graceful disconnect\n" );spin_lock_irq (&hcd_root_hub_lock); + rh_registered = hcd->rh_registered; hcd->rh_registered =0 ;spin_unlock_irq (&hcd_root_hub_lock);
@@ -2860,7 +2876,8 @@ void usb_remove_hcd(struct usb_hcd *hcd)cancel_work_sync (&hcd->died_work);mutex_lock (&usb_bus_idr_lock); -usb_disconnect (&rhdev);/* Sets rhdev to NULL */ +if (rh_registered) +usb_disconnect (&rhdev);/* Sets rhdev to NULL */ mutex_unlock (&usb_bus_idr_lock);/*
drivers/usb/dwc2/gadget.c +107 -86
348 lines not on this page · raw message
drivers/usb/gadget/udc/r8a66597-udc.c +1 -1
@@ -1250,7 +1250,7 @@ static void set_feature(struct r8a66597 *r8a66597, struct usb_ctrlrequest *ctrl)do { tmp =r8a66597_read (r8a66597,INTSTS0 ) &CTSQ ;udelay (1 ); - }while (tmp !=CS_IDST || timeout-- >0 ); + }while (tmp !=CS_IDST && timeout-- >0 );if (tmp ==CS_IDST ) r8a66597_bset(r8a66597,
drivers/usb/host/xhci.c +1 -0
@@ -693,6 +693,7 @@ int xhci_run(struct usb_hcd *hcd)if (ret)xhci_free_command (xhci, command); } +set_bit (HCD_FLAG_DEFER_RH_REGISTER , &hcd->flags);xhci_dbg_trace (xhci, trace_xhci_dbg_init,"Finished xhci_run for USB2 roothub" );
drivers/usb/musb/tusb6010.c +1 -0
@@ -190,6 +190,7 @@ tusb_fifo_write_unaligned(void __iomem *fifo, const u8 *buf, u16 len) }if (len >0 ) {/* Write the rest 1 - 3 bytes to FIFO */ + val =0 ;memcpy (&val, buf, len);musb_writel (fifo,0 , val); }
drivers/usb/serial/cp210x.c +1 -0
@@ -234,6 +234,7 @@ static const struct usb_device_id id_table[] = { { USB_DEVICE(0x1FB9, 0x0602) }, /* Lake Shore Model 648 Magnet Power Supply */ { USB_DEVICE(0x1FB9, 0x0700) }, /* Lake Shore Model 737 VSM Controller */ { USB_DEVICE(0x1FB9, 0x0701) }, /* Lake Shore Model 776 Hall Matrix */ + { USB_DEVICE(0x2184, 0x0030) }, /* GW Instek GDM-834x Digital Multimeter */ { USB_DEVICE(0x2626, 0xEA60) }, /* Aruba Networks 7xxx USB Serial Console */ { USB_DEVICE(0x3195, 0xF190) }, /* Link Instruments MSO-19 */ { USB_DEVICE(0x3195, 0xF280) }, /* Link Instruments MSO-28 */
drivers/usb/serial/mos7840.c +0 -2
@@ -114,7 +114,6 @@#define BANDB_DEVICE_ID_USOPTL4_2P 0xBC02#define BANDB_DEVICE_ID_USOPTL4_4 0xAC44#define BANDB_DEVICE_ID_USOPTL4_4P 0xBC03 -#define BANDB_DEVICE_ID_USOPTL2_4 0xAC24/* This driver also supports * ATEN UC2324 device using Moschip MCS7840
@@ -196,7 +195,6 @@ static const struct usb_device_id id_table[] = { {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2P)}, {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)}, {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4P)}, - {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL2_4)}, {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2324)}, {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2322)}, {USB_DEVICE(USB_VENDOR_ID_MOXA, MOXA_DEVICE_ID_2210)},
drivers/usb/serial/option.c +10 -1
@@ -1205,6 +1205,14 @@ static const struct usb_device_id option_ids[] = { .driver_info = NCTRL(0) | RSVD(1) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1056, 0xff), /* Telit FD980 */ .driver_info = NCTRL(2) | RSVD(3) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1060, 0xff), /* Telit LN920 (rmnet) */ + .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1061, 0xff), /* Telit LN920 (MBIM) */ + .driver_info = NCTRL(0) | RSVD(1) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1062, 0xff), /* Telit LN920 (RNDIS) */ + .driver_info = NCTRL(2) | RSVD(3) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1063, 0xff), /* Telit LN920 (ECM) */ + .driver_info = NCTRL(0) | RSVD(1) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910), .driver_info = NCTRL(0) | RSVD(1) | RSVD(3) }, { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
@@ -1650,7 +1658,6 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0060, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0070, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0073, 0xff, 0xff, 0xff) }, - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0094, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0130, 0xff, 0xff, 0xff), .driver_info = RSVD(1) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0133, 0xff, 0xff, 0xff),
@@ -2068,6 +2075,8 @@ static const struct usb_device_id option_ids[] = { .driver_info = RSVD(0) | RSVD(1) | RSVD(6) }, { USB_DEVICE(0x0489, 0xe0b5), /* Foxconn T77W968 ESIM */ .driver_info = RSVD(0) | RSVD(1) | RSVD(6) }, + { USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe0db, 0xff), /* Foxconn T99W265 MBIM */ + .driver_info = RSVD(3) }, { USB_DEVICE(0x1508, 0x1001), /* Fibocom NL668 (IOT version) */ .driver_info = RSVD(4) | RSVD(5) | RSVD(6) }, { USB_DEVICE(0x2cb7, 0x0104), /* Fibocom NL678 series */
drivers/usb/storage/unusual_devs.h +8 -1
@@ -416,9 +416,16 @@ UNUSUAL_DEV( 0x04cb, 0x0100, 0x0000, 0x2210, USB_SC_UFI, USB_PR_DEVICE, NULL, US_FL_FIX_INQUIRY | US_FL_SINGLE_LUN),/* -* Reported by Ondrej Zary <[email protected]> +* Reported by Ondrej Zary <[email protected]> * The device reports one sector more and breaks when that sector is accessed +* Firmwares older than 2.6c (the latest one and the only that claims Linux +* support) have also broken tag handling */ +UNUSUAL_DEV (0x04ce ,0x0002 ,0x0000 ,0x026b , +"ScanLogic" , +"SL11R-IDE" , +USB_SC_DEVICE ,USB_PR_DEVICE ,NULL , +US_FL_FIX_CAPACITY |US_FL_BULK_IGNORE_TAG ), UNUSUAL_DEV( 0x04ce, 0x0002, 0x026c, 0x026c, "ScanLogic", "SL11R-IDE",
drivers/usb/storage/unusual_uas.h +1 -1
@@ -50,7 +50,7 @@ UNUSUAL_DEV(0x059f, 0x1061, 0x0000, 0x9999,"LaCie" ,"Rugged USB3-FW" ,USB_SC_DEVICE ,USB_PR_DEVICE ,NULL , - US_FL_IGNORE_UAS), + US_FL_NO_REPORT_OPCODES | US_FL_NO_SAME),/* * Apricorn USB3 dongle sometimes returns "USBSUSBSUSBS" in response to SCSI
drivers/xen/balloon.c +45 -17
137 lines not on this page · raw message
fs/afs/dir.c +7 -39
102 lines not on this page · raw message
fs/btrfs/space-info.c +3 -2
@@ -262,9 +262,10 @@ static void __btrfs_dump_space_info(struct btrfs_fs_info *fs_info, {lockdep_assert_held (&info->lock); -btrfs_info (fs_info,"space_info %llu has %llu free, is %sfull" , +/* The free space could be negative in case of overcommit */ +btrfs_info (fs_info,"space_info %llu has %lld free, is %sfull" , info->flags, - info->total_bytes -btrfs_space_info_used (info, true), + (s64)(info->total_bytes -btrfs_space_info_used (info, true)), info->full ?"" :"not " ); btrfs_info(fs_info, "space_info total=%llu, used=%llu, pinned=%llu, reserved=%llu, may_use=%llu, readonly=%llu",
fs/cifs/connect.c +3 -2
@@ -3691,9 +3691,10 @@ cifs_match_super(struct super_block *sb, void *data)spin_lock (&cifs_tcp_ses_lock); cifs_sb =CIFS_SB (sb); tlink =cifs_get_tlink (cifs_sb_master_tlink (cifs_sb)); -if (IS_ERR (tlink)) { +if (tlink ==NULL ) { +/* can not match superblock if tlink were ever null */ spin_unlock (&cifs_tcp_ses_lock); -return rc; +return 0 ; } tcon =tlink_tcon (tlink); ses = tcon->ses;
fs/cifs/file.c +1 -1
@@ -2989,7 +2989,7 @@ static void collect_uncached_write_data(struct cifs_aio_ctx *ctx)struct cifs_tcon *tcon;struct cifs_sb_info *cifs_sb;struct dentry *dentry = ctx->cfile->dentry; -int rc; +ssize_t rc; tcon =tlink_tcon (ctx->cfile->tlink); cifs_sb =CIFS_SB (dentry->d_sb);
fs/ocfs2/dlmglue.c +2 -1
@@ -3933,7 +3933,7 @@ static int ocfs2_data_convert_worker(struct ocfs2_lock_res *lockres, oi =OCFS2_I (inode); oi->ip_dir_lock_gen++;mlog (0 ,"generation: %u\n" , oi->ip_dir_lock_gen); - goto out; + goto out_forget; }if (!S_ISREG (inode->i_mode))
@@ -3964,6 +3964,7 @@ static int ocfs2_data_convert_worker(struct ocfs2_lock_res *lockres,filemap_fdatawait (mapping); } +out_forget:forget_all_cached_acls (inode); out:
fs/qnx4/dir.c +52 -17
92 lines not on this page · raw message
include/linux/compiler.h +2 -0
@@ -233,6 +233,8 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val, (typeof(ptr)) (__ptr + (off)); })#endif +#define absolute_pointer (val) RELOC_HIDE((void *)(val), 0) +#ifndef OPTIMIZER_HIDE_VAR /* Make the optimizer believe the variable can be manipulated arbitrarily. */ #define OPTIMIZER_HIDE_VAR (var) \
include/linux/usb/hcd.h +2 -0
@@ -124,6 +124,7 @@ struct usb_hcd {#define HCD_FLAG_RH_RUNNING 5/* root hub is running? */ #define HCD_FLAG_DEAD 6/* controller has died? */ #define HCD_FLAG_INTF_AUTHORIZED 7/* authorize interfaces? */ +#define HCD_FLAG_DEFER_RH_REGISTER 8/* Defer roothub registration */ /* The flags can be tested using these macros; they are likely to * be slightly faster than test_bit().
@@ -134,6 +135,7 @@ struct usb_hcd {#define HCD_WAKEUP_PENDING (hcd) ((hcd)->flags & (1U << HCD_FLAG_WAKEUP_PENDING))#define HCD_RH_RUNNING (hcd) ((hcd)->flags & (1U << HCD_FLAG_RH_RUNNING))#define HCD_DEAD (hcd) ((hcd)->flags & (1U << HCD_FLAG_DEAD)) +#define HCD_DEFER_RH_REGISTER (hcd) ((hcd)->flags & (1U << HCD_FLAG_DEFER_RH_REGISTER))/* * Specifies if interfaces are authorized by default
include/trace/events/erofs.h +3 -3
@@ -35,20 +35,20 @@ TRACE_EVENT(erofs_lookup,TP_STRUCT__entry (__field (dev_t ,dev )__field (erofs_nid_t, nid ) - __field(const char *, name ) + __string(name, dentry->d_name.name ) __field(unsigned int, flags ) ),TP_fast_assign ( __entry->dev = dir->i_sb->s_dev; __entry->nid =EROFS_I (dir)->nid; - __entry->name = dentry->d_name.name; +__assign_str (name, dentry->d_name.name); __entry->flags = flags; ),TP_printk ("dev = (%d,%d), pnid = %llu, name:%s, flags:%x" ,show_dev_nid (__entry), - __entry->name, +__get_str (name), __entry->flags) );
kernel/bpf/verifier.c +2 -0
@@ -6839,6 +6839,8 @@ static int check_btf_line(struct bpf_verifier_env *env, nr_linfo = attr->line_info_cnt;if (!nr_linfo)return 0 ; +if (nr_linfo >INT_MAX /sizeof (struct bpf_line_info )) +return -EINVAL ; rec_size = attr->line_info_rec_size; if (rec_size < MIN_BPF_LINEINFO_SIZE ||
kernel/trace/blktrace.c +8 -0
@@ -1656,6 +1656,14 @@ static int blk_trace_remove_queue(struct request_queue *q)if (bt ==NULL )return -EINVAL ; +if (bt->trace_state == Blktrace_running) { + bt->trace_state = Blktrace_stopped; +spin_lock_irq (&running_trace_lock); +list_del_init (&bt->running_list); +spin_unlock_irq (&running_trace_lock); +relay_flush (bt->rchan); + } +put_probe_ref ();synchronize_rcu ();blk_trace_free (bt);
net/ipv6/ip6_fib.c +1 -2
@@ -1310,7 +1310,6 @@ int fib6_add(struct fib6_node *root, struct fib6_info *rt,int err = -ENOMEM ;int allow_create =1 ;int replace_required =0 ; -int sernum =fib6_new_sernum (info->nl_net);if (info->nlh) {if (!(info->nlh->nlmsg_flags &NLM_F_CREATE ))
@@ -1410,7 +1409,7 @@ int fib6_add(struct fib6_node *root, struct fib6_info *rt,if (!err) {if (rt->nh)list_add (&rt->nh_list, &rt->nh->f6i_list); -__fib6_update_sernum_upto_root (rt, sernum); +__fib6_update_sernum_upto_root (rt,fib6_new_sernum (info->nl_net));fib6_start_gc (info->nl_net, rt); }
net/smc/smc_clc.c +2 -1
@@ -164,7 +164,8 @@ static int smc_clc_prfx_set(struct socket *clcsock, goto out_rel; }/* get address to which the internal TCP socket is bound */ -kernel_getsockname (clcsock, (struct sockaddr *)&addrs); +if (kernel_getsockname (clcsock, (struct sockaddr *)&addrs) <0 ) + goto out_rel;/* analyze IP specific data of net_device belonging to TCP socket */ addr6 = (struct sockaddr_in6 *)&addrs;rcu_read_lock ();