Linux 5.4.263
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.263 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/arm/xen/enlighten.c | 3 arch/arm64/include/asm/cpufeature.h | 23 + arch/arm64/include/asm/sysreg.h | 6 arch/arm64/kvm/sys_regs.c | 10 arch/mips/kvm/mmu.c | 3 arch/powerpc/kernel/fpu.S | 13 arch/powerpc/kernel/vector.S | 2 arch/s390/mm/page-states.c | 14 - drivers/acpi/resource.c | 7 drivers/ata/pata_isapnp.c | 3 drivers/base/dd.c | 4 drivers/cpufreq/imx6q-cpufreq.c | 32 +- drivers/firewire/core-device.c | 11 drivers/gpu/drm/panel/panel-simple.c | 13 drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 14 - drivers/hid/hid-core.c | 16 - drivers/hid/hid-debug.c | 3 drivers/infiniband/hw/i40iw/i40iw_ctrl.c | 6 drivers/infiniband/hw/i40iw/i40iw_type.h | 2 drivers/infiniband/hw/i40iw/i40iw_verbs.c | 10 drivers/input/joystick/xpad.c | 2 drivers/md/bcache/btree.c | 6 drivers/md/bcache/sysfs.c | 2 drivers/md/dm-delay.c | 17 - drivers/md/dm-verity-fec.c | 3 drivers/md/dm-verity-target.c | 4 drivers/md/dm-verity.h | 6 drivers/mmc/core/block.c | 2 drivers/mmc/core/core.c | 15 - drivers/mmc/host/cqhci.c | 44 +-- drivers/mtd/chips/cfi_cmdset_0001.c | 29 +- drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 14 + drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c | 11 drivers/net/ethernet/amd/xgbe/xgbe-mdio.c | 14 - drivers/net/ethernet/renesas/ravb_main.c | 20 + drivers/net/ethernet/stmicro/stmmac/mmc_core.c | 4 drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 2 drivers/net/hyperv/netvsc_drv.c | 41 ++ drivers/net/usb/ax88179_178a.c | 4 drivers/nvme/target/core.c | 21 - drivers/nvme/target/fabrics-cmd.c | 15 - drivers/nvme/target/nvmet.h | 5 drivers/pci/controller/dwc/pci-keystone.c | 8 drivers/pinctrl/core.c | 6 drivers/s390/block/dasd.c | 24 - drivers/scsi/qla2xxx/qla_def.h | 3 drivers/scsi/qla2xxx/qla_isr.c | 5 drivers/scsi/qla2xxx/qla_os.c | 39 +- drivers/usb/dwc2/hcd_intr.c | 15 - drivers/usb/dwc3/core.c | 2 drivers/usb/dwc3/dwc3-qcom.c | 17 - drivers/usb/serial/option.c | 11 drivers/video/fbdev/sticore.h | 2 fs/afs/dynroot.c | 4 fs/afs/super.c | 2 fs/afs/vl_rotate.c | 10 fs/btrfs/disk-io.c | 1 fs/btrfs/send.c | 2 fs/btrfs/super.c | 5 fs/btrfs/volumes.c | 9 fs/cifs/cifsfs.c | 1 fs/ext4/extents_status.c | 306 +++++++++++++++------- fs/io_uring.c | 2 fs/overlayfs/super.c | 5 fs/sync.c | 3 include/linux/fs.h | 2 include/linux/hid.h | 5 include/scsi/scsi_cmnd.h | 6 net/ipv4/igmp.c | 6 net/ipv4/route.c | 2 security/integrity/iint.c | 48 ++- security/integrity/ima/ima_api.c | 5 security/integrity/ima/ima_main.c | 16 + security/integrity/integrity.h | 2 sound/pci/hda/hda_intel.c | 2 sound/pci/hda/patch_realtek.c | 12 77 files changed, 752 insertions(+), 314 deletions(-)
Adrian Hunter (5):
mmc: block: Do not lose cache flush during CQE error recovery
mmc: cqhci: Increase recovery halt timeout
mmc: cqhci: Warn of halt or task clear failure
mmc: cqhci: Fix task clearing in CQE error recovery
mmc: block: Retry commands in CQE error recovery
Alexander Gordeev (1):
s390/mm: fix phys vs virt confusion in mark_kernel_pXd() functions family
Amir Goldstein (1):
ima: annotate iint mutex to avoid lockdep false positive warnings
Andrew Murray (2):
arm64: cpufeature: Extract capped perfmon fields
KVM: arm64: limit PMU version to PMUv3 for ARMv8.1
Asuna Yang (1):
USB: serial: option: add Luat Air72*U series products
Baokun Li (8):
ext4: add a new helper to check if es must be kept
ext4: factor out __es_alloc_extent() and __es_free_extent()
ext4: use pre-allocated es in __es_insert_extent()
ext4: use pre-allocated es in __es_remove_extent()
ext4: using nofail preallocation in ext4_es_remove_extent()
ext4: using nofail preallocation in ext4_es_insert_delayed_block()
ext4: using nofail preallocation in ext4_es_insert_extent()
ext4: fix slab-use-after-free in ext4_es_insert_extent()
Bart Van Assche (3):
scsi: qla2xxx: Simplify the code for aborting SCSI commands
scsi: core: Introduce the scsi_cmd_to_rq() function
scsi: qla2xxx: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
Benjamin Tissoires (1):
HID: core: store the unique system identifier in hid_device
Chaitanya Kulkarni (1):
nvmet: remove unnecessary ctrl parameter
Charles Yi (1):
HID: fix HID device resource race between HID core and debugging support
Chen Ni (1):
ata: pata_isapnp: Add missing error check for devm_ioport_map()
Christoph Hellwig (1):
nvmet: nul-terminate the NQNs passed in the connect command
Christoph Niedermaier (2):
cpufreq: imx6q: don't warn for disabling a non-existing frequency
cpufreq: imx6q: Don't disable 792 Mhz OPP unnecessarily
Christopher Bednarz (1):
RDMA/irdma: Prevent zero-length STAG registration
Claudiu Beznea (2):
net: ravb: Use pm_runtime_resume_and_get()
net: ravb: Start TX queues after HW initialization succeeded
Coly Li (2):
bcache: replace a mistaken IS_ERR() by IS_ERR_OR_NULL() in btree_gc_coalesce()
bcache: check return value from btree_node_alloc_replacement()
David Howells (3):
afs: Make error on cell lookup failure consistent with OpenAFS
afs: Return ENOENT if no cell DNS record can be found
afs: Fix file locking on R/O volumes to operate in local mode
Filipe Manana (2):
btrfs: fix off-by-one when checking chunk map includes logical address
btrfs: make error messages more clear when getting a chunk map
Furong Xu (1):
net: stmmac: xgmac: Disable FPE MMC interrupts
Greg Kroah-Hartman (1):
Linux 5.4.263
Haiyang Zhang (1):
hv_netvsc: Fix race of register_netdevice_notifier and VF register
Hans de Goede (1):
ACPI: resource: Skip IRQ override on ASUS ExpertBook B1402CVA
Heiko Carstens (1):
s390/cmma: fix detection of DAT pages
Helge Deller (1):
fbdev: stifb: Make the STI next font pointer a 32-bit signed offset
Huacai Chen (1):
MIPS: KVM: Fix a build warning about variable set but not used
Jan Höppner (1):
s390/dasd: protect device queue against concurrent access
Jann Horn (1):
btrfs: send: ensure send_fd is writable
Jean-Philippe Brucker (1):
mtd: cfi_cmdset_0001: Support the absence of protection registers
Johan Hovold (2):
USB: dwc3: qcom: fix resource leaks on probe deferral
USB: dwc3: qcom: fix wakeup after probe deferral
Jonas Karlman (1):
drm/rockchip: vop: Fix color for RGB888/BGR888 format on VOP full
Jose Ignacio Tornos Martinez (1):
net: usb: ax88179_178a: fix failed operations during ax88179_reset
Kailang Yang (2):
ALSA: hda/realtek: Headset Mic VREF to 100%
ALSA: hda/realtek: Add supported ALC257 for ChromeOS
Keith Busch (1):
io_uring: fix off-by one bvec index
Konstantin Khlebnikov (1):
ovl: skip overlayfs superblocks at global sync
Kunwu Chan (1):
ipv4: Correct/silence an endian warning in __ip_do_redirect
Lech Perczak (1):
USB: serial: option: don't claim interface 4 for ZTE MF290
Linus Walleij (1):
mtd: cfi_cmdset_0001: Byte swap OTP info
Long Li (1):
hv_netvsc: Mark VF as slave before exposing it to user-mode
Marek Vasut (2):
drm/panel: simple: Fix Innolux G101ICE-L01 bus flags drm/panel: simple: Fix Innolux G101ICE-L01 timings
Maria Yu (1):
pinctrl: avoid reload of p state in list iteration
Markus Weippert (1):
bcache: revert replacing IS_ERR_OR_NULL with IS_ERR
Max Nguyen (1):
Input: xpad - add HyperX Clutch Gladiate Support
Mikulas Patocka (2):
dm-delay: fix a race between delay_presuspend and delay_bio
dm-verity: align struct dm_verity_fec_io properly
Mimi Zohar (1):
ima: detect changes to the backing overlay file
Nathan Chancellor (1):
PCI: keystone: Drop __init from ks_pcie_add_pcie_{ep,port}()
Oliver Neukum (1):
USB: dwc2: write HCINT with INTMASK applied
Puliang Lu (1):
USB: serial: option: fix FM101R-GL defines
Qu Wenruo (1):
btrfs: add dmesg output for first mount and last unmount of a filesystem
Quinn Tran (1):
scsi: qla2xxx: Fix system crash due to bad pointer access
Raju Rangoju (3):
amd-xgbe: handle corner-case during sfp hotplug
amd-xgbe: handle the corner-case during tx completion
amd-xgbe: propagate the correct speed and duplex status
Rand Deeb (1):
bcache: prevent potential division by zero error
Ricardo Ribalda (1):
usb: dwc3: set the dma max_seg_size
Samuel Holland (1):
net: axienet: Fix check for partial TX checksum
Saravana Kannan (1):
driver core: Release all resources during unbind before updating device links
Stefano Stabellini (1):
arm/xen: fix xen_vcpu_info allocation alignment
Steve French (1):
smb3: fix touch -h of symlink
Takashi Iwai (1):
ALSA: hda: Disable power-save on KONTRON SinglePC
Timothy Pearson (1):
powerpc: Don't clobber f0/vs0 during fp|altivec register save
Victor Fragoso (1):
USB: serial: option: add Fibocom L7xx modules
Wu Bo (1):
dm verity: don't perform FEC for failed readahead IO
Yang Yingliang (1):
firewire: core: fix possible memory leak in create_units()
Yoshihiro Shimoda (1):
ravb: Fix races between ravb_tx_timeout_work() and net related ops
Zhang Yi (1):
ext4: make sure allocate pending entry not fail
Zheng Yongjun (1):
mmc: core: convert comma to semicolon
Zhengchao Shao (1):
ipv4: igmp: fix refcnt uaf issue when receiving igmp query packet
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 262 +SUBLEVEL = 263 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm/xen/enlighten.c +2 -1
@@ -354,7 +354,8 @@ static int __init xen_guest_init(void)* for secondary CPUs as they are brought up. * For uniformity we use VCPUOP_register_vcpu_info even on cpu0. */ - xen_vcpu_info = alloc_percpu(struct vcpu_info); + xen_vcpu_info =__alloc_percpu (sizeof (struct vcpu_info ), +1 <<fls (sizeof (struct vcpu_info ) -1 ));if (xen_vcpu_info ==NULL )return -ENOMEM ;
arch/arm64/include/asm/cpufeature.h +23 -0
@@ -449,6 +449,29 @@ cpuid_feature_extract_unsigned_field(u64 features, int field)return cpuid_feature_extract_unsigned_field_width (features, field,4 ); } +/* +* Fields that identify the version of the Performance Monitors Extension do +* not follow the standard ID scheme. See ARM DDI 0487E.a page D13-2825, +* "Alternative ID scheme used for the Performance Monitors Extension version". +*/ +static inline u64 __attribute_const__ +cpuid_feature_cap_perfmon_field (u64 features,int field,u64 cap) +{ +u64 val =cpuid_feature_extract_unsigned_field (features, field); +u64 mask =GENMASK_ULL (field +3 , field); + +/* Treat IMPLEMENTATION DEFINED functionality as unimplemented */ +if (val ==0xf ) + val =0 ; + +if (val > cap) { + features &= ~mask; + features |= (cap << field) & mask; + } + +return features; +} +static inline u64 arm64_ftr_mask (const struct arm64_ftr_bits *ftrp) {return (u64 )GENMASK (ftrp->shift + ftrp->width -1 , ftrp->shift);
arch/arm64/include/asm/sysreg.h +6 -0
@@ -697,6 +697,12 @@#define ID_AA64DFR0_TRACEVER_SHIFT 4#define ID_AA64DFR0_DEBUGVER_SHIFT 0 +#define ID_AA64DFR0_PMUVER_8_1 0x4 + +#define ID_DFR0_PERFMON_SHIFT 24 + +#define ID_DFR0_PERFMON_8_1 0x4 +#define ID_ISAR5_RDM_SHIFT 24#define ID_ISAR5_CRC32_SHIFT 16#define ID_ISAR5_SHA2_SHIFT 12
arch/arm64/kvm/sys_regs.c +10 -0
@@ -1089,6 +1089,16 @@ static u64 read_id_reg(const struct kvm_vcpu *vcpu, (0xfUL <<ID_AA64ISAR1_API_SHIFT ) | (0xfUL <<ID_AA64ISAR1_GPA_SHIFT ) | (0xfUL << ID_AA64ISAR1_GPI_SHIFT)); + }else if (id ==SYS_ID_AA64DFR0_EL1 ) { +/* Limit guests to PMUv3 for ARMv8.1 */ + val =cpuid_feature_cap_perfmon_field (val, +ID_AA64DFR0_PMUVER_SHIFT , +ID_AA64DFR0_PMUVER_8_1 ); + }else if (id ==SYS_ID_DFR0_EL1 ) { +/* Limit guests to PMUv3 for ARMv8.1 */ + val =cpuid_feature_cap_perfmon_field (val, +ID_DFR0_PERFMON_SHIFT , +ID_DFR0_PERFMON_8_1 ); }return val;
arch/mips/kvm/mmu.c +1 -2
@@ -693,7 +693,7 @@ static int kvm_mips_map_page(struct kvm_vcpu *vcpu, unsigned long gpa,gfn_t gfn = gpa >>PAGE_SHIFT ;int srcu_idx, err;kvm_pfn_t pfn; -pte_t *ptep, entry, old_pte; +pte_t *ptep, entry;bool writeable;unsigned long prot_bits;unsigned long mmu_seq;
@@ -766,7 +766,6 @@ static int kvm_mips_map_page(struct kvm_vcpu *vcpu, unsigned long gpa, entry =pfn_pte (pfn,__pgprot (prot_bits));/* Write the PTE */ - old_pte = *ptep;set_pte (ptep, entry); err =0 ;
arch/powerpc/kernel/fpu.S +13 -0
@@ -24,6 +24,15 @@ #include <asm/feature-fixups.h> #ifdef CONFIG_VSX +#define __REST_1FPVSR(n,c,base) \ +BEGIN_FTR_SECTION \ + b 2f; \ +END_FTR_SECTION_IFSET(CPU_FTR_VSX); \ + REST_FPR(n,base); \ + b 3f; \ +2: REST_VSR(n,c,base); \ +3: + #define __REST_32FPVSRS(n,c,base) \ BEGIN_FTR_SECTION \ b 2f; \
@@ -42,9 +51,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_VSX); \ 2: SAVE_32VSRS(n,c,base); \ 3: #else +#define __REST_1FPVSR(n,b,base) REST_FPR(n, base) #define __REST_32FPVSRS(n,b,base) REST_32FPRS(n, base) #define __SAVE_32FPVSRS(n,b,base) SAVE_32FPRS(n, base) #endif +#define REST_1FPVSR(n,c,base) __REST_1FPVSR(n,__REG_##c,__REG_##base) #define REST_32FPVSRS(n,c,base) __REST_32FPVSRS(n,__REG_##c,__REG_##base) #define SAVE_32FPVSRS(n,c,base) __SAVE_32FPVSRS(n,__REG_##c,__REG_##base)
@@ -68,6 +79,7 @@ _GLOBAL(store_fp_state) SAVE_32FPVSRS(0, R4, R3) mffs fr0 stfd fr0,FPSTATE_FPSCR(r3) + REST_1FPVSR(0, R4, R3) blr EXPORT_SYMBOL(store_fp_state)
@@ -132,6 +144,7 @@ _GLOBAL(save_fpu) 2: SAVE_32FPVSRS(0, R4, R6) mffs fr0 stfd fr0,FPSTATE_FPSCR(r6) + REST_1FPVSR(0, R4, R6) blr /*
arch/powerpc/kernel/vector.S +2 -0
@@ -32,6 +32,7 @@ _GLOBAL(store_vr_state) mfvscr v0 li r4, VRSTATE_VSCR stvx v0, r4, r3 + lvx v0, 0, r3 blr EXPORT_SYMBOL(store_vr_state)
@@ -102,6 +103,7 @@ _GLOBAL(save_altivec) mfvscr v0 li r4,VRSTATE_VSCR stvx v0,r4,r7 + lvx v0,0,r7 blr #ifdef CONFIG_VSX
arch/s390/mm/page-states.c +7 -7
@@ -112,7 +112,7 @@ static void mark_kernel_pmd(pud_t *pud, unsigned long addr, unsigned long end) next =pmd_addr_end (addr, end);if (pmd_none (*pmd) ||pmd_large (*pmd))continue ; - page =virt_to_page (pmd_val (*pmd)); + page =phys_to_page (pmd_val (*pmd));set_bit (PG_arch_1, &page->flags); }while (pmd++, addr = next, addr != end); }
@@ -130,8 +130,8 @@ static void mark_kernel_pud(p4d_t *p4d, unsigned long addr, unsigned long end)if (pud_none (*pud) ||pud_large (*pud))continue ;if (!pud_folded (*pud)) { - page =virt_to_page (pud_val (*pud)); -for (i =0 ; i <3 ; i++) + page =phys_to_page (pud_val (*pud)); +for (i =0 ; i <4 ; i++)set_bit (PG_arch_1, &page[i].flags); }mark_kernel_pmd (pud, addr, next);
@@ -151,8 +151,8 @@ static void mark_kernel_p4d(pgd_t *pgd, unsigned long addr, unsigned long end)if (p4d_none (*p4d))continue ;if (!p4d_folded (*p4d)) { - page =virt_to_page (p4d_val (*p4d)); -for (i =0 ; i <3 ; i++) + page =phys_to_page (p4d_val (*p4d)); +for (i =0 ; i <4 ; i++)set_bit (PG_arch_1, &page[i].flags); }mark_kernel_pud (p4d, addr, next);
@@ -173,8 +173,8 @@ static void mark_kernel_pgd(void)if (pgd_none (*pgd))continue ;if (!pgd_folded (*pgd)) { - page =virt_to_page (pgd_val (*pgd)); -for (i =0 ; i <3 ; i++) + page =phys_to_page (pgd_val (*pgd)); +for (i =0 ; i <4 ; i++)set_bit (PG_arch_1, &page[i].flags); }mark_kernel_p4d (pgd, addr, next);
drivers/acpi/resource.c +7 -0
@@ -448,6 +448,13 @@ static const struct dmi_system_id asus_laptop[] = { DMI_MATCH(DMI_BOARD_NAME, "GMxXGxx"), }, }, + { +/* Asus ExpertBook B1402CVA */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"ASUSTeK COMPUTER INC." ), + DMI_MATCH(DMI_BOARD_NAME, "B1402CVA"), + }, + }, {/* TongFang GM6XGxX/TUXEDO Stellaris 16 Gen5 AMD */ .matches = {
drivers/ata/pata_isapnp.c +3 -0
@@ -82,6 +82,9 @@ static int isapnp_init_one(struct pnp_dev *idev, const struct pnp_device_id *devif (pnp_port_valid (idev,1 )) { ctl_addr =devm_ioport_map (&idev->dev,pnp_port_start (idev,1 ),1 ); +if (!ctl_addr) +return -ENOMEM ; + ap->ioaddr.altstatus_addr = ctl_addr; ap->ioaddr.ctl_addr = ctl_addr; ap->ops = &isapnp_port_ops;
drivers/base/dd.c +2 -2
@@ -1162,8 +1162,6 @@ static void __device_release_driver(struct device *dev, struct device *parent)else if (drv->remove) drv->remove (dev); -device_links_driver_cleanup (dev); -devres_release_all (dev);arch_teardown_dma_ops (dev); dev->driver =NULL ;
@@ -1173,6 +1171,8 @@ static void __device_release_driver(struct device *dev, struct device *parent)pm_runtime_reinit (dev);dev_pm_set_driver_flags (dev,0 ); +device_links_driver_cleanup (dev); +klist_remove (&dev->p->knode_driver);device_pm_check_callbacks (dev);if (dev->bus)
drivers/cpufreq/imx6q-cpufreq.c +17 -15
@@ -210,6 +210,14 @@ static struct cpufreq_driver imx6q_cpufreq_driver = { .suspend = cpufreq_generic_suspend, }; +static void imx6x_disable_freq_in_opp (struct device *dev,unsigned long freq) +{ +int ret =dev_pm_opp_disable (dev, freq); + +if (ret <0 && ret != -ENODEV ) +dev_warn (dev,"failed to disable %ldMHz OPP\n" , freq /1000000 ); +} +#define OCOTP_CFG3 0x440#define OCOTP_CFG3_SPEED_SHIFT 16#define OCOTP_CFG3_SPEED_1P2GHZ 0x3
@@ -245,17 +253,15 @@ static void imx6q_opp_check_speed_grading(struct device *dev) val &=0x3 ;if (val <OCOTP_CFG3_SPEED_996MHZ ) -if (dev_pm_opp_disable (dev,996000000 )) -dev_warn (dev,"failed to disable 996MHz OPP\n" ); +imx6x_disable_freq_in_opp (dev,996000000 );if (of_machine_is_compatible ("fsl,imx6q" ) ||of_machine_is_compatible ("fsl,imx6qp" )) {if (val !=OCOTP_CFG3_SPEED_852MHZ ) -if (dev_pm_opp_disable (dev,852000000 )) -dev_warn (dev,"failed to disable 852MHz OPP\n" ); +imx6x_disable_freq_in_opp (dev,852000000 ); +if (val !=OCOTP_CFG3_SPEED_1P2GHZ ) -if (dev_pm_opp_disable (dev,1200000000 )) -dev_warn (dev,"failed to disable 1.2GHz OPP\n" ); +imx6x_disable_freq_in_opp (dev,1200000000 ); }iounmap (base); put_node:
@@ -308,20 +314,16 @@ static int imx6ul_opp_check_speed_grading(struct device *dev) val >>=OCOTP_CFG3_SPEED_SHIFT ; val &=0x3 ; -if (of_machine_is_compatible ("fsl,imx6ul" )) { +if (of_machine_is_compatible ("fsl,imx6ul" ))if (val !=OCOTP_CFG3_6UL_SPEED_696MHZ ) -if (dev_pm_opp_disable (dev,696000000 )) -dev_warn (dev,"failed to disable 696MHz OPP\n" ); - } +imx6x_disable_freq_in_opp (dev,696000000 );if (of_machine_is_compatible ("fsl,imx6ull" )) { -if (val !=OCOTP_CFG3_6ULL_SPEED_792MHZ ) -if (dev_pm_opp_disable (dev,792000000 )) -dev_warn (dev,"failed to disable 792MHz OPP\n" ); +if (val <OCOTP_CFG3_6ULL_SPEED_792MHZ ) +imx6x_disable_freq_in_opp (dev,792000000 );if (val !=OCOTP_CFG3_6ULL_SPEED_900MHZ ) -if (dev_pm_opp_disable (dev,900000000 )) -dev_warn (dev,"failed to disable 900MHz OPP\n" ); +imx6x_disable_freq_in_opp (dev,900000000 ); }return ret;
drivers/firewire/core-device.c +4 -7
@@ -719,14 +719,11 @@ static void create_units(struct fw_device *device) fw_unit_attributes, &unit->attribute_group); -if (device_register (&unit->device) <0 ) - goto skip_unit; -fw_device_get (device); -continue ; - - skip_unit: -kfree (unit); +if (device_register (&unit->device) <0 ) { +put_device (&unit->device); +continue ; + } } }
drivers/gpu/drm/panel/panel-simple.c +7 -6
@@ -1647,13 +1647,13 @@ static const struct panel_desc innolux_g070y2_l01 = {static const struct display_timing innolux_g101ice_l01_timing = { .pixelclock = {60400000 ,71100000 ,74700000 }, .hactive = {1280 ,1280 ,1280 }, - .hfront_porch = {41 ,80 ,100 }, - .hback_porch = {40 ,79 ,99 }, - .hsync_len = {1 ,1 ,1 }, + .hfront_porch = {30 ,60 ,70 }, + .hback_porch = {30 ,60 ,70 }, + .hsync_len = {22 ,40 ,60 }, .vactive = {800 ,800 ,800 }, - .vfront_porch = {5 ,11 ,14 }, - .vback_porch = {4 ,11 ,14 }, - .vsync_len = {1 ,1 ,1 }, + .vfront_porch = {3 ,8 ,14 }, + .vback_porch = {3 ,8 ,14 }, + .vsync_len = {4 ,7 ,12 }, .flags =DISPLAY_FLAGS_DE_HIGH , };
@@ -1670,6 +1670,7 @@ static const struct panel_desc innolux_g101ice_l01 = { .disable = 200, }, .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG, + .bus_flags = DRM_BUS_FLAG_DE_HIGH, .connector_type = DRM_MODE_CONNECTOR_LVDS, };
drivers/gpu/drm/rockchip/rockchip_drm_vop.c +11 -3
@@ -234,14 +234,22 @@ static inline void vop_cfg_done(struct vop *vop)VOP_REG_SET (vop, common, cfg_done,1 ); } -static bool has_rb_swapped (uint32_t format) +static bool has_rb_swapped (uint32_t version,uint32_t format) {switch (format) {case DRM_FORMAT_XBGR8888 :case DRM_FORMAT_ABGR8888 : -case DRM_FORMAT_BGR888 :case DRM_FORMAT_BGR565 :return true; +/* +* full framework (IP version 3.x) only need rb swapped for RGB888 and +* little framework (IP version 2.x) only need rb swapped for BGR888, +* check for 3.x to also only rb swap BGR888 for unknown vop version +*/ +case DRM_FORMAT_RGB888 : +return VOP_MAJOR (version) ==3 ; +case DRM_FORMAT_BGR888 : +return VOP_MAJOR (version) !=3 ;default :return false; }
@@ -886,7 +894,7 @@ static void vop_plane_atomic_update(struct drm_plane *plane,VOP_WIN_SET (vop, win, dsp_info, dsp_info);VOP_WIN_SET (vop, win, dsp_st, dsp_st); - rb_swap =has_rb_swapped (fb->format->format); + rb_swap =has_rb_swapped (vop->data->version, fb->format->format);VOP_WIN_SET (vop, win, rb_swap, rb_swap);/*
drivers/hid/hid-core.c +13 -3
@@ -702,15 +702,22 @@ static void hid_close_report(struct hid_device *device)* Free a device structure, all reports, and all fields. */ -static void hid_device_release (struct device *dev) +void hiddev_free (struct kref *ref) { -struct hid_device *hid =to_hid_device (dev); + struct hid_device *hid = container_of(ref, struct hid_device, ref);hid_close_report (hid);kfree (hid->dev_rdesc);kfree (hid); } +static void hid_device_release (struct device *dev) +{ +struct hid_device *hid =to_hid_device (dev); + +kref_put (&hid->ref, hiddev_free); +} +/* * Fetch a report description item from the data stream. We support long * items, though they are not used yet.
@@ -2437,10 +2444,12 @@ int hid_add_device(struct hid_device *hdev)hid_warn (hdev,"bad device descriptor (%d)\n" , ret); } + hdev->id =atomic_inc_return (&id); +/* XXX hack, any other cleaner solution after the driver core * is converted to allow more than 20 bytes as the device name? */ dev_set_name (&hdev->dev,"%04X:%04X:%04X.%04X" , hdev->bus, - hdev->vendor, hdev->product,atomic_inc_return (&id)); + hdev->vendor, hdev->product, hdev->id);hid_debug_register (hdev,dev_name (&hdev->dev)); ret =device_add (&hdev->dev);
@@ -2483,6 +2492,7 @@ struct hid_device *hid_allocate_device(void)spin_lock_init (&hdev->debug_list_lock);sema_init (&hdev->driver_input_lock,1 );mutex_init (&hdev->ll_open_lock); +kref_init (&hdev->ref);return hdev; }
drivers/hid/hid-debug.c +3 -0
@@ -1082,6 +1082,7 @@ static int hid_debug_events_open(struct inode *inode, struct file *file) goto out; } list->hdev = (struct hid_device *) inode->i_private; +kref_get (&list->hdev->ref); file->private_data = list;mutex_init (&list->read_mutex);
@@ -1174,6 +1175,8 @@ static int hid_debug_events_release(struct inode *inode, struct file *file)list_del (&list->node);spin_unlock_irqrestore (&list->hdev->debug_list_lock, flags);kfifo_free (&list->hid_debug_fifo); + +kref_put (&list->hdev->ref, hiddev_free);kfree (list);return 0 ;
drivers/infiniband/hw/i40iw/i40iw_ctrl.c +6 -0
@@ -2945,6 +2945,9 @@ static enum i40iw_status_code i40iw_sc_alloc_stag(u64 header;enum i40iw_page_size page_size; +if (!info->total_len && !info->all_memory) +return -EINVAL ; + page_size = (info->page_size ==0x200000 ) ?I40IW_PAGE_SIZE_2M :I40IW_PAGE_SIZE_4K ; cqp = dev->cqp; wqe =i40iw_sc_cqp_get_next_send_wqe (cqp, scratch);
@@ -3003,6 +3006,9 @@ static enum i40iw_status_code i40iw_sc_mr_reg_non_shared(u8 addr_type;enum i40iw_page_size page_size; +if (!info->total_len && !info->all_memory) +return -EINVAL ; + page_size = (info->page_size ==0x200000 ) ?I40IW_PAGE_SIZE_2M :I40IW_PAGE_SIZE_4K ;if (info->access_rights & (I40IW_ACCESS_FLAGS_REMOTEREAD_ONLY |I40IW_ACCESS_FLAGS_REMOTEWRITE_ONLY ))
drivers/infiniband/hw/i40iw/i40iw_type.h +2 -0
@@ -779,6 +779,7 @@ struct i40iw_allocate_stag_info {bool use_hmc_fcn_index;u8 hmc_fcn_index;bool use_pf_rid; +bool all_memory; };struct i40iw_reg_ns_stag_info {
@@ -797,6 +798,7 @@ struct i40iw_reg_ns_stag_info {bool use_hmc_fcn_index;u8 hmc_fcn_index;bool use_pf_rid; +bool all_memory; };struct i40iw_fast_reg_stag_info {
drivers/infiniband/hw/i40iw/i40iw_verbs.c +8 -2
@@ -1500,7 +1500,8 @@ static int i40iw_handle_q_mem(struct i40iw_device *iwdev,static int i40iw_hw_alloc_stag (struct i40iw_device *iwdev,struct i40iw_mr *iwmr) {struct i40iw_allocate_stag_info *info; -struct i40iw_pd *iwpd =to_iwpd (iwmr->ibmr.pd); +struct ib_pd *pd = iwmr->ibmr.pd; +struct i40iw_pd *iwpd =to_iwpd (pd);enum i40iw_status_code status;int err =0 ;struct i40iw_cqp_request *cqp_request;
@@ -1517,6 +1518,7 @@ static int i40iw_hw_alloc_stag(struct i40iw_device *iwdev, struct i40iw_mr *iwmr info->stag_idx = iwmr->stag >>I40IW_CQPSQ_STAG_IDX_SHIFT ; info->pd_id = iwpd->sc_pd.pd_id; info->total_len = iwmr->length; + info->all_memory = pd->flags &IB_PD_UNSAFE_GLOBAL_RKEY ; info->remote_access = true; cqp_info->cqp_cmd =OP_ALLOC_STAG ; cqp_info->post_sq =1 ;
@@ -1570,6 +1572,8 @@ static struct ib_mr *i40iw_alloc_mr(struct ib_pd *pd, enum ib_mr_type mr_type, iwmr->type =IW_MEMREG_TYPE_MEM ; palloc = &iwpbl->pble_alloc; iwmr->page_cnt = max_num_sg; +/* Use system PAGE_SIZE as the sg page sizes are unknown at this point */ + iwmr->length = max_num_sg *PAGE_SIZE ;mutex_lock (&iwdev->pbl_mutex); status =i40iw_get_pble (&iwdev->sc_dev, iwdev->pble_rsrc, palloc, iwmr->page_cnt);mutex_unlock (&iwdev->pbl_mutex);
@@ -1666,7 +1670,8 @@ static int i40iw_hwreg_mr(struct i40iw_device *iwdev, {struct i40iw_pbl *iwpbl = &iwmr->iwpbl;struct i40iw_reg_ns_stag_info *stag_info; -struct i40iw_pd *iwpd =to_iwpd (iwmr->ibmr.pd); +struct ib_pd *pd = iwmr->ibmr.pd; +struct i40iw_pd *iwpd =to_iwpd (pd);struct i40iw_pble_alloc *palloc = &iwpbl->pble_alloc;enum i40iw_status_code status;int err =0 ;
@@ -1686,6 +1691,7 @@ static int i40iw_hwreg_mr(struct i40iw_device *iwdev, stag_info->total_len = iwmr->length; stag_info->access_rights = access; stag_info->pd_id = iwpd->sc_pd.pd_id; + stag_info->all_memory = pd->flags &IB_PD_UNSAFE_GLOBAL_RKEY ; stag_info->addr_type =I40IW_ADDR_TYPE_VA_BASED ; stag_info->page_size = iwmr->page_size;
drivers/input/joystick/xpad.c +2 -0
@@ -119,6 +119,7 @@ static const struct xpad_device { { 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", 0, XTYPE_XBOX }, { 0x044f, 0x0f10, "Thrustmaster Modena GT Wheel", 0, XTYPE_XBOX }, { 0x044f, 0xb326, "Thrustmaster Gamepad GP XID", 0, XTYPE_XBOX360 }, + { 0x03f0, 0x0495, "HyperX Clutch Gladiate", 0, XTYPE_XBOXONE }, { 0x045e, 0x0202, "Microsoft X-Box pad v1 (US)", 0, XTYPE_XBOX }, { 0x045e, 0x0285, "Microsoft X-Box pad (Japan)", 0, XTYPE_XBOX }, { 0x045e, 0x0287, "Microsoft Xbox Controller S", 0, XTYPE_XBOX },
@@ -431,6 +432,7 @@ static const struct usb_device_id xpad_table[] = {XPAD_XBOX360_VENDOR (0x0079 ),/* GPD Win 2 Controller */ XPAD_XBOX360_VENDOR (0x03eb ),/* Wooting Keyboards (Legacy) */ XPAD_XBOX360_VENDOR (0x044f ),/* Thrustmaster X-Box 360 controllers */ +XPAD_XBOXONE_VENDOR (0x03f0 ),/* HP HyperX Xbox One Controllers */ XPAD_XBOX360_VENDOR (0x045e ),/* Microsoft X-Box 360 controllers */ XPAD_XBOXONE_VENDOR (0x045e ),/* Microsoft X-Box One controllers */ XPAD_XBOX360_VENDOR(0x046d), /* Logitech X-Box 360 style controllers */
drivers/md/bcache/btree.c +4 -2
@@ -1391,7 +1391,7 @@ static int btree_gc_coalesce(struct btree *b, struct btree_op *op,memset (new_nodes,0 ,sizeof (new_nodes));closure_init_stack (&cl); -while (nodes <GC_MERGE_NODES && !IS_ERR (r[nodes].b)) +while (nodes <GC_MERGE_NODES && !IS_ERR_OR_NULL (r[nodes].b)) keys += r[nodes++].keys; blocks =btree_default_blocks (b->c) *2 /3 ;
@@ -1538,7 +1538,7 @@ static int btree_gc_coalesce(struct btree *b, struct btree_op *op,bch_keylist_free (&keylist);for (i =0 ; i < nodes; i++) -if (!IS_ERR (new_nodes[i])) { +if (!IS_ERR_OR_NULL (new_nodes[i])) {btree_node_free (new_nodes[i]);rw_unlock (true, new_nodes[i]); }
@@ -1555,6 +1555,8 @@ static int btree_gc_rewrite_node(struct btree *b, struct btree_op *op,return 0 ; n =btree_node_alloc_replacement (replace,NULL ); +if (IS_ERR (n)) +return 0 ;/* recheck reserve after allocating replacement node */ if (btree_check_reserve (b,NULL )) {
drivers/md/bcache/sysfs.c +1 -1
@@ -1057,7 +1057,7 @@ SHOW(__bch_cache) sum +=INITIAL_PRIO - cached[i];if (n) -do_div (sum, n); + sum =div64_u64 (sum, n);for (i =0 ; i <ARRAY_SIZE (q); i++) q[i] = INITIAL_PRIO - cached[n * (i + 1) /
drivers/md/dm-delay.c +12 -5
@@ -30,7 +30,7 @@ struct delay_c {struct workqueue_struct *kdelayd_wq;struct work_struct flush_expired_bios;struct list_head delayed_bios; -atomic_t may_delay; +bool may_delay;struct delay_class read;struct delay_class write;
@@ -191,7 +191,7 @@ static int delay_ctr(struct dm_target *ti, unsigned int argc, char **argv)INIT_WORK (&dc->flush_expired_bios, flush_expired_bios);INIT_LIST_HEAD (&dc->delayed_bios);mutex_init (&dc->timer_lock); -atomic_set (&dc->may_delay,1 ); + dc->may_delay = true; dc->argc = argc; ret =delay_class_ctr (ti, &dc->read, argv);
@@ -245,7 +245,7 @@ static int delay_bio(struct delay_c *dc, struct delay_class *c, struct bio *bio)struct dm_delay_info *delayed;unsigned long expires =0 ; -if (!c->delay || !atomic_read (&dc->may_delay)) +if (!c->delay)return DM_MAPIO_REMAPPED ; delayed =dm_per_bio_data (bio,sizeof (struct dm_delay_info ));
@@ -254,6 +254,10 @@ static int delay_bio(struct delay_c *dc, struct delay_class *c, struct bio *bio) delayed->expires = expires = jiffies +msecs_to_jiffies (c->delay);mutex_lock (&delayed_bios_lock); +if (unlikely (!dc->may_delay)) { +mutex_unlock (&delayed_bios_lock); +return DM_MAPIO_REMAPPED ; + } c->ops++;list_add_tail (&delayed->list, &dc->delayed_bios);mutex_unlock (&delayed_bios_lock);
@@ -267,7 +271,10 @@ static void delay_presuspend(struct dm_target *ti) {struct delay_c *dc = ti->private; -atomic_set (&dc->may_delay,0 ); +mutex_lock (&delayed_bios_lock); + dc->may_delay = false; +mutex_unlock (&delayed_bios_lock); +del_timer_sync (&dc->delay_timer);flush_bios (flush_delayed_bios (dc,1 )); }
@@ -276,7 +283,7 @@ static void delay_resume(struct dm_target *ti) {struct delay_c *dc = ti->private; -atomic_set (&dc->may_delay,1 ); + dc->may_delay = true; }static int delay_map (struct dm_target *ti,struct bio *bio)
drivers/md/dm-verity-fec.c +2 -1
@@ -24,7 +24,8 @@ bool verity_fec_is_enabled(struct dm_verity *v)*/ static inline struct dm_verity_fec_io *fec_io (struct dm_verity_io *io) { -return (struct dm_verity_fec_io *)verity_io_digest_end (io->v, io); +return (struct dm_verity_fec_io *) + ((char *)io + io->v->ti->per_io_data_size -sizeof (struct dm_verity_fec_io )); }/*
drivers/md/dm-verity-target.c +3 -1
@@ -579,7 +579,9 @@ static void verity_end_io(struct bio *bio)struct dm_verity_io *io = bio->bi_private;if (bio->bi_status && - (!verity_fec_is_enabled (io->v) ||verity_is_system_shutting_down ())) { + (!verity_fec_is_enabled (io->v) || +verity_is_system_shutting_down () || + (bio->bi_opf &REQ_RAHEAD ))) {verity_finish_io (io, bio->bi_status);return ; }
drivers/md/dm-verity.h +0 -6
@@ -110,12 +110,6 @@ static inline u8 *verity_io_want_digest(struct dm_verity *v,return (u8 *)(io +1 ) + v->ahash_reqsize + v->digest_size; } -static inline u8 *verity_io_digest_end (struct dm_verity *v, -struct dm_verity_io *io) -{ -return verity_io_want_digest (v, io) + v->digest_size; -} - extern int verity_for_bv_block(struct dm_verity *v, struct dm_verity_io *io, struct bvec_iter *iter, int (*process)(struct dm_verity *v,
drivers/mmc/core/block.c +2 -0
@@ -1463,6 +1463,8 @@ static void mmc_blk_cqe_complete_rq(struct mmc_queue *mq, struct request *req)blk_mq_requeue_request (req, true); else__blk_mq_end_request (req ,BLK_STS_OK ); + }else if (mq->in_recovery) { +blk_mq_requeue_request (req, true); }else {blk_mq_end_request (req,BLK_STS_OK ); }
drivers/mmc/core/core.c +9 -6
@@ -564,22 +564,25 @@ int mmc_cqe_recovery(struct mmc_host *host) host->cqe_ops->cqe_recovery_start (host);memset (&cmd,0 ,sizeof (cmd)); - cmd.opcode =MMC_STOP_TRANSMISSION , - cmd.flags =MMC_RSP_R1B |MMC_CMD_AC , + cmd.opcode =MMC_STOP_TRANSMISSION ; + cmd.flags =MMC_RSP_R1B |MMC_CMD_AC ; cmd.flags &= ~MMC_RSP_CRC ;/* Ignore CRC */ - cmd.busy_timeout =MMC_CQE_RECOVERY_TIMEOUT , -mmc_wait_for_cmd (host, &cmd,0 ); + cmd.busy_timeout =MMC_CQE_RECOVERY_TIMEOUT ; +mmc_wait_for_cmd (host, &cmd,MMC_CMD_RETRIES );memset (&cmd,0 ,sizeof (cmd)); cmd.opcode =MMC_CMDQ_TASK_MGMT ; cmd.arg =1 ;/* Discard entire queue */ cmd.flags =MMC_RSP_R1B |MMC_CMD_AC ; cmd.flags &= ~MMC_RSP_CRC ;/* Ignore CRC */ - cmd.busy_timeout =MMC_CQE_RECOVERY_TIMEOUT , - err =mmc_wait_for_cmd (host, &cmd,0 ); + cmd.busy_timeout =MMC_CQE_RECOVERY_TIMEOUT ; + err =mmc_wait_for_cmd (host, &cmd,MMC_CMD_RETRIES ); host->cqe_ops->cqe_recovery_finish (host); +if (err) + err =mmc_wait_for_cmd (host, &cmd,MMC_CMD_RETRIES ); +mmc_retune_release (host);return err;
drivers/mmc/host/cqhci.c +22 -22
75 lines not on this page · raw message
drivers/mtd/chips/cfi_cmdset_0001.c +24 -5
@@ -420,8 +420,25 @@ read_pri_intelext(struct map_info *map, __u16 adr) extra_size =0 ;/* Protection Register info */ - extra_size += (extp->NumProtectionFields -1 ) * -sizeof (struct cfi_intelext_otpinfo ); +if (extp->NumProtectionFields) { +struct cfi_intelext_otpinfo *otp = + (struct cfi_intelext_otpinfo *)&extp->extra[0 ]; + + extra_size += (extp->NumProtectionFields -1 ) * +sizeof (struct cfi_intelext_otpinfo ); + +if (extp_size >=sizeof (*extp) + extra_size) { +int i; + +/* Do some byteswapping if necessary */ +for (i =0 ; i < extp->NumProtectionFields -1 ; i++) { + otp->ProtRegAddr =le32_to_cpu (otp->ProtRegAddr); + otp->FactGroups =le16_to_cpu (otp->FactGroups); + otp->UserGroups =le16_to_cpu (otp->UserGroups); + otp++; + } + } + } }if (extp->MinorVersion >='1' ) {
@@ -695,14 +712,16 @@ static int cfi_intelext_partition_fixup(struct mtd_info *mtd,*/ if (extp && extp->MajorVersion =='1' && extp->MinorVersion >='3' && extp->FeatureSupport & (1 <<9 )) { +int offs =0 ;struct cfi_private *newcfi;struct flchip *chip;struct flchip_shared *shared; -int offs, numregions, numparts, partshift, numvirtchips, i, j; +int numregions, numparts, partshift, numvirtchips, i, j;/* Protection Register info */ - offs = (extp->NumProtectionFields -1 ) * -sizeof (struct cfi_intelext_otpinfo ); +if (extp->NumProtectionFields) + offs = (extp->NumProtectionFields -1 ) * +sizeof (struct cfi_intelext_otpinfo );/* Burst Read info */ offs += extp->extra[offs+1 ]+2 ;
drivers/net/ethernet/amd/xgbe/xgbe-drv.c +14 -0
@@ -682,10 +682,24 @@ static void xgbe_service(struct work_struct *work)static void xgbe_service_timer (struct timer_list *t) {struct xgbe_prv_data *pdata =from_timer (pdata, t, service_timer); +struct xgbe_channel *channel; +unsigned int i;queue_work (pdata->dev_workqueue, &pdata->service_work);mod_timer (&pdata->service_timer, jiffies +HZ ); + +if (!pdata->tx_usecs) +return ; + +for (i =0 ; i < pdata->channel_count; i++) { + channel = pdata->channel[i]; +if (!channel->tx_ring || channel->tx_timer_active) +break ; + channel->tx_timer_active =1 ; +mod_timer (&channel->tx_timer, + jiffies +usecs_to_jiffies (pdata->tx_usecs)); + } }static void xgbe_init_timers (struct xgbe_prv_data *pdata)
drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c +8 -3
@@ -314,10 +314,15 @@ static int xgbe_get_link_ksettings(struct net_device *netdev, cmd->base.phy_address = pdata->phy.address; - cmd->base.autoneg = pdata->phy.autoneg; - cmd->base.speed = pdata->phy.speed; - cmd->base.duplex = pdata->phy.duplex; +if (netif_carrier_ok (netdev)) { + cmd->base.speed = pdata->phy.speed; + cmd->base.duplex = pdata->phy.duplex; + }else { + cmd->base.speed =SPEED_UNKNOWN ; + cmd->base.duplex =DUPLEX_UNKNOWN ; + } + cmd->base.autoneg = pdata->phy.autoneg; cmd->base.port =PORT_NONE ;XGBE_LM_COPY (cmd, supported, lks, supported);
drivers/net/ethernet/amd/xgbe/xgbe-mdio.c +13 -1
@@ -1178,7 +1178,19 @@ static int xgbe_phy_config_fixed(struct xgbe_prv_data *pdata)if (pdata->phy.duplex !=DUPLEX_FULL )return -EINVAL ; -xgbe_set_mode (pdata, mode); +/* Force the mode change for SFI in Fixed PHY config. +* Fixed PHY configs needs PLL to be enabled while doing mode set. +* When the SFP module isn't connected during boot, driver assumes +* AN is ON and attempts autonegotiation. However, if the connected +* SFP comes up in Fixed PHY config, the link will not come up as +* PLL isn't enabled while the initial mode set command is issued. +* So, force the mode change for SFI in Fixed PHY configuration to +* fix link issues. +*/ +if (mode ==XGBE_MODE_SFI ) +xgbe_change_mode (pdata, mode); +else +xgbe_set_mode (pdata, mode);return 0 ; }
drivers/net/ethernet/renesas/ravb_main.c +16 -4
@@ -1380,13 +1380,13 @@ static int ravb_open(struct net_device *ndev)if (priv->chip_id ==RCAR_GEN2 )ravb_ptp_init (ndev, priv->pdev); -netif_tx_start_all_queues (ndev); -/* PHY control start */ error =ravb_phy_start (ndev);if (error) goto out_ptp_stop; +netif_tx_start_all_queues (ndev); +return 0 ; out_ptp_stop:
@@ -1435,6 +1435,12 @@ static void ravb_tx_timeout_work(struct work_struct *work)struct net_device *ndev = priv->ndev;int error; +if (!rtnl_trylock ()) { +usleep_range (1000 ,2000 ); +schedule_work (&priv->work); +return ; + } +netif_tx_stop_all_queues (ndev);/* Stop PTP Clock driver */
@@ -1467,7 +1473,7 @@ static void ravb_tx_timeout_work(struct work_struct *work)*/ netdev_err (ndev,"%s: ravb_dmac_init() failed, error %d\n" , __func__, error); -return ; + goto out_unlock; }ravb_emac_init (ndev);
@@ -1477,6 +1483,9 @@ static void ravb_tx_timeout_work(struct work_struct *work)ravb_ptp_init (ndev, priv->pdev);netif_tx_start_all_queues (ndev); + +out_unlock: +rtnl_unlock (); }/* Packet transmit function for Ethernet AVB */
@@ -2030,7 +2039,9 @@ static int ravb_probe(struct platform_device *pdev) ndev->hw_features =NETIF_F_RXCSUM ;pm_runtime_enable (&pdev->dev); -pm_runtime_get_sync (&pdev->dev); + error =pm_runtime_resume_and_get (&pdev->dev); +if (error <0 ) + goto out_rpm_disable;/* The Ether-specific entries in the device structure. */ ndev->base_addr = res->start;
@@ -2201,6 +2212,7 @@ static int ravb_probe(struct platform_device *pdev)free_netdev (ndev);pm_runtime_put (&pdev->dev); +out_rpm_disable:pm_runtime_disable (&pdev->dev);return error; }
drivers/net/ethernet/stmicro/stmmac/mmc_core.c +4 -0
@@ -170,8 +170,10 @@#define MMC_XGMAC_RX_DISCARD_OCT_GB 0x1b4#define MMC_XGMAC_RX_ALIGN_ERR_PKT 0x1bc +#define MMC_XGMAC_TX_FPE_INTR_MASK 0x204#define MMC_XGMAC_TX_FPE_FRAG 0x208#define MMC_XGMAC_TX_HOLD_REQ 0x20c +#define MMC_XGMAC_RX_FPE_INTR_MASK 0x224#define MMC_XGMAC_RX_PKT_ASSEMBLY_ERR 0x228#define MMC_XGMAC_RX_PKT_SMD_ERR 0x22c#define MMC_XGMAC_RX_PKT_ASSEMBLY_OK 0x230
@@ -336,6 +338,8 @@ static void dwxgmac_mmc_intr_all_mask(void __iomem *mmcaddr) {writel (0x0 , mmcaddr +MMC_RX_INTR_MASK );writel (0x0 , mmcaddr +MMC_TX_INTR_MASK ); +writel (MMC_DEFAULT_MASK , mmcaddr +MMC_XGMAC_TX_FPE_INTR_MASK ); +writel (MMC_DEFAULT_MASK , mmcaddr +MMC_XGMAC_RX_FPE_INTR_MASK );writel (MMC_DEFAULT_MASK , mmcaddr +MMC_XGMAC_RX_IPC_INTR_MASK ); }
drivers/net/ethernet/xilinx/xilinx_axienet_main.c +1 -1
@@ -656,7 +656,7 @@ axienet_start_xmit(struct sk_buff *skb, struct net_device *ndev)if (lp->features &XAE_FEATURE_FULL_TX_CSUM ) {/* Tx Full Checksum Offload Enabled */ cur_p->app0 |=2 ; - }else if (lp->features &XAE_FEATURE_PARTIAL_RX_CSUM ) { + }else if (lp->features &XAE_FEATURE_PARTIAL_TX_CSUM ) { csum_start_off =skb_transport_offset (skb); csum_index_off = csum_start_off + skb->csum_offset;/* Tx Partial Checksum Offload Enabled */
drivers/net/hyperv/netvsc_drv.c +30 -11
79 lines not on this page · raw message
drivers/net/usb/ax88179_178a.c +2 -2
@@ -1594,11 +1594,11 @@ static int ax88179_reset(struct usbnet *dev) *tmp16 =AX_PHYPWR_RSTCTL_IPRL ;ax88179_write_cmd (dev,AX_ACCESS_MAC ,AX_PHYPWR_RSTCTL ,2 ,2 , tmp16); -msleep (200 ); +msleep (500 ); *tmp =AX_CLK_SELECT_ACS |AX_CLK_SELECT_BCS ;ax88179_write_cmd (dev,AX_ACCESS_MAC ,AX_CLK_SELECT ,1 ,1 , tmp); -msleep (100 ); +msleep (200 );/* Ethernet PHY Auto Detach*/ ax88179_auto_detach (dev,0 );
drivers/nvme/target/core.c +11 -10
@@ -1107,19 +1107,19 @@ static void nvmet_init_cap(struct nvmet_ctrl *ctrl) ctrl->cap |=NVMET_QUEUE_SIZE -1 ; } -u16 nvmet_ctrl_find_get (const char *subsysnqn,const char *hostnqn,u16 cntlid, -struct nvmet_req *req,struct nvmet_ctrl **ret) +struct nvmet_ctrl *nvmet_ctrl_find_get (const char *subsysnqn, +const char *hostnqn,u16 cntlid, +struct nvmet_req *req) { +struct nvmet_ctrl *ctrl =NULL ;struct nvmet_subsys *subsys; -struct nvmet_ctrl *ctrl; -u16 status =0 ; subsys =nvmet_find_get_subsys (req->port, subsysnqn);if (!subsys) {pr_warn ("connect request for invalid subsystem %s!\n" , subsysnqn); req->cqe->result.u32 =IPO_IATTR_CONNECT_DATA (subsysnqn); -return NVME_SC_CONNECT_INVALID_PARAM |NVME_SC_DNR ; + goto out; }mutex_lock (&subsys->lock);
@@ -1132,20 +1132,21 @@ u16 nvmet_ctrl_find_get(const char *subsysnqn, const char *hostnqn, u16 cntlid,if (!kref_get_unless_zero (&ctrl->ref))continue ; - *ret = ctrl; - goto out; +/* ctrl found */ + goto found; } } + ctrl =NULL ;/* ctrl not found */ pr_warn ("could not find controller %d for subsys %s / host %s\n" , cntlid, subsysnqn, hostnqn); req->cqe->result.u32 =IPO_IATTR_CONNECT_DATA (cntlid); - status =NVME_SC_CONNECT_INVALID_PARAM |NVME_SC_DNR ; -out: +found:mutex_unlock (&subsys->lock);nvmet_subsys_put (subsys); -return status; +out: +return ctrl; }u16 nvmet_check_ctrl_status (struct nvmet_req *req,struct nvme_command *cmd)
drivers/nvme/target/fabrics-cmd.c +10 -5
@@ -182,6 +182,8 @@ static void nvmet_execute_admin_connect(struct nvmet_req *req) goto out; } + d->subsysnqn[NVMF_NQN_FIELD_LEN -1 ] ='\0' ; + d->hostnqn[NVMF_NQN_FIELD_LEN -1 ] ='\0' ; status =nvmet_alloc_ctrl (d->subsysnqn, d->hostnqn, req,le32_to_cpu (c->kato), &ctrl);if (status) {
@@ -213,7 +215,7 @@ static void nvmet_execute_io_connect(struct nvmet_req *req) {struct nvmf_connect_command *c = &req->cmd->connect;struct nvmf_connect_data *d; -struct nvmet_ctrl *ctrl =NULL ; +struct nvmet_ctrl *ctrl;u16 qid =le16_to_cpu (c->qid);u16 status =0 ;
@@ -237,11 +239,14 @@ static void nvmet_execute_io_connect(struct nvmet_req *req) goto out; } - status =nvmet_ctrl_find_get (d->subsysnqn, d->hostnqn, -le16_to_cpu (d->cntlid), - req, &ctrl); -if (status) + d->subsysnqn[NVMF_NQN_FIELD_LEN -1 ] ='\0' ; + d->hostnqn[NVMF_NQN_FIELD_LEN -1 ] ='\0' ; + ctrl =nvmet_ctrl_find_get (d->subsysnqn, d->hostnqn, +le16_to_cpu (d->cntlid), req); +if (!ctrl) { + status =NVME_SC_CONNECT_INVALID_PARAM |NVME_SC_DNR ; goto out; + }if (unlikely (qid > ctrl->subsys->max_qid)) {pr_warn ("invalid queue id (%d)\n" , qid);
drivers/nvme/target/nvmet.h +3 -2
@@ -394,8 +394,9 @@ void nvmet_ctrl_fatal_error(struct nvmet_ctrl *ctrl);void nvmet_update_cc (struct nvmet_ctrl *ctrl,u32 new);u16 nvmet_alloc_ctrl (const char *subsysnqn,const char *hostnqn,struct nvmet_req *req,u32 kato,struct nvmet_ctrl **ctrlp); -u16 nvmet_ctrl_find_get (const char *subsysnqn,const char *hostnqn,u16 cntlid, -struct nvmet_req *req,struct nvmet_ctrl **ret); +struct nvmet_ctrl *nvmet_ctrl_find_get (const char *subsysnqn, +const char *hostnqn,u16 cntlid, +struct nvmet_req *req);void nvmet_ctrl_put (struct nvmet_ctrl *ctrl);u16 nvmet_check_ctrl_status (struct nvmet_req *req,struct nvme_command *cmd);
drivers/pci/controller/dwc/pci-keystone.c +4 -4
@@ -861,8 +861,8 @@ static irqreturn_t ks_pcie_err_irq_handler(int irq, void *priv)return ks_pcie_handle_error_irq (ks_pcie); } -static int __init ks_pcie_add_pcie_port (struct keystone_pcie *ks_pcie, -struct platform_device *pdev) +static int ks_pcie_add_pcie_port (struct keystone_pcie *ks_pcie, +struct platform_device *pdev) {struct dw_pcie *pci = ks_pcie->pci;struct pcie_port *pp = &pci->pp;
@@ -992,8 +992,8 @@ static const struct dw_pcie_ep_ops ks_pcie_am654_ep_ops = { .get_features = &ks_pcie_am654_get_features, }; -static int __init ks_pcie_add_pcie_ep (struct keystone_pcie *ks_pcie, -struct platform_device *pdev) +static int ks_pcie_add_pcie_ep (struct keystone_pcie *ks_pcie, +struct platform_device *pdev) {int ret;struct dw_pcie_ep *ep;
drivers/pinctrl/core.c +3 -3
@@ -1237,17 +1237,17 @@ static void pinctrl_link_add(struct pinctrl_dev *pctldev,static int pinctrl_commit_state (struct pinctrl *p,struct pinctrl_state *state) {struct pinctrl_setting *setting, *setting2; -struct pinctrl_state *old_state = p->state; +struct pinctrl_state *old_state =READ_ONCE (p->state);int ret; -if (p->state) { +if (old_state) {/* * For each pinmux setting in the old state, forget SW's record * of mux owner for that pingroup. Any pingroups which are * still owned by the new state will be re-acquired by the call * to pinmux_enable_setting() in the loop below. */ -list_for_each_entry (setting, &p->state->settings, node) { +list_for_each_entry (setting, &old_state->settings, node) {if (setting->type !=PIN_MAP_TYPE_MUX_GROUP )continue ;pinmux_disable_setting (setting);
drivers/s390/block/dasd.c +13 -11
@@ -737,18 +737,20 @@ static void dasd_profile_start(struct dasd_block *block,* we count each request only once. */ device = cqr->startdev; -if (device->profile.data) { - counter =1 ;/* request is not yet queued on the start device */ -list_for_each (l, &device->ccw_queue) -if (++counter >=31 ) -break ; - } +if (!device->profile.data) +return ; + +spin_lock (get_ccwdev_lock (device->cdev)); + counter =1 ;/* request is not yet queued on the start device */ +list_for_each (l, &device->ccw_queue) +if (++counter >=31 ) +break ; +spin_unlock (get_ccwdev_lock (device->cdev)); +spin_lock (&device->profile.lock); -if (device->profile.data) { - device->profile.data->dasd_io_nr_req[counter]++; -if (rq_data_dir (req) ==READ ) - device->profile.data->dasd_read_nr_req[counter]++; - } + device->profile.data->dasd_io_nr_req[counter]++; +if (rq_data_dir (req) ==READ ) + device->profile.data->dasd_read_nr_req[counter]++;spin_unlock (&device->profile.lock); }
drivers/scsi/qla2xxx/qla_def.h +0 -3
@@ -596,9 +596,6 @@ typedef struct srb {struct fc_port *fcport;struct scsi_qla_host *vha; unsigned int start_timer:1; - unsigned int abort:1; - unsigned int aborted:1; - unsigned int completed:1;uint32_t handle;uint16_t flags;
drivers/scsi/qla2xxx/qla_isr.c +0 -5
@@ -2479,11 +2479,6 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)return ; } -if (sp->abort) - sp->aborted =1 ; -else - sp->completed =1 ; -if (sp->cmd_type !=TYPE_SRB ) { req->outstanding_cmds[handle] =NULL ; ql_dbg(ql_dbg_io, vha, 0x3015,
drivers/scsi/qla2xxx/qla_os.c +24 -15
@@ -814,7 +814,7 @@ qla2xxx_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)uint16_t hwq;struct qla_qpair *qpair =NULL ; - tag =blk_mq_unique_tag (cmd->request); + tag =blk_mq_unique_tag (scsi_cmd_to_rq (cmd)); hwq =blk_mq_unique_tag_to_hwq (tag); qpair = ha->queue_pair_map[hwq];
@@ -1243,17 +1243,6 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd)return fast_fail_status !=SUCCESS ? fast_fail_status :FAILED ;spin_lock_irqsave (qpair->qp_lock_ptr, flags); -if (sp->completed) { -spin_unlock_irqrestore (qpair->qp_lock_ptr, flags); -return SUCCESS ; - } - -if (sp->abort || sp->aborted) { -spin_unlock_irqrestore (qpair->qp_lock_ptr, flags); -return FAILED ; - } - - sp->abort =1 ; sp->comp = ∁spin_unlock_irqrestore (qpair->qp_lock_ptr, flags);
@@ -1661,6 +1650,10 @@ qla2x00_loop_reset(scsi_qla_host_t *vha)return QLA_SUCCESS ; } +/* +* The caller must ensure that no completion interrupts will happen +* while this function is in progress. +*/ static void qla2x00_abort_srb(struct qla_qpair *qp, srb_t *sp, const int res, unsigned long *flags) __releases(qp->qp_lock_ptr)
@@ -1669,6 +1662,7 @@ static void qla2x00_abort_srb(struct qla_qpair *qp, srb_t *sp, const int res,DECLARE_COMPLETION_ONSTACK (comp);scsi_qla_host_t *vha = qp->vha;struct qla_hw_data *ha = vha->hw; +struct scsi_cmnd *cmd =GET_CMD_SP (sp);int rval;bool ret_cmd;uint32_t ratov_j;
@@ -1688,7 +1682,6 @@ static void qla2x00_abort_srb(struct qla_qpair *qp, srb_t *sp, const int res, } sp->comp = ∁ - sp->abort =1 ;spin_unlock_irqrestore (qp->qp_lock_ptr, *flags); rval = ha->isp_ops->abort_command (sp);
@@ -1712,13 +1705,25 @@ static void qla2x00_abort_srb(struct qla_qpair *qp, srb_t *sp, const int res, }spin_lock_irqsave (qp->qp_lock_ptr, *flags); -if (ret_cmd && (!sp->completed || !sp->aborted)) - sp->done (sp, res); +switch (sp->type) { +case SRB_SCSI_CMD : +if (ret_cmd &&blk_mq_request_started (scsi_cmd_to_rq (cmd))) + sp->done (sp, res); +break ; +default : +if (ret_cmd) + sp->done (sp, res); +break ; + } }else { sp->done (sp, res); } } +/* +* The caller must ensure that no completion interrupts will happen +* while this function is in progress. +*/ static void __qla2x00_abort_all_cmds (struct qla_qpair *qp,int res) {
@@ -1776,6 +1781,10 @@ __qla2x00_abort_all_cmds(struct qla_qpair *qp, int res)spin_unlock_irqrestore (qp->qp_lock_ptr, flags); } +/* +* The caller must ensure that no completion interrupts will happen +* while this function is in progress. +*/ void qla2x00_abort_all_cmds (scsi_qla_host_t *vha,int res) {
drivers/usb/dwc2/hcd_intr.c +7 -8
@@ -2045,15 +2045,17 @@ static void dwc2_hc_n_intr(struct dwc2_hsotg *hsotg, int chnum) {struct dwc2_qtd *qtd;struct dwc2_host_chan *chan; -u32 hcint, hcintmsk; +u32 hcint, hcintraw, hcintmsk; chan = hsotg->hc_ptr_array[chnum]; - hcint =dwc2_readl (hsotg,HCINT (chnum)); + hcintraw =dwc2_readl (hsotg,HCINT (chnum)); hcintmsk =dwc2_readl (hsotg,HCINTMSK (chnum)); + hcint = hcintraw & hcintmsk; +dwc2_writel (hsotg, hcint,HCINT (chnum)); +if (!chan) {dev_err (hsotg->dev,"## hc_ptr_array for channel is NULL ##\n" ); -dwc2_writel (hsotg, hcint,HCINT (chnum));return ; }
@@ -2062,11 +2064,9 @@ static void dwc2_hc_n_intr(struct dwc2_hsotg *hsotg, int chnum) chnum);dev_vdbg (hsotg->dev," hcint 0x%08x, hcintmsk 0x%08x, hcint&hcintmsk 0x%08x\n" , - hcint, hcintmsk, hcint & hcintmsk); + hcintraw, hcintmsk, hcint); } -dwc2_writel (hsotg, hcint,HCINT (chnum)); -/* * If we got an interrupt after someone called * dwc2_hcd_endpoint_disable() we don't want to crash below
@@ -2076,8 +2076,7 @@ static void dwc2_hc_n_intr(struct dwc2_hsotg *hsotg, int chnum)return ; } - chan->hcint = hcint; - hcint &= hcintmsk; + chan->hcint = hcintraw;/* * If the channel was halted due to a dequeue, the qtd list might
drivers/usb/dwc3/core.c +2 -0
@@ -1556,6 +1556,8 @@ static int dwc3_probe(struct platform_device *pdev)pm_runtime_put (dev); +dma_set_max_seg_size (dev,UINT_MAX ); +return 0 ; err5:
drivers/usb/dwc3/dwc3-qcom.c +10 -7
@@ -361,7 +361,7 @@ static int dwc3_qcom_setup_irq(struct platform_device *pdev)irq_set_status_flags (irq,IRQ_NOAUTOEN ); ret =devm_request_threaded_irq (qcom->dev, irq,NULL , qcom_dwc3_resume_irq, -IRQF_TRIGGER_HIGH |IRQF_ONESHOT , +IRQF_ONESHOT ,"qcom_dwc3 HS" , qcom);if (ret) {dev_err (qcom->dev,"hs_phy_irq failed: %d\n" , ret);
@@ -376,7 +376,7 @@ static int dwc3_qcom_setup_irq(struct platform_device *pdev)irq_set_status_flags (irq,IRQ_NOAUTOEN ); ret =devm_request_threaded_irq (qcom->dev, irq,NULL , qcom_dwc3_resume_irq, -IRQF_TRIGGER_HIGH |IRQF_ONESHOT , +IRQF_ONESHOT ,"qcom_dwc3 DP_HS" , qcom);if (ret) {dev_err (qcom->dev,"dp_hs_phy_irq failed: %d\n" , ret);
@@ -391,7 +391,7 @@ static int dwc3_qcom_setup_irq(struct platform_device *pdev)irq_set_status_flags (irq,IRQ_NOAUTOEN ); ret =devm_request_threaded_irq (qcom->dev, irq,NULL , qcom_dwc3_resume_irq, -IRQF_TRIGGER_HIGH |IRQF_ONESHOT , +IRQF_ONESHOT ,"qcom_dwc3 DM_HS" , qcom);if (ret) {dev_err (qcom->dev,"dm_hs_phy_irq failed: %d\n" , ret);
@@ -406,7 +406,7 @@ static int dwc3_qcom_setup_irq(struct platform_device *pdev)irq_set_status_flags (irq,IRQ_NOAUTOEN ); ret =devm_request_threaded_irq (qcom->dev, irq,NULL , qcom_dwc3_resume_irq, -IRQF_TRIGGER_HIGH |IRQF_ONESHOT , +IRQF_ONESHOT ,"qcom_dwc3 SS" , qcom);if (ret) {dev_err (qcom->dev,"ss_phy_irq failed: %d\n" , ret);
@@ -553,6 +553,7 @@ static int dwc3_qcom_of_register_core(struct platform_device *pdev)if (!qcom->dwc3) { ret = -ENODEV ;dev_err (dev,"failed to get dwc3 platform device\n" ); +of_platform_depopulate (dev); } node_put:
@@ -666,7 +667,7 @@ static int dwc3_qcom_probe(struct platform_device *pdev)if (ret) {dev_err (dev,"failed to register DWC3 Core, err=%d\n" , ret); - goto depopulate; + goto clk_disable; } qcom->mode =usb_get_dr_mode (&qcom->dwc3->dev);
@@ -692,7 +693,8 @@ static int dwc3_qcom_probe(struct platform_device *pdev)if (np)of_platform_depopulate (&pdev->dev);else -platform_device_put (pdev); +platform_device_del (qcom->dwc3); +platform_device_put (qcom->dwc3); clk_disable:for (i = qcom->num_clocks -1 ; i >=0 ; i--) {clk_disable_unprepare (qcom->clks[i]);
@@ -714,7 +716,8 @@ static int dwc3_qcom_remove(struct platform_device *pdev)if (np)of_platform_depopulate (&pdev->dev);else -platform_device_put (pdev); +platform_device_del (qcom->dwc3); +platform_device_put (qcom->dwc3);for (i = qcom->num_clocks -1 ; i >=0 ; i--) {clk_disable_unprepare (qcom->clks[i]);
drivers/usb/serial/option.c +8 -3
@@ -203,8 +203,8 @@ static void option_instat_callback(struct urb *urb);#define DELL_PRODUCT_5829E_ESIM 0x81e4#define DELL_PRODUCT_5829E 0x81e6 -#define DELL_PRODUCT_FM101R 0x8213 -#define DELL_PRODUCT_FM101R_ESIM 0x8215 +#define DELL_PRODUCT_FM101R_ESIM 0x8213 +#define DELL_PRODUCT_FM101R 0x8215#define KYOCERA_VENDOR_ID 0x0c88#define KYOCERA_PRODUCT_KPC650 0x17da
@@ -609,6 +609,8 @@ static void option_instat_callback(struct urb *urb);#define UNISOC_VENDOR_ID 0x1782/* TOZED LT70-C based on UNISOC SL8563 uses UNISOC's vendor ID */ #define TOZED_PRODUCT_LT70C 0x4055 +/* Luat Air72*U series based on UNISOC UIS8910 uses UNISOC's vendor ID */ +#define LUAT_PRODUCT_AIR720U 0x4e00/* Device flags */
@@ -1546,7 +1548,8 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0165, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0167, 0xff, 0xff, 0xff), .driver_info = RSVD(4) }, - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0189, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0189, 0xff, 0xff, 0xff), + .driver_info = RSVD(4) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0191, 0xff, 0xff, 0xff), /* ZTE EuFi890 */ .driver_info = RSVD(4) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0196, 0xff, 0xff, 0xff) },
@@ -2249,6 +2252,7 @@ static const struct usb_device_id option_ids[] = { .driver_info = RSVD(4) | RSVD(5) | RSVD(6) }, { USB_DEVICE(0x1782, 0x4d10) }, /* Fibocom L610 (AT mode) */ { USB_DEVICE_INTERFACE_CLASS(0x1782, 0x4d11, 0xff) }, /* Fibocom L610 (ECM/RNDIS mode) */ + { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x0001, 0xff, 0xff, 0xff) }, /* Fibocom L716-EU (ECM/RNDIS mode) */ { USB_DEVICE(0x2cb7, 0x0104), /* Fibocom NL678 series */ .driver_info = RSVD(4) | RSVD(5) }, { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0105, 0xff), /* Fibocom NL678 series */
@@ -2271,6 +2275,7 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0xff, 0x40) }, { USB_DEVICE_AND_INTERFACE_INFO(SIERRA_VENDOR_ID, SIERRA_PRODUCT_EM9191, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, TOZED_PRODUCT_LT70C, 0xff, 0, 0) }, + { USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, LUAT_PRODUCT_AIR720U, 0xff, 0, 0) }, { } /* Terminating entry */ };MODULE_DEVICE_TABLE (usb, option_ids);
drivers/video/fbdev/sticore.h +1 -1
@@ -237,7 +237,7 @@ struct sti_rom_font {u8 height;u8 font_type;/* language type */ u8 bytes_per_char; -u32 next_font; +s32 next_font;/* note: signed int */ u8 underline_height;u8 underline_pos;u8 res008[2 ];
fs/afs/dynroot.c +2 -2
@@ -38,8 +38,8 @@ static int afs_probe_cell_name(struct dentry *dentry) ret =dns_query (net->net,"afsdb" , name, len,"srv=1" ,NULL ,NULL , false); -if (ret == -ENODATA ) - ret = -EDESTADDRREQ ; +if (ret == -ENODATA || ret == -ENOKEY ) + ret = -ENOENT ;return ret; }
fs/afs/super.c +2 -0
@@ -391,6 +391,8 @@ static int afs_validate_fc(struct fs_context *fc)return PTR_ERR (volume); ctx->volume = volume; +if (volume->type !=AFSVL_RWVOL ) + ctx->flock_mode = afs_flock_mode_local; }return 0 ;
fs/afs/vl_rotate.c +10 -0
@@ -58,6 +58,12 @@ static bool afs_start_vl_iteration(struct afs_vl_cursor *vc) }/* Status load is ordered after lookup counter load */ +if (cell->dns_status ==DNS_LOOKUP_GOT_NOT_FOUND ) { +pr_warn ("No record of cell %s\n" , cell->name); + vc->error = -ENOENT ; +return false; + } +if (cell->dns_source ==DNS_RECORD_UNAVAILABLE ) { vc->error = -EDESTADDRREQ ;return false;
@@ -276,6 +282,7 @@ bool afs_select_vlserver(struct afs_vl_cursor *vc)*/ static void afs_vl_dump_edestaddrreq (const struct afs_vl_cursor *vc) { +struct afs_cell *cell = vc->cell;static int count;int i;
@@ -285,6 +292,9 @@ static void afs_vl_dump_edestaddrreq(const struct afs_vl_cursor *vc)rcu_read_lock ();pr_notice ("EDESTADDR occurred\n" ); +pr_notice ("CELL: %s err=%d\n" , cell->name, cell->error); +pr_notice ("DNS: src=%u st=%u lc=%x\n" , + cell->dns_source, cell->dns_status, cell->dns_lookup_count);pr_notice ("VC: ut=%lx ix=%u ni=%hu fl=%hx err=%hd\n" , vc->untried, vc->index, vc->nr_iterations, vc->flags, vc->error);
fs/btrfs/disk-io.c +1 -0
@@ -2829,6 +2829,7 @@ int open_ctree(struct super_block *sb, goto fail_alloc; } +btrfs_info (fs_info,"first mount of filesystem %pU" , disk_super->fsid);/* * Verify the type first, if that or the checksum value are * corrupted, we'll find out
fs/btrfs/send.c +1 -1
@@ -7381,7 +7381,7 @@ long btrfs_ioctl_send(struct file *mnt_file, struct btrfs_ioctl_send_args *arg) sctx->flags = arg->flags; sctx->send_filp =fget (arg->send_fd); -if (!sctx->send_filp) { +if (!sctx->send_filp || !(sctx->send_filp->f_mode &FMODE_WRITE )) { ret = -EBADF ; goto out; }
fs/btrfs/super.c +4 -1
@@ -291,7 +291,10 @@ void __btrfs_panic(struct btrfs_fs_info *fs_info, const char *function,static void btrfs_put_super (struct super_block *sb) { -close_ctree (btrfs_sb (sb)); +struct btrfs_fs_info *fs_info =btrfs_sb (sb); + +btrfs_info (fs_info,"last unmount of filesystem %pU" , fs_info->fs_devices->fsid); +close_ctree (fs_info); }enum {
fs/btrfs/volumes.c +5 -4
@@ -3090,15 +3090,16 @@ struct extent_map *btrfs_get_chunk_map(struct btrfs_fs_info *fs_info,read_unlock (&em_tree->lock);if (!em) { -btrfs_crit (fs_info,"unable to find logical %llu length %llu" , +btrfs_crit (fs_info, +"unable to find chunk map for logical %llu length %llu" , logical, length);return ERR_PTR (-EINVAL ); } -if (em->start > logical || em->start + em->len < logical) { +if (em->start > logical || em->start + em->len <= logical) {btrfs_crit (fs_info, -"found a bad mapping, wanted %llu-%llu, found %llu-%llu" , - logical, length, em->start, em->start + em->len); +"found a bad chunk map, wanted %llu-%llu, found %llu-%llu" , + logical, logical + length, em->start, em->start + em->len);free_extent_map (em);return ERR_PTR (-EINVAL ); }
fs/cifs/cifsfs.c +1 -0
@@ -1062,6 +1062,7 @@ const struct inode_operations cifs_file_inode_ops = {const struct inode_operations cifs_symlink_inode_ops = { .get_link = cifs_get_link, + .setattr = cifs_setattr, .permission = cifs_permission, .listxattr = cifs_listxattr, };
fs/ext4/extents_status.c +216 -90
544 lines not on this page · raw message
fs/io_uring.c +1 -1
@@ -1256,7 +1256,7 @@ static int io_import_fixed(struct io_ring_ctx *ctx, int rw,*/ const struct bio_vec *bvec = imu->bvec; -if (offset <= bvec->bv_len) { +if (offset < bvec->bv_len) {iov_iter_advance (iter, offset); }else {unsigned long seg_skip;
fs/overlayfs/super.c +3 -2
@@ -263,8 +263,8 @@ static int ovl_sync_fs(struct super_block *sb, int wait)return 0 ;/* -* If this is a sync(2) call or an emergency sync, all the super blocks -* will be iterated, including upper_sb, so no need to do anything. +* Not called for sync(2) call or an emergency sync (SB_I_SKIP_SYNC). +* All the super blocks will be iterated, including upper_sb. * * If this is a syncfs(2) call, then we do need to call * sync_filesystem() on upper_sb, but enough if we do it when being
@@ -1710,6 +1710,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) sb->s_xattr = ovl_xattr_handlers; sb->s_fs_info = ofs; sb->s_flags |=SB_POSIXACL ; + sb->s_iflags |=SB_I_SKIP_SYNC ; err = -ENOMEM ; root_dentry =d_make_root (ovl_new_inode (sb,S_IFDIR ,0 ));
fs/sync.c +2 -1
@@ -76,7 +76,8 @@ static void sync_inodes_one_sb(struct super_block *sb, void *arg)static void sync_fs_one_sb (struct super_block *sb,void *arg) { -if (!sb_rdonly (sb) && sb->s_op->sync_fs) +if (!sb_rdonly (sb) && !(sb->s_iflags &SB_I_SKIP_SYNC ) && + sb->s_op->sync_fs) sb->s_op->sync_fs (sb, *(int *)arg); }
include/linux/fs.h +2 -0
@@ -1404,6 +1404,8 @@ extern int send_sigurg(struct fown_struct *fown);#define SB_I_IMA_UNVERIFIABLE_SIGNATURE 0x00000020#define SB_I_UNTRUSTED_MOUNTER 0x00000040 +#define SB_I_SKIP_SYNC 0x00000100/* Skip superblock at global sync */ +/* Possible states of 'frozen' field */ enum {SB_UNFROZEN =0 ,/* FS is unfrozen */
include/linux/hid.h +5 -0
@@ -622,8 +622,13 @@ struct hid_device { /* device report descriptor */struct list_head debug_list;spinlock_t debug_list_lock;wait_queue_head_t debug_wait; +struct kref ref; + +unsigned int id;/* system unique id */ }; +void hiddev_free (struct kref *ref); +#define to_hid_device (pdev) \ container_of(pdev, struct hid_device, dev)
include/scsi/scsi_cmnd.h +6 -0
@@ -143,6 +143,12 @@ struct scsi_cmnd {unsigned char tag;/* SCSI-II queued command tag */ }; +/* Variant of blk_mq_rq_from_pdu() that verifies the type of its argument. */ +static inline struct request *scsi_cmd_to_rq (struct scsi_cmnd *scmd) +{ +return blk_mq_rq_from_pdu (scmd); +} +/* * Return the driver private allocation behind the command. * Only works if cmd_size is set in the host template.
net/ipv4/igmp.c +4 -2
@@ -218,8 +218,10 @@ static void igmp_start_timer(struct ip_mc_list *im, int max_delay)int tv =prandom_u32 () % max_delay; im->tm_running =1 ; -if (!mod_timer (&im->timer, jiffies+tv+2 )) -refcount_inc (&im->refcnt); +if (refcount_inc_not_zero (&im->refcnt)) { +if (mod_timer (&im->timer, jiffies + tv +2 )) +ip_ma_put (im); + } }static void igmp_gq_start_timer (struct in_device *in_dev)
net/ipv4/route.c +1 -1
@@ -799,7 +799,7 @@ static void __ip_do_redirect(struct rtable *rt, struct sk_buff *skb, struct flow goto reject_redirect; } - n =__ipv4_neigh_lookup (rt->dst.dev, new_gw); + n =__ipv4_neigh_lookup (rt->dst.dev, (__force u32 )new_gw);if (!n) n =neigh_create (&arp_tbl, &new_gw, rt->dst.dev);if (!IS_ERR (n)) {
security/integrity/iint.c +37 -11
83 lines not on this page · raw message
security/integrity/ima/ima_api.c +5 -0
@@ -209,6 +209,7 @@ int ima_collect_measurement(struct integrity_iint_cache *iint, {const char *audit_cause ="failed" ;struct inode *inode =file_inode (file); +struct inode *real_inode =d_real_inode (file_dentry (file));const char *filename = file->f_path.dentry->d_name.name;int result =0 ;int length;
@@ -259,6 +260,10 @@ int ima_collect_measurement(struct integrity_iint_cache *iint, iint->ima_hash = tmpbuf;memcpy (iint->ima_hash, &hash, length); iint->version = i_version; +if (real_inode != inode) { + iint->real_ino = real_inode->i_ino; + iint->real_dev = real_inode->i_sb->s_dev; + }/* Possibly temporary failure due to type of read (eg. O_DIRECT) */ if (!result)
security/integrity/ima/ima_main.c +15 -1
@@ -27,6 +27,7 @@#include <linux/ima.h> #include <linux/iversion.h> #include <linux/fs.h> +#include <linux/iversion.h> #include "ima.h"
@@ -193,7 +194,7 @@ static int process_measurement(struct file *file, const struct cred *cred, u32 secid, char *buf, loff_t size, int mask, enum ima_hooks func) { - struct inode *inode = file_inode(file); + struct inode *backing_inode, *inode = file_inode(file);struct integrity_iint_cache *iint =NULL ;struct ima_template_desc *template_desc =NULL ;char *pathbuf =NULL ;
@@ -267,6 +268,19 @@ static int process_measurement(struct file *file, const struct cred *cred, iint->measured_pcrs =0 ; } +/* Detect and re-evaluate changes made to the backing file. */ + backing_inode =d_real_inode (file_dentry (file)); +if (backing_inode != inode && + (action &IMA_DO_MASK ) && (iint->flags &IMA_DONE_MASK )) { +if (!IS_I_VERSION (backing_inode) || + backing_inode->i_sb->s_dev != iint->real_dev || + backing_inode->i_ino != iint->real_ino || + !inode_eq_iversion (backing_inode, iint->version)) { + iint->flags &= ~IMA_DONE_MASK ; + iint->measured_pcrs =0 ; + } + } +/* Determine if already appraised/measured based on bitmask * (IMA_MEASURE, IMA_MEASURED, IMA_XXXX_APPRAISE, IMA_XXXX_APPRAISED, * IMA_AUDIT, IMA_AUDITED)
security/integrity/integrity.h +2 -0
@@ -124,6 +124,8 @@ struct integrity_iint_cache {unsigned long flags;unsigned long measured_pcrs;unsigned long atomic_flags; +unsigned long real_ino; +dev_t real_dev; enum integrity_status ima_file_status:4; enum integrity_status ima_mmap_status:4; enum integrity_status ima_bprm_status:4;
sound/pci/hda/hda_intel.c +2 -0
@@ -2244,6 +2244,8 @@ static struct snd_pci_quirk power_save_blacklist[] = {SND_PCI_QUIRK (0x17aa ,0x36a7 ,"Lenovo C50 All in one" ,0 ),/* https://bugs.launchpad.net/bugs/1821663 */ SND_PCI_QUIRK (0x1631 ,0xe017 ,"Packard Bell NEC IMEDIA 5204" ,0 ), +/* KONTRON SinglePC may cause a stall at runtime resume */ + SND_PCI_QUIRK(0x1734, 0x1232, "KONTRON SinglePC", 0), {} };#endif /* CONFIG_PM */
sound/pci/hda/patch_realtek.c +12 -0
@@ -1935,6 +1935,7 @@ enum {ALC887_FIXUP_ASUS_AUDIO ,ALC887_FIXUP_ASUS_HMIC ,ALCS1200A_FIXUP_MIC_VREF , + ALC888VD_FIXUP_MIC_100VREF, }; static void alc889_fixup_coef(struct hda_codec *codec,
@@ -2488,6 +2489,13 @@ static const struct hda_fixup alc882_fixups[] = { {} } }, + [ALC888VD_FIXUP_MIC_100VREF ] = { + .type =HDA_FIXUP_PINCTLS , + .v.pins = (const struct hda_pintbl []) { + {0x18 ,PIN_VREF100 },/* headset mic */ + {} + } + }, };static const struct snd_pci_quirk alc882_fixup_tbl[] = {
@@ -2557,6 +2565,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {SND_PCI_QUIRK (0x106b ,0x4a00 ,"Macbook 5,2" ,ALC889_FIXUP_MBA11_VREF ),SND_PCI_QUIRK (0x1071 ,0x8258 ,"Evesham Voyaeger" ,ALC882_FIXUP_EAPD ), +SND_PCI_QUIRK (0x10ec ,0x12d8 ,"iBase Elo Touch" ,ALC888VD_FIXUP_MIC_100VREF ),SND_PCI_QUIRK (0x13fe ,0x1009 ,"Advantech MIT-W101" ,ALC886_FIXUP_EAPD ),SND_PCI_QUIRK (0x1458 ,0xa002 ,"Gigabyte EP45-DS3/Z87X-UD3H" ,ALC889_FIXUP_FRONT_HP_NO_PRESENCE ), SND_PCI_QUIRK(0x1458, 0xa0b8, "Gigabyte AZ370-Gaming", ALC1220_FIXUP_GB_DUAL_CODECS),
@@ -3198,6 +3207,7 @@ static void alc_disable_headset_jack_key(struct hda_codec *codec)case 0x10ec0230 :case 0x10ec0236 :case 0x10ec0256 : +case 0x10ec0257 :case 0x19e58326 :alc_write_coef_idx (codec,0x48 ,0x0 );alc_update_coef_idx (codec,0x49 ,0x0045 ,0x0 );
@@ -3227,6 +3237,7 @@ static void alc_enable_headset_jack_key(struct hda_codec *codec)case 0x10ec0230 :case 0x10ec0236 :case 0x10ec0256 : +case 0x10ec0257 :case 0x19e58326 :alc_write_coef_idx (codec,0x48 ,0xd011 );alc_update_coef_idx (codec,0x49 ,0x007f ,0x0045 );
@@ -6176,6 +6187,7 @@ static void alc_combo_jack_hp_jd_restart(struct hda_codec *codec)case 0x10ec0236 :case 0x10ec0255 :case 0x10ec0256 : +case 0x10ec0257 :case 0x19e58326 :alc_update_coef_idx (codec,0x1b ,0x8000 ,1 <<15 );/* Reset HP JD */ alc_update_coef_idx (codec,0x1b ,0x8000 ,0 <<15 );