Linux 6.0.6
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.0.6 kernel.
All users of the 6.0 kernel series must upgrade.
The updated 6.0.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.0.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/arm64/kvm/vgic/vgic-its.c | 5 arch/x86/Kconfig | 1 arch/x86/include/asm/iommu.h | 4 arch/x86/kernel/cpu/microcode/amd.c | 16 ++ arch/x86/kernel/cpu/resctrl/core.c | 8 - arch/x86/kernel/cpu/topology.c | 16 +- arch/x86/kvm/x86.c | 87 +++++++++++--- block/blk-mq.c | 7 - drivers/acpi/acpi_extlog.c | 33 +++-- drivers/acpi/video_detect.c | 64 ++++++++++ drivers/ata/ahci.h | 2 drivers/ata/ahci_imx.c | 2 drivers/block/drbd/drbd_req.c | 14 -- drivers/cpufreq/qcom-cpufreq-nvmem.c | 10 + drivers/cpufreq/tegra194-cpufreq.c | 1 drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 5 drivers/gpu/drm/amd/amdgpu/soc15.c | 21 +++ drivers/gpu/drm/amd/display/dc/dml/Makefile | 2 drivers/gpu/drm/vc4/vc4_drv.c | 1 drivers/gpu/drm/vc4/vc4_hdmi.c | 9 + drivers/hid/hid-magicmouse.c | 2 drivers/hwmon/coretemp.c | 56 ++++++--- drivers/i2c/busses/i2c-qcom-cci.c | 13 +- drivers/iommu/intel/iommu.c | 5 drivers/md/dm-bufio.c | 13 +- drivers/md/dm.c | 1 drivers/media/platform/qcom/venus/helpers.c | 13 +- drivers/media/platform/qcom/venus/vdec.c | 2 drivers/media/rc/mceusb.c | 2 drivers/net/dsa/qca/qca8k-8xxx.c | 83 +++++++++---- drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 11 - drivers/net/ethernet/hisilicon/hns/hnae.c | 4 drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 3 drivers/net/ethernet/intel/i40e/i40e_main.c | 16 +- drivers/net/ethernet/intel/i40e/i40e_txrx.c | 13 -- drivers/net/ethernet/intel/i40e/i40e_txrx.h | 1 drivers/net/ethernet/intel/i40e/i40e_xsk.c | 67 +++++++++- drivers/net/ethernet/intel/i40e/i40e_xsk.h | 2 drivers/net/ethernet/mediatek/mtk_eth_soc.c | 17 +- drivers/net/ethernet/mediatek/mtk_wed.c | 15 +- drivers/net/ethernet/pensando/ionic/ionic_lif.c | 12 + drivers/net/ethernet/sfc/ef10.c | 58 +++------ drivers/net/ethernet/sfc/filter.h | 4 drivers/net/ethernet/sfc/rx_common.c | 10 - drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 1 drivers/net/phy/dp83822.c | 3 drivers/net/phy/dp83867.c | 8 + drivers/net/phy/phylink.c | 3 drivers/net/wireless/mediatek/mt76/mt7921/pci.c | 1 drivers/net/wireless/mediatek/mt76/mt7921/pci_mcu.c | 2 drivers/net/wireless/mediatek/mt76/mt7921/regs.h | 2 drivers/net/wwan/wwan_hwsim.c | 2 drivers/nvme/host/core.c | 6 drivers/nvme/host/hwmon.c | 32 +++-- drivers/nvme/target/core.c | 2 drivers/platform/x86/amd/pmc.c | 7 + drivers/scsi/lpfc/lpfc_init.c | 7 - drivers/staging/media/ipu3/ipu3-v4l2.c | 31 ++--- drivers/video/aperture.c | 11 + fs/btrfs/backref.c | 46 +++++-- fs/cifs/cifsfs.c | 7 - fs/cifs/dir.c | 6 fs/cifs/file.c | 11 + fs/cifs/sess.c | 1 fs/cifs/smb2ops.c | 3 fs/cifs/smb2pdu.c | 2 fs/erofs/zdata.c | 8 - fs/erofs/zdata.h | 6 fs/ext4/fast_commit.c | 122 +++++++++++++------- fs/ext4/fast_commit.h | 3 fs/ocfs2/namei.c | 23 +-- fs/proc/task_mmu.c | 2 include/linux/dsa/tag_qca.h | 8 - include/linux/kvm_host.h | 2 include/linux/phylink.h | 2 include/net/sch_generic.h | 1 include/net/sock_reuseport.h | 11 - io_uring/io_uring.h | 10 - io_uring/msg_ring.c | 3 io_uring/rw.c | 2 mm/hugetlb.c | 2 net/atm/mpoa_proc.c | 3 net/core/dev.c | 4 net/core/skmsg.c | 8 - net/core/sock_reuseport.c | 16 ++ net/hsr/hsr_forward.c | 12 - net/ipv4/datagram.c | 2 net/ipv4/netfilter/ipt_rpfilter.c | 3 net/ipv4/netfilter/nft_fib_ipv4.c | 3 net/ipv4/udp.c | 2 net/ipv6/addrconf.c | 2 net/ipv6/datagram.c | 2 net/ipv6/netfilter/ip6t_rpfilter.c | 10 - net/ipv6/netfilter/nft_fib_ipv6.c | 7 - net/ipv6/udp.c | 2 net/netfilter/nf_tables_api.c | 5 net/sched/sch_api.c | 5 net/sched/sch_atm.c | 1 net/sched/sch_cake.c | 4 net/sched/sch_cbq.c | 1 net/sched/sch_choke.c | 2 net/sched/sch_drr.c | 2 net/sched/sch_dsmark.c | 2 net/sched/sch_etf.c | 3 net/sched/sch_ets.c | 2 net/sched/sch_fq_codel.c | 2 net/sched/sch_fq_pie.c | 3 net/sched/sch_hfsc.c | 2 net/sched/sch_htb.c | 2 net/sched/sch_multiq.c | 1 net/sched/sch_prio.c | 2 net/sched/sch_qfq.c | 2 net/sched/sch_red.c | 2 net/sched/sch_sfb.c | 5 net/sched/sch_skbprio.c | 3 net/sched/sch_taprio.c | 2 net/sched/sch_tbf.c | 2 net/sched/sch_teql.c | 1 net/smc/smc_core.c | 3 net/tipc/discover.c | 2 net/tipc/topsrv.c | 2 net/tls/tls_strp.c | 32 ++++- security/selinux/ss/services.c | 5 security/selinux/ss/sidtab.c | 4 security/selinux/ss/sidtab.h | 2 tools/verification/dot2/dot2c.py | 2 virt/kvm/kvm_main.c | 11 + 128 files changed, 887 insertions(+), 440 deletions(-)
Alex Deucher (1):
drm/amdgpu: fix sdma doorbell init ordering on APUs
Alexander Graf (3):
kvm: Add support for arch compat vm ioctls
KVM: x86: Copy filter arg outside kvm_vm_ioctl_set_msr_filter()
KVM: x86: Add compat handler for KVM_X86_SET_MSR_FILTER
Alexander Potapenko (1):
tipc: fix an information leak in tipc_topsrv_kern_subscr
Alexander Stein (1):
ata: ahci-imx: Fix MODULE_ALIAS
Babu Moger (1):
x86/resctrl: Fix min_cbm_bits for AMD
Borislav Petkov (1):
x86/microcode/AMD: Apply the patch early on every logical thread
Brett Creeley (1):
ionic: catch NULL pointer issue on reconfig
Bryan O'Donoghue (3):
i2c: qcom-cci: Fix ordering of pm_runtime_xx and i2c_add_adapter
media: venus: dec: Handle the case where find_format fails
media: venus: Fix NV12 decoder buffer discovery on HFI_VERSION_1XX
Charlotte Tan (1):
iommu/vt-d: Allow NVS regions in arch_rmrr_sanity_check()
Christian Marangi (2):
net: dsa: qca8k: fix inband mgmt for big-endian systems
net: dsa: qca8k: fix ethtool autocast mib for big-endian systems
Christoph Böhmwalder (1):
drbd: only clone bio if we have a backing device
Christoph Hellwig (1):
nvme-hwmon: consistently ignore errors from nvme_hwmon_init
Dan Carpenter (1):
net/smc: Fix an error code in smc_lgr_create()
Daniel Bristot de Oliveira (1):
rv/dot2c: Make automaton definition static
Deren Wu (1):
wifi: mt76: mt7921e: fix random fw download fail
Eric Dumazet (3):
skmsg: pass gfp argument to alloc_sk_msg()
net: hsr: avoid possible NULL deref in skb_clone()
net: sched: fix race condition in qdisc_graft()
Eric Ren (1):
KVM: arm64: vgic: Fix exit condition in scan_its_table()
Fabien Parent (2):
cpufreq: qcom: fix writes in read-only memory region
cpufreq: qcom: fix memory leak in error path
Felix Riemann (1):
net: phy: dp83822: disable MDI crossover status change interrupt
Filipe Manana (2):
btrfs: fix processing of delayed data refs during backref walking
btrfs: fix processing of delayed tree block refs during backref walking
GONG, Ruiqi (1):
selinux: enable use of both GFP_KERNEL and GFP_ATOMIC in convert_context()
Gao Xiang (1):
erofs: shouldn't churn the mapping page for duplicated copies
Genjian Zhang (1):
dm: remove unnecessary assignment statement in alloc_dev()
Greg Kroah-Hartman (1):
Linux 6.0.6
Guenter Roeck (1):
drm/amd/display: Increase frame size limit for display_mode_vba_util_32.o
Guillaume Nault (1):
netfilter: rpfilter/fib: Set ->flowic_uid correctly for user namespaces.
Harini Katakam (1):
net: phy: dp83867: Extend RX strap quirk for SGMII mode
Harshit Mogalapalli (1):
io_uring/msg_ring: Fix NULL pointer dereference in io_msg_send_fd()
Jakub Kicinski (1):
tls: strp: make sure the TCP skbs do not have overlapping data
Jan Sokolowski (1):
i40e: Fix DMA mappings leak
Jens Axboe (2):
io_uring/rw: remove leftover debug statement
io_uring: don't gate task_work run on TIF_NOTIFY_SIGNAL
Jerry Snitselaar (1):
iommu/vt-d: Clean up si_domain in the init_dmars() error path
Jon Hunter (1):
cpufreq: tegra194: Fix module loading
Jonathan Cooper (1):
sfc: Change VF mac via PF as first preference if available.
Joseph Qi (2):
ocfs2: clear dinode links count in case of error
ocfs2: fix BUG when iput after ocfs2_mknod fails
José Expósito (1):
HID: magicmouse: Do not set BTN_MOUSE on double report
Kai-Heng Feng (1):
ata: ahci: Match EM_MAX_SLOTS with SATA_PMP_MAX_PORTS
Kuniyuki Iwashima (1):
udp: Update reuse->has_conns under reuseport_lock.
Mario Limonciello (1):
platform/x86/amd: pmc: Read SMU version during suspend on Cezanne systems
Mark Tomlinson (1):
tipc: Fix recognition of trial period
Maxime Ripard (2):
drm/vc4: Add module dependency on hdmi-codec drm/vc4: hdmi: Enforce the minimum rate at runtime_resume
Mikulas Patocka (1):
dm bufio: use the acquire memory barrier when testing for B_READING
Nathan Chancellor (1):
x86/Kconfig: Drop check for -mabi=ms for CONFIG_EFI_STUB
Pablo Neira Ayuso (1):
netfilter: nf_tables: relax NFTA_SET_ELEM_KEY_END set flags requirements
Paul Blakey (1):
net: Fix return value of qdisc ingress handling on success
Phil Sutter (1):
netfilter: rpfilter/fib: Populate flowic_l3mdev field
Pieter Jansen van Vuuren (1):
sfc: include vport_id in filter spec hash and equal()
Rafael Mendonca (1):
scsi: lpfc: Fix memory leak in lpfc_create_port()
Rik van Riel (1):
mm,hugetlb: take hugetlb_lock before decrementing h->resv_huge_pages
Sagi Grimberg (1):
nvmet: fix workqueue MEM_RECLAIM flushing dependency
Sakari Ailus (1):
media: ipu3-imgu: Fix NULL pointer dereference in active selection access
Sean Young (1):
media: mceusb: set timeout to at least timeout provided
Serge Semin (1):
nvme-hwmon: kmalloc the NVME SMART log buffer
Seth Jenkins (1):
mm: /proc/pid/smaps_rollup: fix no vma's null-deref
Shenwei Wang (2):
net: phylink: add mac_managed_pm in phylink_config structure
net: stmmac: Enable mac_managed_pm phylink config
Steve French (1):
smb3: interface count displayed incorrectly
Thomas Zimmermann (1):
video/aperture: Call sysfb_disable() before removing PCI devices
Tony Luck (1):
ACPI: extlog: Handle multiple records
Vikas Gupta (1):
bnxt_en: fix memory leak in bnxt_nvm_test()
Werner Sembach (1):
ACPI: video: Force backlight native for more TongFang devices
Xiaobo Liu (1):
net/atm: fix proc_mpc_write incorrect return value
Yang Yingliang (5):
net: ethernet: mtk_eth_soc: fix possible memory leak in mtk_probe()
net: ethernet: mtk_eth_wed: add missing put_device() in mtk_wed_add_hw()
net: ethernet: mtk_eth_wed: add missing of_node_put()
wwan_hwsim: fix possible memory leak in wwan_hwsim_dev_new()
net: hns: fix possible memory leak in hnae_ae_register()
Ye Bin (3):
ext4: introduce EXT4_FC_TAG_BASE_LEN helper
ext4: factor out ext4_fc_get_tl()
ext4: fix potential out of bound read in ext4_fc_replay_scan()
Yu Kuai (1):
blk-mq: fix null pointer dereference in blk_mq_clear_rq_mapping()
Zhang Rui (3):
hwmon/coretemp: Handle large core ID value
x86/topology: Fix multiple packages shown on a single-package system x86/topology: Fix duplicated core ID within a package
Zhang Xiaoxu (5):
cifs: Fix xid leak in cifs_create()
cifs: Fix xid leak in cifs_copy_file_range()
cifs: Fix xid leak in cifs_flock()
cifs: Fix xid leak in cifs_ses_add_channel()
cifs: Fix memory leak when build ntlmssp negotiate blob failed
Zhengchao Shao (4):
ip6mr: fix UAF issue in ip6mr_sk_done() when addrconf_init_net() failed
net: sched: cake: fix null pointer access issue when cake_init() fails
net: sched: delete duplicate cleanup of backlog and qlen
net: sched: sfb: fix null pointer access issue when sfb_init() fails
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 0 -SUBLEVEL = 5 +SUBLEVEL = 6 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/arm64/kvm/vgic/vgic-its.c +4 -1
@@ -2149,7 +2149,7 @@ static int scan_its_table(struct vgic_its *its, gpa_t base, int size, u32 esz,memset (entry,0 , esz); -while (len >0 ) { +while (true) {int next_offset;size_t byte_offset;
@@ -2162,6 +2162,9 @@ static int scan_its_table(struct vgic_its *its, gpa_t base, int size, u32 esz,return next_offset; byte_offset = next_offset * esz; +if (byte_offset >= len) +break ; + id += next_offset; gpa += byte_offset; len -= byte_offset;
arch/x86/Kconfig +0 -1
@@ -1961,7 +1961,6 @@ config EFI config EFI_STUB bool "EFI stub support" depends on EFI - depends on $(cc-option,-mabi=ms) || X86_32 select RELOCATABLE help This kernel feature allows a bzImage to be loaded directly
arch/x86/include/asm/iommu.h +3 -1
@@ -25,8 +25,10 @@ arch_rmrr_sanity_check(struct acpi_dmar_reserved_memory *rmrr) {u64 start = rmrr->base_address;u64 end = rmrr->end_address +1 ; +int entry_type; -if (e820__mapped_all (start, end,E820_TYPE_RESERVED )) + entry_type =e820__get_entry_type (start, end); +if (entry_type ==E820_TYPE_RESERVED || entry_type ==E820_TYPE_NVS )return 0 ; pr_err(FW_BUG "No firmware reserved region can cover this RMRR [%#018Lx-%#018Lx], contact BIOS vendor for fixes\n",
arch/x86/kernel/cpu/microcode/amd.c +13 -3
@@ -440,7 +440,13 @@ apply_microcode_early_amd(u32 cpuid_1_eax, void *ucode, size_t size, bool save_preturn ret;native_rdmsr (MSR_AMD64_PATCH_LEVEL , rev, dummy); -if (rev >= mc->hdr.patch_id) + +/* +* Allow application of the same revision to pick up SMT-specific +* changes even if the revision of the other SMT thread is already +* up-to-date. +*/ +if (rev > mc->hdr.patch_id)return ret;if (!__apply_microcode_amd (mc)) {
@@ -528,8 +534,12 @@ void load_ucode_amd_ap(unsigned int cpuid_1_eax)native_rdmsr (MSR_AMD64_PATCH_LEVEL , rev, dummy); -/* Check whether we have saved a new patch already: */ -if (*new_rev && rev < mc->hdr.patch_id) { +/* +* Check whether a new patch has been saved already. Also, allow application of +* the same revision in order to pick up SMT-thread-specific configuration even +* if the sibling SMT thread already has an up-to-date revision. +*/ +if (*new_rev && rev <= mc->hdr.patch_id) {if (!__apply_microcode_amd (mc)) { *new_rev = mc->hdr.patch_id;return ;
arch/x86/kernel/cpu/resctrl/core.c +2 -6
@@ -66,9 +66,6 @@ struct rdt_hw_resource rdt_resources_all[] = { .rid = RDT_RESOURCE_L3, .name = "L3", .cache_level = 3, - .cache = { - .min_cbm_bits = 1, - }, .domains = domain_init(RDT_RESOURCE_L3), .parse_ctrlval = parse_cbm, .format_str = "%d=%0*x",
@@ -83,9 +80,6 @@ struct rdt_hw_resource rdt_resources_all[] = { .rid = RDT_RESOURCE_L2, .name = "L2", .cache_level = 2, - .cache = { - .min_cbm_bits = 1, - }, .domains = domain_init(RDT_RESOURCE_L2), .parse_ctrlval = parse_cbm, .format_str = "%d=%0*x",
@@ -877,6 +871,7 @@ static __init void rdt_init_res_defs_intel(void) r->cache.arch_has_sparse_bitmaps = false; r->cache.arch_has_empty_bitmaps = false; r->cache.arch_has_per_cpu_cfg = false; + r->cache.min_cbm_bits =1 ; }else if (r->rid ==RDT_RESOURCE_MBA ) { hw_res->msr_base =MSR_IA32_MBA_THRTL_BASE ; hw_res->msr_update = mba_wrmsr_intel;
@@ -897,6 +892,7 @@ static __init void rdt_init_res_defs_amd(void) r->cache.arch_has_sparse_bitmaps = true; r->cache.arch_has_empty_bitmaps = true; r->cache.arch_has_per_cpu_cfg = true; + r->cache.min_cbm_bits =0 ; }else if (r->rid ==RDT_RESOURCE_MBA ) { hw_res->msr_base =MSR_IA32_MBA_BW_BASE ; hw_res->msr_update = mba_wrmsr_amd;
arch/x86/kernel/cpu/topology.c +11 -5
@@ -96,6 +96,7 @@ int detect_extended_topology(struct cpuinfo_x86 *c)unsigned int ht_mask_width, core_plus_mask_width, die_plus_mask_width;unsigned int core_select_mask, core_level_siblings;unsigned int die_select_mask, die_level_siblings; +unsigned int pkg_mask_width;bool die_level_present = false;int leaf;
@@ -111,10 +112,10 @@ int detect_extended_topology(struct cpuinfo_x86 *c) core_level_siblings = smp_num_siblings =LEVEL_MAX_SIBLINGS (ebx); core_plus_mask_width = ht_mask_width =BITS_SHIFT_NEXT_LEVEL (eax); die_level_siblings =LEVEL_MAX_SIBLINGS (ebx); - die_plus_mask_width =BITS_SHIFT_NEXT_LEVEL (eax); + pkg_mask_width = die_plus_mask_width =BITS_SHIFT_NEXT_LEVEL (eax); sub_index =1 ; - do { +while (true) {cpuid_count (leaf, sub_index, &eax, &ebx, &ecx, &edx);/*
@@ -132,10 +133,15 @@ int detect_extended_topology(struct cpuinfo_x86 *c) die_plus_mask_width =BITS_SHIFT_NEXT_LEVEL (eax); } +if (LEAFB_SUBTYPE (ecx) !=INVALID_TYPE ) + pkg_mask_width =BITS_SHIFT_NEXT_LEVEL (eax); +else +break ; + sub_index++; - }while (LEAFB_SUBTYPE (ecx) !=INVALID_TYPE ); + } - core_select_mask = (~(-1 << core_plus_mask_width)) >> ht_mask_width; + core_select_mask = (~(-1 << pkg_mask_width)) >> ht_mask_width; die_select_mask = (~(-1 << die_plus_mask_width)) >> core_plus_mask_width;
@@ -148,7 +154,7 @@ int detect_extended_topology(struct cpuinfo_x86 *c) } c->phys_proc_id = apic->phys_pkg_id (c->initial_apicid, - die_plus_mask_width); + pkg_mask_width);/* * Reinit the apicid, now that we have extended initial_apicid. */
arch/x86/kvm/x86.c +73 -14
122 lines not on this page · raw message
block/blk-mq.c +5 -2
@@ -3028,8 +3028,11 @@ static void blk_mq_clear_rq_mapping(struct blk_mq_tags *drv_tags,struct page *page;unsigned long flags; -/* There is no need to clear a driver tags own mapping */ -if (drv_tags == tags) +/* +* There is no need to clear mapping if driver tags is not initialized +* or the mapping belongs to the driver tags. +*/ +if (!drv_tags || drv_tags == tags)return ;list_for_each_entry (page, &tags->page_list, lru) {
drivers/acpi/acpi_extlog.c +20 -13
@@ -12,6 +12,7 @@#include <linux/ratelimit.h> #include <linux/edac.h> #include <linux/ras.h> +#include <acpi/ghes.h> #include <asm/cpu.h> #include <asm/mce.h>
@@ -138,8 +139,8 @@ static int extlog_print(struct notifier_block *nb, unsigned long val,int cpu = mce->extcpu;struct acpi_hest_generic_status *estatus, *tmp;struct acpi_hest_generic_data *gdata; -const guid_t *fru_id = &guid_null; -char *fru_text ="" ; +const guid_t *fru_id; +char *fru_text;guid_t *sec_type;static u32 err_seq;
@@ -160,17 +161,23 @@ static int extlog_print(struct notifier_block *nb, unsigned long val,/* log event via trace */ err_seq++; - gdata = (struct acpi_hest_generic_data *)(tmp +1 ); -if (gdata->validation_bits &CPER_SEC_VALID_FRU_ID ) - fru_id = (guid_t *)gdata->fru_id; -if (gdata->validation_bits &CPER_SEC_VALID_FRU_TEXT ) - fru_text = gdata->fru_text; - sec_type = (guid_t *)gdata->section_type; -if (guid_equal (sec_type, &CPER_SEC_PLATFORM_MEM )) { -struct cper_sec_mem_err *mem = (void *)(gdata +1 ); -if (gdata->error_data_length >=sizeof (*mem)) -trace_extlog_mem_event (mem, err_seq, fru_id, fru_text, - (u8 )gdata->error_severity); +apei_estatus_for_each_section (tmp, gdata) { +if (gdata->validation_bits &CPER_SEC_VALID_FRU_ID ) + fru_id = (guid_t *)gdata->fru_id; +else + fru_id = &guid_null; +if (gdata->validation_bits &CPER_SEC_VALID_FRU_TEXT ) + fru_text = gdata->fru_text; +else + fru_text ="" ; + sec_type = (guid_t *)gdata->section_type; +if (guid_equal (sec_type, &CPER_SEC_PLATFORM_MEM )) { +struct cper_sec_mem_err *mem = (void *)(gdata +1 ); + +if (gdata->error_data_length >=sizeof (*mem)) +trace_extlog_mem_event (mem, err_seq, fru_id, fru_text, + (u8 )gdata->error_severity); + } } out:
drivers/acpi/video_detect.c +64 -0
70 lines not on this page · raw message
drivers/ata/ahci.h +1 -1
@@ -252,7 +252,7 @@ enum {PCS_7 =0x94 ,/* 7+ port PCS (Denverton) */ /* em constants */ -EM_MAX_SLOTS =8 , +EM_MAX_SLOTS =SATA_PMP_MAX_PORTS , EM_MAX_RETRY = 5,/* em_ctl bits */
drivers/ata/ahci_imx.c +1 -1
@@ -1230,4 +1230,4 @@ module_platform_driver(imx_ahci_driver);MODULE_DESCRIPTION ("Freescale i.MX AHCI SATA platform driver" );MODULE_AUTHOR ("Richard Zhu <[email protected]>" );MODULE_LICENSE ("GPL" ); -MODULE_ALIAS ("ahci:imx" ); +MODULE_ALIAS ("platform:" DRV_NAME );
drivers/block/drbd/drbd_req.c +6 -8
@@ -30,11 +30,6 @@ static struct drbd_request *drbd_req_new(struct drbd_device *device, struct bioreturn NULL ;memset (req,0 ,sizeof (*req)); - req->private_bio =bio_alloc_clone (device->ldev->backing_bdev, bio_src, -GFP_NOIO , &drbd_io_bio_set); - req->private_bio->bi_private = req; - req->private_bio->bi_end_io = drbd_request_endio; - req->rq_state = (bio_data_dir (bio_src) ==WRITE ?RQ_WRITE :0 ) | (bio_op (bio_src) ==REQ_OP_WRITE_ZEROES ?RQ_ZEROES :0 ) | (bio_op (bio_src) ==REQ_OP_DISCARD ?RQ_UNMAP :0 );
@@ -1219,9 +1214,12 @@ drbd_request_prepare(struct drbd_device *device, struct bio *bio)/* Update disk stats */ req->start_jif =bio_start_io_acct (req->master_bio); -if (!get_ldev (device)) { -bio_put (req->private_bio); - req->private_bio =NULL ; +if (get_ldev (device)) { + req->private_bio =bio_alloc_clone (device->ldev->backing_bdev, + bio,GFP_NOIO , + &drbd_io_bio_set); + req->private_bio->bi_private = req; + req->private_bio->bi_end_io = drbd_request_endio; }/* process discards always from our submitter thread */
drivers/cpufreq/qcom-cpufreq-nvmem.c +7 -3
@@ -213,6 +213,7 @@ static int qcom_cpufreq_krait_name_version(struct device *cpu_dev,int speed =0 , pvs =0 , pvs_ver =0 ;u8 *speedbin;size_t len; +int ret =0 ; speedbin =nvmem_cell_read (speedbin_nvmem, &len);
@@ -230,7 +231,8 @@ static int qcom_cpufreq_krait_name_version(struct device *cpu_dev,break ;default :dev_err (cpu_dev,"Unable to read nvmem data. Defaulting to 0!\n" ); -return -ENODEV ; + ret = -ENODEV ; + goto len_error; } snprintf(*pvs_name, sizeof("speedXX-pvsXX-vXX"), "speed%d-pvs%d-v%d",
@@ -238,8 +240,9 @@ static int qcom_cpufreq_krait_name_version(struct device *cpu_dev, drv->versions = (1 << speed); +len_error:kfree (speedbin); -return 0 ; +return ret; }static const struct qcom_cpufreq_match_data match_data_kryo = {
@@ -262,7 +265,8 @@ static int qcom_cpufreq_probe(struct platform_device *pdev)struct nvmem_cell *speedbin_nvmem;struct device_node *np;struct device *cpu_dev; -char *pvs_name ="speedXX-pvsXX-vXX" ; +char pvs_name_buffer[] ="speedXX-pvsXX-vXX" ; +char *pvs_name = pvs_name_buffer;unsigned cpu;const struct of_device_id *match;int ret;
drivers/cpufreq/tegra194-cpufreq.c +1 -0
@@ -592,6 +592,7 @@ static const struct of_device_id tegra194_cpufreq_of_match[] = { { .compatible = "nvidia,tegra234-ccplex-cluster", .data = &tegra234_cpufreq_soc }, {/* sentinel */ } }; +MODULE_DEVICE_TABLE (of, tegra194_cpufreq_of_match);static struct platform_driver tegra194_ccplex_driver = { .driver = {
drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c +0 -5
@@ -1504,11 +1504,6 @@ static int sdma_v4_0_start(struct amdgpu_device *adev)WREG32_SDMA (i, mmSDMA0_CNTL, temp);if (!amdgpu_sriov_vf (adev)) { - ring = &adev->sdma.instance[i].ring; - adev->nbio.funcs->sdma_doorbell_range (adev, i, - ring->use_doorbell, ring->doorbell_index, - adev->doorbell_index.sdma_doorbell_range); -/* unhalt engine */ temp =RREG32_SDMA (i, mmSDMA0_F32_CNTL); temp =REG_SET_FIELD (temp,SDMA0_F32_CNTL ,HALT ,0 );
drivers/gpu/drm/amd/amdgpu/soc15.c +21 -0
@@ -1211,6 +1211,20 @@ static int soc15_common_sw_fini(void *handle)return 0 ; } +static void soc15_sdma_doorbell_range_init (struct amdgpu_device *adev) +{ +int i; + +/* sdma doorbell range is programed by hypervisor */ +if (!amdgpu_sriov_vf (adev)) { +for (i =0 ; i < adev->sdma.num_instances; i++) { + adev->nbio.funcs->sdma_doorbell_range (adev, i, + true, adev->doorbell_index.sdma_engine[i] <<1 , + adev->doorbell_index.sdma_doorbell_range); + } + } +} +static int soc15_common_hw_init (void *handle) {struct amdgpu_device *adev = (struct amdgpu_device *)handle;
@@ -1230,6 +1244,13 @@ static int soc15_common_hw_init(void *handle)/* enable the doorbell aperture */ soc15_enable_doorbell_aperture (adev, true); +/* HW doorbell routing policy: doorbell writing not +* in SDMA/IH/MM/ACV range will be routed to CP. So +* we need to init SDMA doorbell range prior +* to CP ip block init and ring test. IH already +* happens before CP. +*/ +soc15_sdma_doorbell_range_init (adev);return 0 ; }
drivers/gpu/drm/amd/display/dc/dml/Makefile +1 -1
@@ -77,7 +77,7 @@ CFLAGS_$(AMDDALPATH)/dc/dml/dcn30/dcn30_fpu.o := $(dml_ccflags) CFLAGS_$(AMDDALPATH)/dc/dml/dcn32/dcn32_fpu.o := $(dml_ccflags) CFLAGS_$(AMDDALPATH)/dc/dml/dcn32/display_mode_vba_32.o := $(dml_ccflags) $(frame_warn_flag) CFLAGS_$(AMDDALPATH)/dc/dml/dcn32/display_rq_dlg_calc_32.o := $(dml_ccflags) -CFLAGS_$(AMDDALPATH)/dc/dml/dcn32/display_mode_vba_util_32.o := $(dml_ccflags) +CFLAGS_$(AMDDALPATH)/dc/dml/dcn32/display_mode_vba_util_32.o := $(dml_ccflags) $(frame_warn_flag) CFLAGS_$(AMDDALPATH)/dc/dml/dcn321/dcn321_fpu.o := $(dml_ccflags) CFLAGS_$(AMDDALPATH)/dc/dml/dcn31/dcn31_fpu.o := $(dml_ccflags) CFLAGS_$(AMDDALPATH)/dc/dml/dcn301/dcn301_fpu.o := $(dml_ccflags)
drivers/gpu/drm/vc4/vc4_drv.c +1 -0
@@ -490,6 +490,7 @@ module_init(vc4_drm_register);module_exit (vc4_drm_unregister);MODULE_ALIAS ("platform:vc4-drm" ); +MODULE_SOFTDEP ("pre: snd-soc-hdmi-codec" );MODULE_DESCRIPTION ("Broadcom VC4 DRM Driver" );MODULE_AUTHOR ("Eric Anholt <[email protected]>" );MODULE_LICENSE ("GPL v2" );
drivers/gpu/drm/vc4/vc4_hdmi.c +9 -0
@@ -2871,6 +2871,15 @@ static int vc4_hdmi_runtime_resume(struct device *dev)u32 __maybe_unused value;int ret; +/* +* The HSM clock is in the HDMI power domain, so we need to set +* its frequency while the power domain is active so that it +* keeps its rate. +*/ + ret =clk_set_min_rate (vc4_hdmi->hsm_clock,HSM_MIN_CLOCK_FREQ ); +if (ret) +return ret; + ret =clk_prepare_enable (vc4_hdmi->hsm_clock);if (ret)return ret;
drivers/hid/hid-magicmouse.c +1 -1
@@ -480,7 +480,7 @@ static int magicmouse_raw_event(struct hid_device *hdev,magicmouse_raw_event (hdev, report, data +2 , data[1 ]);magicmouse_raw_event (hdev, report, data +2 + data[1 ], size -2 - data[1 ]); -break ; +return 0 ;default :return 0 ; }
drivers/hwmon/coretemp.c +41 -15
127 lines not on this page · raw message
drivers/i2c/busses/i2c-qcom-cci.c +8 -5
@@ -639,6 +639,11 @@ static int cci_probe(struct platform_device *pdev)if (ret <0 ) goto error; +pm_runtime_set_autosuspend_delay (dev,MSEC_PER_SEC ); +pm_runtime_use_autosuspend (dev); +pm_runtime_set_active (dev); +pm_runtime_enable (dev); +for (i =0 ; i < cci->data->num_masters; i++) {if (!cci->master[i].cci)continue ;
@@ -650,14 +655,12 @@ static int cci_probe(struct platform_device *pdev) } } -pm_runtime_set_autosuspend_delay (dev,MSEC_PER_SEC ); -pm_runtime_use_autosuspend (dev); -pm_runtime_set_active (dev); -pm_runtime_enable (dev); -return 0 ; error_i2c: +pm_runtime_disable (dev); +pm_runtime_dont_use_autosuspend (dev); +for (--i ; i >=0 ; i--) {if (cci->master[i].cci) {i2c_del_adapter (&cci->master[i].adap);
drivers/iommu/intel/iommu.c +5 -0
@@ -2400,6 +2400,7 @@ static int __init si_domain_init(int hw)if (md_domain_init (si_domain,DEFAULT_DOMAIN_ADDRESS_WIDTH )) {domain_exit (si_domain); + si_domain =NULL ;return -EFAULT ; }
@@ -3042,6 +3043,10 @@ static int __init init_dmars(void)disable_dmar_iommu (iommu);free_dmar_iommu (iommu); } +if (si_domain) { +domain_exit (si_domain); + si_domain =NULL ; + }return ret; }
drivers/md/dm-bufio.c +7 -6
@@ -795,7 +795,8 @@ static void __make_buffer_clean(struct dm_buffer *b) {BUG_ON (b->hold_count); -if (!b->state)/* fast case */ +/* smp_load_acquire() pairs with read_endio()'s smp_mb__before_atomic() */ +if (!smp_load_acquire (&b->state))/* fast case */ return ;wait_on_bit_io (&b->state,B_READING ,TASK_UNINTERRUPTIBLE );
@@ -816,7 +817,7 @@ static struct dm_buffer *__get_unclaimed_buffer(struct dm_bufio_client *c)BUG_ON (test_bit (B_DIRTY , &b->state));if (static_branch_unlikely (&no_sleep_enabled) && c->no_sleep && -unlikely (test_bit (B_READING , &b->state))) +unlikely (test_bit_acquire (B_READING , &b->state)))continue ;if (!b->hold_count) {
@@ -1058,7 +1059,7 @@ static struct dm_buffer *__bufio_new(struct dm_bufio_client *c, sector_t block,* If the user called both dm_bufio_prefetch and dm_bufio_get on * the same buffer, it would deadlock if we waited. */ -if (nf ==NF_GET &&unlikely (test_bit (B_READING , &b->state))) +if (nf ==NF_GET &&unlikely (test_bit_acquire (B_READING , &b->state)))return NULL ; b->hold_count++;
@@ -1218,7 +1219,7 @@ void dm_bufio_release(struct dm_buffer *b)* invalid buffer. */ if ((b->read_error || b->write_error) && - !test_bit (B_READING , &b->state) && + !test_bit_acquire (B_READING , &b->state) && !test_bit (B_WRITING , &b->state) && !test_bit (B_DIRTY , &b->state)) {__unlink_buffer (b);
@@ -1479,7 +1480,7 @@ EXPORT_SYMBOL_GPL(dm_bufio_release_move);static void forget_buffer_locked (struct dm_buffer *b) { -if (likely (!b->hold_count) &&likely (!b->state)) { +if (likely (!b->hold_count) &&likely (!smp_load_acquire (&b->state))) {__unlink_buffer (b);__free_buffer_wake (b); }
@@ -1639,7 +1640,7 @@ static bool __try_evict_buffer(struct dm_buffer *b, gfp_t gfp) {if (!(gfp & __GFP_FS) || (static_branch_unlikely (&no_sleep_enabled) && b->c->no_sleep)) { -if (test_bit (B_READING , &b->state) || +if (test_bit_acquire (B_READING , &b->state) ||test_bit (B_WRITING , &b->state) ||test_bit (B_DIRTY , &b->state))return false;
drivers/md/dm.c +0 -1
@@ -2065,7 +2065,6 @@ static struct mapped_device *alloc_dev(int minor) md->disk->minors =1 ; md->disk->flags |=GENHD_FL_NO_PART ; md->disk->fops = &dm_blk_dops; - md->disk->queue = md->queue; md->disk->private_data = md;sprintf (md->disk->disk_name,"dm-%d" , minor);
drivers/media/platform/qcom/venus/helpers.c +7 -6
@@ -1800,7 +1800,7 @@ bool venus_helper_check_format(struct venus_inst *inst, u32 v4l2_pixfmt)struct venus_core *core = inst->core;u32 fmt =to_hfi_raw_fmt (v4l2_pixfmt);struct hfi_plat_caps *caps; -u32 buftype; +bool found;if (!fmt)return false;
@@ -1809,12 +1809,13 @@ bool venus_helper_check_format(struct venus_inst *inst, u32 v4l2_pixfmt)if (!caps)return false; -if (inst->session_type ==VIDC_SESSION_TYPE_DEC ) - buftype =HFI_BUFFER_OUTPUT2 ; -else - buftype =HFI_BUFFER_OUTPUT ; + found =find_fmt_from_caps (caps,HFI_BUFFER_OUTPUT , fmt); +if (found) + goto done; -return find_fmt_from_caps (caps, buftype, fmt); + found =find_fmt_from_caps (caps,HFI_BUFFER_OUTPUT2 , fmt); +done: +return found; }EXPORT_SYMBOL_GPL (venus_helper_check_format);
drivers/media/platform/qcom/venus/vdec.c +2 -0
@@ -183,6 +183,8 @@ vdec_try_fmt_common(struct venus_inst *inst, struct v4l2_format *f)else return NULL ; fmt =find_format (inst, pixmp->pixelformat, f->type); +if (!fmt) +return NULL ; } pixmp->width = clamp(pixmp->width, frame_width_min(inst),
drivers/media/rc/mceusb.c +1 -1
@@ -1077,7 +1077,7 @@ static int mceusb_set_timeout(struct rc_dev *dev, unsigned int timeout)struct mceusb_dev *ir = dev->priv;unsigned int units; - units =DIV_ROUND_CLOSEST (timeout,MCE_TIME_UNIT ); + units =DIV_ROUND_UP (timeout,MCE_TIME_UNIT ); cmdbuf[2 ] = units >>8 ; cmdbuf[3 ] = units;
drivers/net/dsa/qca/qca8k-8xxx.c +55 -28
156 lines not on this page · raw message
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c +6 -5
@@ -613,6 +613,7 @@ static int bnxt_dl_reload_up(struct devlink *dl, enum devlink_reload_action actistatic bool bnxt_nvm_test (struct bnxt *bp,struct netlink_ext_ack *extack) { +bool rc = false;u32 datalen;u16 index;u8 *buf;
@@ -632,20 +633,20 @@ static bool bnxt_nvm_test(struct bnxt *bp, struct netlink_ext_ack *extack)if (bnxt_get_nvram_item (bp->dev, index,0 , datalen, buf)) {NL_SET_ERR_MSG_MOD (extack,"nvm test vpd read error" ); - goto err; + goto done; }if (bnxt_flash_nvram (bp->dev,BNX_DIR_TYPE_VPD ,BNX_DIR_ORDINAL_FIRST ,BNX_DIR_EXT_NONE ,0 ,0 , buf, datalen)) {NL_SET_ERR_MSG_MOD (extack,"nvm test vpd write error" ); - goto err; + goto done; } -return true; + rc = true; -err: +done:kfree (buf); -return false; +return rc; } static bool bnxt_dl_selftest_check(struct devlink *dl, unsigned int id,
drivers/net/ethernet/hisilicon/hns/hnae.c +3 -1
@@ -419,8 +419,10 @@ int hnae_ae_register(struct hnae_ae_dev *hdev, struct module *owner) hdev->cls_dev.release = hnae_release; (void )dev_set_name (&hdev->cls_dev,"hnae%d" , hdev->id); ret =device_register (&hdev->cls_dev); -if (ret) +if (ret) { +put_device (&hdev->cls_dev);return ret; + }__module_get (THIS_MODULE );
drivers/net/ethernet/intel/i40e/i40e_ethtool.c +0 -3
@@ -2181,9 +2181,6 @@ static int i40e_set_ringparam(struct net_device *netdev,*/ rx_rings[i].tail = hw->hw_addr +I40E_PRTGEN_STATUS ; err =i40e_setup_rx_descriptors (&rx_rings[i]); -if (err) - goto rx_unwind; - err =i40e_alloc_rx_bi (&rx_rings[i]);if (err) goto rx_unwind;
drivers/net/ethernet/intel/i40e/i40e_main.c +9 -7
@@ -3565,12 +3565,8 @@ static int i40e_configure_rx_ring(struct i40e_ring *ring)if (ring->vsi->type ==I40E_VSI_MAIN )xdp_rxq_info_unreg_mem_model (&ring->xdp_rxq); -kfree (ring->rx_bi); ring->xsk_pool =i40e_xsk_pool (ring);if (ring->xsk_pool) { - ret =i40e_alloc_rx_bi_zc (ring); -if (ret) -return ret; ring->rx_buf_len =xsk_pool_get_rx_frame_size (ring->xsk_pool);/* For AF_XDP ZC, we disallow packets to span on
@@ -3588,9 +3584,6 @@ static int i40e_configure_rx_ring(struct i40e_ring *ring) ring->queue_index); }else { - ret =i40e_alloc_rx_bi (ring); -if (ret) -return ret; ring->rx_buf_len = vsi->rx_buf_len;if (ring->vsi->type ==I40E_VSI_MAIN ) { ret = xdp_rxq_info_reg_mem_model(&ring->xdp_rxq,
@@ -13304,6 +13297,14 @@ static int i40e_xdp_setup(struct i40e_vsi *vsi, struct bpf_prog *prog,i40e_reset_and_rebuild (pf, true, true); } +if (!i40e_enabled_xdp_vsi (vsi) && prog) { +if (i40e_realloc_rx_bi_zc (vsi, true)) +return -ENOMEM ; + }else if (i40e_enabled_xdp_vsi (vsi) && !prog) { +if (i40e_realloc_rx_bi_zc (vsi, false)) +return -ENOMEM ; + } +for (i =0 ; i < vsi->num_queue_pairs; i++)WRITE_ONCE (vsi->rx_rings[i]->xdp_prog, vsi->xdp_prog);
@@ -13536,6 +13537,7 @@ int i40e_queue_pair_disable(struct i40e_vsi *vsi, int queue_pair)i40e_queue_pair_disable_irq (vsi, queue_pair); err =i40e_queue_pair_toggle_rings (vsi, queue_pair, false/* off */ ); +i40e_clean_rx_ring (vsi->rx_rings[queue_pair]);i40e_queue_pair_toggle_napi (vsi, queue_pair, false/* off */ );i40e_queue_pair_clean_rings (vsi, queue_pair);i40e_queue_pair_reset_stats (vsi, queue_pair);
drivers/net/ethernet/intel/i40e/i40e_txrx.c +5 -8
@@ -1457,14 +1457,6 @@ int i40e_setup_tx_descriptors(struct i40e_ring *tx_ring)return -ENOMEM ; } -int i40e_alloc_rx_bi (struct i40e_ring *rx_ring) -{ -unsigned long sz =sizeof (*rx_ring->rx_bi) * rx_ring->count; - - rx_ring->rx_bi =kzalloc (sz,GFP_KERNEL ); -return rx_ring->rx_bi ?0 : -ENOMEM ; -} -static void i40e_clear_rx_bi (struct i40e_ring *rx_ring) {memset (rx_ring->rx_bi,0 ,sizeof (*rx_ring->rx_bi) * rx_ring->count);
@@ -1593,6 +1585,11 @@ int i40e_setup_rx_descriptors(struct i40e_ring *rx_ring) rx_ring->xdp_prog = rx_ring->vsi->xdp_prog; + rx_ring->rx_bi = +kcalloc (rx_ring->count,sizeof (*rx_ring->rx_bi),GFP_KERNEL ); +if (!rx_ring->rx_bi) +return -ENOMEM ; +return 0 ; }
drivers/net/ethernet/intel/i40e/i40e_txrx.h +0 -1
@@ -469,7 +469,6 @@ int __i40e_maybe_stop_tx(struct i40e_ring *tx_ring, int size);bool __i40e_chk_linearize (struct sk_buff *skb);int i40e_xdp_xmit (struct net_device *dev,int n,struct xdp_frame **frames,u32 flags); -int i40e_alloc_rx_bi (struct i40e_ring *rx_ring);/** * i40e_get_head - Retrieve head from head writeback
drivers/net/ethernet/intel/i40e/i40e_xsk.c +59 -8
91 lines not on this page · raw message
drivers/net/ethernet/intel/i40e/i40e_xsk.h +1 -1
@@ -32,7 +32,7 @@ int i40e_clean_rx_irq_zc(struct i40e_ring *rx_ring, int budget);bool i40e_clean_xdp_tx_irq (struct i40e_vsi *vsi,struct i40e_ring *tx_ring);int i40e_xsk_wakeup (struct net_device *dev,u32 queue_id,u32 flags); -int i40e_alloc_rx_bi_zc (struct i40e_ring *rx_ring); +int i40e_realloc_rx_bi_zc (struct i40e_vsi *vsi,bool zc);void i40e_clear_rx_bi_zc (struct i40e_ring *rx_ring);#endif /* _I40E_XSK_H_ */
drivers/net/ethernet/mediatek/mtk_eth_soc.c +12 -5
@@ -4028,19 +4028,23 @@ static int mtk_probe(struct platform_device *pdev) eth->irq[i] =platform_get_irq (pdev, i);if (eth->irq[i] <0 ) {dev_err (&pdev->dev,"no IRQ%d resource found\n" , i); -return -ENXIO ; + err = -ENXIO ; + goto err_wed_exit; } }for (i =0 ; i <ARRAY_SIZE (eth->clks); i++) { eth->clks[i] =devm_clk_get (eth->dev, mtk_clks_source_name[i]);if (IS_ERR (eth->clks[i])) { -if (PTR_ERR (eth->clks[i]) == -EPROBE_DEFER ) -return -EPROBE_DEFER ; +if (PTR_ERR (eth->clks[i]) == -EPROBE_DEFER ) { + err = -EPROBE_DEFER ; + goto err_wed_exit; + }if (eth->soc->required_clks &BIT (i)) {dev_err (&pdev->dev,"clock %s not found\n" , mtk_clks_source_name[i]); -return -EINVAL ; + err = -EINVAL ; + goto err_wed_exit; } eth->clks[i] =NULL ; }
@@ -4051,7 +4055,7 @@ static int mtk_probe(struct platform_device *pdev) err =mtk_hw_init (eth);if (err) -return err; + goto err_wed_exit; eth->hwlro =MTK_HAS_CAPS (eth->soc->caps,MTK_HWLRO );
@@ -4140,6 +4144,8 @@ static int mtk_probe(struct platform_device *pdev)mtk_free_dev (eth); err_deinit_hw:mtk_hw_deinit (eth); +err_wed_exit: +mtk_wed_exit ();return err; }
@@ -4159,6 +4165,7 @@ static int mtk_remove(struct platform_device *pdev)phylink_disconnect_phy (mac->phylink); } +mtk_wed_exit ();mtk_hw_deinit (eth);netif_napi_del (ð->tx_napi);
drivers/net/ethernet/mediatek/mtk_wed.c +12 -3
@@ -808,16 +808,16 @@ void mtk_wed_add_hw(struct device_node *np, struct mtk_eth *eth, pdev =of_find_device_by_node (np);if (!pdev) -return ; + goto err_of_node_put;get_device (&pdev->dev); irq =platform_get_irq (pdev,0 );if (irq <0 ) -return ; + goto err_put_device; regs =syscon_regmap_lookup_by_phandle (np,NULL );if (IS_ERR (regs)) -return ; + goto err_put_device;rcu_assign_pointer (mtk_soc_wed_ops, &wed_ops);
@@ -853,8 +853,16 @@ void mtk_wed_add_hw(struct device_node *np, struct mtk_eth *eth, hw_list[index] = hw; +mutex_unlock (&hw_lock); + +return ; + unlock:mutex_unlock (&hw_lock); +err_put_device: +put_device (&pdev->dev); +err_of_node_put: +of_node_put (np); }void mtk_wed_exit (void )
@@ -875,6 +883,7 @@ void mtk_wed_exit(void) hw_list[i] =NULL ;debugfs_remove (hw->debugfs_dir);put_device (hw->dev); +of_node_put (hw->node);kfree (hw); } }
drivers/net/ethernet/pensando/ionic/ionic_lif.c +8 -4
@@ -2820,11 +2820,15 @@ int ionic_reconfigure_queues(struct ionic_lif *lif,* than the full array, but leave the qcq shells in place */ for (i = lif->nxqs; i < lif->ionic->ntxqs_per_lif; i++) { - lif->txqcqs[i]->flags &= ~IONIC_QCQ_F_INTR ; -ionic_qcq_free (lif, lif->txqcqs[i]); +if (lif->txqcqs && lif->txqcqs[i]) { + lif->txqcqs[i]->flags &= ~IONIC_QCQ_F_INTR ; +ionic_qcq_free (lif, lif->txqcqs[i]); + } - lif->rxqcqs[i]->flags &= ~IONIC_QCQ_F_INTR ; -ionic_qcq_free (lif, lif->rxqcqs[i]); +if (lif->rxqcqs && lif->rxqcqs[i]) { + lif->rxqcqs[i]->flags &= ~IONIC_QCQ_F_INTR ; +ionic_qcq_free (lif, lif->rxqcqs[i]); + } }if (err)
drivers/net/ethernet/sfc/ef10.c +24 -34
70 lines not on this page · raw message
drivers/net/ethernet/sfc/filter.h +2 -2
@@ -161,9 +161,9 @@ struct efx_filter_spec { u32 priority:2; u32 flags:6; u32 dmaq_id:12; -u32 vport_id;u32 rss_context; -__be16 outer_vid__aligned(4) ;/* allow jhash2() of match values */ +u32 vport_id; +__be16 outer_vid;__be16 inner_vid;u8 loc_mac[ETH_ALEN ];u8 rem_mac[ETH_ALEN ];
drivers/net/ethernet/sfc/rx_common.c +5 -5
@@ -660,17 +660,17 @@ bool efx_filter_spec_equal(const struct efx_filter_spec *left, (EFX_FILTER_FLAG_RX | EFX_FILTER_FLAG_TX)))return false; -return memcmp (&left->outer_vid, &right->outer_vid, +return memcmp (&left->vport_id, &right->vport_id,sizeof (struct efx_filter_spec ) - - offsetof(struct efx_filter_spec , outer_vid)) ==0 ; + offsetof(struct efx_filter_spec , vport_id)) ==0 ; }u32 efx_filter_spec_hash (const struct efx_filter_spec *spec) { -BUILD_BUG_ON (offsetof(struct efx_filter_spec , outer_vid) &3 ); -return jhash2 ((const u32 *)&spec->outer_vid, +BUILD_BUG_ON (offsetof(struct efx_filter_spec , vport_id) &3 ); +return jhash2 ((const u32 *)&spec->vport_id, (sizeof (struct efx_filter_spec ) - - offsetof(struct efx_filter_spec , outer_vid)) /4 , + offsetof(struct efx_filter_spec , vport_id)) /4 ,0 ); }
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +1 -0
@@ -1214,6 +1214,7 @@ static int stmmac_phy_setup(struct stmmac_priv *priv)if (priv->plat->tx_queues_to_use >1 ) priv->phylink_config.mac_capabilities &= ~(MAC_10HD |MAC_100HD |MAC_1000HD ); + priv->phylink_config.mac_managed_pm = true; phylink =phylink_create (&priv->phylink_config, fwnode, mode, &stmmac_phylink_mac_ops);
drivers/net/phy/dp83822.c +1 -2
@@ -254,8 +254,7 @@ static int dp83822_config_intr(struct phy_device *phydev) DP83822_EEE_ERROR_CHANGE_INT_EN);if (!dp83822->fx_enabled) - misr_status |=DP83822_MDI_XOVER_INT_EN | -DP83822_ANEG_ERR_INT_EN | + misr_status |=DP83822_ANEG_ERR_INT_EN |DP83822_WOL_PKT_INT_EN ; err =phy_write (phydev,MII_DP83822_MISR2 , misr_status);
drivers/net/phy/dp83867.c +8 -0
@@ -853,6 +853,14 @@ static int dp83867_config_init(struct phy_device *phydev)else val &= ~DP83867_SGMII_TYPE ;phy_write_mmd (phydev,DP83867_DEVADDR ,DP83867_SGMIICTL , val); + +/* This is a SW workaround for link instability if RX_CTRL is +* not strapped to mode 3 or 4 in HW. This is required for SGMII +* in addition to clearing bit 7, handled above. +*/ +if (dp83867->rxctrl_strap_quirk) +phy_set_bits_mmd (phydev,DP83867_DEVADDR ,DP83867_CFG4 , +BIT (8 )); } val =phy_read (phydev,DP83867_CFG3 );
drivers/net/phy/phylink.c +3 -0
@@ -1431,6 +1431,9 @@ static int phylink_bringup_phy(struct phylink *pl, struct phy_device *phy,if (phy_interrupt_is_valid (phy))phy_request_interrupt (phy); +if (pl->config->mac_managed_pm) + phy->mac_managed_pm = true; +return 0 ; }
drivers/net/wireless/mediatek/mt76/mt7921/pci.c +1 -0
@@ -152,6 +152,7 @@ static u32 __mt7921_reg_addr(struct mt7921_dev *dev, u32 addr) { 0x820c8000, 0x0c000, 0x2000 }, /* WF_UMAC_TOP (PSE) */ { 0x820cc000, 0x0e000, 0x1000 }, /* WF_UMAC_TOP (PP) */ { 0x820cd000, 0x0f000, 0x1000 }, /* WF_MDP_TOP */ + { 0x74030000, 0x10000, 0x10000 }, /* PCIE_MAC_IREG */ { 0x820ce000, 0x21c00, 0x0200 }, /* WF_LMAC_TOP (WF_SEC) */ { 0x820cf000, 0x22000, 0x1000 }, /* WF_LMAC_TOP (WF_PF) */ { 0x820e0000, 0x20000, 0x0400 }, /* WF_LMAC_TOP BN0 (WF_CFG) */
drivers/net/wireless/mediatek/mt76/mt7921/pci_mcu.c +2 -0
@@ -59,6 +59,8 @@ int mt7921e_mcu_init(struct mt7921_dev *dev)if (err)return err; +mt76_rmw_field (dev,MT_PCIE_MAC_PM ,MT_PCIE_MAC_PM_L0S_DIS ,1 ); + err =mt7921_run_firmware (dev);mt76_queue_tx_cleanup (dev, dev->mt76.q_mcu[MT_MCUQ_FWDL ], false);
drivers/net/wireless/mediatek/mt76/mt7921/regs.h +2 -0
@@ -440,6 +440,8 @@#define MT_PCIE_MAC_BASE 0x10000#define MT_PCIE_MAC (ofs) (MT_PCIE_MAC_BASE + (ofs))#define MT_PCIE_MAC_INT_ENABLE MT_PCIE_MAC(0x188) +#define MT_PCIE_MAC_PM MT_PCIE_MAC(0x194) +#define MT_PCIE_MAC_PM_L0S_DIS BIT(8)#define MT_DMA_SHDL (ofs) (0x7c026000 + (ofs))#define MT_DMASHDL_SW_CONTROL MT_DMA_SHDL(0x004)
drivers/net/wwan/wwan_hwsim.c +1 -1
@@ -311,7 +311,7 @@ static struct wwan_hwsim_dev *wwan_hwsim_dev_new(void)return ERR_PTR (err); err_free_dev: -kfree (dev); +put_device (&dev->dev);return ERR_PTR (err); }
drivers/nvme/host/core.c +5 -1
@@ -3256,8 +3256,12 @@ int nvme_init_ctrl_finish(struct nvme_ctrl *ctrl)return ret;if (!ctrl->identified && !nvme_discovery_ctrl (ctrl)) { +/* +* Do not return errors unless we are in a controller reset, +* the controller works perfectly fine without hwmon. +*/ ret =nvme_hwmon_init (ctrl); -if (ret <0 ) +if (ret == -EINTR )return ret; }
drivers/nvme/host/hwmon.c +22 -10
@@ -12,7 +12,7 @@struct nvme_hwmon_data {struct nvme_ctrl *ctrl; -struct nvme_smart_log log; +struct nvme_smart_log *log;struct mutex read_lock; };
@@ -60,14 +60,14 @@ static int nvme_set_temp_thresh(struct nvme_ctrl *ctrl, int sensor, bool under,static int nvme_hwmon_get_smart_log (struct nvme_hwmon_data *data) {return nvme_get_log (data->ctrl,NVME_NSID_ALL ,NVME_LOG_SMART ,0 , -NVME_CSI_NVM , &data->log,sizeof (data->log),0 ); +NVME_CSI_NVM , data->log,sizeof (*data->log),0 ); }static int nvme_hwmon_read (struct device *dev,enum hwmon_sensor_types type,u32 attr,int channel,long *val) {struct nvme_hwmon_data *data =dev_get_drvdata (dev); -struct nvme_smart_log *log = &data->log; +struct nvme_smart_log *log = data->log;int temp;int err;
@@ -163,7 +163,7 @@ static umode_t nvme_hwmon_is_visible(const void *_data,case hwmon_temp_max:case hwmon_temp_min:if ((!channel && data->ctrl->wctemp) || - (channel && data->log.temp_sensor[channel -1 ])) { + (channel && data->log->temp_sensor[channel -1 ])) {if (data->ctrl->quirks &NVME_QUIRK_NO_TEMP_THRESH_CHANGE )return 0444 ;
@@ -176,7 +176,7 @@ static umode_t nvme_hwmon_is_visible(const void *_data,break ;case hwmon_temp_input:case hwmon_temp_label: -if (!channel || data->log.temp_sensor[channel -1 ]) +if (!channel || data->log->temp_sensor[channel -1 ])return 0444 ;break ;default :
@@ -230,7 +230,13 @@ int nvme_hwmon_init(struct nvme_ctrl *ctrl) data =kzalloc (sizeof (*data),GFP_KERNEL );if (!data) -return 0 ; +return -ENOMEM ; + + data->log =kzalloc (sizeof (*data->log),GFP_KERNEL ); +if (!data->log) { + err = -ENOMEM ; + goto err_free_data; + } data->ctrl = ctrl;mutex_init (&data->read_lock);
@@ -238,8 +244,7 @@ int nvme_hwmon_init(struct nvme_ctrl *ctrl) err =nvme_hwmon_get_smart_log (data);if (err) {dev_warn (dev,"Failed to read smart log (error %d)\n" , err); -kfree (data); -return err; + goto err_free_log; } hwmon = hwmon_device_register_with_info(dev, "nvme",
@@ -247,11 +252,17 @@ int nvme_hwmon_init(struct nvme_ctrl *ctrl) NULL);if (IS_ERR (hwmon)) {dev_warn (dev,"Failed to instantiate hwmon device\n" ); -kfree (data); -return PTR_ERR (hwmon); + err =PTR_ERR (hwmon); + goto err_free_log; } ctrl->hwmon_device = hwmon;return 0 ; + +err_free_log: +kfree (data->log); +err_free_data: +kfree (data); +return err; }void nvme_hwmon_exit (struct nvme_ctrl *ctrl)
@@ -262,6 +273,7 @@ void nvme_hwmon_exit(struct nvme_ctrl *ctrl)hwmon_device_unregister (ctrl->hwmon_device); ctrl->hwmon_device =NULL ; +kfree (data->log);kfree (data); } }
drivers/nvme/target/core.c +1 -1
@@ -1176,7 +1176,7 @@ static void nvmet_start_ctrl(struct nvmet_ctrl *ctrl)* reset the keep alive timer when the controller is enabled. */ if (ctrl->kato) -mod_delayed_work (system_wq, &ctrl->ka_work, ctrl->kato *HZ ); +mod_delayed_work (nvmet_wq, &ctrl->ka_work, ctrl->kato *HZ ); }static void nvmet_clear_ctrl (struct nvmet_ctrl *ctrl)
drivers/platform/x86/amd/pmc.c +7 -0
@@ -635,6 +635,13 @@ static int amd_pmc_verify_czn_rtc(struct amd_pmc_dev *pdev, u32 *arg)struct rtc_time tm;int rc; +/* we haven't yet read SMU version */ +if (!pdev->major) { + rc =amd_pmc_get_smu_version (pdev); +if (rc) +return rc; + } +if (pdev->major <64 || (pdev->major ==64 && pdev->minor <53 ))return 0 ;
drivers/scsi/lpfc/lpfc_init.c +4 -3
@@ -4822,7 +4822,7 @@ lpfc_create_port(struct lpfc_hba *phba, int instance, struct device *dev) rc =lpfc_vmid_res_alloc (phba, vport);if (rc) - goto out; + goto out_put_shost;/* Initialize all internally managed lists. */ INIT_LIST_HEAD (&vport->fc_nodes);
@@ -4840,16 +4840,17 @@ lpfc_create_port(struct lpfc_hba *phba, int instance, struct device *dev) error =scsi_add_host_with_dma (shost, dev, &phba->pcidev->dev);if (error) - goto out_put_shost; + goto out_free_vmid;spin_lock_irq (&phba->port_list_lock);list_add_tail (&vport->listentry, &phba->port_list);spin_unlock_irq (&phba->port_list_lock);return vport; -out_put_shost: +out_free_vmid:kfree (vport->vmid);bitmap_free (vport->vmid_priority_range); +out_put_shost:scsi_host_put (shost); out:return NULL ;
drivers/staging/media/ipu3/ipu3-v4l2.c +14 -17
@@ -192,33 +192,30 @@ static int imgu_subdev_get_selection(struct v4l2_subdev *sd,struct v4l2_subdev_state *sd_state, struct v4l2_subdev_selection *sel) { - struct v4l2_rect *try_sel, *r; -struct imgu_v4l2_subdev *imgu_sd =container_of (sd, - struct imgu_v4l2_subdev, - subdev); + struct imgu_v4l2_subdev *imgu_sd = + container_of(sd, struct imgu_v4l2_subdev, subdev);if (sel->pad !=IMGU_NODE_IN )return -EINVAL ;switch (sel->target) {case V4L2_SEL_TGT_CROP : - try_sel =v4l2_subdev_get_try_crop (sd, sd_state, sel->pad); - r = &imgu_sd->rect.eff; -break ; +if (sel->which ==V4L2_SUBDEV_FORMAT_TRY ) + sel->r = *v4l2_subdev_get_try_crop (sd, sd_state, + sel->pad); +else + sel->r = imgu_sd->rect.eff; +return 0 ;case V4L2_SEL_TGT_COMPOSE : - try_sel =v4l2_subdev_get_try_compose (sd, sd_state, sel->pad); - r = &imgu_sd->rect.bds; -break ; +if (sel->which ==V4L2_SUBDEV_FORMAT_TRY ) + sel->r = *v4l2_subdev_get_try_compose (sd, sd_state, + sel->pad); +else + sel->r = imgu_sd->rect.bds; +return 0 ;default :return -EINVAL ; } - -if (sel->which ==V4L2_SUBDEV_FORMAT_TRY ) - sel->r = *try_sel; -else - sel->r = *r; - -return 0 ; } static int imgu_subdev_set_selection(struct v4l2_subdev *sd,
drivers/video/aperture.c +11 -0
@@ -357,6 +357,17 @@ int aperture_remove_conflicting_pci_devices(struct pci_dev *pdev, const char *naif (ret)return ret; +/* +* If a driver asked to unregister a platform device registered by +* sysfb, then can be assumed that this is a driver for a display +* that is set up by the system firmware and has a generic driver. +* +* Drivers for devices that don't have a generic driver will never +* ask for this, so let's assume that a real driver for the display +* was already probed and prevent sysfb to register devices later. +*/ +sysfb_disable (); +/* * WARNING: Apparently we must kick fbdev drivers before vgacon, * otherwise the vga fbdev driver falls over.
fs/btrfs/backref.c +31 -15
115 lines not on this page · raw message
fs/cifs/cifsfs.c +5 -2
@@ -1297,8 +1297,11 @@ static ssize_t cifs_copy_file_range(struct file *src_file, loff_t off,ssize_t rc;struct cifsFileInfo *cfile = dst_file->private_data; -if (cfile->swapfile) -return -EOPNOTSUPP ; +if (cfile->swapfile) { + rc = -EOPNOTSUPP ; +free_xid (xid); +return rc; + } rc =cifs_file_copychunk_range (xid, src_file, off, dst_file, destoff, len, flags);
fs/cifs/dir.c +4 -2
@@ -551,8 +551,10 @@ int cifs_create(struct user_namespace *mnt_userns, struct inode *inode,cifs_dbg (FYI ,"cifs_create parent inode = 0x%p name is: %pd and dentry = 0x%p\n" , inode, direntry, direntry); -if (unlikely (cifs_forced_shutdown (CIFS_SB (inode->i_sb)))) -return -EIO ; +if (unlikely (cifs_forced_shutdown (CIFS_SB (inode->i_sb)))) { + rc = -EIO ; + goto out_free_xid; + } tlink =cifs_sb_tlink (CIFS_SB (inode->i_sb)); rc =PTR_ERR (tlink);
fs/cifs/file.c +7 -4
@@ -1882,11 +1882,13 @@ int cifs_flock(struct file *file, int cmd, struct file_lock *fl)struct cifsFileInfo *cfile;__u32 type; - rc = -EACCES ; xid =get_xid (); -if (!(fl->fl_flags &FL_FLOCK )) -return -ENOLCK ; +if (!(fl->fl_flags &FL_FLOCK )) { + rc = -ENOLCK ; +free_xid (xid); +return rc; + } cfile = (struct cifsFileInfo *)file->private_data; tcon =tlink_tcon (cfile->tlink);
@@ -1905,8 +1907,9 @@ int cifs_flock(struct file *file, int cmd, struct file_lock *fl)* if no lock or unlock then nothing to do since we do not * know what it is */ + rc = -EOPNOTSUPP ;free_xid (xid); -return -EOPNOTSUPP ; +return rc; } rc = cifs_setlk(file, fl, type, wait_flag, posix_lck, lock, unlock,
fs/cifs/sess.c +1 -0
@@ -496,6 +496,7 @@ cifs_ses_add_channel(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses,cifs_put_tcp_session (chan->server,0 ); } +free_xid (xid);return rc; }
fs/cifs/smb2ops.c +2 -1
@@ -530,6 +530,7 @@ parse_server_interfaces(struct network_interface_info_ioctl_rsp *buf, p = buf;spin_lock (&ses->iface_lock); + ses->iface_count =0 ;/* * Go through iface_list and do kref_put to remove * any unused ifaces. ifaces in use will be removed
@@ -650,9 +651,9 @@ parse_server_interfaces(struct network_interface_info_ioctl_rsp *buf,kref_put (&iface->refcount, release_iface); }else list_add_tail (&info->iface_head, &ses->iface_list); -spin_unlock (&ses->iface_lock); ses->iface_count++; +spin_unlock (&ses->iface_lock); ses->iface_last_update = jiffies; next_iface: nb_iface++;
fs/cifs/smb2pdu.c +1 -1
@@ -1526,7 +1526,7 @@ SMB2_sess_auth_rawntlmssp_negotiate(struct SMB2_sess_data *sess_data) &blob_length, ses, server, sess_data->nls_cp);if (rc) - goto out_err; + goto out;if (use_spnego) {/* BB eventually need to add this */
fs/erofs/zdata.c +3 -5
@@ -838,15 +838,13 @@ static void z_erofs_do_decompressed_bvec(struct z_erofs_decompress_backend *be,if (!((bvec->offset + be->pcl->pageofs_out) & ~PAGE_MASK )) {unsigned int pgnr; -struct page *oldpage; pgnr = (bvec->offset + be->pcl->pageofs_out) >>PAGE_SHIFT ;DBG_BUGON (pgnr >= be->nr_pages); - oldpage = be->decompressed_pages[pgnr]; - be->decompressed_pages[pgnr] = bvec->page; - -if (!oldpage) +if (!be->decompressed_pages[pgnr]) { + be->decompressed_pages[pgnr] = bvec->page;return ; + } }/* (cold path) one pcluster is requested multiple times */
fs/erofs/zdata.h +3 -3
@@ -126,10 +126,10 @@ static inline unsigned int z_erofs_pclusterpages(struct z_erofs_pcluster *pcl) }/* -* bit 31: I/O error occurred on this page -* bit 0 - 30: remaining parts to complete this page +* bit 30: I/O error occurred on this page +* bit 0 - 29: remaining parts to complete this page */ -#define Z_EROFS_PAGE_EIO (1 << 31) +#define Z_EROFS_PAGE_EIO (1 << 30)static inline void z_erofs_onlinepage_init (struct page *page) {
fs/ext4/fast_commit.c +81 -41
265 lines not on this page · raw message
fs/ext4/fast_commit.h +3 -0
@@ -70,6 +70,9 @@ struct ext4_fc_tail {__le32 fc_crc; }; +/* Tag base length */ +#define EXT4_FC_TAG_BASE_LEN (sizeof(struct ext4_fc_tl)) +/* * Fast commit status codes */
fs/ocfs2/namei.c +11 -12
@@ -232,6 +232,7 @@ static int ocfs2_mknod(struct user_namespace *mnt_userns,handle_t *handle =NULL ;struct ocfs2_super *osb;struct ocfs2_dinode *dirfe; +struct ocfs2_dinode *fe =NULL ;struct buffer_head *new_fe_bh =NULL ;struct inode *inode =NULL ;struct ocfs2_alloc_context *inode_ac =NULL ;
@@ -382,6 +383,7 @@ static int ocfs2_mknod(struct user_namespace *mnt_userns, goto leave; } + fe = (struct ocfs2_dinode *) new_fe_bh->b_data;if (S_ISDIR (mode)) { status =ocfs2_fill_new_dir (osb, handle, dir, inode, new_fe_bh, data_ac, meta_ac);
@@ -454,8 +456,11 @@ static int ocfs2_mknod(struct user_namespace *mnt_userns, leave:if (status <0 && did_quota_inode)dquot_free_inode (inode); -if (handle) +if (handle) { +if (status <0 && fe) +ocfs2_set_links_count (fe,0 );ocfs2_commit_trans (osb, handle); + }ocfs2_inode_unlock (dir,1 );if (did_block_signals)
@@ -632,18 +637,9 @@ static int ocfs2_mknod_locked(struct ocfs2_super *osb,return status; } - status =__ocfs2_mknod_locked (dir, inode, dev, new_fe_bh, +return __ocfs2_mknod_locked (dir, inode, dev, new_fe_bh, parent_fe_bh, handle, inode_ac, fe_blkno, suballoc_loc, suballoc_bit); -if (status <0 ) { -u64 bg_blkno =ocfs2_which_suballoc_group (fe_blkno, suballoc_bit); -int tmp =ocfs2_free_suballoc_bits (handle, inode_ac->ac_inode, - inode_ac->ac_bh, suballoc_bit, bg_blkno,1 ); -if (tmp) -mlog_errno (tmp); - } - -return status; } static int ocfs2_mkdir(struct user_namespace *mnt_userns,
@@ -2028,8 +2024,11 @@ static int ocfs2_symlink(struct user_namespace *mnt_userns, ocfs2_clusters_to_bytes(osb->sb, 1));if (status <0 && did_quota_inode)dquot_free_inode (inode); -if (handle) +if (handle) { +if (status <0 && fe) +ocfs2_set_links_count (fe,0 );ocfs2_commit_trans (osb, handle); + }ocfs2_inode_unlock (dir,1 );if (did_block_signals)
fs/proc/task_mmu.c +1 -1
@@ -969,7 +969,7 @@ static int show_smaps_rollup(struct seq_file *m, void *v) vma = vma->vm_next; } -show_vma_header_prefix (m, priv->mm->mmap->vm_start, +show_vma_header_prefix (m, priv->mm->mmap ? priv->mm->mmap->vm_start :0 , last_vma_end,0 ,0 ,0 ,0 );seq_pad (m,' ' );seq_puts (m,"[rollup]\n" );
include/linux/dsa/tag_qca.h +4 -4
@@ -61,9 +61,9 @@ struct sk_buff;/* Special struct emulating a Ethernet header */ struct qca_mgmt_ethhdr { -u32 command;/* command bit 31:0 */ -u32 seq;/* seq 63:32 */ -u32 mdio_data;/* first 4byte mdio */ +__le32 command;/* command bit 31:0 */ +__le32 seq;/* seq 63:32 */ +__le32 mdio_data;/* first 4byte mdio */ __be16 hdr;/* qca hdr */ } __packed;
@@ -73,7 +73,7 @@ enum mdio_cmd { };struct mib_ethhdr { -u32 data[3 ];/* first 3 mib counter */ +__le32 data[3 ];/* first 3 mib counter */ __be16 hdr;/* qca hdr */ } __packed;
include/linux/kvm_host.h +2 -0
@@ -1391,6 +1391,8 @@ int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap);long kvm_arch_vm_ioctl (struct file *filp,unsigned int ioctl,unsigned long arg); +long kvm_arch_vm_compat_ioctl (struct file *filp,unsigned int ioctl, +unsigned long arg);int kvm_arch_vcpu_ioctl_get_fpu (struct kvm_vcpu *vcpu,struct kvm_fpu *fpu);int kvm_arch_vcpu_ioctl_set_fpu (struct kvm_vcpu *vcpu,struct kvm_fpu *fpu);
include/linux/phylink.h +2 -0
@@ -88,6 +88,7 @@ enum phylink_op_type {* (See commit 7cceb599d15d ("net: phylink: avoid mac_config calls") * @poll_fixed_state: if true, starts link_poll, * if MAC link is at %MLO_AN_FIXED mode. +* @mac_managed_pm: if true, indicate the MAC driver is responsible for PHY PM. * @ovr_an_inband: if true, override PCS to MLO_AN_INBAND * @get_fixed_state: callback to execute to determine the fixed link state, * if MAC link is at %MLO_AN_FIXED mode.
@@ -100,6 +101,7 @@ struct phylink_config {enum phylink_op_type type;bool legacy_pre_march2020;bool poll_fixed_state; +bool mac_managed_pm;bool ovr_an_inband;void (*get_fixed_state)(struct phylink_config *config,struct phylink_link_state *state);
include/net/sch_generic.h +0 -1
@@ -1137,7 +1137,6 @@ static inline void __qdisc_reset_queue(struct qdisc_skb_head *qh)static inline void qdisc_reset_queue (struct Qdisc *sch) {__qdisc_reset_queue (&sch->q); - sch->qstats.backlog =0 ; } static inline struct Qdisc *qdisc_replace(struct Qdisc *sch, struct Qdisc *new,
include/net/sock_reuseport.h +5 -6
@@ -43,21 +43,20 @@ struct sock *reuseport_migrate_sock(struct sock *sk,extern int reuseport_attach_prog (struct sock *sk,struct bpf_prog *prog);extern int reuseport_detach_prog (struct sock *sk); -static inline bool reuseport_has_conns (struct sock *sk,bool set) +static inline bool reuseport_has_conns (struct sock *sk) {struct sock_reuseport *reuse;bool ret = false;rcu_read_lock (); reuse =rcu_dereference (sk->sk_reuseport_cb); -if (reuse) { -if (set) - reuse->has_conns =1 ; - ret = reuse->has_conns; - } +if (reuse && reuse->has_conns) + ret = true;rcu_read_unlock ();return ret; } +void reuseport_has_conns_set (struct sock *sk); +#endif /* _SOCK_REUSEPORT_H */
io_uring/io_uring.h +5 -5
@@ -229,12 +229,12 @@ static inline unsigned int io_sqring_entries(struct io_ring_ctx *ctx)static inline bool io_run_task_work (void ) { -if (test_thread_flag (TIF_NOTIFY_SIGNAL )) { +if (task_work_pending (current)) { +if (test_thread_flag (TIF_NOTIFY_SIGNAL )) +clear_notify_signal ();__set_current_state (TASK_RUNNING ); -clear_notify_signal (); -if (task_work_pending (current)) -task_work_run (); -return true; +task_work_run (); +return 1 ; }return false;
io_uring/msg_ring.c +3 -0
@@ -95,6 +95,9 @@ static int io_msg_send_fd(struct io_kiocb *req, unsigned int issue_flags) msg->src_fd =array_index_nospec (msg->src_fd, ctx->nr_user_files); file_ptr =io_fixed_file_slot (&ctx->file_table, msg->src_fd)->file_ptr; +if (!file_ptr) + goto out_unlock; + src_file = (struct file *) (file_ptr &FFS_MASK );get_file (src_file);
io_uring/rw.c +0 -2
@@ -192,8 +192,6 @@ static void io_req_io_end(struct io_kiocb *req) { struct io_rw *rw = io_kiocb_to_cmd(req, struct io_rw); -WARN_ON (!in_task ()); -if (rw->kiocb.ki_flags &IOCB_WRITE ) {kiocb_end_write (req);fsnotify_modify (req->file);
mm/hugetlb.c +1 -1
@@ -2928,11 +2928,11 @@ struct page *alloc_huge_page(struct vm_area_struct *vma, page =alloc_buddy_huge_page_with_mpol (h, vma, addr);if (!page) goto out_uncharge_cgroup; +spin_lock_irq (&hugetlb_lock);if (!avoid_reserve &&vma_has_reserves (vma, gbl_chg)) {SetHPageRestoreReserve (page); h->resv_huge_pages--; } -spin_lock_irq (&hugetlb_lock);list_add (&page->lru, &h->hugepage_activelist);/* Fall through */ }
net/atm/mpoa_proc.c +2 -1
@@ -219,11 +219,12 @@ static ssize_t proc_mpc_write(struct file *file, const char __user *buff,if (!page)return -ENOMEM ; -for (p = page, len =0 ; len < nbytes; p++, len++) { +for (p = page, len =0 ; len < nbytes; p++) {if (get_user (*p, buff++)) {free_page ((unsigned long )page);return -EFAULT ; } + len +=1 ;if (*p =='\0' || *p =='\n' )break ; }
net/core/dev.c +4 -0
@@ -5136,11 +5136,13 @@ sch_handle_ingress(struct sk_buff *skb, struct packet_type **pt_prev, int *ret,case TC_ACT_SHOT :mini_qdisc_qstats_cpu_drop (miniq);kfree_skb_reason (skb,SKB_DROP_REASON_TC_INGRESS ); + *ret =NET_RX_DROP ;return NULL ;case TC_ACT_STOLEN :case TC_ACT_QUEUED :case TC_ACT_TRAP :consume_skb (skb); + *ret =NET_RX_SUCCESS ;return NULL ;case TC_ACT_REDIRECT :/* skb_mac_header check was done by cls/act_bpf, so
@@ -5153,8 +5155,10 @@ sch_handle_ingress(struct sk_buff *skb, struct packet_type **pt_prev, int *ret, *another = true;break ; } + *ret =NET_RX_SUCCESS ;return NULL ;case TC_ACT_CONSUMED : + *ret =NET_RX_SUCCESS ;return NULL ;default :break ;
net/core/skmsg.c +4 -4
@@ -500,11 +500,11 @@ bool sk_msg_is_readable(struct sock *sk) }EXPORT_SYMBOL_GPL (sk_msg_is_readable); -static struct sk_msg *alloc_sk_msg (void ) +static struct sk_msg *alloc_sk_msg (gfp_t gfp) {struct sk_msg *msg; - msg =kzalloc (sizeof (*msg), __GFP_NOWARN |GFP_KERNEL ); + msg =kzalloc (sizeof (*msg), gfp | __GFP_NOWARN);if (unlikely (!msg))return NULL ;sg_init_marker (msg->sg.data,NR_MSG_FRAG_IDS );
@@ -520,7 +520,7 @@ static struct sk_msg *sk_psock_create_ingress_msg(struct sock *sk,if (!sk_rmem_schedule (sk, skb, skb->truesize))return NULL ; -return alloc_sk_msg (); +return alloc_sk_msg (GFP_KERNEL ); } static int sk_psock_skb_ingress_enqueue(struct sk_buff *skb,
@@ -597,7 +597,7 @@ static int sk_psock_skb_ingress(struct sk_psock *psock, struct sk_buff *skb,static int sk_psock_skb_ingress_self (struct sk_psock *psock,struct sk_buff *skb,u32 off,u32 len) { -struct sk_msg *msg =alloc_sk_msg (); +struct sk_msg *msg =alloc_sk_msg (GFP_ATOMIC );struct sock *sk = psock->sk;int err;
net/core/sock_reuseport.c +16 -0
@@ -21,6 +21,22 @@ static DEFINE_IDA(reuseport_ida);static int reuseport_resurrect (struct sock *sk,struct sock_reuseport *old_reuse,struct sock_reuseport *reuse,bool bind_inany); +void reuseport_has_conns_set (struct sock *sk) +{ +struct sock_reuseport *reuse; + +if (!rcu_access_pointer (sk->sk_reuseport_cb)) +return ; + +spin_lock_bh (&reuseport_lock); + reuse =rcu_dereference_protected (sk->sk_reuseport_cb, +lockdep_is_held (&reuseport_lock)); +if (likely (reuse)) + reuse->has_conns =1 ; +spin_unlock_bh (&reuseport_lock); +} +EXPORT_SYMBOL (reuseport_has_conns_set); +static int reuseport_sock_index (struct sock *sk,const struct sock_reuseport *reuse,bool closed)
net/hsr/hsr_forward.c +6 -6
@@ -150,15 +150,15 @@ struct sk_buff *hsr_get_untagged_frame(struct hsr_frame_info *frame, struct hsr_port *port) {if (!frame->skb_std) { -if (frame->skb_hsr) { +if (frame->skb_hsr) frame->skb_std =create_stripped_skb_hsr (frame->skb_hsr, frame); - }else { -/* Unexpected */ -WARN_ONCE (1 ,"%s:%d: Unexpected frame received (port_src %s)\n" , - __FILE__, __LINE__, port->dev->name); +else +netdev_warn_once (port->dev, +"Unexpected frame received in hsr_get_untagged_frame()\n" ); + +if (!frame->skb_std)return NULL ; - } }return skb_clone (frame->skb_std,GFP_ATOMIC );
net/ipv4/datagram.c +1 -1
@@ -70,7 +70,7 @@ int __ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len } inet->inet_daddr = fl4->daddr; inet->inet_dport = usin->sin_port; -reuseport_has_conns (sk, true); +reuseport_has_conns_set (sk); sk->sk_state =TCP_ESTABLISHED ;sk_set_txhash (sk); inet->inet_id =prandom_u32 ();
net/ipv4/netfilter/ipt_rpfilter.c +2 -1
@@ -78,7 +78,8 @@ static bool rpfilter_mt(const struct sk_buff *skb, struct xt_action_param *par) flow.flowi4_mark = info->flags &XT_RPFILTER_VALID_MARK ? skb->mark :0 ; flow.flowi4_tos = iph->tos &IPTOS_RT_MASK ; flow.flowi4_scope =RT_SCOPE_UNIVERSE ; - flow.flowi4_oif =l3mdev_master_ifindex_rcu (xt_in (par)); + flow.flowi4_l3mdev =l3mdev_master_ifindex_rcu (xt_in (par)); + flow.flowi4_uid =sock_net_uid (xt_net (par),NULL );return rpfilter_lookup_reverse (xt_net (par), &flow,xt_in (par), info->flags) ^ invert; }
net/ipv4/netfilter/nft_fib_ipv4.c +2 -1
@@ -65,6 +65,7 @@ void nft_fib4_eval(const struct nft_expr *expr, struct nft_regs *regs,struct flowi4 fl4 = { .flowi4_scope =RT_SCOPE_UNIVERSE , .flowi4_iif =LOOPBACK_IFINDEX , + .flowi4_uid =sock_net_uid (nft_net (pkt),NULL ), };const struct net_device *oif;const struct net_device *found;
@@ -84,7 +85,7 @@ void nft_fib4_eval(const struct nft_expr *expr, struct nft_regs *regs, oif =NULL ;if (priv->flags &NFTA_FIB_F_IIF ) - fl4.flowi4_oif =l3mdev_master_ifindex_rcu (oif); + fl4.flowi4_l3mdev =l3mdev_master_ifindex_rcu (oif);if (nft_hook (pkt) ==NF_INET_PRE_ROUTING &&nft_fib_is_loopback (pkt->skb,nft_in (pkt))) {
net/ipv4/udp.c +1 -1
@@ -448,7 +448,7 @@ static struct sock *udp4_lib_lookup2(struct net *net, result =lookup_reuseport (net, sk, skb, saddr, sport, daddr, hnum);/* Fall back to scoring if group has connections */ -if (result && !reuseport_has_conns (sk, false)) +if (result && !reuseport_has_conns (sk))return result; result = result ? : sk;
net/ipv6/addrconf.c +2 -0
@@ -7214,9 +7214,11 @@ static int __net_init addrconf_init_net(struct net *net)__addrconf_sysctl_unregister (net, all,NETCONFA_IFINDEX_ALL ); err_reg_all:kfree (dflt); + net->ipv6.devconf_dflt =NULL ;#endif err_alloc_dflt:kfree (all); + net->ipv6.devconf_all =NULL ; err_alloc_all:kfree (net->ipv6.inet6_addr_lst); err_alloc_addr:
net/ipv6/datagram.c +1 -1
@@ -256,7 +256,7 @@ int __ip6_datagram_connect(struct sock *sk, struct sockaddr *uaddr, goto out; } -reuseport_has_conns (sk, true); +reuseport_has_conns_set (sk); sk->sk_state =TCP_ESTABLISHED ;sk_set_txhash (sk); out:
net/ipv6/netfilter/ip6t_rpfilter.c +4 -6
@@ -37,8 +37,10 @@ static bool rpfilter_lookup_reverse6(struct net *net, const struct sk_buff *skb,bool ret = false;struct flowi6 fl6 = { .flowi6_iif =LOOPBACK_IFINDEX , + .flowi6_l3mdev =l3mdev_master_ifindex_rcu (dev), .flowlabel = (* (__be32 *) iph) &IPV6_FLOWINFO_MASK , .flowi6_proto = iph->nexthdr, + .flowi6_uid =sock_net_uid (net,NULL ), .daddr = iph->saddr, };int lookup_flags;
@@ -55,9 +57,7 @@ static bool rpfilter_lookup_reverse6(struct net *net, const struct sk_buff *skb,if (rpfilter_addr_linklocal (&iph->saddr)) { lookup_flags |=RT6_LOOKUP_F_IFACE ; fl6.flowi6_oif = dev->ifindex; -/* Set flowi6_oif for vrf devices to lookup route in l3mdev domain. */ - }else if (netif_is_l3_master (dev) ||netif_is_l3_slave (dev) || - (flags &XT_RPFILTER_LOOSE ) ==0 ) + }else if ((flags &XT_RPFILTER_LOOSE ) ==0 ) fl6.flowi6_oif = dev->ifindex; rt = (void *)ip6_route_lookup (net, &fl6, skb, lookup_flags);
@@ -72,9 +72,7 @@ static bool rpfilter_lookup_reverse6(struct net *net, const struct sk_buff *skb, goto out; } -if (rt->rt6i_idev->dev == dev || -l3mdev_master_ifindex_rcu (rt->rt6i_idev->dev) == dev->ifindex || - (flags &XT_RPFILTER_LOOSE )) +if (rt->rt6i_idev->dev == dev || (flags &XT_RPFILTER_LOOSE )) ret = true; out:ip6_rt_put (rt);
net/ipv6/netfilter/nft_fib_ipv6.c +4 -3
@@ -41,9 +41,8 @@ static int nft_fib6_flowi_init(struct flowi6 *fl6, const struct nft_fib *priv,if (ipv6_addr_type (&fl6->daddr) &IPV6_ADDR_LINKLOCAL ) { lookup_flags |=RT6_LOOKUP_F_IFACE ; fl6->flowi6_oif =get_ifindex (dev ? dev : pkt->skb->dev); - }else if ((priv->flags &NFTA_FIB_F_IIF ) && - (netif_is_l3_master (dev) ||netif_is_l3_slave (dev))) { - fl6->flowi6_oif = dev->ifindex; + }else if (priv->flags &NFTA_FIB_F_IIF ) { + fl6->flowi6_l3mdev =l3mdev_master_ifindex_rcu (dev); }if (ipv6_addr_type (&fl6->saddr) &IPV6_ADDR_UNICAST )
@@ -67,6 +66,7 @@ static u32 __nft_fib6_eval_type(const struct nft_fib *priv,struct flowi6 fl6 = { .flowi6_iif =LOOPBACK_IFINDEX , .flowi6_proto = pkt->tprot, + .flowi6_uid =sock_net_uid (nft_net (pkt),NULL ), };u32 ret =0 ;
@@ -164,6 +164,7 @@ void nft_fib6_eval(const struct nft_expr *expr, struct nft_regs *regs,struct flowi6 fl6 = { .flowi6_iif =LOOPBACK_IFINDEX , .flowi6_proto = pkt->tprot, + .flowi6_uid =sock_net_uid (nft_net (pkt),NULL ), };struct rt6_info *rt;int lookup_flags;
net/ipv6/udp.c +1 -1
@@ -182,7 +182,7 @@ static struct sock *udp6_lib_lookup2(struct net *net, result =lookup_reuseport (net, sk, skb, saddr, sport, daddr, hnum);/* Fall back to scoring if group has connections */ -if (result && !reuseport_has_conns (sk, false)) +if (result && !reuseport_has_conns (sk))return result; result = result ? : sk;
net/netfilter/nf_tables_api.c +3 -2
@@ -5865,8 +5865,9 @@ static bool nft_setelem_valid_key_end(const struct nft_set *set, (NFT_SET_CONCAT | NFT_SET_INTERVAL)) { if (flags & NFT_SET_ELEM_INTERVAL_END) return false; - if (!nla[NFTA_SET_ELEM_KEY_END] && - !(flags & NFT_SET_ELEM_CATCHALL)) + + if (nla[NFTA_SET_ELEM_KEY_END] && + flags & NFT_SET_ELEM_CATCHALL) return false; } else {if (nla[NFTA_SET_ELEM_KEY_END ])
net/sched/sch_api.c +3 -2
@@ -1081,12 +1081,13 @@ static int qdisc_graft(struct net_device *dev, struct Qdisc *parent, skip:if (!ingress) { -notify_and_destroy (net, skb, n, classid, -rtnl_dereference (dev->qdisc), new); + old =rtnl_dereference (dev->qdisc);if (new && !new->ops->attach)qdisc_refcount_inc (new);rcu_assign_pointer (dev->qdisc, new ? : &noop_qdisc); +notify_and_destroy (net, skb, n, classid, old, new); +if (new && new->ops->attach) new->ops->attach (new); }else {
net/sched/sch_atm.c +0 -1
@@ -577,7 +577,6 @@ static void atm_tc_reset(struct Qdisc *sch)pr_debug ("atm_tc_reset(sch %p,[qdisc %p])\n" , sch, p);list_for_each_entry (flow, &p->flows, list)qdisc_reset (flow->q); - sch->q.qlen =0 ; }static void atm_tc_destroy (struct Qdisc *sch)
net/sched/sch_cake.c +4 -0
@@ -2224,8 +2224,12 @@ static struct sk_buff *cake_dequeue(struct Qdisc *sch)static void cake_reset (struct Qdisc *sch) { +struct cake_sched_data *q =qdisc_priv (sch);u32 c; +if (!q->tins) +return ; +for (c =0 ; c <CAKE_MAX_TINS ; c++)cake_clear_tin (sch, c); }
net/sched/sch_cbq.c +0 -1
@@ -975,7 +975,6 @@ cbq_reset(struct Qdisc *sch) cl->cpriority = cl->priority; } } - sch->q.qlen =0 ; }
net/sched/sch_choke.c +0 -2
@@ -315,8 +315,6 @@ static void choke_reset(struct Qdisc *sch)rtnl_qdisc_drop (skb, sch); } - sch->q.qlen =0 ; - sch->qstats.backlog =0 ;if (q->tab)memset (q->tab,0 , (q->tab_mask +1 ) *sizeof (struct sk_buff *)); q->head = q->tail =0 ;
net/sched/sch_drr.c +0 -2
@@ -441,8 +441,6 @@ static void drr_reset_qdisc(struct Qdisc *sch)qdisc_reset (cl->qdisc); } } - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; }static void drr_destroy_qdisc (struct Qdisc *sch)
net/sched/sch_dsmark.c +0 -2
@@ -409,8 +409,6 @@ static void dsmark_reset(struct Qdisc *sch)pr_debug ("%s(sch %p,[qdisc %p])\n" , __func__, sch, p);if (p->q)qdisc_reset (p->q); - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; }static void dsmark_destroy (struct Qdisc *sch)
net/sched/sch_etf.c +0 -3
@@ -445,9 +445,6 @@ static void etf_reset(struct Qdisc *sch)timesortedlist_clear (sch);__qdisc_reset_queue (&sch->q); - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; - q->last =0 ; }
net/sched/sch_ets.c +0 -2
@@ -727,8 +727,6 @@ static void ets_qdisc_reset(struct Qdisc *sch) }for (band =0 ; band < q->nbands; band++)qdisc_reset (q->classes[band].qdisc); - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; }static void ets_qdisc_destroy (struct Qdisc *sch)
net/sched/sch_fq_codel.c +0 -2
@@ -347,8 +347,6 @@ static void fq_codel_reset(struct Qdisc *sch)codel_vars_init (&flow->cvars); }memset (q->backlogs,0 , q->flows_cnt *sizeof (u32)); - sch->q.qlen =0 ; - sch->qstats.backlog =0 ; q->memory_usage =0 ; }
net/sched/sch_fq_pie.c +0 -3
@@ -521,9 +521,6 @@ static void fq_pie_reset(struct Qdisc *sch)INIT_LIST_HEAD (&flow->flowchain);pie_vars_init (&flow->vars); } - - sch->q.qlen =0 ; - sch->qstats.backlog =0 ; }static void fq_pie_destroy (struct Qdisc *sch)
net/sched/sch_hfsc.c +0 -2
@@ -1484,8 +1484,6 @@ hfsc_reset_qdisc(struct Qdisc *sch) } q->eligible =RB_ROOT ;qdisc_watchdog_cancel (&q->watchdog); - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; } static void
net/sched/sch_htb.c +0 -2
@@ -1008,8 +1008,6 @@ static void htb_reset(struct Qdisc *sch) }qdisc_watchdog_cancel (&q->watchdog);__qdisc_reset_queue (&q->direct_queue); - sch->q.qlen =0 ; - sch->qstats.backlog =0 ;memset (q->hlevel,0 ,sizeof (q->hlevel));memset (q->row_mask,0 ,sizeof (q->row_mask)); }
net/sched/sch_multiq.c +0 -1
@@ -152,7 +152,6 @@ multiq_reset(struct Qdisc *sch)for (band =0 ; band < q->bands; band++)qdisc_reset (q->queues[band]); - sch->q.qlen =0 ; q->curband =0 ; }
net/sched/sch_prio.c +0 -2
@@ -135,8 +135,6 @@ prio_reset(struct Qdisc *sch)for (prio =0 ; prio < q->bands; prio++)qdisc_reset (q->queues[prio]); - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; }static int prio_offload (struct Qdisc *sch,struct tc_prio_qopt *qopt)
net/sched/sch_qfq.c +0 -2
@@ -1458,8 +1458,6 @@ static void qfq_reset_qdisc(struct Qdisc *sch)qdisc_reset (cl->qdisc); } } - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; }static void qfq_destroy_qdisc (struct Qdisc *sch)
net/sched/sch_red.c +0 -2
@@ -176,8 +176,6 @@ static void red_reset(struct Qdisc *sch)struct red_sched_data *q =qdisc_priv (sch);qdisc_reset (q->qdisc); - sch->qstats.backlog =0 ; - sch->q.qlen =0 ;red_restart (&q->vars); }
net/sched/sch_sfb.c +2 -3
@@ -455,9 +455,8 @@ static void sfb_reset(struct Qdisc *sch) {struct sfb_sched_data *q =qdisc_priv (sch); -qdisc_reset (q->qdisc); - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; +if (likely (q->qdisc)) +qdisc_reset (q->qdisc); q->slot =0 ; q->double_buffering = false;sfb_zero_all_buckets (q);
net/sched/sch_skbprio.c +0 -3
@@ -213,9 +213,6 @@ static void skbprio_reset(struct Qdisc *sch)struct skbprio_sched_data *q =qdisc_priv (sch);int prio; - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; -for (prio =0 ; prio <SKBPRIO_MAX_PRIORITY ; prio++)__skb_queue_purge (&q->qdiscs[prio]);
net/sched/sch_taprio.c +0 -2
@@ -1638,8 +1638,6 @@ static void taprio_reset(struct Qdisc *sch)if (q->qdiscs[i])qdisc_reset (q->qdiscs[i]); } - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; }static void taprio_destroy (struct Qdisc *sch)
net/sched/sch_tbf.c +0 -2
@@ -330,8 +330,6 @@ static void tbf_reset(struct Qdisc *sch)struct tbf_sched_data *q =qdisc_priv (sch);qdisc_reset (q->qdisc); - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; q->t_c =ktime_get_ns (); q->tokens = q->buffer; q->ptokens = q->mtu;
net/sched/sch_teql.c +0 -1
@@ -124,7 +124,6 @@ teql_reset(struct Qdisc *sch)struct teql_sched_data *dat =qdisc_priv (sch);skb_queue_purge (&dat->q); - sch->q.qlen =0 ; } static void
net/smc/smc_core.c +2 -1
@@ -896,7 +896,8 @@ static int smc_lgr_create(struct smc_sock *smc, struct smc_init_info *ini) }memcpy (lgr->pnet_id, ibdev->pnetid[ibport -1 ],SMC_MAX_PNETID_LEN ); -if (smc_wr_alloc_lgr_mem (lgr)) + rc =smc_wr_alloc_lgr_mem (lgr); +if (rc) goto free_wq;smc_llc_lgr_init (lgr, smc);
net/tipc/discover.c +1 -1
@@ -148,8 +148,8 @@ static bool tipc_disc_addr_trial_msg(struct tipc_discoverer *d, {struct net *net = d->net;struct tipc_net *tn =tipc_net (net); -bool trial =time_before (jiffies, tn->addr_trial_end);u32 self =tipc_own_addr (net); +bool trial =time_before (jiffies, tn->addr_trial_end) && !self;if (mtyp ==DSC_TRIAL_FAIL_MSG ) {if (!trial)
net/tipc/topsrv.c +1 -1
@@ -568,7 +568,7 @@ bool tipc_topsrv_kern_subscr(struct net *net, u32 port, u32 type, u32 lower, sub.seq.upper = upper; sub.timeout =TIPC_WAIT_FOREVER ; sub.filter = filter; - *(u32 *)&sub.usr_handle = port; + *(u64 *)&sub.usr_handle = (u64 )port; con =tipc_conn_alloc (tipc_topsrv (net));if (IS_ERR (con))
net/tls/tls_strp.c +28 -4
@@ -273,7 +273,7 @@ static int tls_strp_read_copyin(struct tls_strparser *strp)return desc.error; } -static int tls_strp_read_short (struct tls_strparser *strp) +static int tls_strp_read_copy (struct tls_strparser *strp,bool qshort) {struct skb_shared_info *shinfo;struct page *page;
@@ -283,7 +283,7 @@ static int tls_strp_read_short(struct tls_strparser *strp)* to read the data out. Otherwise the connection will stall. * Without pressure threshold of INT_MAX will never be ready. */ -if (likely (!tcp_epollin_ready (strp->sk,INT_MAX ))) +if (likely (qshort && !tcp_epollin_ready (strp->sk,INT_MAX )))return 0 ; shinfo =skb_shinfo (strp->anchor);
@@ -315,6 +315,27 @@ static int tls_strp_read_short(struct tls_strparser *strp)return 0 ; } +static bool tls_strp_check_no_dup (struct tls_strparser *strp) +{ +unsigned int len = strp->stm.offset + strp->stm.full_len; +struct sk_buff *skb; +u32 seq; + + skb =skb_shinfo (strp->anchor)->frag_list; + seq =TCP_SKB_CB (skb)->seq; + +while (skb->len < len) { + seq += skb->len; + len -= skb->len; + skb = skb->next; + +if (TCP_SKB_CB (skb)->seq != seq) +return false; + } + +return true; +} +static void tls_strp_load_anchor_with_queue (struct tls_strparser *strp,int len) {struct tcp_sock *tp =tcp_sk (strp->sk);
@@ -373,7 +394,7 @@ static int tls_strp_read_sock(struct tls_strparser *strp)return tls_strp_read_copyin (strp);if (inq < strp->stm.full_len) -return tls_strp_read_short (strp); +return tls_strp_read_copy (strp, true);if (!strp->stm.full_len) {tls_strp_load_anchor_with_queue (strp, inq);
@@ -387,9 +408,12 @@ static int tls_strp_read_sock(struct tls_strparser *strp) strp->stm.full_len = sz;if (!strp->stm.full_len || inq < strp->stm.full_len) -return tls_strp_read_short (strp); +return tls_strp_read_copy (strp, true); } +if (!tls_strp_check_no_dup (strp)) +return tls_strp_read_copy (strp, false); + strp->msg_ready =1 ;tls_rx_msg_ready (strp);
security/selinux/ss/services.c +3 -2
@@ -2022,7 +2022,8 @@ static inline int convert_context_handle_invalid_context(* in `newc'. Verify that the context is valid * under the new policy. */ -static int convert_context (struct context *oldc,struct context *newc,void *p) +static int convert_context (struct context *oldc,struct context *newc,void *p, +gfp_t gfp_flags) {struct convert_context_args *args;struct ocontext *oc;
@@ -2036,7 +2037,7 @@ static int convert_context(struct context *oldc, struct context *newc, void *p) args = p;if (oldc->str) { - s =kstrdup (oldc->str,GFP_KERNEL ); + s =kstrdup (oldc->str, gfp_flags);if (!s)return -ENOMEM ;
security/selinux/ss/sidtab.c +2 -2
@@ -325,7 +325,7 @@ int sidtab_context_to_sid(struct sidtab *s, struct context *context, } rc = convert->func (context, &dst_convert->context, - convert->args); + convert->args,GFP_ATOMIC );if (rc) {context_destroy (&dst->context); goto out_unlock;
@@ -404,7 +404,7 @@ static int sidtab_convert_tree(union sidtab_entry_inner *edst,while (i <SIDTAB_LEAF_ENTRIES && *pos < count) { rc = convert->func (&esrc->ptr_leaf->entries[i].context, &edst->ptr_leaf->entries[i].context, - convert->args); + convert->args,GFP_KERNEL );if (rc)return rc; (*pos)++;
security/selinux/ss/sidtab.h +1 -1
@@ -65,7 +65,7 @@ struct sidtab_isid_entry { };struct sidtab_convert_params { -int (*func)(struct context *oldc,struct context *newc,void *args); +int (*func)(struct context *oldc,struct context *newc,void *args,gfp_t gfp_flags);void *args;struct sidtab *target; };
tools/verification/dot2/dot2c.py +1 -1
@@ -111,7 +111,7 @@ class Dot2c(Automata): def format_aut_init_header(self): buff = [] - buff.append("struct %s %s = {" % (self.struct_automaton_def, self.var_automaton_def)) + buff.append("static struct %s %s = {" % (self.struct_automaton_def, self.var_automaton_def)) return buff def __get_string_vector_per_line_content(self, buff):
virt/kvm/kvm_main.c +11 -0
@@ -4834,6 +4834,12 @@ struct compat_kvm_clear_dirty_log { }; }; +long __weak kvm_arch_vm_compat_ioctl (struct file *filp,unsigned int ioctl, +unsigned long arg) +{ +return -ENOTTY ; +} +static long kvm_vm_compat_ioctl (struct file *filp,unsigned int ioctl,unsigned long arg) {
@@ -4842,6 +4848,11 @@ static long kvm_vm_compat_ioctl(struct file *filp,if (kvm->mm != current->mm || kvm->vm_dead)return -EIO ; + + r =kvm_arch_vm_compat_ioctl (filp, ioctl, arg); +if (r != -ENOTTY ) +return r; +switch (ioctl) {#ifdef CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT case KVM_CLEAR_DIRTY_LOG : {