Linux 5.15.22
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.22 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.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
------------
Documentation/gpu/todo.rst | 21 - Makefile | 2 arch/arm64/kvm/arm.c | 51 ++- arch/arm64/kvm/handle_exit.c | 8 arch/arm64/kvm/hyp/include/hyp/switch.h | 3 arch/x86/events/intel/core.c | 13 arch/x86/events/intel/pt.c | 5 block/bio-integrity.c | 2 drivers/dma-buf/dma-heap.c | 2 drivers/edac/altera_edac.c | 2 drivers/edac/xgene_edac.c | 2 drivers/gpio/gpio-idt3243x.c | 2 drivers/gpio/gpio-mpc8xxx.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 3 drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.c | 20 - drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 20 + drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 6 drivers/gpu/drm/i915/display/intel_overlay.c | 3 drivers/gpu/drm/i915/display/intel_tc.c | 3 drivers/gpu/drm/i915/i915_pci.c | 2 drivers/gpu/drm/kmb/kmb_plane.c | 6 drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.c | 2 drivers/infiniband/core/cm.c | 2 drivers/infiniband/core/cma.c | 22 - drivers/infiniband/core/ucma.c | 34 +- drivers/infiniband/hw/hfi1/ipoib_main.c | 27 + drivers/infiniband/hw/mlx4/main.c | 2 drivers/infiniband/sw/rdmavt/qp.c | 2 drivers/infiniband/sw/siw/siw.h | 7 drivers/infiniband/sw/siw/siw_qp_rx.c | 20 - drivers/infiniband/sw/siw/siw_verbs.c | 3 drivers/iommu/amd/init.c | 2 drivers/iommu/intel/irq_remapping.c | 13 drivers/net/dsa/Kconfig | 1 drivers/net/ethernet/google/gve/gve_adminq.c | 2 drivers/net/ethernet/intel/e1000e/e1000.h | 4 drivers/net/ethernet/intel/e1000e/ich8lan.c | 20 + drivers/net/ethernet/intel/e1000e/netdev.c | 33 +- drivers/net/ethernet/stmicro/stmmac/dwmac-visconti.c | 9 drivers/net/ethernet/stmicro/stmmac/dwmac_dma.h | 1 drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c | 19 + drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c | 19 - drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 6 drivers/net/ieee802154/ca8210.c | 1 drivers/net/ieee802154/mac802154_hwsim.c | 1 drivers/net/ieee802154/mcr20a.c | 4 drivers/net/macsec.c | 33 +- drivers/nvme/host/fabrics.h | 1 drivers/pinctrl/bcm/pinctrl-bcm2835.c | 23 + drivers/pinctrl/intel/pinctrl-intel.c | 64 ++-- drivers/pinctrl/sunxi/pinctrl-sun50i-h616.c | 8 drivers/rtc/rtc-mc146818-lib.c | 2 drivers/scsi/bnx2fc/bnx2fc_fcoe.c | 21 - drivers/soc/mediatek/mtk-scpsys.c | 15 - drivers/spi/spi-bcm-qspi.c | 2 drivers/spi/spi-meson-spicc.c | 5 drivers/spi/spi-mt65xx.c | 2 drivers/spi/spi-stm32-qspi.c | 47 +-- drivers/spi/spi-uniphier.c | 18 + drivers/video/console/Kconfig | 20 + drivers/video/fbdev/core/fbcon.c | 68 ++++ drivers/video/fbdev/core/fbcon.h | 15 + drivers/video/fbdev/core/fbcon_ccw.c | 10 drivers/video/fbdev/core/fbcon_cw.c | 10 drivers/video/fbdev/core/fbcon_rotate.h | 4 drivers/video/fbdev/core/fbcon_ud.c | 20 - fs/9p/fid.c | 9 fs/btrfs/block-group.c | 13 fs/btrfs/ioctl.c | 5 fs/btrfs/qgroup.c | 21 + fs/btrfs/transaction.c | 24 + fs/btrfs/transaction.h | 2 fs/ext4/ext4.h | 3 fs/ext4/extents.c | 4 fs/ext4/fast_commit.c | 89 +++--- fs/ext4/inline.c | 10 fs/ext4/mballoc.c | 26 + fs/nfsd/nfs4state.c | 4 include/linux/kvm_host.h | 112 +++++++- include/linux/pgtable.h | 1 include/uapi/sound/asound.h | 4 ipc/sem.c | 4 kernel/audit.c | 62 +++- kernel/bpf/ringbuf.c | 2 kernel/cgroup/cpuset.c | 10 kernel/events/core.c | 16 + mm/debug_vm_pgtable.c | 2 mm/kmemleak.c | 13 net/bridge/netfilter/nft_reject_bridge.c | 8 net/ieee802154/nl802154.c | 8 net/mptcp/pm_netlink.c | 34 +- net/smc/af_smc.c | 133 ++++++++- net/smc/smc.h | 20 + security/selinux/ss/conditional.c | 3 sound/pci/hda/hda_auto_parser.c | 2 sound/pci/hda/hda_codec.c | 4 sound/pci/hda/hda_generic.c | 17 + sound/pci/hda/hda_generic.h | 3 sound/pci/hda/patch_realtek.c | 67 +++- sound/soc/codecs/cpcap.c | 2 sound/soc/codecs/hdmi-codec.c | 2 sound/soc/codecs/lpass-rx-macro.c | 8 sound/soc/codecs/max9759.c | 3 sound/soc/codecs/wcd938x.c | 31 +- sound/soc/fsl/pcm030-audio-fabric.c | 11 sound/soc/generic/simple-card.c | 26 + sound/soc/soc-ops.c | 29 +- sound/soc/xilinx/xlnx_formatter_pcm.c | 27 + sound/usb/mixer.c | 4 sound/usb/quirks-table.h | 2 tools/bpf/resolve_btfids/Makefile | 6 tools/include/uapi/sound/asound.h | 4 tools/perf/util/stat-display.c | 19 - tools/testing/selftests/exec/Makefile | 2 tools/testing/selftests/futex/Makefile | 4 tools/testing/selftests/netfilter/nft_concat_range.sh | 72 +++++ tools/testing/selftests/netfilter/nft_nat.sh | 152 +++++++++++ 117 files changed, 1469 insertions(+), 492 deletions(-)
Albert Geantă (1):
ALSA: hda/realtek: Add quirk for ASUS GU603
Andre Przywara (1):
pinctrl: sunxi: Fix H616 I2S3 pin data
Andy Shevchenko (1):
pinctrl: intel: Fix a glitch when updating IRQ flags on a preconfigured line
Anitha Chrisanthus (1):
drm/kmb: Fix for build errors with Warray-bounds
Arnaldo Carvalho de Melo (1):
tools include UAPI: Sync sound/asound.h copy with the kernel sources
Arınç ÜNAL (1):
net: dsa: mt7530: make NET_DSA_MT7530 select MEDIATEK_GE_PHY
Aun-Ali Zaidi (1):
drm/amd/display: Force link_rate as LINK_RATE_RBR2 for 2018 15" Apple Retina panels
Benjamin Gaignard (1):
spi: mediatek: Avoid NULL pointer crash in interrupt
Bernard Metzler (1):
RDMA/siw: Fix broken RDMA Read Fence/Resume logic.
Camel Guo (1):
net: stmmac: dump gmac4 DMA registers correctly
Christian Lachner (3):
ALSA: hda/realtek: Add missing fixup-model entry for Gigabyte X570 ALC1220 quirks
ALSA: hda/realtek: Fix silent output on Gigabyte X570S Aorus Master (newer chipset)
ALSA: hda/realtek: Fix silent output on Gigabyte X570 Aorus Xtreme after reboot from Windows
Dai Ngo (1):
nfsd: nfsd4_setclientid_confirm mistakenly expires confirmed client.
Dan Carpenter (3):
RDMA/siw: Fix refcounting leak in siw_create_qp() drm/i915/overlay: Prevent divide by zero bugs in scaling
ASoC: max9759: fix underflow in speaker_gain_control_put()
Dmitry Osipenko (1):
ASoC: hdmi-codec: Fix OOB memory accesses
Dominique Martinet (1):
Revert "fs/9p: search open fids first"
Evan Quan (1):
drm/amd/pm: correct the MGpuFanBoost support for Beige Goby
Filipe Manana (1):
btrfs: fix use-after-free after failure to create a snapshot
Florian Fainelli (1):
pinctrl: bcm2835: Fix a few error paths
Florian Westphal (2):
selftests: nft_concat_range: add test for reload with no element add/del
selftests: netfilter: check stateless nat udp checksum fixup
Greg Kroah-Hartman (1):
Linux 5.15.22
Guenter Roeck (1):
Revert "ASoC: mediatek: Check for error clk pointer"
Guoqing Jiang (1):
iommu/vt-d: Fix potential memory leak in intel_setup_irq_remapping()
Haiyue Wang (1):
gve: fix the wrong AdminQ buffer queue index check
Helge Deller (2):
Revert "fbcon: Disable accelerated scrolling"
fbcon: Add option to enable legacy hardware acceleration
Hou Tao (1):
bpf: Use VM_MAP instead of VM_ALLOC for ringbuf
Ian Rogers (1):
perf stat: Fix display of grouped aliased events
Imre Deak (1):
drm/i915/adlp: Fix TypeC PHY-ready status readout
James Morse (2):
KVM: arm64: Avoid consuming a stale esr value when SError occur
KVM: arm64: Stop handle_exit() from handling HVC twice when an SError occurs
Jiasheng Jiang (1):
ASoC: cpcap: Check for NULL pointer after calling of_get_child_by_name
Jisheng Zhang (1):
net: stmmac: properly handle with runtime pm in stmmac_dvr_remove()
Joerg Roedel (1):
iommu/amd: Fix loop timeout issue in iommu_ga_log_enable()
John Meneghini (1):
scsi: bnx2fc: Make bnx2fc_recv_frame() mp safe
Jonas Hahnfeld (1):
ALSA: usb-audio: Correct quirk for VF0770
Jordy Zomer (1):
dma-buf: heaps: Fix potential spectre v1 gadget
Kamal Dasu (1):
spi: bcm-qspi: check for valid cs before applying chip select
Lang Yu (1):
mm/kmemleak: avoid scanning potential huge holes
Leon Romanovsky (2):
RDMA/ucma: Protect mc during concurrent multicast leaves RDMA/mlx4: Don't continue event handler after memory allocation failure
Lior Nahmanson (2):
net: macsec: Fix offload support for NETDEV_UNREGISTER event
net: macsec: Verify that send_sci is on when setting Tx sci explicitly
Maor Gottlieb (1):
RDMA/cma: Use correct address when leaving multicast group
Marco Elver (1):
perf: Copy perf_event_attr::sig_data on modification
Mario Limonciello (1):
drm/amd: avoid suspend on dGPUs w/ s2idle support when runtime PM enabled
Mark Brown (3):
ASoC: ops: Reject out of bounds values in snd_soc_put_volsw()
ASoC: ops: Reject out of bounds values in snd_soc_put_volsw_sx()
ASoC: ops: Reject out of bounds values in snd_soc_put_xr_sx()
Mark Rutland (2):
kvm: add guest_state_{enter,exit}_irqoff()
kvm/arm64: rework guest entry logic
Mark Zhang (1):
IB/cm: Release previously acquired reference counter in the cm_id_priv
Martin K. Petersen (1):
block: bio-integrity: Advance seed correctly for larger interval sizes
Miaoqian Lin (2):
spi: meson-spicc: add IRQ check in meson_spicc_probe
ASoC: fsl: Add missing error handling in pcm030_fabric_probe
Mike Marciniszyn (3):
IB/hfi1: Fix AIP early init panic
IB/rdmavt: Validate remote_addr during loopback atomic tests IB/hfi1: Fix tstats alloc and dealloc
Mike Rapoport (1):
mm/pgtable: define pte_index so that preprocessor could recognize it
Minghao Chi (1):
ipc/sem: do not sleep with a spin lock held
Miquel Raynal (4):
net: ieee802154: hwsim: Ensure proper channel selection at probe time
net: ieee802154: mcr20a: Fix lifs/sifs periods
net: ieee802154: ca8210: Stop leaking skb's
net: ieee802154: Return meaningful error codes from the netlink helpers
Muhammad Usama Anjum (2):
selftests/exec: Remove pipe from TEST_GEN_FILES
selftests: futex: Use variable MAKE instead of make
Nathan Chancellor (1):
tools/resolve_btfids: Do not print any commands when building silently
Nick Lopez (1):
drm/nouveau: fix off by one in BIOS boundary checking
Paolo Abeni (1):
mptcp: fix msk traversal in mptcp_nl_cmd_set_flags()
Pasha Tatashin (1):
mm/debug_vm_pgtable: remove pte entry from the page table
Patrice Chotard (1):
spi: stm32-qspi: Update spi registering
Paul Hsieh (1):
drm/amd/display: watermark latencies is not enough on DCN31
Paul Moore (1):
audit: improve audit queue handling when "audit=1" on cmdline
Peter Ujfalusi (1):
ALSA: hda: Skip codec shutdown in case the codec is not registered
Peter Zijlstra (1):
x86/perf: Default set FREEZE_ON_SMI for all
Phil Sutter (1):
netfilter: nft_reject_bridge: Fix for missing reply from prerouting
Qu Wenruo (1):
btrfs: don't start transaction for scrub if the fs is mounted read-only
Ritesh Harjani (2):
ext4: fix error handling in ext4_restore_inline_data()
ext4: fix error handling in ext4_fc_record_modified_inode()
Riwen Lu (1):
rtc: cmos: Evaluate century appropriate
Robert Hancock (2):
ASoC: xilinx: xlnx_formatter_pcm: Make buffer bytes multiple of period bytes
ASoC: simple-card: fix probe failure on platform component
Sasha Neftin (1):
e1000e: Separate ADP board type from TGP
Sergey Shtylyov (2):
EDAC/altera: Fix deferred probing
EDAC/xgene: Fix deferred probing
Shin'ichiro Kawasaki (1):
btrfs: fix deadlock between quota disable and qgroup rescan worker
Srinivas Kandagatla (3):
ASoC: codecs: wcd938x: fix incorrect used of portid
ASoC: codecs: lpass-rx-macro: fix sidetone register offsets
ASoC: codecs: wcd938x: fix return value of mixer put function
Takashi Iwai (3):
ALSA: hda: Fix UAF of leds class devs at unbinding
ALSA: hda: realtek: Fix race at concurrent COEF updates
ALSA: hda: Fix signedness of sscanf() arguments
Tom Rix (1):
ALSA: usb-audio: initialize variables that could ignore errors
Tristan Hume (1):
perf/x86/intel/pt: Fix crash with stop filters in single-range mode
Uday Shankar (1):
nvme-fabrics: fix state check in nvmf_ctlr_matches_baseopts()
Ville Syrjälä (1):
drm/i915: Disable DSB usage for now
Vratislav Bendel (1):
selinux: fix double free of cond_list on error paths
Waiman Long (1):
cgroup/cpuset: Fix "suspicious RCU usage" lockdep warning
Wen Gu (1):
net/smc: Forward wakeup to smc socket waitqueue after fallback
Xin Xiong (1):
spi: uniphier: fix reference count leak in uniphier_spi_probe()
Xin Yin (3):
ext4: prevent used blocks from being allocated during fast commit replay
ext4: modify the logic of ext4_mb_new_blocks_simple
ext4: fix incorrect type issue during replay_del_range
Yang Li (2):
gpio: idt3243x: Fix an ignored error return from platform_get_irq()
gpio: mpc8xxx: Fix an ignored error return from platform_get_irq()
Yannick Vignon (1):
net: stmmac: ensure PTP time register reads are consistent
Yuji Ishikawa (1):
net: stmmac: dwmac-visconti: No change to ETHER_CLOCK_SEL for unexpected speed request.
Łukasz Bartosik (1):
pinctrl: intel: fix unexpected interrupt
Greg Kroah-Hartman
maintainerDocumentation/gpu/todo.rst +0 -21
@@ -311,27 +311,6 @@ Contact: Daniel Vetter, Noralf Tronnes Level: Advanced -Garbage collect fbdev scrolling acceleration --------------------------------------------- - -Scroll acceleration is disabled in fbcon by hard-wiring p->scrollmode = -SCROLL_REDRAW. There's a ton of code this will allow us to remove: - -- lots of code in fbcon.c - -- a bunch of the hooks in fbcon_ops, maybe the remaining hooks could be called - directly instead of the function table (with a switch on p->rotate) - -- fb_copyarea is unused after this, and can be deleted from all drivers - -Note that not all acceleration code can be deleted, since clearing and cursor -support is still accelerated, which might be good candidates for further -deletion projects. - -Contact: Daniel Vetter - -Level: Intermediate - idr_init_base() ---------------
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 21 +SUBLEVEL = 22 EXTRAVERSION = NAME = Trick or Treat
arch/arm64/kvm/arm.c +33 -18
74 lines not on this page · raw message
arch/arm64/kvm/handle_exit.c +8 -0
@@ -226,6 +226,14 @@ int handle_exit(struct kvm_vcpu *vcpu, int exception_index) {struct kvm_run *run = vcpu->run; +if (ARM_SERROR_PENDING (exception_index)) { +/* +* The SError is handled by handle_exit_early(). If the guest +* survives it will re-execute the original instruction. +*/ +return 1 ; + } + exception_index =ARM_EXCEPTION_CODE (exception_index);switch (exception_index) {
arch/arm64/kvm/hyp/include/hyp/switch.h +2 -1
@@ -425,7 +425,8 @@ static inline bool fixup_guest_exit(struct kvm_vcpu *vcpu, u64 *exit_code)if (ARM_EXCEPTION_CODE (*exit_code) !=ARM_EXCEPTION_IRQ ) vcpu->arch.fault.esr_el2 =read_sysreg_el2 (SYS_ESR ); -if (ARM_SERROR_PENDING (*exit_code)) { +if (ARM_SERROR_PENDING (*exit_code) && +ARM_EXCEPTION_CODE (*exit_code) !=ARM_EXCEPTION_IRQ ) {u8 esr_ec =kvm_vcpu_trap_get_class (vcpu);/*
arch/x86/events/intel/core.c +13 -0
@@ -4654,6 +4654,19 @@ static __initconst const struct x86_pmu intel_pmu = { .lbr_read = intel_pmu_lbr_read_64, .lbr_save = intel_pmu_lbr_save, .lbr_restore = intel_pmu_lbr_restore, + +/* +* SMM has access to all 4 rings and while traditionally SMM code only +* ran in CPL0, 2021-era firmware is starting to make use of CPL3 in SMM. +* +* Since the EVENTSEL.{USR,OS} CPL filtering makes no distinction +* between SMM or not, this results in what should be pure userspace +* counters including SMM data. +* +* This is a clear privilege issue, therefore globally disable +* counting SMM by default. +*/ + .attr_freeze_on_smi = 1, };static __init void intel_clovertown_quirk (void )
arch/x86/events/intel/pt.c +3 -2
@@ -897,8 +897,9 @@ static void pt_handle_status(struct pt *pt)* means we are already losing data; need to let the decoder * know. */ -if (!intel_pt_validate_hw_cap (PT_CAP_topa_multiple_entries) || - buf->output_off ==pt_buffer_region_size (buf)) { +if (!buf->single && + (!intel_pt_validate_hw_cap (PT_CAP_topa_multiple_entries) || + buf->output_off ==pt_buffer_region_size (buf))) {perf_aux_output_flag (&pt->handle,PERF_AUX_FLAG_TRUNCATED ); advance++;
block/bio-integrity.c +1 -1
@@ -373,7 +373,7 @@ void bio_integrity_advance(struct bio *bio, unsigned int bytes_done)struct blk_integrity *bi =blk_get_integrity (bio->bi_bdev->bd_disk);unsigned bytes =bio_integrity_bytes (bi, bytes_done >>9 ); - bip->bip_iter.bi_sector += bytes_done >>9 ; + bip->bip_iter.bi_sector +=bio_integrity_intervals (bi, bytes_done >>9 );bvec_iter_advance (bip->bip_vec, &bip->bip_iter, bytes); }
drivers/dma-buf/dma-heap.c +2 -0
@@ -14,6 +14,7 @@#include <linux/xarray.h> #include <linux/list.h> #include <linux/slab.h> +#include <linux/nospec.h> #include <linux/uaccess.h> #include <linux/syscalls.h> #include <linux/dma-heap.h>
@@ -135,6 +136,7 @@ static long dma_heap_ioctl(struct file *file, unsigned int ucmd,if (nr >=ARRAY_SIZE (dma_heap_ioctl_cmds))return -EINVAL ; + nr =array_index_nospec (nr,ARRAY_SIZE (dma_heap_ioctl_cmds));/* Get the kernel ioctl cmd that matches */ kcmd = dma_heap_ioctl_cmds[nr];
drivers/edac/altera_edac.c +1 -1
@@ -350,7 +350,7 @@ static int altr_sdram_probe(struct platform_device *pdev)if (irq <0 ) {edac_printk (KERN_ERR ,EDAC_MC ,"No irq %d in DT\n" , irq); -return -ENODEV ; +return irq; }/* Arria10 has a 2nd IRQ */
drivers/edac/xgene_edac.c +1 -1
@@ -1919,7 +1919,7 @@ static int xgene_edac_probe(struct platform_device *pdev) irq =platform_get_irq_optional (pdev, i);if (irq <0 ) {dev_err (&pdev->dev,"No IRQ resource\n" ); - rc = -EINVAL ; + rc = irq; goto out_err; } rc = devm_request_irq(&pdev->dev, irq,
drivers/gpio/gpio-idt3243x.c +1 -1
@@ -132,7 +132,7 @@ static int idt_gpio_probe(struct platform_device *pdev)struct device *dev = &pdev->dev;struct gpio_irq_chip *girq;struct idt_gpio_ctrl *ctrl; -unsigned int parent_irq; +int parent_irq;int ngpios;int ret;
drivers/gpio/gpio-mpc8xxx.c +1 -1
@@ -47,7 +47,7 @@ struct mpc8xxx_gpio_chip { unsigned offset, int value);struct irq_domain *irq; -unsigned int irqn; +int irqn; };/*
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +1 -2
@@ -1504,8 +1504,7 @@ static int amdgpu_pmops_prepare(struct device *dev)* DPM_FLAG_SMART_SUSPEND works properly */ if (amdgpu_device_supports_boco (drm_dev)) -return pm_runtime_suspended (dev) && -pm_suspend_via_firmware (); +return pm_runtime_suspended (dev);return 0 ; }
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_clk_mgr.c +10 -10
@@ -324,38 +324,38 @@ static struct clk_bw_params dcn31_bw_params = { }; -static struct wm_table ddr4_wm_table = { +static struct wm_table ddr5_wm_table = { .entries = { { .wm_inst =WM_A , .wm_type =WM_TYPE_PSTATE_CHG , .pstate_latency_us =11.72 , - .sr_exit_time_us =6.09 , - .sr_enter_plus_exit_time_us =7.14 , + .sr_exit_time_us =9 , + .sr_enter_plus_exit_time_us =11 , .valid = true, }, { .wm_inst =WM_B , .wm_type =WM_TYPE_PSTATE_CHG , .pstate_latency_us =11.72 , - .sr_exit_time_us =10.12 , - .sr_enter_plus_exit_time_us =11.48 , + .sr_exit_time_us =9 , + .sr_enter_plus_exit_time_us =11 , .valid = true, }, { .wm_inst =WM_C , .wm_type =WM_TYPE_PSTATE_CHG , .pstate_latency_us =11.72 , - .sr_exit_time_us =10.12 , - .sr_enter_plus_exit_time_us =11.48 , + .sr_exit_time_us =9 , + .sr_enter_plus_exit_time_us =11 , .valid = true, }, { .wm_inst =WM_D , .wm_type =WM_TYPE_PSTATE_CHG , .pstate_latency_us =11.72 , - .sr_exit_time_us =10.12 , - .sr_enter_plus_exit_time_us =11.48 , + .sr_exit_time_us =9 , + .sr_enter_plus_exit_time_us =11 , .valid = true, }, }
@@ -683,7 +683,7 @@ void dcn31_clk_mgr_construct(if (ctx->dc_bios->integrated_info->memory_type == LpDdr5MemType) { dcn31_bw_params.wm_table = lpddr5_wm_table; }else { - dcn31_bw_params.wm_table = ddr4_wm_table; + dcn31_bw_params.wm_table = ddr5_wm_table; }/* Saved clocks configured at boot for debug purposes */ dcn31_dump_clk_registers (&clk_mgr->base.base.boot_snapshot, &clk_mgr->base.base, &log_info);
drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c +20 -0
@@ -3913,6 +3913,26 @@ static bool retrieve_link_cap(struct dc_link *link) dp_hw_fw_revision.ieee_fw_rev, sizeof(dp_hw_fw_revision.ieee_fw_rev)); +/* Quirk for Apple MBP 2018 15" Retina panels: wrong DP_MAX_LINK_RATE */ + { +uint8_t str_mbp_2018[] = {101 ,68 ,21 ,103 ,98 ,97 }; +uint8_t fwrev_mbp_2018[] = {7 ,4 }; +uint8_t fwrev_mbp_2018_vega[] = {8 ,4 }; + +/* We also check for the firmware revision as 16,1 models have an +* identical device id and are incorrectly quirked otherwise. +*/ +if ((link->dpcd_caps.sink_dev_id ==0x0010fa ) && + !memcmp (link->dpcd_caps.sink_dev_id_str, str_mbp_2018, +sizeof (str_mbp_2018)) && + (!memcmp (link->dpcd_caps.sink_fw_revision, fwrev_mbp_2018, +sizeof (fwrev_mbp_2018)) || + !memcmp (link->dpcd_caps.sink_fw_revision, fwrev_mbp_2018_vega, +sizeof (fwrev_mbp_2018_vega)))) { + link->reported_link_cap.link_rate =LINK_RATE_RBR2 ; + } + } +memset (&link->dpcd_caps.dsc_caps,'\0' ,sizeof (link->dpcd_caps.dsc_caps));memset (&link->dpcd_caps.fec_cap,'\0' ,sizeof (link->dpcd_caps.fec_cap));
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c +3 -3
@@ -3728,14 +3728,14 @@ static ssize_t sienna_cichlid_get_gpu_metrics(struct smu_context *smu,static int sienna_cichlid_enable_mgpu_fan_boost (struct smu_context *smu) { -struct smu_table_context *table_context = &smu->smu_table; -PPTable_t *smc_pptable = table_context->driver_pptable; +uint16_t *mgpu_fan_boost_limit_rpm; +GET_PPTABLE_MEMBER (MGpuFanBoostLimitRpm, &mgpu_fan_boost_limit_rpm);/* * Skip the MGpuFanBoost setting for those ASICs * which do not support it */ -if (!smc_pptable->MGpuFanBoostLimitRpm) +if (*mgpu_fan_boost_limit_rpm ==0 )return 0 ; return smu_cmn_send_smc_msg_with_param(smu,
drivers/gpu/drm/i915/display/intel_overlay.c +3 -0
@@ -959,6 +959,9 @@ static int check_overlay_dst(struct intel_overlay *overlay,const struct intel_crtc_state *pipe_config = overlay->crtc->config; +if (rec->dst_height ==0 || rec->dst_width ==0 ) +return -EINVAL ; + if (rec->dst_x < pipe_config->pipe_src_w && rec->dst_x + rec->dst_width <= pipe_config->pipe_src_w && rec->dst_y < pipe_config->pipe_src_h &&
drivers/gpu/drm/i915/display/intel_tc.c +2 -1
@@ -291,10 +291,11 @@ static bool icl_tc_phy_status_complete(struct intel_digital_port *dig_port)static bool adl_tc_phy_status_complete (struct intel_digital_port *dig_port) {struct drm_i915_private *i915 =to_i915 (dig_port->base.base.dev); +enum tc_port tc_port =intel_port_to_tc (i915, dig_port->base.port);struct intel_uncore *uncore = &i915->uncore;u32 val; - val =intel_uncore_read (uncore,TCSS_DDI_STATUS (dig_port->tc_phy_fia_idx)); + val =intel_uncore_read (uncore,TCSS_DDI_STATUS (tc_port));if (val ==0xffffffff ) { drm_dbg_kms(&i915->drm, "Port %s: PHY in TCCOLD, assuming not complete\n",
drivers/gpu/drm/i915/i915_pci.c +1 -1
@@ -865,7 +865,7 @@ static const struct intel_device_info jsl_info = { }, \ TGL_CURSOR_OFFSETS, \ .has_global_mocs = 1, \ - .display.has_dsb = 1 + .display.has_dsb = 0 /* FIXME: LUT load is broken with DSB */ static const struct intel_device_info tgl_info = {GEN12_FEATURES ,
drivers/gpu/drm/kmb/kmb_plane.c +0 -6
@@ -158,12 +158,6 @@ static void kmb_plane_atomic_disable(struct drm_plane *plane,case LAYER_1 : kmb->plane_status[plane_id].ctrl =LCD_CTRL_VL2_ENABLE ;break ; -case LAYER_2 : - kmb->plane_status[plane_id].ctrl =LCD_CTRL_GL1_ENABLE ; -break ; -case LAYER_3 : - kmb->plane_status[plane_id].ctrl =LCD_CTRL_GL2_ENABLE ; -break ; } kmb->plane_status[plane_id].disable = true;
drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.c +1 -1
@@ -38,7 +38,7 @@ nvbios_addr(struct nvkm_bios *bios, u32 *addr, u8 size) *addr += bios->imaged_addr; } -if (unlikely (*addr + size >= bios->size)) { +if (unlikely (*addr + size > bios->size)) {nvkm_error (&bios->subdev,"OOB %d %08x %08x\n" , size, p, *addr);return false; }
drivers/infiniband/core/cm.c +1 -1
@@ -3322,7 +3322,7 @@ static int cm_lap_handler(struct cm_work *work) ret =cm_init_av_by_path (param->alternate_path,NULL , &alt_av);if (ret) {rdma_destroy_ah_attr (&ah_attr); -return -EINVAL ; + goto deref; }spin_lock_irq (&cm_id_priv->lock);
drivers/infiniband/core/cma.c +12 -10
@@ -67,8 +67,8 @@ static const char * const cma_events[] = { [RDMA_CM_EVENT_TIMEWAIT_EXIT] = "timewait exit", }; -static void cma_set_mgid (struct rdma_id_private *id_priv,struct sockaddr *addr, -union ib_gid *mgid); +static void cma_iboe_set_mgid (struct sockaddr *addr,union ib_gid *mgid, +enum ib_gid_type gid_type); const char *__attribute_const__ rdma_event_msg(enum rdma_cm_event_type event) {
@@ -1844,17 +1844,19 @@ static void destroy_mc(struct rdma_id_private *id_priv,if (dev_addr->bound_dev_if) ndev =dev_get_by_index (dev_addr->net, dev_addr->bound_dev_if); -if (ndev) { +if (ndev && !send_only) { +enum ib_gid_type gid_type;union ib_gid mgid; -cma_set_mgid (id_priv, (struct sockaddr *)&mc->addr, - &mgid); - -if (!send_only) -cma_igmp_send (ndev, &mgid, false); - -dev_put (ndev); + gid_type = id_priv->cma_dev->default_gid_type + [id_priv->id.port_num - +rdma_start_port ( + id_priv->cma_dev->device)]; +cma_iboe_set_mgid ((struct sockaddr *)&mc->addr, &mgid, + gid_type); +cma_igmp_send (ndev, &mgid, false); } +dev_put (ndev);cancel_work_sync (&mc->iboe_join.work); }
drivers/infiniband/core/ucma.c +23 -11
@@ -95,6 +95,7 @@ struct ucma_context {u64 uid;struct list_head list; +struct list_head mc_list;struct work_struct close_work; };
@@ -105,6 +106,7 @@ struct ucma_multicast {u64 uid;u8 join_state; +struct list_head list;struct sockaddr_storage addr; };
@@ -198,6 +200,7 @@ static struct ucma_context *ucma_alloc_ctx(struct ucma_file *file)INIT_WORK (&ctx->close_work, ucma_close_id);init_completion (&ctx->comp); +INIT_LIST_HEAD (&ctx->mc_list);/* So list_del() will work if we don't do ucma_finish_ctx() */ INIT_LIST_HEAD (&ctx->list); ctx->file = file;
@@ -484,19 +487,19 @@ static ssize_t ucma_create_id(struct ucma_file *file, const char __user *inbuf,static void ucma_cleanup_multicast (struct ucma_context *ctx) { -struct ucma_multicast *mc; -unsigned long index; +struct ucma_multicast *mc, *tmp; -xa_for_each (&multicast_table, index, mc) { -if (mc->ctx != ctx) -continue ; +xa_lock (&multicast_table); +list_for_each_entry_safe (mc, tmp, &ctx->mc_list, list) { +list_del (&mc->list);/* * At this point mc->ctx->ref is 0 so the mc cannot leave the * lock on the reader and this is enough serialization */ -xa_erase (&multicast_table, index); +__xa_erase (&multicast_table, mc->id);kfree (mc); } +xa_unlock (&multicast_table); }static void ucma_cleanup_mc_events (struct ucma_multicast *mc)
@@ -1469,12 +1472,16 @@ static ssize_t ucma_process_join(struct ucma_file *file, mc->uid = cmd->uid;memcpy (&mc->addr, addr, cmd->addr_size); -if (xa_alloc (&multicast_table, &mc->id,NULL , xa_limit_32b, +xa_lock (&multicast_table); +if (__xa_alloc (&multicast_table, &mc->id,NULL , xa_limit_32b,GFP_KERNEL )) { ret = -ENOMEM ; goto err_free_mc; } +list_add_tail (&mc->list, &ctx->mc_list); +xa_unlock (&multicast_table); +mutex_lock (&ctx->mutex); ret =rdma_join_multicast (ctx->cm_id, (struct sockaddr *)&mc->addr, join_state, mc);
@@ -1500,8 +1507,11 @@ static ssize_t ucma_process_join(struct ucma_file *file,mutex_unlock (&ctx->mutex);ucma_cleanup_mc_events (mc); err_xa_erase: -xa_erase (&multicast_table, mc->id); +xa_lock (&multicast_table); +list_del (&mc->list); +__xa_erase (&multicast_table, mc->id); err_free_mc: +xa_unlock (&multicast_table);kfree (mc); err_put_ctx:ucma_put_ctx (ctx);
@@ -1569,15 +1579,17 @@ static ssize_t ucma_leave_multicast(struct ucma_file *file, mc =ERR_PTR (-EINVAL ); else if (!refcount_inc_not_zero(&mc->ctx->ref)) mc =ERR_PTR (-ENXIO ); - else - __xa_erase(&multicast_table, mc->id); -xa_unlock (&multicast_table);if (IS_ERR (mc)) { +xa_unlock (&multicast_table); ret =PTR_ERR (mc); goto out; } +list_del (&mc->list); +__xa_erase (&multicast_table, mc->id); +xa_unlock (&multicast_table); +mutex_lock (&mc->ctx->mutex);rdma_leave_multicast (mc->ctx->cm_id, (struct sockaddr *) &mc->addr);mutex_unlock (&mc->ctx->mutex);
drivers/infiniband/hw/hfi1/ipoib_main.c +15 -12
@@ -22,26 +22,35 @@ static int hfi1_ipoib_dev_init(struct net_device *dev)int ret; dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats); +if (!dev->tstats) +return -ENOMEM ; ret = priv->netdev_ops->ndo_init (dev);if (ret) -return ret; + goto out_ret; ret =hfi1_netdev_add_data (priv->dd,qpn_from_mac (priv->netdev->dev_addr), dev);if (ret <0 ) { priv->netdev_ops->ndo_uninit (dev); -return ret; + goto out_ret; }return 0 ; +out_ret: +free_percpu (dev->tstats); + dev->tstats =NULL ; +return ret; }static void hfi1_ipoib_dev_uninit (struct net_device *dev) {struct hfi1_ipoib_dev_priv *priv =hfi1_ipoib_priv (dev); +free_percpu (dev->tstats); + dev->tstats =NULL ; +hfi1_netdev_remove_data (priv->dd,qpn_from_mac (priv->netdev->dev_addr)); priv->netdev_ops->ndo_uninit (dev);
@@ -166,12 +175,7 @@ static void hfi1_ipoib_netdev_dtor(struct net_device *dev)hfi1_ipoib_rxq_deinit (priv->netdev);free_percpu (dev->tstats); -} - -static void hfi1_ipoib_free_rdma_netdev (struct net_device *dev) -{ -hfi1_ipoib_netdev_dtor (dev); -free_netdev (dev); + dev->tstats =NULL ; }static void hfi1_ipoib_set_id (struct net_device *dev,int id)
@@ -211,24 +215,23 @@ static int hfi1_ipoib_setup_rn(struct ib_device *device, priv->port_num = port_num; priv->netdev_ops = netdev->netdev_ops; - netdev->netdev_ops = &hfi1_ipoib_netdev_ops; -ib_query_pkey (device, port_num, priv->pkey_index, &priv->pkey); rc =hfi1_ipoib_txreq_init (priv);if (rc) {dd_dev_err (dd,"IPoIB netdev TX init - failed(%d)\n" , rc); -hfi1_ipoib_free_rdma_netdev (netdev);return rc; } rc =hfi1_ipoib_rxq_init (netdev);if (rc) {dd_dev_err (dd,"IPoIB netdev RX init - failed(%d)\n" , rc); -hfi1_ipoib_free_rdma_netdev (netdev); +hfi1_ipoib_txreq_deinit (priv);return rc; } + netdev->netdev_ops = &hfi1_ipoib_netdev_ops; + netdev->priv_destructor = hfi1_ipoib_netdev_dtor; netdev->needs_free_netdev = true;
drivers/infiniband/hw/mlx4/main.c +1 -1
@@ -3249,7 +3249,7 @@ static void mlx4_ib_event(struct mlx4_dev *dev, void *ibdev_ptr,case MLX4_DEV_EVENT_PORT_MGMT_CHANGE : ew =kmalloc (sizeof *ew,GFP_ATOMIC );if (!ew) -break ; +return ;INIT_WORK (&ew->work, handle_port_mgmt_change_event);memcpy (&ew->ib_eqe, eqe,sizeof *eqe);
drivers/infiniband/sw/rdmavt/qp.c +2 -0
@@ -3073,6 +3073,8 @@ void rvt_ruc_loopback(struct rvt_qp *sqp)case IB_WR_ATOMIC_FETCH_AND_ADD :if (unlikely (!(qp->qp_access_flags &IB_ACCESS_REMOTE_ATOMIC ))) goto inv_err; +if (unlikely (wqe->atomic_wr.remote_addr & (sizeof (u64) -1 ))) + goto inv_err; if (unlikely(!rvt_rkey_ok(qp, &qp->r_sge.sge, sizeof(u64), wqe->atomic_wr.remote_addr, wqe->atomic_wr.rkey,
drivers/infiniband/sw/siw/siw.h +1 -6
@@ -644,14 +644,9 @@ static inline struct siw_sqe *orq_get_current(struct siw_qp *qp)return &qp->orq[qp->orq_get % qp->attrs.orq_size]; } -static inline struct siw_sqe *orq_get_tail (struct siw_qp *qp) -{ -return &qp->orq[qp->orq_put % qp->attrs.orq_size]; -} -static inline struct siw_sqe *orq_get_free (struct siw_qp *qp) { -struct siw_sqe *orq_e =orq_get_tail (qp); +struct siw_sqe *orq_e = &qp->orq[qp->orq_put % qp->attrs.orq_size];if (READ_ONCE (orq_e->flags) ==0 )return orq_e;
drivers/infiniband/sw/siw/siw_qp_rx.c +11 -9
@@ -1153,11 +1153,12 @@ static int siw_check_tx_fence(struct siw_qp *qp)spin_lock_irqsave (&qp->orq_lock, flags); - rreq =orq_get_current (qp); -/* free current orq entry */ + rreq =orq_get_current (qp);WRITE_ONCE (rreq->flags,0 ); + qp->orq_get++; +if (qp->tx_ctx.orq_fence) {if (unlikely (tx_waiting->wr_status !=SIW_WR_QUEUED )) { pr_warn("siw: [QP %u]: fence resume: bad status %d\n",
@@ -1165,10 +1166,12 @@ static int siw_check_tx_fence(struct siw_qp *qp) rv = -EPROTO ; goto out; } -/* resume SQ processing */ +/* resume SQ processing, if possible */ if (tx_waiting->sqe.opcode ==SIW_OP_READ || tx_waiting->sqe.opcode ==SIW_OP_READ_LOCAL_INV ) { - rreq =orq_get_tail (qp); + +/* SQ processing was stopped because of a full ORQ */ + rreq =orq_get_free (qp);if (unlikely (!rreq)) {pr_warn ("siw: [QP %u]: no ORQE\n" ,qp_id (qp)); rv = -EPROTO ;
@@ -1181,15 +1184,14 @@ static int siw_check_tx_fence(struct siw_qp *qp) resume_tx =1 ; }else if (siw_orq_empty (qp)) { +/* +* SQ processing was stopped by fenced work request. +* Resume since all previous Read's are now completed. +*/ qp->tx_ctx.orq_fence =0 ; resume_tx =1 ; - }else { -pr_warn ("siw: [QP %u]: fence resume: orq idx: %d:%d\n" , -qp_id (qp), qp->orq_get, qp->orq_put); - rv = -EPROTO ; } } - qp->orq_get++; out:spin_unlock_irqrestore (&qp->orq_lock, flags);
drivers/infiniband/sw/siw/siw_verbs.c +2 -1
@@ -311,7 +311,8 @@ int siw_create_qp(struct ib_qp *ibqp, struct ib_qp_init_attr *attrs,if (atomic_inc_return (&sdev->num_qp) >SIW_MAX_QP ) {siw_dbg (base_dev,"too many QP's\n" ); -return -ENOMEM ; + rv = -ENOMEM ; + goto err_atomic; }if (attrs->qp_type !=IB_QPT_RC ) {siw_dbg (base_dev,"only RC QP's supported\n" );
drivers/iommu/amd/init.c +2 -0
@@ -21,6 +21,7 @@#include <linux/export.h> #include <linux/kmemleak.h> #include <linux/mem_encrypt.h> +#include <linux/iopoll.h> #include <asm/pci-direct.h> #include <asm/iommu.h> #include <asm/apic.h>
@@ -832,6 +833,7 @@ static int iommu_ga_log_enable(struct amd_iommu *iommu) status =readl (iommu->mmio_base +MMIO_STATUS_OFFSET );if (status & (MMIO_STATUS_GALOG_RUN_MASK ))break ; +udelay (10 ); }if (WARN_ON (i >=LOOP_TIMEOUT ))
drivers/iommu/intel/irq_remapping.c +10 -3
@@ -569,9 +569,8 @@ static int intel_setup_irq_remapping(struct intel_iommu *iommu) fn, &intel_ir_domain_ops, iommu);if (!iommu->ir_domain) { -irq_domain_free_fwnode (fn);pr_err ("IR%d: failed to allocate irqdomain\n" , iommu->seq_id); - goto out_free_bitmap; + goto out_free_fwnode; } iommu->ir_msi_domain = arch_create_remap_msi_irq_domain(iommu->ir_domain,
@@ -595,7 +594,7 @@ static int intel_setup_irq_remapping(struct intel_iommu *iommu)if (dmar_enable_qi (iommu)) {pr_err ("Failed to enable queued invalidation\n" ); - goto out_free_bitmap; + goto out_free_ir_domain; } }
@@ -619,6 +618,14 @@ static int intel_setup_irq_remapping(struct intel_iommu *iommu)return 0 ; +out_free_ir_domain: +if (iommu->ir_msi_domain) +irq_domain_remove (iommu->ir_msi_domain); + iommu->ir_msi_domain =NULL ; +irq_domain_remove (iommu->ir_domain); + iommu->ir_domain =NULL ; +out_free_fwnode: +irq_domain_free_fwnode (fn); out_free_bitmap:bitmap_free (bitmap); out_free_pages:
drivers/net/dsa/Kconfig +1 -0
@@ -36,6 +36,7 @@ config NET_DSA_LANTIQ_GSWIP config NET_DSA_MT7530 tristate "MediaTek MT753x and MT7621 Ethernet switch support" select NET_DSA_TAG_MTK + select MEDIATEK_GE_PHY help This enables support for the MediaTek MT7530, MT7531, and MT7621 Ethernet switch chips.
drivers/net/ethernet/google/gve/gve_adminq.c +1 -1
@@ -281,7 +281,7 @@ static int gve_adminq_parse_err(struct gve_priv *priv, u32 status)*/ static int gve_adminq_kick_and_wait (struct gve_priv *priv) { -u32 tail, head; +int tail, head;int i; tail =ioread32be (&priv->reg_bar0->adminq_event_counter);
drivers/net/ethernet/intel/e1000e/e1000.h +3 -1
@@ -114,7 +114,8 @@ enum e1000_boards { board_pch_lpt, board_pch_spt, board_pch_cnp, - board_pch_tgp + board_pch_tgp, + board_pch_adp }; struct e1000_ps_page {
@@ -501,6 +502,7 @@ extern const struct e1000_info e1000_pch_lpt_info;extern const struct e1000_info e1000_pch_spt_info;extern const struct e1000_info e1000_pch_cnp_info;extern const struct e1000_info e1000_pch_tgp_info; +extern const struct e1000_info e1000_pch_adp_info;extern const struct e1000_info e1000_es2_info;void e1000e_ptp_init (struct e1000_adapter *adapter);
drivers/net/ethernet/intel/e1000e/ich8lan.c +20 -0
@@ -6021,3 +6021,23 @@ const struct e1000_info e1000_pch_tgp_info = { .phy_ops = &ich8_phy_ops, .nvm_ops = &spt_nvm_ops, }; + +const struct e1000_info e1000_pch_adp_info = { + .mac = e1000_pch_adp, + .flags =FLAG_IS_ICH + |FLAG_HAS_WOL + |FLAG_HAS_HW_TIMESTAMP + |FLAG_HAS_CTRLEXT_ON_LOAD + |FLAG_HAS_AMT + |FLAG_HAS_FLASH + |FLAG_HAS_JUMBO_FRAMES + |FLAG_APME_IN_WUC , + .flags2 =FLAG2_HAS_PHY_STATS + |FLAG2_HAS_EEE , + .pba =26 , + .max_hw_frame_size =9022 , + .get_variants = e1000_get_variants_ich8lan, + .mac_ops = &ich8_mac_ops, + .phy_ops = &ich8_phy_ops, + .nvm_ops = &spt_nvm_ops, +};
drivers/net/ethernet/intel/e1000e/netdev.c +17 -16
@@ -52,6 +52,7 @@ static const struct e1000_info *e1000_info_tbl[] = { [board_pch_spt] = &e1000_pch_spt_info, [board_pch_cnp] = &e1000_pch_cnp_info, [board_pch_tgp] = &e1000_pch_tgp_info, + [board_pch_adp] = &e1000_pch_adp_info, };struct e1000_reg_info {
@@ -7905,22 +7906,22 @@ static const struct pci_device_id e1000_pci_tbl[] = { { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_TGP_I219_V14), board_pch_tgp }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_TGP_I219_LM15), board_pch_tgp }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_TGP_I219_V15), board_pch_tgp }, - { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_RPL_I219_LM23), board_pch_tgp }, - { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_RPL_I219_V23), board_pch_tgp }, - { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_ADP_I219_LM16), board_pch_tgp }, - { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_ADP_I219_V16), board_pch_tgp }, - { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_ADP_I219_LM17), board_pch_tgp }, - { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_ADP_I219_V17), board_pch_tgp }, - { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_RPL_I219_LM22), board_pch_tgp }, - { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_RPL_I219_V22), board_pch_tgp }, - { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_MTP_I219_LM18), board_pch_tgp }, - { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_MTP_I219_V18), board_pch_tgp }, - { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_MTP_I219_LM19), board_pch_tgp }, - { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_MTP_I219_V19), board_pch_tgp }, - { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_LNP_I219_LM20), board_pch_tgp }, - { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_LNP_I219_V20), board_pch_tgp }, - { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_LNP_I219_LM21), board_pch_tgp }, - { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_LNP_I219_V21), board_pch_tgp }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_RPL_I219_LM23), board_pch_adp }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_RPL_I219_V23), board_pch_adp }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_ADP_I219_LM16), board_pch_adp }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_ADP_I219_V16), board_pch_adp }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_ADP_I219_LM17), board_pch_adp }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_ADP_I219_V17), board_pch_adp }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_RPL_I219_LM22), board_pch_adp }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_RPL_I219_V22), board_pch_adp }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_MTP_I219_LM18), board_pch_adp }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_MTP_I219_V18), board_pch_adp }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_MTP_I219_LM19), board_pch_adp }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_MTP_I219_V19), board_pch_adp }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_LNP_I219_LM20), board_pch_adp }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_LNP_I219_V20), board_pch_adp }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_LNP_I219_LM21), board_pch_adp }, + { PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_LNP_I219_V21), board_pch_adp }, { 0, 0, 0, 0, 0, 0, 0 } /* terminate list */ };
drivers/net/ethernet/stmicro/stmmac/dwmac-visconti.c +7 -2
@@ -49,13 +49,15 @@ struct visconti_eth {void __iomem *reg;u32 phy_intf_sel;struct clk *phy_ref_clk; +struct device *dev;spinlock_t lock;/* lock to protect register update */ };static void visconti_eth_fix_mac_speed (void *priv,unsigned int speed) {struct visconti_eth *dwmac = priv; -unsigned int val, clk_sel_val; +struct net_device *netdev =dev_get_drvdata (dwmac->dev); +unsigned int val, clk_sel_val =0 ;unsigned long flags;spin_lock_irqsave (&dwmac->lock, flags);
@@ -85,7 +87,9 @@ static void visconti_eth_fix_mac_speed(void *priv, unsigned int speed)break ;default :/* No bit control */ -break ; +netdev_err (netdev,"Unsupported speed request (%d)" , speed); +spin_unlock_irqrestore (&dwmac->lock, flags); +return ; }writel (val, dwmac->reg +MAC_CTRL_REG );
@@ -230,6 +234,7 @@ static int visconti_eth_dwmac_probe(struct platform_device *pdev)spin_lock_init (&dwmac->lock); dwmac->reg = stmmac_res.addr; + dwmac->dev = &pdev->dev; plat_dat->bsp_priv = dwmac; plat_dat->fix_mac_speed = visconti_eth_fix_mac_speed;
drivers/net/ethernet/stmicro/stmmac/dwmac_dma.h +1 -0
@@ -150,6 +150,7 @@#define NUM_DWMAC100_DMA_REGS 9#define NUM_DWMAC1000_DMA_REGS 23 +#define NUM_DWMAC4_DMA_REGS 27void dwmac_enable_dma_transmission (void __iomem *ioaddr);void dwmac_enable_dma_irq (void __iomem *ioaddr,u32 chan,bool rx,bool tx);
drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c +17 -2
@@ -21,10 +21,18 @@#include "dwxgmac2.h" #define REG_SPACE_SIZE 0x1060 +#define GMAC4_REG_SPACE_SIZE 0x116C#define MAC100_ETHTOOL_NAME "st_mac100"#define GMAC_ETHTOOL_NAME "st_gmac"#define XGMAC_ETHTOOL_NAME "st_xgmac" +/* Same as DMA_CHAN_BASE_ADDR defined in dwmac4_dma.h +* +* It is here because dwmac_dma.h and dwmac4_dam.h can not be included at the +* same time due to the conflicting macro names. +*/ +#define GMAC4_DMA_CHAN_BASE_ADDR 0x00001100 +#define ETHTOOL_DMA_OFFSET 55struct stmmac_stats {
@@ -435,6 +443,8 @@ static int stmmac_ethtool_get_regs_len(struct net_device *dev)if (priv->plat->has_xgmac)return XGMAC_REGSIZE *4 ; +else if (priv->plat->has_gmac4) +return GMAC4_REG_SPACE_SIZE ;return REG_SPACE_SIZE ; }
@@ -447,8 +457,13 @@ static void stmmac_ethtool_gregs(struct net_device *dev,stmmac_dump_mac_regs (priv, priv->hw, reg_space);stmmac_dump_dma_regs (priv, priv->ioaddr, reg_space); -if (!priv->plat->has_xgmac) { -/* Copy DMA registers to where ethtool expects them */ +/* Copy DMA registers to where ethtool expects them */ +if (priv->plat->has_gmac4) { +/* GMAC4 dumps its DMA registers at its DMA_CHAN_BASE_ADDR */ +memcpy (®_space[ETHTOOL_DMA_OFFSET ], + ®_space[GMAC4_DMA_CHAN_BASE_ADDR /4 ], +NUM_DWMAC4_DMA_REGS *4 ); + }else if (!priv->plat->has_xgmac) {memcpy (®_space[ETHTOOL_DMA_OFFSET ], ®_space[DMA_BUS_MODE /4 ],NUM_DWMAC1000_DMA_REGS *4 );
drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c +12 -7
@@ -145,15 +145,20 @@ static int adjust_systime(void __iomem *ioaddr, u32 sec, u32 nsec,static void get_systime (void __iomem *ioaddr,u64 *systime) { -u64 ns; - -/* Get the TSSS value */ - ns =readl (ioaddr +PTP_STNSR ); -/* Get the TSS and convert sec time value to nanosecond */ - ns +=readl (ioaddr +PTP_STSR ) *1000000000ULL ; +u64 ns, sec0, sec1; + +/* Get the TSS value */ + sec1 =readl_relaxed (ioaddr +PTP_STSR ); +do { + sec0 = sec1; +/* Get the TSSS value */ + ns =readl_relaxed (ioaddr +PTP_STNSR ); +/* Get the TSS value */ + sec1 =readl_relaxed (ioaddr +PTP_STSR ); + }while (sec0 != sec1);if (systime) - *systime = ns; + *systime = ns + (sec1 *1000000000ULL ); }static void get_ptptime (void __iomem *ptpaddr,u64 *ptp_time)
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +4 -2
@@ -7120,6 +7120,10 @@ int stmmac_dvr_remove(struct device *dev)netdev_info (priv->dev,"%s: removing driver" , __func__); +pm_runtime_get_sync (dev); +pm_runtime_disable (dev); +pm_runtime_put_noidle (dev); +stmmac_stop_all_dma (priv);stmmac_mac_set (priv, priv->ioaddr, false);netif_carrier_off (ndev);
@@ -7138,8 +7142,6 @@ int stmmac_dvr_remove(struct device *dev)if (priv->plat->stmmac_rst)reset_control_assert (priv->plat->stmmac_rst);reset_control_assert (priv->plat->stmmac_ahb_rst); -pm_runtime_put (dev); -pm_runtime_disable (dev);if (priv->hw->pcs !=STMMAC_PCS_TBI && priv->hw->pcs !=STMMAC_PCS_RTBI )stmmac_mdio_unregister (ndev);
drivers/net/ieee802154/ca8210.c +1 -0
@@ -1771,6 +1771,7 @@ static int ca8210_async_xmit_complete(status );if (status !=MAC_TRANSACTION_OVERFLOW ) { +dev_kfree_skb_any (priv->tx_skb);ieee802154_wake_queue (priv->hw);return 0 ; }
drivers/net/ieee802154/mac802154_hwsim.c +1 -0
@@ -786,6 +786,7 @@ static int hwsim_add_one(struct genl_info *info, struct device *dev, goto err_pib; } + pib->channel =13 ;rcu_assign_pointer (phy->pib, pib); phy->idx = idx;INIT_LIST_HEAD (&phy->edges);
drivers/net/ieee802154/mcr20a.c +2 -2
@@ -976,8 +976,8 @@ static void mcr20a_hw_setup(struct mcr20a_local *lp)dev_dbg (printdev (lp),"%s\n" , __func__); phy->symbol_duration =16 ; - phy->lifs_period =40 ; - phy->sifs_period =12 ; + phy->lifs_period =40 * phy->symbol_duration; + phy->sifs_period =12 * phy->symbol_duration; hw->flags =IEEE802154_HW_TX_OMIT_CKSUM | IEEE802154_HW_AFILT |
drivers/net/macsec.c +21 -12
@@ -3870,6 +3870,18 @@ static void macsec_common_dellink(struct net_device *dev, struct list_head *headstruct macsec_dev *macsec =macsec_priv (dev);struct net_device *real_dev = macsec->real_dev; +/* If h/w offloading is available, propagate to the device */ +if (macsec_is_offloaded (macsec)) { +const struct macsec_ops *ops; +struct macsec_context ctx; + + ops =macsec_get_ops (netdev_priv (dev), &ctx); +if (ops) { + ctx.secy = &macsec->secy; +macsec_offload (ops->mdo_del_secy, &ctx); + } + } +unregister_netdevice_queue (dev, head);list_del_rcu (&macsec->secys);macsec_del_dev (macsec);
@@ -3884,18 +3896,6 @@ static void macsec_dellink(struct net_device *dev, struct list_head *head)struct net_device *real_dev = macsec->real_dev;struct macsec_rxh_data *rxd =macsec_data_rtnl (real_dev); -/* If h/w offloading is available, propagate to the device */ -if (macsec_is_offloaded (macsec)) { -const struct macsec_ops *ops; -struct macsec_context ctx; - - ops =macsec_get_ops (netdev_priv (dev), &ctx); -if (ops) { - ctx.secy = &macsec->secy; -macsec_offload (ops->mdo_del_secy, &ctx); - } - } -macsec_common_dellink (dev, head);if (list_empty (&rxd->secys)) {
@@ -4018,6 +4018,15 @@ static int macsec_newlink(struct net *net, struct net_device *dev, !macsec_check_offload(macsec->offload, macsec))return -EOPNOTSUPP ; +/* send_sci must be set to true when transmit sci explicitly is set */ +if ((data && data[IFLA_MACSEC_SCI ]) && + (data && data[IFLA_MACSEC_INC_SCI ])) { +u8 send_sci = !!nla_get_u8 (data[IFLA_MACSEC_INC_SCI ]); + +if (!send_sci) +return -EINVAL ; + } +if (data && data[IFLA_MACSEC_ICV_LEN ]) icv_len =nla_get_u8 (data[IFLA_MACSEC_ICV_LEN ]); mtu = real_dev->mtu - icv_len -macsec_extra_len (true);
drivers/nvme/host/fabrics.h +1 -0
@@ -169,6 +169,7 @@ nvmf_ctlr_matches_baseopts(struct nvme_ctrl *ctrl, struct nvmf_ctrl_options *opts) { if (ctrl->state == NVME_CTRL_DELETING || + ctrl->state == NVME_CTRL_DELETING_NOIO || ctrl->state == NVME_CTRL_DEAD || strcmp(opts->subsysnqn, ctrl->opts->subsysnqn) || strcmp(opts->host->nqn, ctrl->opts->host->nqn) ||
drivers/pinctrl/bcm/pinctrl-bcm2835.c +15 -8
@@ -1263,16 +1263,18 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev)sizeof (*girq->parents), GFP_KERNEL);if (!girq->parents) { -pinctrl_remove_gpio_range (pc->pctl_dev, &pc->gpio_range); -return -ENOMEM ; + err = -ENOMEM ; + goto out_remove; }if (is_7211) { pc->wake_irq =devm_kcalloc (dev,BCM2835_NUM_IRQS ,sizeof (*pc->wake_irq),GFP_KERNEL ); -if (!pc->wake_irq) -return -ENOMEM ; +if (!pc->wake_irq) { + err = -ENOMEM ; + goto out_remove; + } }/*
@@ -1300,8 +1302,10 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev) len =strlen (dev_name (pc->dev)) +16 ; name =devm_kzalloc (pc->dev, len,GFP_KERNEL ); -if (!name) -return -ENOMEM ; +if (!name) { + err = -ENOMEM ; + goto out_remove; + }snprintf (name, len,"%s:bank%d" ,dev_name (pc->dev), i);
@@ -1320,11 +1324,14 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev) err =gpiochip_add_data (&pc->gpio_chip, pc);if (err) {dev_err (dev,"could not add GPIO chip\n" ); -pinctrl_remove_gpio_range (pc->pctl_dev, &pc->gpio_range); -return err; + goto out_remove; }return 0 ; + +out_remove: +pinctrl_remove_gpio_range (pc->pctl_dev, &pc->gpio_range); +return err; }static struct platform_driver bcm2835_pinctrl_driver = {
drivers/pinctrl/intel/pinctrl-intel.c +36 -28
100 lines not on this page · raw message
drivers/pinctrl/sunxi/pinctrl-sun50i-h616.c +4 -4
@@ -363,16 +363,16 @@ static const struct sunxi_desc_pin h616_pins[] = { SUNXI_FUNCTION(0x0, "gpio_in"), SUNXI_FUNCTION(0x1, "gpio_out"), SUNXI_FUNCTION(0x2, "uart2"), /* CTS */ - SUNXI_FUNCTION(0x3, "i2s3"), /* DO0 */ + SUNXI_FUNCTION(0x3, "i2s3_dout0"), /* DO0 */ SUNXI_FUNCTION(0x4, "spi1"), /* MISO */ - SUNXI_FUNCTION(0x5, "i2s3"), /* DI1 */ + SUNXI_FUNCTION(0x5, "i2s3_din1"), /* DI1 */ SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 8)), /* PH_EINT8 */SUNXI_PIN (SUNXI_PINCTRL_PIN (H ,9 ),SUNXI_FUNCTION (0x0 ,"gpio_in" ),SUNXI_FUNCTION (0x1 ,"gpio_out" ), -SUNXI_FUNCTION (0x3 ,"i2s3" ),/* DI0 */ +SUNXI_FUNCTION (0x3 ,"i2s3_din0" ),/* DI0 */ SUNXI_FUNCTION (0x4 ,"spi1" ),/* CS1 */ -SUNXI_FUNCTION (0x3 ,"i2s3" ),/* DO1 */ +SUNXI_FUNCTION (0x5 ,"i2s3_dout1" ),/* DO1 */ SUNXI_FUNCTION_IRQ_BANK (0x6 ,6 ,9 )),/* PH_EINT9 */ SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 10), SUNXI_FUNCTION(0x0, "gpio_in"),
drivers/rtc/rtc-mc146818-lib.c +1 -1
@@ -104,7 +104,7 @@ unsigned int mc146818_get_time(struct rtc_time *time) time->tm_year += real_year -72 ;#endif -if (century >20 ) +if (century >19 ) time->tm_year += (century -19 ) *100 ;/*
drivers/scsi/bnx2fc/bnx2fc_fcoe.c +13 -8
@@ -508,7 +508,8 @@ static int bnx2fc_l2_rcv_thread(void *arg)static void bnx2fc_recv_frame (struct sk_buff *skb) { -u32 fr_len; +u64 crc_err; +u32 fr_len, fr_crc;struct fc_lport *lport;struct fcoe_rcv_info *fr;struct fc_stats *stats;
@@ -542,6 +543,11 @@ static void bnx2fc_recv_frame(struct sk_buff *skb)skb_pull (skb,sizeof (struct fcoe_hdr )); fr_len = skb->len -sizeof (struct fcoe_crc_eof ); + stats =per_cpu_ptr (lport->stats,get_cpu ()); + stats->RxFrames++; + stats->RxWords += fr_len /FCOE_WORD_TO_BYTE ; +put_cpu (); + fp = (struct fc_frame *)skb;fc_frame_init (fp);fr_dev (fp) = lport;
@@ -624,16 +630,15 @@ static void bnx2fc_recv_frame(struct sk_buff *skb)return ; } - stats =per_cpu_ptr (lport->stats,smp_processor_id ()); - stats->RxFrames++; - stats->RxWords += fr_len /FCOE_WORD_TO_BYTE ; + fr_crc =le32_to_cpu (fr_crc (fp)); -if (le32_to_cpu (fr_crc (fp)) != - ~crc32 (~0 , skb->data, fr_len)) { -if (stats->InvalidCRCCount <5 ) +if (unlikely (fr_crc != ~crc32 (~0 , skb->data, fr_len))) { + stats =per_cpu_ptr (lport->stats,get_cpu ()); + crc_err = (stats->InvalidCRCCount++); +put_cpu (); +if (crc_err <5 ) printk(KERN_WARNING PFX "dropping frame with ""CRC error\n" ); - stats->InvalidCRCCount++;kfree_skb (skb);return ; }
drivers/soc/mediatek/mtk-scpsys.c +4 -11
@@ -411,17 +411,12 @@ static int scpsys_power_off(struct generic_pm_domain *genpd)return ret; } -static int init_clks (struct platform_device *pdev,struct clk **clk) +static void init_clks (struct platform_device *pdev,struct clk **clk) {int i; -for (i =CLK_NONE +1 ; i <CLK_MAX ; i++) { +for (i =CLK_NONE +1 ; i <CLK_MAX ; i++) clk[i] =devm_clk_get (&pdev->dev, clk_names[i]); -if (IS_ERR (clk[i])) -return PTR_ERR (clk[i]); - } - -return 0 ; } static struct scp *init_scp(struct platform_device *pdev,
@@ -431,7 +426,7 @@ static struct scp *init_scp(struct platform_device *pdev, {struct genpd_onecell_data *pd_data;struct resource *res; -int i, j, ret; +int i, j;struct scp *scp;struct clk *clk[CLK_MAX ];
@@ -486,9 +481,7 @@ static struct scp *init_scp(struct platform_device *pdev, pd_data->num_domains = num; - ret =init_clks (pdev, clk); -if (ret) -return ERR_PTR (ret); +init_clks (pdev, clk);for (i =0 ; i < num; i++) {struct scp_domain *scpd = &scp->domains[i];
drivers/spi/spi-bcm-qspi.c +1 -1
@@ -552,7 +552,7 @@ static void bcm_qspi_chip_select(struct bcm_qspi *qspi, int cs)u32 rd =0 ;u32 wr =0 ; -if (qspi->base[CHIP_SELECT ]) { +if (cs >=0 && qspi->base[CHIP_SELECT ]) { rd =bcm_qspi_read (qspi,CHIP_SELECT ,0 ); wr = (rd & ~0xff ) | (1 << cs);if (rd == wr)
drivers/spi/spi-meson-spicc.c +5 -0
@@ -693,6 +693,11 @@ static int meson_spicc_probe(struct platform_device *pdev)writel_relaxed (0 , spicc->base +SPICC_INTREG ); irq =platform_get_irq (pdev,0 ); +if (irq <0 ) { + ret = irq; + goto out_master; + } + ret =devm_request_irq (&pdev->dev, irq, meson_spicc_irq,0 ,NULL , spicc);if (ret) {
drivers/spi/spi-mt65xx.c +1 -1
@@ -624,7 +624,7 @@ static irqreturn_t mtk_spi_interrupt(int irq, void *dev_id)else mdata->state =MTK_SPI_IDLE ; -if (!master->can_dma (master, master->cur_msg->spi, trans)) { +if (!master->can_dma (master,NULL , trans)) {if (trans->rx_buf) { cnt = mdata->xfer_len /4 ; ioread32_rep(mdata->base + SPI_RX_DATA_REG,
drivers/spi/spi-stm32-qspi.c +17 -30
103 lines not on this page · raw message
drivers/spi/spi-uniphier.c +14 -4
@@ -726,7 +726,7 @@ static int uniphier_spi_probe(struct platform_device *pdev)if (ret) {dev_err (&pdev->dev,"failed to get TX DMA capacities: %d\n" , ret); - goto out_disable_clk; + goto out_release_dma; } dma_tx_burst = caps.max_burst; }
@@ -735,7 +735,7 @@ static int uniphier_spi_probe(struct platform_device *pdev)if (IS_ERR_OR_NULL (master->dma_rx)) {if (PTR_ERR (master->dma_rx) == -EPROBE_DEFER ) { ret = -EPROBE_DEFER ; - goto out_disable_clk; + goto out_release_dma; } master->dma_rx =NULL ; dma_rx_burst =INT_MAX ;
@@ -744,7 +744,7 @@ static int uniphier_spi_probe(struct platform_device *pdev)if (ret) {dev_err (&pdev->dev,"failed to get RX DMA capacities: %d\n" , ret); - goto out_disable_clk; + goto out_release_dma; } dma_rx_burst = caps.max_burst; }
@@ -753,10 +753,20 @@ static int uniphier_spi_probe(struct platform_device *pdev) ret =devm_spi_register_master (&pdev->dev, master);if (ret) - goto out_disable_clk; + goto out_release_dma;return 0 ; +out_release_dma: +if (!IS_ERR_OR_NULL (master->dma_rx)) { +dma_release_channel (master->dma_rx); + master->dma_rx =NULL ; + } +if (!IS_ERR_OR_NULL (master->dma_tx)) { +dma_release_channel (master->dma_tx); + master->dma_tx =NULL ; + } + out_disable_clk:clk_disable_unprepare (priv->clk);
drivers/video/console/Kconfig +20 -0
@@ -78,6 +78,26 @@ config FRAMEBUFFER_CONSOLE help Low-level framebuffer-based console driver. +config FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION + bool "Enable legacy fbcon hardware acceleration code" + depends on FRAMEBUFFER_CONSOLE + default y if PARISC + default n + help + This option enables the fbcon (framebuffer text-based) hardware + acceleration for graphics drivers which were written for the fbdev + graphics interface. + + On modern machines, on mainstream machines (like x86-64) or when + using a modern Linux distribution those fbdev drivers usually aren't used. + So enabling this option wouldn't have any effect, which is why you want + to disable this option on such newer machines. + + If you compile this kernel for older machines which still require the + fbdev drivers, you may want to say Y. + + If unsure, select n. + config FRAMEBUFFER_CONSOLE_DETECT_PRIMARY bool "Map the console to the primary display device" depends on FRAMEBUFFER_CONSOLE
drivers/video/fbdev/core/fbcon.c +57 -11
116 lines not on this page · raw message
drivers/video/fbdev/core/fbcon.h +14 -1
@@ -29,7 +29,9 @@ struct fbcon_display {/* Filled in by the low-level console driver */ const u_char *fontdata;int userfont;/* != 0 if fontdata kmalloc()ed */ -u_short scrollmode;/* Scroll Method */ +#ifdef CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION +u_short scrollmode;/* Scroll Method, use fb_scrollmode() */ +#endif u_short inverse;/* != 0 text black on white as default */ short yscroll;/* Hardware scrolling */ int vrows;/* number of virtual rows */
@@ -208,6 +210,17 @@ static inline int attr_col_ec(int shift, struct vc_data *vc,#define SCROLL_REDRAW 0x004#define SCROLL_PAN_REDRAW 0x005 +static inline u_short fb_scrollmode (struct fbcon_display *fb) +{ +#ifdef CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION +return fb->scrollmode; +#else +/* hardcoded to SCROLL_REDRAW if acceleration was disabled. */ +return SCROLL_REDRAW ; +#endif +} + +#ifdef CONFIG_FB_TILEBLITTING extern void fbcon_set_tileops (struct vc_data *vc,struct fb_info *info);#endif
drivers/video/fbdev/core/fbcon_ccw.c +5 -5
@@ -65,7 +65,7 @@ static void ccw_bmove(struct vc_data *vc, struct fb_info *info, int sy, {struct fbcon_ops *ops = info->fbcon_par;struct fb_copyarea area; -u32 vyres =GETVYRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info); area.sx = sy * vc->vc_font.height; area.sy = vyres - ((sx + width) * vc->vc_font.width);
@@ -83,7 +83,7 @@ static void ccw_clear(struct vc_data *vc, struct fb_info *info, int sy,struct fbcon_ops *ops = info->fbcon_par;struct fb_fillrect region;int bgshift = (vc->vc_hi_font_mask) ?13 :12 ; -u32 vyres =GETVYRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info); region.color =attr_bgcol_ec (bgshift,vc,info); region.dx = sy * vc->vc_font.height;
@@ -140,7 +140,7 @@ static void ccw_putcs(struct vc_data *vc, struct fb_info *info,u32 cnt, pitch, size;u32 attribute =get_attribute (info,scr_readw (s));u8 *dst, *buf =NULL ; -u32 vyres =GETVYRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info);if (!ops->fontbuffer)return ;
@@ -229,7 +229,7 @@ static void ccw_cursor(struct vc_data *vc, struct fb_info *info, int mode,int attribute, use_sw = vc->vc_cursor_type &CUR_SW ;int err =1 , dx, dy;char *src; -u32 vyres =GETVYRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info);if (!ops->fontbuffer)return ;
@@ -387,7 +387,7 @@ static int ccw_update_start(struct fb_info *info) {struct fbcon_ops *ops = info->fbcon_par;u32 yoffset; -u32 vyres =GETVYRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info);int err; yoffset = (vyres - info->var.yres) - ops->var.xoffset;
drivers/video/fbdev/core/fbcon_cw.c +5 -5
@@ -50,7 +50,7 @@ static void cw_bmove(struct vc_data *vc, struct fb_info *info, int sy, {struct fbcon_ops *ops = info->fbcon_par;struct fb_copyarea area; -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vxres =GETVXRES (ops->p, info); area.sx = vxres - ((sy + height) * vc->vc_font.height); area.sy = sx * vc->vc_font.width;
@@ -68,7 +68,7 @@ static void cw_clear(struct vc_data *vc, struct fb_info *info, int sy,struct fbcon_ops *ops = info->fbcon_par;struct fb_fillrect region;int bgshift = (vc->vc_hi_font_mask) ?13 :12 ; -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vxres =GETVXRES (ops->p, info); region.color =attr_bgcol_ec (bgshift,vc,info); region.dx = vxres - ((sy + height) * vc->vc_font.height);
@@ -125,7 +125,7 @@ static void cw_putcs(struct vc_data *vc, struct fb_info *info,u32 cnt, pitch, size;u32 attribute =get_attribute (info,scr_readw (s));u8 *dst, *buf =NULL ; -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vxres =GETVXRES (ops->p, info);if (!ops->fontbuffer)return ;
@@ -212,7 +212,7 @@ static void cw_cursor(struct vc_data *vc, struct fb_info *info, int mode,int attribute, use_sw = vc->vc_cursor_type &CUR_SW ;int err =1 , dx, dy;char *src; -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vxres =GETVXRES (ops->p, info);if (!ops->fontbuffer)return ;
@@ -369,7 +369,7 @@ static void cw_cursor(struct vc_data *vc, struct fb_info *info, int mode,static int cw_update_start (struct fb_info *info) {struct fbcon_ops *ops = info->fbcon_par; -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vxres =GETVXRES (ops->p, info);u32 xoffset;int err;
drivers/video/fbdev/core/fbcon_rotate.h +2 -2
@@ -12,11 +12,11 @@#define _FBCON_ROTATE_H#define GETVYRES (s,i) ({ \ - (s == SCROLL_REDRAW || s == SCROLL_MOVE) ? \ + (fb_scrollmode(s) == SCROLL_REDRAW || fb_scrollmode(s) == SCROLL_MOVE) ? \ (i)->var.yres : (i)->var.yres_virtual; })#define GETVXRES (s,i) ({ \ - (s == SCROLL_REDRAW || s == SCROLL_MOVE || !(i)->fix.xpanstep) ? \ + (fb_scrollmode(s) == SCROLL_REDRAW || fb_scrollmode(s) == SCROLL_MOVE || !(i)->fix.xpanstep) ? \ (i)->var.xres : (i)->var.xres_virtual; })
drivers/video/fbdev/core/fbcon_ud.c +10 -10
@@ -50,8 +50,8 @@ static void ud_bmove(struct vc_data *vc, struct fb_info *info, int sy, {struct fbcon_ops *ops = info->fbcon_par;struct fb_copyarea area; -u32 vyres =GETVYRES (ops->p->scrollmode, info); -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info); +u32 vxres =GETVXRES (ops->p, info); area.sy = vyres - ((sy + height) * vc->vc_font.height); area.sx = vxres - ((sx + width) * vc->vc_font.width);
@@ -69,8 +69,8 @@ static void ud_clear(struct vc_data *vc, struct fb_info *info, int sy,struct fbcon_ops *ops = info->fbcon_par;struct fb_fillrect region;int bgshift = (vc->vc_hi_font_mask) ?13 :12 ; -u32 vyres =GETVYRES (ops->p->scrollmode, info); -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info); +u32 vxres =GETVXRES (ops->p, info); region.color =attr_bgcol_ec (bgshift,vc,info); region.dy = vyres - ((sy + height) * vc->vc_font.height);
@@ -162,8 +162,8 @@ static void ud_putcs(struct vc_data *vc, struct fb_info *info,u32 mod = vc->vc_font.width %8 , cnt, pitch, size;u32 attribute =get_attribute (info,scr_readw (s));u8 *dst, *buf =NULL ; -u32 vyres =GETVYRES (ops->p->scrollmode, info); -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info); +u32 vxres =GETVXRES (ops->p, info);if (!ops->fontbuffer)return ;
@@ -259,8 +259,8 @@ static void ud_cursor(struct vc_data *vc, struct fb_info *info, int mode,int attribute, use_sw = vc->vc_cursor_type &CUR_SW ;int err =1 , dx, dy;char *src; -u32 vyres =GETVYRES (ops->p->scrollmode, info); -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info); +u32 vxres =GETVXRES (ops->p, info);if (!ops->fontbuffer)return ;
@@ -410,8 +410,8 @@ static int ud_update_start(struct fb_info *info) {struct fbcon_ops *ops = info->fbcon_par;int xoffset, yoffset; -u32 vyres =GETVYRES (ops->p->scrollmode, info); -u32 vxres =GETVXRES (ops->p->scrollmode, info); +u32 vyres =GETVYRES (ops->p, info); +u32 vxres =GETVXRES (ops->p, info);int err; xoffset = vxres - info->var.xres - ops->var.xoffset;
fs/9p/fid.c +4 -5
@@ -96,12 +96,8 @@ static struct p9_fid *v9fs_fid_find(struct dentry *dentry, kuid_t uid, int any) dentry, dentry,from_kuid (&init_user_ns, uid), any); ret =NULL ; - -if (d_inode (dentry)) - ret =v9fs_fid_find_inode (d_inode (dentry), uid); -/* we'll recheck under lock if there's anything to look in */ -if (!ret && dentry->d_fsdata) { +if (dentry->d_fsdata) {struct hlist_head *h = (struct hlist_head *)&dentry->d_fsdata;spin_lock (&dentry->d_lock);hlist_for_each_entry (fid, h, dlist) {
@@ -112,6 +108,9 @@ static struct p9_fid *v9fs_fid_find(struct dentry *dentry, kuid_t uid, int any) } }spin_unlock (&dentry->d_lock); + }else { +if (dentry->d_inode) + ret =v9fs_fid_find_inode (dentry->d_inode, uid); }return ret;
fs/btrfs/block-group.c +13 -0
@@ -2511,6 +2511,19 @@ int btrfs_inc_block_group_ro(struct btrfs_block_group *cache,int ret;bool dirty_bg_running; +/* +* This can only happen when we are doing read-only scrub on read-only +* mount. +* In that case we should not start a new transaction on read-only fs. +* Thus here we skip all chunk allocations. +*/ +if (sb_rdonly (fs_info->sb)) { +mutex_lock (&fs_info->ro_block_group_mutex); + ret =inc_block_group_ro (cache,0 ); +mutex_unlock (&fs_info->ro_block_group_mutex); +return ret; + } + do { trans = btrfs_join_transaction(fs_info->extent_root); if (IS_ERR(trans))
fs/btrfs/ioctl.c +1 -4
@@ -775,10 +775,7 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir, goto fail; } -spin_lock (&fs_info->trans_lock); -list_add (&pending_snapshot->list, - &trans->transaction->pending_snapshots); -spin_unlock (&fs_info->trans_lock); + trans->pending_snapshot = pending_snapshot; ret =btrfs_commit_transaction (trans);if (ret)
fs/btrfs/qgroup.c +19 -2
@@ -1185,9 +1185,24 @@ int btrfs_quota_disable(struct btrfs_fs_info *fs_info)struct btrfs_trans_handle *trans =NULL ;int ret =0 ; +/* +* We need to have subvol_sem write locked, to prevent races between +* concurrent tasks trying to disable quotas, because we will unlock +* and relock qgroup_ioctl_lock across BTRFS_FS_QUOTA_ENABLED changes. +*/ +lockdep_assert_held_write (&fs_info->subvol_sem); +mutex_lock (&fs_info->qgroup_ioctl_lock);if (!fs_info->quota_root) goto out; + +/* +* Request qgroup rescan worker to complete and wait for it. This wait +* must be done before transaction start for quota disable since it may +* deadlock with transaction by the qgroup rescan worker. +*/ +clear_bit (BTRFS_FS_QUOTA_ENABLED , &fs_info->flags); +btrfs_qgroup_wait_for_completion (fs_info, false);mutex_unlock (&fs_info->qgroup_ioctl_lock);/*
@@ -1205,14 +1220,13 @@ int btrfs_quota_disable(struct btrfs_fs_info *fs_info)if (IS_ERR (trans)) { ret =PTR_ERR (trans); trans =NULL ; +set_bit (BTRFS_FS_QUOTA_ENABLED , &fs_info->flags); goto out; }if (!fs_info->quota_root) goto out; -clear_bit (BTRFS_FS_QUOTA_ENABLED , &fs_info->flags); -btrfs_qgroup_wait_for_completion (fs_info, false);spin_lock (&fs_info->qgroup_lock); quota_root = fs_info->quota_root; fs_info->quota_root =NULL ;
@@ -3379,6 +3393,9 @@ qgroup_rescan_init(struct btrfs_fs_info *fs_info, u64 progress_objectid,btrfs_warn (fs_info,"qgroup rescan init failed, qgroup is not enabled" ); ret = -EINVAL ; + }else if (!test_bit (BTRFS_FS_QUOTA_ENABLED , &fs_info->flags)) { +/* Quota disable is in progress */ + ret = -EBUSY ; }if (ret) {
fs/btrfs/transaction.c +24 -0
@@ -2033,6 +2033,27 @@ static inline void btrfs_wait_delalloc_flush(struct btrfs_fs_info *fs_info)btrfs_wait_ordered_roots (fs_info,U64_MAX ,0 , (u64)-1 ); } +/* +* Add a pending snapshot associated with the given transaction handle to the +* respective handle. This must be called after the transaction commit started +* and while holding fs_info->trans_lock. +* This serves to guarantee a caller of btrfs_commit_transaction() that it can +* safely free the pending snapshot pointer in case btrfs_commit_transaction() +* returns an error. +*/ +static void add_pending_snapshot (struct btrfs_trans_handle *trans) +{ +struct btrfs_transaction *cur_trans = trans->transaction; + +if (!trans->pending_snapshot) +return ; + +lockdep_assert_held (&trans->fs_info->trans_lock); +ASSERT (cur_trans->state >=TRANS_STATE_COMMIT_START ); + +list_add (&trans->pending_snapshot->list, &cur_trans->pending_snapshots); +} +int btrfs_commit_transaction (struct btrfs_trans_handle *trans) {struct btrfs_fs_info *fs_info = trans->fs_info;
@@ -2106,6 +2127,8 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans)if (cur_trans->state >=TRANS_STATE_COMMIT_START ) {enum btrfs_trans_state want_state =TRANS_STATE_COMPLETED ; +add_pending_snapshot (trans); +spin_unlock (&fs_info->trans_lock);refcount_inc (&cur_trans->use_count);
@@ -2196,6 +2219,7 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans)* COMMIT_DOING so make sure to wait for num_writers to == 1 again. */ spin_lock (&fs_info->trans_lock); +add_pending_snapshot (trans); cur_trans->state =TRANS_STATE_COMMIT_DOING ;spin_unlock (&fs_info->trans_lock); wait_event(cur_trans->writer_wait,
fs/btrfs/transaction.h +2 -0
@@ -123,6 +123,8 @@ struct btrfs_trans_handle {struct btrfs_transaction *transaction;struct btrfs_block_rsv *block_rsv;struct btrfs_block_rsv *orig_rsv; +/* Set by a task that wants to create a snapshot. */ +struct btrfs_pending_snapshot *pending_snapshot;refcount_t use_count;unsigned int type;/*
fs/ext4/ext4.h +3 -0
@@ -2935,6 +2935,9 @@ void ext4_fc_replay_cleanup(struct super_block *sb);int ext4_fc_commit (journal_t *journal,tid_t commit_tid);int __init ext4_fc_init_dentry_cache (void );void ext4_fc_destroy_dentry_cache (void ); +int ext4_fc_record_regions (struct super_block *sb,int ino, +ext4_lblk_t lblk,ext4_fsblk_t pblk, +int len,int replay);/* mballoc.c */ extern const struct seq_operations ext4_mb_seq_groups_ops;
fs/ext4/extents.c +4 -0
@@ -6096,11 +6096,15 @@ int ext4_ext_clear_bb(struct inode *inode)ext4_mb_mark_bb (inode->i_sb, path[j].p_block,1 ,0 ); +ext4_fc_record_regions (inode->i_sb, inode->i_ino, +0 , path[j].p_block,1 ,1 ); }ext4_ext_drop_refs (path);kfree (path); }ext4_mb_mark_bb (inode->i_sb, map.m_pblk, map.m_len,0 ); +ext4_fc_record_regions (inode->i_sb, inode->i_ino, + map.m_lblk, map.m_pblk, map.m_len,1 ); } cur = cur + map.m_len; }
fs/ext4/fast_commit.c +47 -42
191 lines not on this page · raw message
fs/ext4/inline.c +9 -1
@@ -1133,7 +1133,15 @@ static void ext4_restore_inline_data(handle_t *handle, struct inode *inode,struct ext4_iloc *iloc, void *buf, int inline_size) { -ext4_create_inline_data (handle ,inode ,inline_size ); + int ret; + + ret =ext4_create_inline_data (handle, inode, inline_size); +if (ret) { +ext4_msg (inode->i_sb,KERN_EMERG , +"error restoring inline_data for inode -- potential data loss! (inode %lu, error %d)" , + inode->i_ino, ret); +return ; + }ext4_write_inline_data (inode, iloc, buf,0 , inline_size);ext4_set_inode_state (inode,EXT4_STATE_MAY_INLINE_DATA ); }
fs/ext4/mballoc.c +17 -9
@@ -5753,7 +5753,8 @@ static ext4_fsblk_t ext4_mb_new_blocks_simple(handle_t *handle,struct super_block *sb = ar->inode->i_sb;ext4_group_t group;ext4_grpblk_t blkoff; -int i = sb->s_blocksize; +ext4_grpblk_t max =EXT4_CLUSTERS_PER_GROUP (sb); +ext4_grpblk_t i =0 ;ext4_fsblk_t goal, block;struct ext4_super_block *es =EXT4_SB (sb)->s_es;
@@ -5775,19 +5776,26 @@ static ext4_fsblk_t ext4_mb_new_blocks_simple(handle_t *handle,ext4_get_group_no_and_offset (sb,max (ext4_group_first_block_no (sb, group), goal),NULL , &blkoff); - i =mb_find_next_zero_bit (bitmap_bh->b_data, sb->s_blocksize, +while (1 ) { + i =mb_find_next_zero_bit (bitmap_bh->b_data, max, blkoff); +if (i >= max) +break ; +if (ext4_fc_replay_check_excluded (sb, +ext4_group_first_block_no (sb, group) + i)) { + blkoff = i +1 ; + }else +break ; + }brelse (bitmap_bh); -if (i >= sb->s_blocksize) -continue ; -if (ext4_fc_replay_check_excluded (sb, -ext4_group_first_block_no (sb, group) + i)) -continue ; -break ; +if (i < max) +break ; } -if (group >=ext4_get_groups_count (sb) && i >= sb->s_blocksize) +if (group >=ext4_get_groups_count (sb) || i >= max) { + *errp = -ENOSPC ;return 0 ; + } block =ext4_group_first_block_no (sb, group) + i;ext4_mb_mark_bb (sb, block,1 ,1 );
fs/nfsd/nfs4state.c +3 -1
@@ -4112,8 +4112,10 @@ nfsd4_setclientid_confirm(struct svc_rqst *rqstp, status = nfserr_clid_inuse;if (client_has_state (old) && !same_creds (&unconf->cl_cred, - &old->cl_cred)) + &old->cl_cred)) { + old =NULL ; goto out; + } status =mark_client_expired_locked (old);if (status) { old =NULL ;
include/linux/kvm_host.h +109 -3
152 lines not on this page · raw message
include/linux/pgtable.h +1 -0
@@ -62,6 +62,7 @@ static inline unsigned long pte_index(unsigned long address) {return (address >>PAGE_SHIFT ) & (PTRS_PER_PTE -1 ); } +#define pte_index pte_index#ifndef pmd_indexstatic inline unsigned long pmd_index (unsigned long address)
include/uapi/sound/asound.h +3 -1
@@ -56,8 +56,10 @@* * ****************************************************************************/ +#define AES_IEC958_STATUS_SIZE 24 +struct snd_aes_iec958 { -unsigned char status[24 ];/* AES/IEC958 channel status bits */ +unsigned char status[AES_IEC958_STATUS_SIZE ];/* AES/IEC958 channel status bits */ unsigned char subcode[147 ];/* AES/IEC958 subcode bits */ unsigned char pad;/* nothing */ unsigned char dig_subframe[4 ];/* AES/IEC958 subframe bits */
ipc/sem.c +2 -2
@@ -1964,6 +1964,7 @@ static struct sem_undo *find_alloc_undo(struct ipc_namespace *ns, int semid)*/ un =lookup_undo (ulp, semid);if (un) { +spin_unlock (&ulp->lock);kvfree (new); goto success; }
@@ -1976,9 +1977,8 @@ static struct sem_undo *find_alloc_undo(struct ipc_namespace *ns, int semid)ipc_assert_locked_object (&sma->sem_perm);list_add (&new->list_id, &sma->list_id); un = new; - -success:spin_unlock (&ulp->lock); +success:sem_unlock (sma,-1 ); out:return un;
kernel/audit.c +43 -19
143 lines not on this page · raw message
kernel/bpf/ringbuf.c +1 -1
@@ -104,7 +104,7 @@ static struct bpf_ringbuf *bpf_ringbuf_area_alloc(size_t data_sz, int numa_node) } rb =vmap (pages, nr_meta_pages +2 * nr_data_pages, -VM_ALLOC |VM_USERMAP ,PAGE_KERNEL ); +VM_MAP |VM_USERMAP ,PAGE_KERNEL );if (rb) {kmemleak_not_leak (pages); rb->pages = pages;
kernel/cgroup/cpuset.c +10 -0
@@ -1512,10 +1512,15 @@ static void update_sibling_cpumasks(struct cpuset *parent, struct cpuset *cs,struct cpuset *sibling;struct cgroup_subsys_state *pos_css; +percpu_rwsem_assert_held (&cpuset_rwsem); +/* * Check all its siblings and call update_cpumasks_hier() * if their use_parent_ecpus flag is set in order for them * to use the right effective_cpus value. +* +* The update_cpumasks_hier() function may sleep. So we have to +* release the RCU read lock before calling it. */ rcu_read_lock ();cpuset_for_each_child (sibling, pos_css, parent) {
@@ -1523,8 +1528,13 @@ static void update_sibling_cpumasks(struct cpuset *parent, struct cpuset *cs,continue ;if (!sibling->use_parent_ecpus)continue ; +if (!css_tryget_online (&sibling->css)) +continue ; +rcu_read_unlock ();update_cpumasks_hier (sibling, tmp); +rcu_read_lock (); +css_put (&sibling->css); }rcu_read_unlock (); }
kernel/events/core.c +16 -0
@@ -3234,6 +3234,15 @@ static int perf_event_modify_breakpoint(struct perf_event *bp,return err; } +/* +* Copy event-type-independent attributes that may be modified. +*/ +static void perf_event_modify_copy_attr (struct perf_event_attr *to, +const struct perf_event_attr *from) +{ + to->sig_data = from->sig_data; +} +static int perf_event_modify_attr (struct perf_event *event,struct perf_event_attr *attr) {
@@ -3256,10 +3265,17 @@ static int perf_event_modify_attr(struct perf_event *event,WARN_ON_ONCE (event->ctx->parent_ctx);mutex_lock (&event->child_mutex); +/* +* Event-type-independent attributes must be copied before event-type +* modification, which will validate that final attributes match the +* source attributes after all relevant attributes have been copied. +*/ +perf_event_modify_copy_attr (&event->attr, attr); err =func (event, attr);if (err) goto out;list_for_each_entry (child, &event->child_list, child_list) { +perf_event_modify_copy_attr (&child->attr, attr); err =func (child, attr);if (err) goto out;
mm/debug_vm_pgtable.c +2 -0
@@ -171,6 +171,8 @@ static void __init pte_advanced_tests(struct pgtable_debug_args *args)ptep_test_and_clear_young (args->vma, args->vaddr, args->ptep); pte =ptep_get (args->ptep);WARN_ON (pte_young (pte)); + +ptep_get_and_clear_full (args->mm, args->vaddr, args->ptep,1 ); }static void __init pte_savedwrite_tests (struct pgtable_debug_args *args)
mm/kmemleak.c +7 -6
@@ -1403,7 +1403,8 @@ static void kmemleak_scan(void) {unsigned long flags;struct kmemleak_object *object; -int i; +struct zone *zone; +int __maybe_unused i;int new_leaks =0 ; jiffies_last_scan = jiffies;
@@ -1443,9 +1444,9 @@ static void kmemleak_scan(void)* Struct page scanning for each node. */ get_online_mems (); -for_each_online_node (i) { -unsigned long start_pfn =node_start_pfn (i); -unsigned long end_pfn =node_end_pfn (i); +for_each_populated_zone (zone) { +unsigned long start_pfn = zone->zone_start_pfn; +unsigned long end_pfn =zone_end_pfn (zone);unsigned long pfn;for (pfn = start_pfn; pfn < end_pfn; pfn++) {
@@ -1454,8 +1455,8 @@ static void kmemleak_scan(void)if (!page)continue ; -/* only scan pages belonging to this node */ -if (page_to_nid (page) != i) +/* only scan pages belonging to this zone */ +if (page_zone (page) != zone)continue ;/* only scan if page is in use */ if (page_count (page) ==0 )
net/bridge/netfilter/nft_reject_bridge.c +4 -4
@@ -49,7 +49,7 @@ static void nft_reject_br_send_v4_tcp_reset(struct net *net, {struct sk_buff *nskb; - nskb =nf_reject_skb_v4_tcp_reset (net, oldskb, dev, hook); + nskb =nf_reject_skb_v4_tcp_reset (net, oldskb,NULL , hook);if (!nskb)return ;
@@ -65,7 +65,7 @@ static void nft_reject_br_send_v4_unreach(struct net *net, {struct sk_buff *nskb; - nskb =nf_reject_skb_v4_unreach (net, oldskb, dev, hook, code); + nskb =nf_reject_skb_v4_unreach (net, oldskb,NULL , hook, code);if (!nskb)return ;
@@ -81,7 +81,7 @@ static void nft_reject_br_send_v6_tcp_reset(struct net *net, {struct sk_buff *nskb; - nskb =nf_reject_skb_v6_tcp_reset (net, oldskb, dev, hook); + nskb =nf_reject_skb_v6_tcp_reset (net, oldskb,NULL , hook);if (!nskb)return ;
@@ -98,7 +98,7 @@ static void nft_reject_br_send_v6_unreach(struct net *net, {struct sk_buff *nskb; - nskb =nf_reject_skb_v6_unreach (net, oldskb, dev, hook, code); + nskb =nf_reject_skb_v6_unreach (net, oldskb,NULL , hook, code);if (!nskb)return ;
net/ieee802154/nl802154.c +4 -4
@@ -1441,7 +1441,7 @@ static int nl802154_send_key(struct sk_buff *msg, u32 cmd, u32 portid, hdr =nl802154hdr_put (msg, portid, seq, flags, cmd);if (!hdr) -return -1 ; +return -ENOBUFS ;if (nla_put_u32 (msg,NL802154_ATTR_IFINDEX , dev->ifindex)) goto nla_put_failure;
@@ -1634,7 +1634,7 @@ static int nl802154_send_device(struct sk_buff *msg, u32 cmd, u32 portid, hdr =nl802154hdr_put (msg, portid, seq, flags, cmd);if (!hdr) -return -1 ; +return -ENOBUFS ;if (nla_put_u32 (msg,NL802154_ATTR_IFINDEX , dev->ifindex)) goto nla_put_failure;
@@ -1812,7 +1812,7 @@ static int nl802154_send_devkey(struct sk_buff *msg, u32 cmd, u32 portid, hdr =nl802154hdr_put (msg, portid, seq, flags, cmd);if (!hdr) -return -1 ; +return -ENOBUFS ;if (nla_put_u32 (msg,NL802154_ATTR_IFINDEX , dev->ifindex)) goto nla_put_failure;
@@ -1988,7 +1988,7 @@ static int nl802154_send_seclevel(struct sk_buff *msg, u32 cmd, u32 portid, hdr =nl802154hdr_put (msg, portid, seq, flags, cmd);if (!hdr) -return -1 ; +return -ENOBUFS ;if (nla_put_u32 (msg,NL802154_ATTR_IFINDEX , dev->ifindex)) goto nla_put_failure;
net/mptcp/pm_netlink.c +25 -9
@@ -459,6 +459,18 @@ static unsigned int fill_remote_addresses_vec(struct mptcp_sock *msk, bool fullmreturn i; } +static struct mptcp_pm_addr_entry * +__lookup_addr (struct pm_nl_pernet *pernet,struct mptcp_addr_info *info) +{ +struct mptcp_pm_addr_entry *entry; + +list_for_each_entry (entry, &pernet->local_addr_list, list) { +if (addresses_equal (&entry->addr, info, true)) +return entry; + } +return NULL ; +} +static void mptcp_pm_create_subflow_or_signal_addr (struct mptcp_sock *msk) {struct sock *sk = (struct sock *)msk;
@@ -1725,17 +1737,21 @@ static int mptcp_nl_cmd_set_flags(struct sk_buff *skb, struct genl_info *info)if (addr.flags &MPTCP_PM_ADDR_FLAG_BACKUP ) bkup =1 ; -list_for_each_entry (entry, &pernet->local_addr_list, list) { -if (addresses_equal (&entry->addr, &addr.addr, true)) { -mptcp_nl_addr_backup (net, &entry->addr, bkup); - -if (bkup) - entry->flags |=MPTCP_PM_ADDR_FLAG_BACKUP ; -else - entry->flags &= ~MPTCP_PM_ADDR_FLAG_BACKUP ; - } +spin_lock_bh (&pernet->lock); + entry =__lookup_addr (pernet, &addr.addr); +if (!entry) { +spin_unlock_bh (&pernet->lock); +return -EINVAL ; } +if (bkup) + entry->flags |=MPTCP_PM_ADDR_FLAG_BACKUP ; +else + entry->flags &= ~MPTCP_PM_ADDR_FLAG_BACKUP ; + addr = *entry; +spin_unlock_bh (&pernet->lock); + +mptcp_nl_addr_backup (net, &addr.addr, bkup);return 0 ; }
net/smc/af_smc.c +118 -15
161 lines not on this page · raw message
net/smc/smc.h +19 -1
@@ -129,6 +129,12 @@ enum smc_urg_state { SMC_URG_READ = 3, /* data was already read */ }; +struct smc_mark_woken { +bool woken; +void *key; +wait_queue_entry_t wait_entry; +}; +struct smc_connection {struct rb_node alert_node;struct smc_link_group *lgr;/* link group of connection */
@@ -217,8 +223,14 @@ struct smc_connection {struct smc_sock {/* smc sock container */ struct sock sk;struct socket *clcsock;/* internal tcp socket */ +void (*clcsk_state_change)(struct sock *sk); +/* original stat_change fct. */ void (*clcsk_data_ready)(struct sock *sk); -/* original data_ready fct. **/ +/* original data_ready fct. */ +void (*clcsk_write_space)(struct sock *sk); +/* original write_space fct. */ +void (*clcsk_error_report)(struct sock *sk); +/* original error_report fct. */ struct smc_connection conn;/* smc connection */ struct smc_sock *listen_smc;/* listen parent */ struct work_struct connect_work;/* handle non-blocking connect*/
@@ -253,6 +265,12 @@ static inline struct smc_sock *smc_sk(const struct sock *sk)return (struct smc_sock *)sk; } +static inline struct smc_sock *smc_clcsock_user_data (struct sock *clcsk) +{ +return (struct smc_sock *) + ((uintptr_t )clcsk->sk_user_data & ~SK_USER_DATA_NOCOPY ); +} +extern struct workqueue_struct *smc_hs_wq;/* wq for handshake work */ extern struct workqueue_struct *smc_close_wq;/* wq for close work */
security/selinux/ss/conditional.c +2 -1
@@ -152,6 +152,8 @@ static void cond_list_destroy(struct policydb *p)for (i =0 ; i < p->cond_list_len; i++)cond_node_destroy (&p->cond_list[i]);kfree (p->cond_list); + p->cond_list =NULL ; + p->cond_list_len =0 ; }void cond_policydb_destroy (struct policydb *p)
@@ -441,7 +443,6 @@ int cond_read_list(struct policydb *p, void *fp)return 0 ; err:cond_list_destroy (p); - p->cond_list =NULL ;return rc; }
sound/pci/hda/hda_auto_parser.c +1 -1
@@ -985,7 +985,7 @@ void snd_hda_pick_fixup(struct hda_codec *codec,int id =HDA_FIXUP_ID_NOT_SET ;const char *name =NULL ;const char *type =NULL ; -int vendor, device; +unsigned int vendor, device;if (codec->fixup_id !=HDA_FIXUP_ID_NOT_SET )return ;
sound/pci/hda/hda_codec.c +4 -0
@@ -3000,6 +3000,10 @@ void snd_hda_codec_shutdown(struct hda_codec *codec) {struct hda_pcm *cpcm; +/* Skip the shutdown if codec is not registered */ +if (!codec->registered) +return ; +list_for_each_entry (cpcm, &codec->pcm_list_head, list)snd_pcm_suspend_all (cpcm->pcm);
sound/pci/hda/hda_generic.c +15 -2
@@ -91,6 +91,12 @@ static void snd_hda_gen_spec_free(struct hda_gen_spec *spec)free_kctls (spec);snd_array_free (&spec->paths);snd_array_free (&spec->loopback_list); +#ifdef CONFIG_SND_HDA_GENERIC_LEDS +if (spec->led_cdevs[LED_AUDIO_MUTE ]) +led_classdev_unregister (spec->led_cdevs[LED_AUDIO_MUTE ]); +if (spec->led_cdevs[LED_AUDIO_MICMUTE ]) +led_classdev_unregister (spec->led_cdevs[LED_AUDIO_MICMUTE ]); +#endif }
Lines of this file are not shown. View the raw message.
sound/pci/hda/patch_realtek.c +55 -12
67 lines not on this page · raw message
tools/testing/selftests/netfilter/nft_concat_range.sh +71 -1
72 lines not on this page · raw message
tools/testing/selftests/netfilter/nft_nat.sh +152 -0
152 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.