Merge tag 'android12-5.10.228_r00' into android12-5.10

This merges up to the 5.10.228 LTS release into the android12-5.10
branch.  Changes included in here are:

* 38dc270ca0 Revert "genetlink: hold RCU in genlmsg_mcast()"
*   c515597aec Merge 02874ca52d ("tracing: Consider the NULL character when validating the event length") into android12-5.10-lts
|\
| * 02874ca52d tracing: Consider the NULL character when validating the event length
| * df848523d6 jfs: Fix sanity check in dbMount
| * 8605ca4bd0 arm64: Force position-independent veneers
| * 0329056e07 ASoC: fsl_sai: Enable 'FIFO continue on error' FCONT bit
| * 75f828e944 drm/vboxvideo: Replace fake VLA at end of vbva_mouse_pointer_shape with real VLA
| * 649d646506 iomap: update ki_pos a little later in iomap_dio_complete
| * c9b7743807 exec: don't WARN for racy path_noexec check
| * 20e27c7739 block, bfq: fix procress reference leakage for bfqq in merge chain
| * bf83ba3c55 KVM: s390: gaccess: Check if guest address is in memslot
| * 6e1659b674 KVM: s390: gaccess: Cleanup access to guest pages
| * 472088ffb1 KVM: s390: gaccess: Refactor access address range check
| * 511ca93509 KVM: s390: gaccess: Refactor gpa and length calculation
| * cf9ddf9ed9 arm64: probes: Fix uprobes for big-endian kernels
| * 7f1ef59185 arm64:uprobe fix the uprobe SWBP_INSN in big-endian
| * 6c151aeb6d Bluetooth: bnep: fix wild-memory-access in proto_unregister
| * 5c345c47e8 s390: Initialize psw mask in perf_arch_fetch_caller_regs()
| * 6af43ec3bf usb: typec: altmode should keep reference to parent
| * ed31aba8ce smb: client: fix OOBs when building SMB2_IOCTL request
| * 8c1e6717f6 scsi: target: core: Fix null-ptr-deref in target_alloc_device()
| * 4af714e823 genetlink: hold RCU in genlmsg_mcast()
| * b632114677 net: systemport: fix potential memory leak in bcm_sysport_xmit()
| * f48eaf4e88 net/smc: Fix searching in list of known pnetids in smc_pnet_add_pnetid
| * aacf6e28ae net: ethernet: aeroflex: fix potential memory leak in greth_start_xmit_gbit()
| * 56dbb74b6a macsec: don't increment counters for an unrelated SA
| * 2c7dd3ca6b drm/msm/dsi: fix 32-bit signed integer extension in pclk_rate calculation
| * df6fed0a2a RDMA/bnxt_re: Fix a bug while setting up Level-2 PBL pages
| * 78aaf54ad5 RDMA/bnxt_re: Return more meaningful error
| * 718609f518 ipv4: give an IPv4 dev to blackhole_netdev
| * 59df170bde RDMA/cxgb4: Fix RDMA_CM_EVENT_UNREACHABLE error for iWARP
| * 9076d449e7 ARM: dts: bcm2837-rpi-cm3-io3: Fix HDMI hpd-gpio pin
| * dbe51dd516 RDMA/bnxt_re: Add a check for memory allocation
| * c17e5cbbb1 RDMA/bnxt_re: Fix incorrect AVID type in WQE structure
* | 012423e6bd Merge 5.10.228 into android12-5.10-lts
|\|
| * 5a8fa04b2a Linux 5.10.228
| * 2abe57d62a ALSA: hda/conexant - Use cached pin control for Node 0x1d on HP EliteOne 1000 G2
| * 25e86fb0ae powerpc/mm: Always update max/min_low_pfn in mem_topology_setup()
| * c1d0476885 nilfs2: propagate directory read errors from nilfs_find_entry()
| * c38add9ac0 tcp: fix mptcp DSS corruption due to large pmtu xmit
| * fde99e972b mptcp: handle consistently DSS corruption
| * 609937aa96 mptcp: track and update contiguous data status
| * b7d7b7fc87 irqchip/gic-v4: Don't allow a VMOVP on a dying VPE
| * 6f44a5fc15 x86/entry_32: Clear CPU buffers after register restore in NMI return
| * 9ab38a1cdb x86/entry_32: Do not clobber user EFLAGS.ZF
| * 8462805788 x86/apic: Always explicitly disarm TSC-deadline timer
| * e475220d64 x86/resctrl: Annotate get_mem_config() functions as __init
| * 1826b6d69b parport: Proper fix for array out-of-bounds access
| * 9f8ddf14fa USB: serial: option: add Telit FN920C04 MBIM compositions
| * 0fc55ec9fc USB: serial: option: add support for Quectel EG916Q-GL
| * 608b626f71 xhci: Fix incorrect stream context type macro
| * fc2cb5e3af Bluetooth: btusb: Fix regression with fake CSR controllers 0a12:0001
| * 63d6a3b078 Bluetooth: Remove debugfs directory on module init failure
| * 516655749a iio: adc: ti-ads124s08: add missing select IIO_(TRIGGERED_)BUFFER in Kconfig
| * f80375f275 iio: proximity: mb1232: add missing select IIO_(TRIGGERED_)BUFFER in Kconfig
| * dc99dfa2ba iio: light: opt3001: add missing full-scale range value
| * bf3ab8e1c2 iio: light: veml6030: fix IIO device retrieval from embedded device
| * 2d06787b70 iio: light: veml6030: fix ALS sensor resolution
| * ffc4174309 iio: hid-sensors: Fix an error handling path in _hid_sensor_set_report_latency()
| * 9504153a48 iio: adc: ti-ads8688: add missing select IIO_(TRIGGERED_)BUFFER in Kconfig
| * c27133637a iio: dac: stm32-dac-core: add missing select REGMAP_MMIO in Kconfig
| * c4c2211b12 iio: dac: ltc1660: add missing select REGMAP_SPI in Kconfig
| * 3abc1ebea3 iio: dac: ad5770r: add missing select REGMAP_SPI in Kconfig
| * 0782809c01 drm/vmwgfx: Handle surface check failure correctly
| * df75c78bfe drm/radeon: Fix encoder->possible_clones
| * 6ddcaee244 io_uring/sqpoll: close race on waiting for sqring entries
| * 3bc6d0f8b7 blk-rq-qos: fix crash on rq_qos_wait vs. rq_qos_wake_function race
| * eca3edf876 x86/bugs: Do not use UNTRAIN_RET with IBPB on entry
| * e7c0f8ca3b x86/bugs: Skip RSB fill at VMEXIT
| * 0ab77a47e3 x86/entry: Have entry_ibpb() invalidate return predictions
| * c5e57863d7 x86/cpufeatures: Add a IBPB_NO_RET BUG flag
| * 77fa260620 x86/cpufeatures: Define X86_FEATURE_AMD_IBPB_RET
| * dfa4b5d4ba KVM: s390: Change virtual to physical address access in diag 0x258 handler
| * d047095095 s390/sclp_vt220: Convert newlines to CRLF instead of LFCR
| * b12ef2d4df io_uring/sqpoll: do not put cpumask on stack
| * 66b98c4f18 io_uring/sqpoll: retain test for whether the CPU is valid
| * 54a987b41d io_uring/sqpoll: do not allow pinning outside of cpuset
| * 71fbc3af3d KVM: Fix a data race on last_boosted_vcpu in kvm_vcpu_on_spin()
| * e8e599a635 wifi: mac80211: fix potential key use-after-free
| * 417d5838ca mm/swapfile: skip HugeTLB pages for unuse_vma
| * 043f055261 fat: fix uninitialized variable
| * bf1a022222 irqchip/gic-v3-its: Fix VSYNC referencing an unmapped VPE on GIC v4.1
| * cafa5942bd net: macb: Avoid 20s boot delay by skipping MDIO bus registration for fixed-link PHY
| * ce43c48cdc arm64: probes: Fix simulate_ldr*_literal()
| * 3728b4eb27 arm64: probes: Remove broken LDR (literal) uprobe support
| * 673a1c5a29 posix-clock: Fix missing timespec64 check in pc_clock_settime()
| * dbe055567a net: enetc: add missing static descriptor and inline keyword
| * 5f47cdeeef ALSA: hda/conexant - Fix audio routing for HP EliteOne 1000 G2
* | af2f7573ea Revert "xfrm: Pass flowi_oif or l3mdev as oif to xfrm_dst_lookup"
* | 705b091042 Revert "net: Handle l3mdev in ip_tunnel_init_flow"
* | 0ba4653710 Merge 5.10.227 into android12-5.10-lts
|\|
| * eac1c5bfc1 Linux 5.10.227
| * 9350016415 net: dsa: microchip: fix build warning
| * 9f76a9d184 RDMA/hns: Fix uninitialized variable
* | 7ad1ad5a55 Merge 4911610c7a ("ext4: fix warning in ext4_dio_write_end_io()") into android12-5.10-lts
|\|
| * 4911610c7a ext4: fix warning in ext4_dio_write_end_io()
* | b585ecc2c9 Merge 05cc42d601 ("netfilter: ip6t_rpfilter: Fix regression with VRF interfaces") into android12-5.10-lts
|\|
| * 05cc42d601 netfilter: ip6t_rpfilter: Fix regression with VRF interfaces
| * 95f62e5a78 net: vrf: determine the dst using the original ifindex for multicast
| * 3adb1be04f net: seg6: fix seg6_lookup_any_nexthop() to handle VRFs using flowi_l3mdev
| * ab6c9463b1 net: Handle l3mdev in ip_tunnel_init_flow
| * 0825c5ff24 xfrm: Pass flowi_oif or l3mdev as oif to xfrm_dst_lookup
| * 4bf1bd3fff net: geneve: add missing netlink policy and size for IFLA_GENEVE_INNER_PROTO_INHERIT
| * 73f75d2b5a nouveau/dmem: Fix vulnerability in migrate_to_ram upon copy error
| * 548d0102dc net: dsa: lan9303: ensure chip reset and wait for READY status
| * 68ad5da6ca net: Fix an unsafe loop on the list
| * fcda074c98 hid: intel-ish-hid: Fix uninitialized variable 'rv' in ish_fw_xfer_direct_dma
| * e7a1d51b39 usb: storage: ignore bogus device raised by JieLi BR21 USB sound chip
| * 1d7fc802a7 usb: xhci: Fix problem with xhci resume from suspend
| * f8dea2fede usb: dwc3: core: Stop processing of pending events if controller is halted
* | 9b1caf0550 Merge a7564b1606 ("Revert "usb: yurex: Replace snprintf() with the safer scnprintf() variant"") into android12-5.10-lts
|\|
| * a7564b1606 Revert "usb: yurex: Replace snprintf() with the safer scnprintf() variant"
| * 8669bca53f HID: plantronics: Workaround for an unexcepted opposite volume key
| * 799a06ca7f hwmon: (adm9240) Add missing dependency on REGMAP_I2C
| * ab6bc15e99 hwmon: (tmp513) Add missing dependency on REGMAP_I2C
| * 1d5f85f1b7 resource: fix region_intersects() vs add_memory_driver_managed()
| * 36b054324d slip: make slhc_remember() more robust against malicious packets
| * 30d91a478d ppp: fix ppp_async_encode() illegal access
* | 4098b69102 Revert "net: Add l3mdev index to flow struct and avoid oif reset for port devices"
* | 5cb5d15755 Revert "netfilter: rpfilter/fib: Populate flowic_l3mdev field"
* | 6fc602a28c Revert "netfilter: rpfilter/fib: Set ->flowic_uid correctly for user namespaces."
* | 7253529039 Revert "netfilter: fib: check correct rtable in vrf setups"
* | 81d8cb7a3e Merge 3502b1a297 ("netfilter: fib: check correct rtable in vrf setups") into android12-5.10-lts
|\|
| * 3502b1a297 netfilter: fib: check correct rtable in vrf setups
| * 037145e2a2 netfilter: rpfilter/fib: Set ->flowic_uid correctly for user namespaces.
| * d98558fe26 netfilter: rpfilter/fib: Populate flowic_l3mdev field
| * 740de19877 net: Add l3mdev index to flow struct and avoid oif reset for port devices
* | ff0e27a0f9 Merge 265bf63e24 ("sctp: ensure sk_state is set to CLOSED if hashing fails in sctp_listen_start") into android12-5.10-lts
|\|
| * 265bf63e24 sctp: ensure sk_state is set to CLOSED if hashing fails in sctp_listen_start
| * 23e139f90b net: ibm: emac: mal: fix wrong goto
| * adbc3eef43 net/sched: accept TCA_STAB only for root qdisc
| * d79af3af2f igb: Do not bring the device up after non-fatal error
| * c70e05b929 gpio: aspeed: Use devm_clk api to manage clock source
| * 36fd66cb51 gpio: aspeed: Add the flush write to ensure the write complete.
* | ca21e0d3a8 Merge 0e91c4b484 ("net: dsa: b53: fix jumbo frames on 10/100 ports") into android12-5.10-lts
|\|
| * 0e91c4b484 net: dsa: b53: fix jumbo frames on 10/100 ports
| * a7c9402bbc net: dsa: b53: allow lower MTUs on BCM5325/5365
| * 9f3407aa6c net: dsa: b53: fix max MTU for BCM5325/BCM5365
| * 0109267c1e net: dsa: b53: fix max MTU for 1g switches
| * a625acf221 net: dsa: b53: fix jumbo frame mtu check
| * e13ffbf5fd net: phy: bcm84881: Fix some error handling paths
| * ef44274dae Bluetooth: RFCOMM: FIX possible deadlock in rfcomm_sk_state_change
| * cce8419b81 netfilter: br_netfilter: fix panic with metadata_dst skb
| * 8a517d1845 tcp: fix tcp_enter_recovery() to zero retrans_stamp when it's safe
| * fe238ddf85 tcp: fix to allow timestamp undo if no retransmits were sent
* | 6c71f56f4f Merge 21b5af7f0c ("net: phy: dp83869: fix memory corruption when enabling fiber") into android12-5.10-lts
|\|
| * 21b5af7f0c net: phy: dp83869: fix memory corruption when enabling fiber
| * f892165c56 NFSv4: Prevent NULL-pointer dereference in nfs42_complete_copies()
| * 64f1b4922b SUNRPC: Fix integer overflow in decode_rc_list()
| * 1fc13f6a41 ice: fix VLAN replay after reset
| * 993ce09fe6 NFSD: Mark filecache "down" if init fails
* | e22e091f95 Merge de5a059e36 ("RDMA/rxe: Fix seg fault in rxe_comp_queue_pkt") into android12-5.10-lts
|\|
| * de5a059e36 RDMA/rxe: Fix seg fault in rxe_comp_queue_pkt
| * 252f147b18 fbdev: sisfb: Fix strbuf array overflow
| * f4149eec96 drm/amd/display: Check null pointer before dereferencing se
| * 56452dbc0a driver core: bus: Return -EIO instead of 0 when show/store invalid bus attribute
| * d8ac7378bc tools/iio: Add memory allocation failure check for trigger_name
| * 4ce662fe4b virtio_pmem: Check device status before requesting flush
| * 30ea38665d usb: dwc2: Adjust the timing of USB Driver Interrupt Registration in the Crashkernel Scenario
| * 4c83143fc6 usb: chipidea: udc: enable suspend interrupt after usb reset
| * b677b94a91 clk: imx: Remove CLK_SET_PARENT_GATE for DRAM mux for i.MX7D
| * 37c181e389 media: videobuf2-core: clear memory related fields in __vb2_plane_dmabuf_put()
| * b650189687 ntb: ntb_hw_switchtec: Fix use after free vulnerability in switchtec_ntb_remove due to race condition
| * 63047187a5 PCI: Mark Creative Labs EMU20k2 INTx masking as broken
| * a28703d4d4 i2c: i801: Use a different adapter-name for IDF adapters
| * e4f218455c PCI: Add ACS quirk for Qualcomm SA8775P
| * f3e0a8b7d4 clk: bcm: bcm53573: fix OF node leak in init
| * b10c1ca941 PCI: Add function 0 DMA alias quirk for Glenfly Arise chip
| * 713adaf0ec RDMA/mad: Improve handling of timed out WRs of mad agent
| * 24318116c4 ktest.pl: Avoid false positives with grub2 skip regex
| * 345d3c0bf2 s390/cpum_sf: Remove WARN_ON_ONCE statements
| * c2097d5efb ext4: nested locking for xattr inode
| * dced2c9d66 s390/mm: Add cond_resched() to cmm_alloc/free_pages()
| * 1cd197813e s390/facility: Disable compile time optimization for decompressor code
| * 029aa36ba3 bpf: Check percpu map value size first
| * 4f4a6d70d7 Input: synaptics-rmi4 - fix UAF of IRQ domain on driver removal
| * 546fb43a2e tracing/kprobes: Fix symbol counting logic by looking at modules as well
| * 90a6a070a8 tracing/kprobes: Return EADDRNOTAVAIL when func matches several symbols
* | 2a22a03cae Merge 2622c805ab ("kallsyms: Make module_kallsyms_on_each_symbol generally available") into android12-5.10-lts
|\|
| * 2622c805ab kallsyms: Make module_kallsyms_on_each_symbol generally available
| * 2aa861ec72 kallsyms: Make kallsyms_on_each_symbol generally available
| * 9b82d737d2 virtio_console: fix misc probe bugs
| * f2fd1a9597 tracing: Have saved_cmdlines arrays all in one allocation
| * 25b0021620 s390/zcore: release dump save area on restart or power down
| * 0b4dc46f87 s390/zcore: no need to check return value of debugfs_create functions
| * 421795b064 drm/crtc: fix uninitialized variable use even harder
| * a009e88cc9 tracing: Remove precision vsnprintf() check from print event
| * 6063d72b61 net: ethernet: cortina: Drop TSO support
| * 39fffca572 unicode: Don't special case ignorable code points
| * 6592347f06 vhost/scsi: null-ptr-dereference in vhost_scsi_get_req()
| * 2f6da71e9d ext4: fix inode tree inconsistency caused by ENOMEM
| * da964de4c1 ACPI: battery: Fix possible crash when unregistering a battery hook
| * 20557232c9 ACPI: battery: Simplify battery hook locking
| * 991e8b0bab r8169: add tally counter fields added with RTL8125
| * 238d5c541e r8169: Fix spelling mistake: "tx_underun" -> "tx_underrun"
| * 281edfa1cd clk: qcom: dispcc-sm8250: use CLK_SET_RATE_PARENT for branch clocks
* | 96a5139526 Merge 570e257621 ("drm/rockchip: vop: clear DMA stop bit on RK3066") into android12-5.10-lts
|\|
| * 570e257621 drm/rockchip: vop: clear DMA stop bit on RK3066
| * 411e2e1d01 drm/rockchip: support gamma control on RK3399
| * 1aeaa7e8d8 drm/rockchip: define gamma registers for RK3399
| * f561b48d63 uprobes: fix kernel info leak via "[uprobes]" vma
* | 042d3e2676 Merge 24afda0421 ("arm64: errata: Expand speculative SSBS workaround once more") into android12-5.10-lts
|\|
| * 24afda0421 arm64: errata: Expand speculative SSBS workaround once more
| * 9df353ca13 arm64: cputype: Add Neoverse-N3 definitions
| * c45edd5942 arm64: Add Cortex-715 CPU part definition
* | ce691439c0 Revert "ext4: properly sync file size update after O_SYNC direct IO"
* | f46870ab3d Revert "ext4: dax: fix overflowing extents beyond inode size when partially writing"
* | 5d9c84863f Merge f8a7c34232 ("ext4: dax: fix overflowing extents beyond inode size when partially writing") into android12-5.10-lts
|\|
| * f8a7c34232 ext4: dax: fix overflowing extents beyond inode size when partially writing
* | 8fb88ba5de Merge dde4c1e166 ("ext4: properly sync file size update after O_SYNC direct IO") into android12-5.10-lts
|\|
| * dde4c1e166 ext4: properly sync file size update after O_SYNC direct IO
* | e62d85f9ba Merge 6ff56ef7f7 ("i2c: xiic: Fix pm_runtime_set_suspended() with runtime pm enabled") into android12-5.10-lts
|\|
| * 6ff56ef7f7 i2c: xiic: Fix pm_runtime_set_suspended() with runtime pm enabled
* | b5e0cda160 Merge d223126bb0 ("i2c: xiic: Use devm_clk_get_enabled()") into android12-5.10-lts
|\|
| * d223126bb0 i2c: xiic: Use devm_clk_get_enabled()
* | ed3c358943 Merge 9bd3443e34 ("i2c: xiic: Simplify with dev_err_probe()") into android12-5.10-lts
|\|
| * 9bd3443e34 i2c: xiic: Simplify with dev_err_probe()
* | 93d28c0f5a Merge 8b55076b7b ("kconfig: qconf: fix buffer overflow in debug links") into android12-5.10-lts
|\|
| * 8b55076b7b kconfig: qconf: fix buffer overflow in debug links
* | 6e988ae353 Merge bfab5fbc12 ("drm/sched: Add locking to drm_sched_entity_modify_sched") into android12-5.10-lts
|\|
| * bfab5fbc12 drm/sched: Add locking to drm_sched_entity_modify_sched
* | 25d36c65fb Merge c54aa7d750 ("gpio: davinci: fix lazy disable") into android12-5.10-lts
|\|
| * c54aa7d750 gpio: davinci: fix lazy disable
* | 9fbdcfe7bb Merge 70b60c8d9b ("btrfs: wait for fixup workers before stopping cleaner kthread during umount") into android12-5.10-lts
|\|
| * 70b60c8d9b btrfs: wait for fixup workers before stopping cleaner kthread during umount
* | d476e18cbf Merge d73d48acf3 ("btrfs: fix a NULL pointer dereference when failed to start a new trasacntion") into android12-5.10-lts
|\|
| * d73d48acf3 btrfs: fix a NULL pointer dereference when failed to start a new trasacntion
* | 657f07546b Merge 67db431b85 ("ACPI: resource: Add Asus ExpertBook B2502CVA to irq1_level_low_skip_override[]") into android12-5.10-lts
|\|
| * 67db431b85 ACPI: resource: Add Asus ExpertBook B2502CVA to irq1_level_low_skip_override[]
* | 17c42250e8 Merge 1a819c7f85 ("ACPI: resource: Add Asus Vivobook X1704VAP to irq1_level_low_skip_override[]") into android12-5.10-lts
|\|
| * 1a819c7f85 ACPI: resource: Add Asus Vivobook X1704VAP to irq1_level_low_skip_override[]
* | c53240428e Revert "clk: qcom: clk-rpmh: Fix overflow in BCM vote"
* | 509ddbb2b8 Merge f976d964a6 ("Input: adp5589-keys - fix adp5589_gpio_get_value()") into android12-5.10-lts
|\|
| * f976d964a6 Input: adp5589-keys - fix adp5589_gpio_get_value()
| * bf8363e46f rtc: at91sam9: fix OF node leak in probe() error path
| * e33fe25b1e net: stmmac: Fix zero-division error when disabling tc cbs
| * 68e579316c tomoyo: fallback to realpath if symlink's pathname does not exist
| * 68c77a70e3 iio: magnetometer: ak8975: Fix reading for ak099xx sensors
| * 1d108095d5 clk: qcom: gcc-sm8250: Do not turn off PCIe GDSCs during gdsc_disable()
| * 60b6968341 media: venus: fix use after free bug in venus_remove due to race condition
| * 4445bc6e9f clk: qcom: clk-rpmh: Fix overflow in BCM vote
| * 3f73da56af media: uapi/linux/cec.h: cec_msg_set_reply_to: zero flags
| * 5443e70fb7 media: sun4i_csi: Implement link validate for sun4i_csi subdev
| * ed0d5103f9 clk: rockchip: fix error for unknown clocks
| * f63461af2c aoe: fix the potential use-after-free problem in more places
| * 7ae7ada29a NFSD: Fix NFSv4's PUTPUBFH operation
| * 0ea4333c67 nfsd: map the EBADMSG to nfserr_io to avoid warning
| * 96cad5da79 nfsd: fix delegation_blocked() to block correctly for at least 30 seconds
| * f692160d3e exfat: fix memory leak in exfat_load_bitmap()
| * e01e9ae43e riscv: define ILLEGAL_POINTER_VALUE for 64bit
| * 61b84013e5 ocfs2: fix possible null-ptr-deref in ocfs2_set_buffer_uptodate
| * bf605ae98d ocfs2: fix null-ptr-deref when journal load failed.
| * 3f1ca6ba54 ocfs2: remove unreasonable unlock in ocfs2_read_blocks
| * 14114d8148 ocfs2: cancel dqi_sync_work before freeing oinfo
| * aac31d654a ocfs2: reserve space for inline xattr before attaching reflink tree
| * 8e3bf36636 ocfs2: fix uninit-value in ocfs2_get_block()
| * ff1500fe26 ocfs2: fix the la space leak when unmounting an ocfs2 volume
| * a543785856 mm: krealloc: consider spare memory for __GFP_ZERO
| * 7fabacb337 jbd2: correctly compare tids with tid_geq function in jbd2_fc_begin_commit
| * 481e8f18a2 jbd2: stop waiting for space when jbd2_cleanup_journal_tail() returns error
| * 2bda897351 drm: omapdrm: Add missing check for alloc_ordered_workqueue
| * 3e8862875f of/irq: Support #msi-cells=<0> in of_msi_get_domain
| * a63fdf20cc parisc: Fix stack start for ADDR_NO_RANDOMIZE personality
| * ea7dead204 parisc: Fix 64-bit userspace syscall path
| * 25ec5c873c ext4: fix incorrect tid assumption in ext4_wait_for_tail_page_commit()
| * 6766937d03 ext4: update orig_path in ext4_find_extent()
| * b6c29c8f3d ext4: fix double brelse() the buffer of the extents path
| * 5e811066c5 ext4: aovid use-after-free in ext4_ext_insert_extent()
| * 8c26d9e53e ext4: drop ppath from ext4_ext_replay_update_ex() to avoid double-free
| * 4286a04183 ext4: fix incorrect tid assumption in __jbd2_log_wait_for_space()
| * 7bcdef04d0 ext4: propagate errors from ext4_find_extent() in ext4_insert_range()
| * e52f933598 ext4: fix slab-use-after-free in ext4_split_extent_at()
| * 133ff0d78f ext4: no need to continue when the number of entries is 1
* | 6a00671aec Merge 2c08dfc99f ("ALSA: hda/realtek: Add quirk for Huawei MateBook 13 KLV-WX9") into android12-5.10-lts
|\|
| * 2c08dfc99f ALSA: hda/realtek: Add quirk for Huawei MateBook 13 KLV-WX9
| * c36ff6948c ALSA: line6: add hw monitor volume control to POD HD500X
| * 64d315aeec ALSA: core: add isascii() check to card ID generator
| * b078a7eee1 drm: Consistently use struct drm_mode_rect for FB_DAMAGE_CLIPS
| * afa9990523 parisc: Fix itlb miss handler for 64-bit programs
| * d6b22a2d55 perf/core: Fix small negative period being ignored
| * 8ab638bb49 spi: bcm63xx: Fix module autoloading
| * f53c2b55d0 firmware: tegra: bpmp: Drop unused mbox_client_to_bpmp()
| * 2c1effc225 i2c: xiic: Wait for TX empty to avoid missed TX NAKs
| * 46c72b0139 i2c: qcom-geni: Use IRQF_NO_AUTOEN flag in request_irq()
| * 9b8bc33ad6 i2c: stm32f7: Do not prepare/unprepare clock during runtime suspend/resume
| * 10dde0c1fb selftests/mm: fix charge_reserved_hugetlb.sh test
| * e45803c71f selftests: vDSO: fix vDSO symbols lookup for powerpc64
| * 7624223155 selftests: breakpoints: use remaining time to check if suspend succeed
| * eda94fc74b spi: s3c64xx: fix timeout counters in flush_fifo
| * e3b57186f4 spi: spi-imx: Fix pm_runtime_set_suspended() with runtime pm enabled
| * 53b1999cfd ext4: fix i_data_sem unlock order in ext4_ind_migrate()
| * b0cb4561fc ext4: avoid use-after-free in ext4_ext_show_leaf()
| * a34416ec26 ext4: ext4_search_dir should return a proper error
| * e82df17e5f of/irq: Refer to actual buffer size in of_irq_parse_one()
| * 29f3889457 drm/amd/pm: ensure the fw_info is not null before using it
| * 0a377fcace drm/radeon/r100: Handle unknown family in r100_cp_init_microcode()
| * aec72bfbc1 scsi: aacraid: Rearrange order of struct aac_srb_unit
| * cf387300b8 drm/printer: Allow NULL data in devcoredump printer
| * f921335123 drm/amd/display: Initialize get_bytes_per_element's default to 1
| * 7ab69af56a drm/amd/display: Fix index out of bounds in DCN30 color transformation
| * c130a3c09e drm/amd/display: Fix index out of bounds in degamma hardware format translation
| * ad89f83343 drm/amd/display: Fix index out of bounds in DCN30 degamma hardware format translation
| * 0167d570f6 drm/amd/display: Check stream before comparing them
| * e2743d0a03 platform/x86: touchscreen_dmi: add nanote-next quirk
| * 831e8a816e drm/amdgpu: enable gfxoff quirk on HP 705G4
| * e407715e7a drm/amdgpu: add raven1 gfxoff quirk
| * 8b1dcf25c2 jfs: Fix uninit-value access of new_ea in ea_buffer
| * 2451e5917c jfs: check if leafidx greater than num leaves per dmap tree
| * fd026b6b67 jfs: Fix uaf in dbFreeBits
| * f9db7bb112 jfs: UBSAN: shift-out-of-bounds in dbFindBits
| * 8d54001f8d drm/amd/display: Check null pointers before using dc->clk_mgr
| * 49ded70954 ata: sata_sil: Rename sil_blacklist to sil_quirks
* | b48eba851f Merge 1ebfa66638 ("drm/amd/display: Add null check for top_pipe_to_program in commit_planes_for_stream") into android12-5.10-lts
|\|
| * 1ebfa66638 drm/amd/display: Add null check for top_pipe_to_program in commit_planes_for_stream
| * de9e7f6876 iommu/vt-d: Fix potential lockup if qi_submit_sync called with 0 count
| * 5652c448da iommu/vt-d: Always reserve a domain ID for identity setup
| * 9e493f002d power: reset: brcmstb: Do not go into infinite loop if reset fails
| * d9245b9296 iommu/arm-smmu-qcom: hide last LPASS SMMU context bank from linux
| * ceff6f5e71 rcuscale: Provide clear error when async specified without primitives
| * e6897e299f fbdev: pxafb: Fix possible use after free in pxafb_task()
| * 79681036a3 x86/syscall: Avoid memcpy() for ia32 syscall_get_arguments()
| * 98111af338 ALSA: hdsp: Break infinite MIDI input flush loop
| * 219587bca2 ALSA: asihpi: Fix potential OOB array access
| * e2b200c502 ALSA: usb-audio: Add logitech Audio profile quirk
| * 35733d1a60 ALSA: usb-audio: Define macros for quirk table entries
| * 6ee6835f82 signal: Replace BUG_ON()s
| * aa4e9056df nfp: Use IRQF_NO_AUTOEN flag in request_irq()
| * 1756918f51 wifi: mwifiex: Fix memcpy() field-spanning write warning in mwifiex_cmd_802_11_scan_ext()
| * 47be40b698 proc: add config & param to block forcing mem writes
| * 02c1725eb2 ACPICA: iasl: handle empty connection_node
| * 95a91802e4 tcp: avoid reusing FIN_WAIT2 when trying to find port in connect() process
| * b7cbdd6b1b net: atlantic: Avoid warning about potential string truncation
| * a479b653d5 ipv4: Mask upper DSCP bits and ECN bits in NETLINK_FIB_LOOKUP family
| * 669d337aa1 ipv4: Check !in_dev earlier for ioctl(SIOCSIFADDR).
| * bf60b4f587 net: mvpp2: Increase size of queue_name buffer
| * e2b2558971 tipc: guard against string buffer overrun
| * cbb67e245d ACPICA: check null return of ACPI_ALLOCATE_ZEROED() in acpi_db_convert_to_package()
| * a40e7a2b80 ACPI: EC: Do not release locks during operation region accesses
| * 7cd004102b wifi: rtw88: select WANT_DEV_COREDUMP
| * 0f26f26944 wifi: ath11k: fix array out-of-bound access in SoC stats
| * 1f61d50925 blk_iocost: fix more out of bound shifts
| * 62b8a46ba8 net: sched: consistently use rcu_replace_pointer() in taprio_change()
* | baa474b078 Merge 74c63fd016 ("ACPICA: Fix memory leak if acpi_ps_get_next_field() fails") into android12-5.10-lts
|\|
| * 74c63fd016 ACPICA: Fix memory leak if acpi_ps_get_next_field() fails
| * 30cd2158f2 ACPICA: Fix memory leak if acpi_ps_get_next_namepath() fails
| * 4440bac6f0 net: hisilicon: hns_mdio: fix OF node leak in probe()
| * 1245542856 net: hisilicon: hns_dsaf_mac: fix OF node leak in hns_mac_get_info()
| * ac6e862b8d net: hisilicon: hip04: fix OF node leak in probe()
| * a7f0073fcd net/xen-netback: prevent UAF in xenvif_flush_hash()
| * ed418cad83 ice: Adjust over allocation of memory in ice_sched_add_root_node() and ice_sched_add_node()
| * b02eb7c86f wifi: ath9k_htc: Use __skb_set_length() for resetting urb before resubmit
| * 2171e1d750 wifi: ath9k: fix possible integer overflow in ath9k_get_et_stats()
| * 000bab8753 f2fs: Require FMODE_WRITE for atomic write ioctls
| * b820cb910f ALSA: hda/conexant: Fix conflicting quirk for System76 Pangolin
| * f7785c4498 ALSA: hda/generic: Unconditionally prefer preferred_dacs pairs
| * f10d29b108 ALSA: hda/realtek: Fix the push button function for the ALC257
| * 7c93044298 ALSA: mixer_oss: Remove some incorrect kfree_const() usages
| * f13b04cf65 Bluetooth: L2CAP: Fix not validating setsockopt user input
| * 4ec4641df5 media: usbtv: Remove useless locks in usbtv_video_free()
| * a73d996436 i2c: xiic: Try re-initialization on bus busy timeout
| * c9668503e4 i2c: xiic: improve error message when transfer fails to start
| * 2d320d9de7 i2c: xiic: xiic_xfer(): Fix runtime PM leak on error path
| * 148fdc3c7d i2c: xiic: Fix RX IRQ busy check
| * 30def367fa i2c: xiic: Switch from waitqueue to completion
| * 6da4bbeb16 i2c: xiic: Fix broken locking on tx_msg
| * dd70c8a89e sctp: set sk_state back to CLOSED if autobind fails in sctp_listen_start
| * 16b66c46b6 ipv4: ip_gre: Fix drops of small packets in ipgre_xmit
| * 566a931a14 net: add more sanity checks to qdisc_pkt_len_init()
| * ba26060a29 net: avoid potential underflow in qdisc_pkt_len_init() with UFO
| * 185df15984 net: ethernet: lantiq_etop: fix memory disclosure
| * c8bb4e2d5f Bluetooth: btmrvl: Use IRQF_NO_AUTOEN flag in request_irq()
* | 6f91c0260d Merge 531754952f ("netfilter: nf_tables: prevent nf_skb_duplicated corruption") into android12-5.10-lts
|\|
| * 531754952f netfilter: nf_tables: prevent nf_skb_duplicated corruption
| * 7675fe977b net: ieee802154: mcr20a: Use IRQF_NO_AUTOEN flag in request_irq()
| * 181fbbdd46 netfilter: uapi: NFTA_FLOWTABLE_HOOK is NLA_NESTED
* | 6136b834d6 Merge cdd86fb75f ("net/mlx5: Added cond_resched() to crdump collection") into android12-5.10-lts
|\|
| * cdd86fb75f net/mlx5: Added cond_resched() to crdump collection
| * ca36d6c1a4 net/mlx5: Fix error path in multi-packet WQE transmit
| * fd7fcd802e ieee802154: Fix build error
| * f55e003d26 ceph: remove the incorrect Fw reference check when dirtying pages
| * 32ee78823d mailbox: bcm2835: Fix timeout during suspend mode
| * 3948c73c92 mailbox: rockchip: fix a typo in module autoloading
| * 6b9a551b83 spi: lpspi: Simplify some error message
| * 767b71f292 usb: yurex: Fix inconsistent locking bug in yurex_read()
| * 9f1c4edee8 i2c: isch: Add missed 'else'
| * 742a1b69c0 i2c: aspeed: Update the stop sw state when the bus recovery occurs
| * 52f7cab290 mm: only enforce minimum stack gap size if it's sensible
| * 1472dd897f lockdep: fix deadlock issue between lockdep and rcu
| * 118a0c3e55 xhci: Set quirky xHC PCI hosts to D3 _after_ stopping and freeing them.
| * cc1de44135 usb: renesas-xhci: Remove renesas_xhci_pci_exit()
| * 0f8e74a061 pps: add an error check in parport_attach
| * 0e50834814 pps: remove usage of the deprecated ida_simple_xx() API
| * 47a632e5c6 USB: misc: yurex: fix race between read and write
| * bf509ca62f usb: yurex: Replace snprintf() with the safer scnprintf() variant
| * 6ea76e19d6 soc: versatile: realview: fix soc_dev leak during device remove
| * 6b3b25311d soc: versatile: realview: fix memory leak during device remove
| * 263d04df06 PCI: xilinx-nwl: Fix off-by-one in INTx IRQ handler
| * 6dacc0b667 PCI: xilinx-nwl: Use irq_data_get_irq_chip_data()
| * 46c4079460 padata: use integer wrap around to prevent deadlock on seq_nr overflow
| * 7d0079d644 nfs: fix memory leak in error path of nfs4_do_reclaim
| * a239ff33c5 fs: Fix file_set_fowner LSM hook inconsistencies
| * 47a68c7505 vfs: fix race between evice_inodes() and find_inode()&iput()
| * 0eecd2ee23 arm64: dts: rockchip: Correct the Pinebook Pro battery design capacity
| * b2cb101b9b arm64: dts: rockchip: Raise Pinebook Pro's panel backlight PWM frequency
| * d41d665346 hwrng: cctrng - Add missing clk_disable_unprepare in cctrng_resume
| * 1b2137f6c9 hwrng: mtk - Use devm_pm_runtime_enable
| * cef1056ee6 f2fs: avoid potential int overflow in sanity_check_area_boundary()
| * 85c2f7bd57 f2fs: prevent possible int overflow in dir_block_index()
| * 5e3a031dfa debugobjects: Fix conditions in fill_pool()
| * dbffe7be55 wifi: rtw88: 8822c: Fix reported RX band width
| * 44f1816749 perf/x86/intel/pt: Fix sampling synchronization
| * f76b69ab9c efistub/tpm: Use ACPI reclaim memory for event log to avoid corruption
| * 45a765f4ba ACPI: resource: Add another DMI match for the TongFang GMxXGxx
| * 4b081991c4 ACPI: sysfs: validate return type of _STR method
| * 2e20b69b86 drbd: Add NULL check for net_conf to prevent dereference in state validation
| * 62720f2daa drbd: Fix atomicity violation in drbd_uuid_set_bm()
| * a295fa38dc crypto: ccp - Properly unregister /dev/sev on sev PLATFORM_STATUS failure
| * c7148bf45d tty: rp2: Fix reset with non forgiving PCIe host bridges
| * c30558e6c5 firmware_loader: Block path traversal
| * e89f925093 bus: integrator-lm: fix OF node leak in probe()
| * 61c12c72b1 USB: class: CDC-ACM: fix race between get_serial and set_serial
| * fa83e1df43 USB: misc: cypress_cy7c63: check for short transfer
| * 1c5cd41b4b USB: appledisplay: close race between probe and completion handler
| * 84f4d44703 drm/amd/display: Round calculated vtotal
| * 60aadf84be Input: i8042 - add another board name for TUXEDO Stellaris Gen5 AMD line
| * 13175be789 Input: i8042 - add TUXEDO Stellaris 15 Slim Gen6 AMD to i8042 quirk table
| * bf3f1affba Input: i8042 - add TUXEDO Stellaris 16 Gen5 AMD to i8042 quirk table
| * cb9897b946 soc: versatile: integrator: fix OF node leak in probe() error path
| * c55ebcb216 ASoC: rt5682: Return devm_of_clk_add_hw_provider to transfer the error
| * aaaf3cd0a7 Remove *.orig pattern from .gitignore
| * f291dc4cbc mptcp: fix sometimes-uninitialized warning
| * 2dbc4b7bac selinux,smack: don't bypass permissions check in inode_setsecctx hook
| * 4b81a9f92b bpf: Fix DEVMAP_HASH overflow check on 32-bit arches
| * 0e6378dd9b Revert "bpf: Eliminate rlimit-based memory accounting for devmap maps"
| * bfe249c151 Revert "bpf: Fix DEVMAP_HASH overflow check on 32-bit arches"
| * 8926201447 x86/mm: Switch to new Intel CPU model defines
| * 089aece01a powercap: RAPL: fix invalid initialization for pl4_supported field
| * ba624f656a Input: goodix - use the new soc_intel_is_byt() helper
| * 50460579fe drm/amd/display: Fix Synaptics Cascaded Panamera DSC Determination
* | f6317d304f Merge e0dbda9f26 ("netfilter: ctnetlink: compile ctnetlink_label_size with CONFIG_NF_CONNTRACK_EVENTS") into android12-5.10-lts
|\|
| * e0dbda9f26 netfilter: ctnetlink: compile ctnetlink_label_size with CONFIG_NF_CONNTRACK_EVENTS
* | 0e233e78a8 Merge db9c5f08ee ("netfilter: nf_tables: Keep deleted flowtable hooks until after RCU") into android12-5.10-lts
|\|
| * db9c5f08ee netfilter: nf_tables: Keep deleted flowtable hooks until after RCU
* | e45c637aa5 Merge 6c36857fe5 ("net: qrtr: Update packets cloning when broadcasting") into android12-5.10-lts
|\|
| * 6c36857fe5 net: qrtr: Update packets cloning when broadcasting
* | 8acb711851 Merge ec31cf42fc ("tcp: check skb is non-NULL in tcp_rto_delta_us()") into android12-5.10-lts
|\|
| * ec31cf42fc tcp: check skb is non-NULL in tcp_rto_delta_us()
* | 69acbd5795 Merge 98d14164c0 ("net: ipv6: select DST_CACHE from IPV6_RPL_LWTUNNEL") into android12-5.10-lts
|\|
| * 98d14164c0 net: ipv6: select DST_CACHE from IPV6_RPL_LWTUNNEL
* | 13cdfa4cd3 Merge 338a0582b2 ("net: seeq: Fix use after free vulnerability in ether3 Driver Due to Race Condition") into android12-5.10-lts
|\|
| * 338a0582b2 net: seeq: Fix use after free vulnerability in ether3 Driver Due to Race Condition
* | 973b583bb8 Merge dcf48ab3ca ("netfilter: nf_reject_ipv6: fix nf_reject_ip6_tcphdr_put()") into android12-5.10-lts
|\|
| * dcf48ab3ca netfilter: nf_reject_ipv6: fix nf_reject_ip6_tcphdr_put()
* | 0407f5e40e Merge 1429a9260f ("Revert "dm: requeue IO if mapping table not yet available"") into android12-5.10-lts
|\|
| * 1429a9260f Revert "dm: requeue IO if mapping table not yet available"
| * 0c170b1e91 vhost_vdpa: assign irq bypass producer token correctly
| * 10348fb6fe vdpa: Add eventfd for the vdpa callback
| * 64add9aaf7 interconnect: qcom: sm8250: Enable sync_state
| * d4951dd16e coresight: tmc: sg: Do not leak sg_table
| * cf0674248d iio: adc: ad7606: fix standby gpio state to match the documentation
| * 1ea56cd9a6 iio: adc: ad7606: fix oversampling gpio array
| * b7413dbc63 spi: spi-fsl-lpspi: Undo runtime PM changes at driver exit time
| * 0ed35dd547 spi: lpspi: release requested DMA channels
| * d612d419a5 spi: lpspi: Silence error message upon deferred probe
| * 6f2eeba7c3 f2fs: reduce expensive checkpoint trigger frequency
| * 3dc483f0e6 f2fs: remove unneeded check condition in __f2fs_setxattr()
| * 87aceb1ce6 f2fs: fix to update i_ctime in __f2fs_setxattr()
| * db930da947 f2fs: fix typo
| * 7b5476f061 f2fs: enhance to update i_mode and acl atomically in f2fs_setattr()
| * 0f1d007bbe nfsd: return -EINVAL when namelen is 0
| * 9f03f0016f nfsd: call cache_put if xdr_reserve_space returns NULL
| * 40d5787354 ntb_perf: Fix printk format
| * ef7e34237e ntb: intel: Fix the NULL vs IS_ERR() bug for debugfs_create_dir()
| * dd598ac57d RDMA/cxgb4: Added NULL check for lookup_atid
| * 502dac909e riscv: Fix fp alignment bug in perf_callchain_user()
| * 322911a2e6 RDMA/hns: Optimize hem allocation performance
| * 07f0f643d7 RDMA/hns: Fix spin_unlock_irqrestore() called with IRQs enabled
| * 1e6195dc7a RDMA/hns: Fix the overflow risk of hem_list_calc_ba_range()
| * 6258c4fb8d RDMA/hns: Refactor root BT allocation for MTR
| * d06fbe0b87 RDMA/hns: Add mapped page count checking for MTR
| * 2a2894e90c watchdog: imx_sc_wdt: Don't disable WDT in suspend
| * 5353f8ec59 pinctrl: mvebu: Fix devinit_dove_pinctrl_probe function
| * d8c75b8a91 pinctrl: mvebu: Use devm_platform_get_and_ioremap_resource()
| * 6007359143 nfsd: fix refcount leak when file is unhashed after being found
| * 6fcb4bbbec nfsd: remove unneeded EEXIST error check in nfsd_do_file_acquire
* | da5751e56b Revert "device property: Add const qualifier to device_get_match_data() parameter"
* | 47d930c2c7 Revert "i2c: Add i2c_get_match_data()"
* | a99e4337ab Revert "hwmon: (max16065) Remove use of i2c_match_id()"
* | 9c428fa328 Revert "hwmon: (max16065) Fix alarm attributes"
* | 246d613c20 Revert "cgroup: Make operations on the cgroup root_list RCU safe"
* | 77867ef6d4 Revert "cgroup: Move rcu_head up near the top of cgroup_root"
* | 8cf71990ea Revert "inet: inet_defrag: prevent sk release while still in use"
* | 3ce4532099 Revert "bareudp: Pull inner IP header in bareudp_udp_encap_recv()."
* | 9e57ad4546 Merge 0ce9d89343 ("clk: ti: dra7-atl: Fix leak of of_nodes") into android12-5.10-lts
|\|
| * 0ce9d89343 clk: ti: dra7-atl: Fix leak of of_nodes
| * 88ba7cd9f4 pinctrl: single: fix missing error code in pcs_probe()
| * 2efe8da2dd RDMA/iwcm: Fix WARNING:at_kernel/workqueue.c:#check_flush_dependency
| * f29951897a PCI: xilinx-nwl: Fix register misspelling
| * c289903b7a PCI: keystone: Fix if-statement expression in ks_pcie_quirk()
| * badbd736e6 drivers: media: dvb-frontends/rtl2830: fix an out-of-bounds write error
| * 6ae3b9aee4 drivers: media: dvb-frontends/rtl2832: fix an out-of-bounds write error
| * 45f826f6c8 clk: rockchip: Set parent rate for DCLK_VOP clock on RK3228
| * ca34aa3782 clk: imx: imx8mp: fix clock tree update of TF-A managed clocks
| * 11396ba4f8 perf time-utils: Fix 32-bit nsec parsing
| * a10a7d6d17 perf sched timehist: Fixed timestamp error when unable to confirm event sched_in time
| * 727660723e perf sched timehist: Fix missing free of session in perf_sched__timehist()
| * ea837ae511 bpf: Fix bpf_strtol and bpf_strtoul helpers for 32bit
| * d20674f316 nilfs2: fix potential oob read in nilfs_btree_check_delete()
| * e2290906bb nilfs2: determine empty node blocks as corrupted
| * 24bf40740a nilfs2: fix potential null-ptr-deref in nilfs_btree_insert()
| * 7fc22c3b3f ext4: avoid OOB when system.data xattr changes underneath the filesystem
| * e65f698736 ext4: return error on ext4_find_inline_entry
| * 2e073a579f ext4: avoid negative min_clusters in find_group_orlov()
| * 22d591d916 ext4: avoid potential buffer_head leak in __ext4_new_inode()
| * 08c63b7962 ext4: avoid buffer_head leak in ext4_mark_inode_used()
| * c4227a38ab smackfs: Use rcu_assign_pointer() to ensure safe assignment in smk_set_cipso
| * 4766ba108b ext4: clear EXT4_GROUP_INFO_WAS_TRIMMED_BIT even mount with discard
| * 3a1a31a38f kthread: fix task state in kthread worker if being frozen
| * 28fbbd0ce7 kthread: add kthread_work tracepoints
| * dd417529c0 xz: cleanup CRC32 edits from 2018
| * 4e1c8c12ca selftests/bpf: Fix C++ compile error from missing _Bool type
| * 9374068b36 selftests/bpf: Fix error compiling test_lru_map.c
| * c2db6acd8c selftests/bpf: Fix errors compiling cg_storage_multi.h with musl libc
| * 3467a94126 selftests/bpf: Fix compiling tcp_rtt.c with musl-libc
| * 5ad69f5a04 selftests/bpf: Fix compiling flow_dissector.c with musl-libc
| * 306efef84b selftests/bpf: Fix compiling kfree_skb.c with musl-libc
| * cc52d5282a selftests/bpf: Fix missing ARRAY_SIZE() definition in bench.c
| * 04eb60af43 selftests/bpf: Fix compile error from rlim_t in sk_storage_map.c
| * 2c9b228938 tpm: Clean up TPM space after command failure
| * a0a8b7bebe xen/swiotlb: add alignment check for dma buffers
| * cb9134aa09 xen: use correct end address of kernel for conflict checking
| * 86da3c79b8 drivers:drm:exynos_drm_gsc:Fix wrong assignment in gsc_bind()
| * 02657ced60 drm/msm: fix %s null argument error
| * 72fa5f700e ipmi: docs: don't advertise deprecated sysfs entries
| * e9e482e1e5 drm/msm/a5xx: workaround early ring-buffer emptiness check
| * d041301f30 drm/msm: Drop priv->lastctx
| * 9dffbbd7b8 drm/msm: Add priv->mm_lock to protect active/inactive lists
| * 5ce4075dde drm/msm/a5xx: fix races in preemption evaluation stage
| * cfca8b26a9 drm/msm/a5xx: properly clear preemption records on resume
| * fe93cd6635 drm/msm/a5xx: disable preemption in submits by default
| * 14531e3b82 drm/msm: Fix incorrect file name output in adreno_request_fw()
| * 0338e66cba jfs: fix out-of-bounds in dbNextAG() and diAlloc()
| * 36820265a0 drm/radeon/evergreen_cs: fix int overflow errors in cs track offsets
| * 6b38aedfdc drm/rockchip: dw_hdmi: Fix reading EDID when using a forced mode
| * 5f37e8c415 drm/rockchip: vop: Allow 4096px width scaling
| * e37fead06a drm/radeon: properly handle vbios fake edid sizing
| * af2fb608e9 drm/radeon: Replace one-element array with flexible-array member
| * 5f943045ec drm/amdgpu: properly handle vbios fake edid sizing
| * cd88105616 drm/amdgpu: Replace one-element array with flexible-array member
| * 65f9be0348 drm/stm: Fix an error handling path in stm_drm_platform_probe()
| * 278ec25952 mtd: powernv: Add check devm_kasprintf() returned value
| * 7661e90a60 fbdev: hpfb: Fix an error handling path in hpfb_dio_probe()
| * 9fb482fdf3 power: supply: max17042_battery: Fix SOC threshold calc w/ no current sense
| * 5c1997f7ad power: supply: axp20x_battery: Remove design from min and max voltage
| * c59f57f3f1 power: supply: axp20x_battery: allow disabling battery charging
| * 8202306e9f hwmon: (ntc_thermistor) fix module autoloading
| * 9efa58381a mtd: slram: insert break after errors in parsing the map
| * d7a7dd2966 hwmon: (max16065) Fix alarm attributes
| * 932559f25a hwmon: (max16065) Remove use of i2c_match_id()
| * 514a1508c3 i2c: Add i2c_get_match_data()
| * 167e4371ef device property: Add const qualifier to device_get_match_data() parameter
| * aeed49dd2b hwmon: (max16065) Fix overflows seen when writing limits
| * cdb20b703e m68k: Fix kernel_clone_args.flags in m68k_clone()
| * 42a9899e56 clocksource/drivers/qcom: Add missing iounmap() on errors in msm_dt_timer_init()
| * 97586fbd69 reset: berlin: fix OF node leak in probe() error path
| * ad0b53e4b5 ARM: versatile: fix OF node leak in CPUs prepare
| * 06ceed8eff ARM: dts: imx7d-zii-rmu2: fix Ethernet PHY pinctrl property
| * fb3cd974fb ARM: dts: microchip: sam9x60: Fix rtc/rtt clocks
| * 5f19060ab0 spi: ppc4xx: Avoid returning 0 when failed to parse and map IRQ
| * 63c7417ad4 spi: ppc4xx: handle irq_of_parse_and_map() errors
| * 4bc4272e25 block: fix potential invalid pointer dereference in blk_add_partition
| * 4d2760df0f block: print symbolic error name instead of error code
| * 3630a18846 block, bfq: don't break merge chain in bfq_split_bfqq()
| * a819a496d2 block, bfq: choose the last bfqq from merge chain in bfq_setup_cooperator()
| * e1277ae780 block, bfq: fix possible UAF for bfqq->bic with merge chain
| * cab9ff7fe8 net: tipc: avoid possible garbage value
| * 207503742c net: ipv6: rpl_iptunnel: Fix memory leak in rpl_input
| * 3df68f37c5 r8169: disable ALDPS per default for RTL8125
| * 5755eabda2 net: enetc: Use IRQF_NO_AUTOEN flag in request_irq()
| * e296245ca8 bareudp: Pull inner IP header on xmit.
| * b48fae6788 geneve: Fix incorrect inner network header offset when innerprotoinherit is set
| * 3b84799ea2 net: geneve: support IPv4/IPv6 as inner protocol
| * 76851c70a5 bareudp: Pull inner IP header in bareudp_udp_encap_recv().
| * cb1f7ef1f4 bareudp: allow redirecting bareudp packets to eth devices
| * 2accdb38c1 Bluetooth: btusb: Fix not handling ZPL/short-transfer
| * 3703e18a91 can: m_can: m_can_close(): stop clocks after device has been shut down
| * b6dce5b5a8 can: m_can: Add support for transceiver as phy
| * 5cc00913c1 can: bcm: Clear bo->bcm_proc_read after remove_proc_entry().
| * 1a11a1a532 sock_map: Add a cond_resched() in sock_hash_free()
| * 557418e170 wifi: wilc1000: fix potential RCU dereference issue in wilc_parse_join_bss_param
| * f232916fab wifi: mac80211: use two-phase skb reclamation in ieee80211_do_stop()
| * 793e01f996 wifi: cfg80211: fix two more possible UBSAN-detected off-by-one errors
| * f8e0ca3049 wifi: mt76: mt7915: fix rx filter setting for bfee functionality
| * 635ccdcd98 wifi: cfg80211: fix UBSAN noise in cfg80211_wext_siwscan()
| * 7b0724f7a9 cpufreq: ti-cpufreq: Introduce quirks to handle syscon fails appropriately
| * 0723ddb2d1 netfilter: nf_tables: reject expiration higher than timeout
| * 39c1012f5f netfilter: nf_tables: reject element expiration with no timeout
| * 1c0c097ded netfilter: nf_tables: elements with timeout below CONFIG_HZ never expire
| * 4bb459040d can: j1939: use correct function name in comment
| * b0947eca2a padata: Honor the caller's alignment in case of chunk_size 0
| * 60da25076f mount: handle OOM on mnt_warn_timestamp_expiry
| * f0a39ba6e0 fs/namespace: fnic: Switch to use %ptTd
| * 396e9c5cbf mount: warn only once about timestamp range expiration
| * 9722aa53fa fs: explicitly unregister per-superblock BDIs
| * 005dcd6bc4 ACPI: PMIC: Remove unneeded check in tps68470_pmic_opregion_probe()
| * a0c1e2da65 wifi: rtw88: always wait for both firmware loading attempts
| * 16e0ab9ed3 USB: usbtmc: prevent kernel-usb-infoleak
| * 50cff34dee USB: serial: pl2303: add device id for Macrosilicon MS3020
| * 31292316c5 usb: dwc3: Fix a typo in field name
| * 4abf184168 cgroup: Move rcu_head up near the top of cgroup_root
| * 65fd90e354 gpiolib: cdev: Ignore reconfiguration without direction
| * 1880a324af ftrace: Fix possible use-after-free issue in ftrace_location()
| * e6be2e1ebc x86/ibt,ftrace: Search for __fentry__ location
| * 9705f447bf inet: inet_defrag: prevent sk release while still in use
| * 0e7814b028 mptcp: pm: Fix uaf in __timer_delete_sync
| * 6a53e5def7 mptcp: validate 'id' when stopping the ADD_ADDR retransmit timer
| * a684b45a77 mptcp: export lookup_anno_list_by_saddr
| * 9d682e89c4 gpio: prevent potential speculation leaks in gpio_device_get_desc()
| * 5badd0ae8b netfilter: nf_tables: missing iterator type in lookup walk
| * ff89db14c6 netfilter: nft_set_pipapo: walk over current view on netlink dump
| * 45a81667e0 cgroup: Make operations on the cgroup root_list RCU safe
| * 57a3d89831 ocfs2: strict bound check before memcmp in ocfs2_xattr_find_entry()
| * 34759b7e44 ocfs2: add bounds checking to ocfs2_xattr_find_entry()
| * d5624db232 x86/hyperv: Set X86_FEATURE_TSC_KNOWN_FREQ when Hyper-V provides frequency
| * bbd11db41b spi: bcm63xx: Enable module autoloading
| * 040511d9f2 drm: komeda: Fix an issue related to normalized zpos
| * 3d39061b7b ASoC: tda7419: fix module autoloading
| * 9c6d4649f2 ASoC: intel: fix module autoloading
| * de46b1d24f wifi: iwlwifi: mvm: don't wait for tx queues if firmware is dead
| * db81677f4b wifi: iwlwifi: lower message level for FW buffer destination
| * dd34ef88d5 net: ftgmac100: Ensure tx descriptor updates are visible
| * 1a8e85289e microblaze: don't treat zero reserved memory regions as error
| * 2e5052143c pinctrl: at91: make it work with current gpiolib
| * 9f08d024ed ALSA: hda/realtek - FIxed ALC285 headphone no sound
| * fff183aa3c ALSA: hda/realtek - Fixed ALC256 headphone no sound
| * 0f4da063a1 ASoC: allow module autoloading for table db1200_pids
| * 007180fcb6 dma-buf: heaps: Fix off-by-one in CMA heap fault handler
| * 5a2cc2bb81 ASoC: meson: axg-card: fix 'use-after-free'
* | 1f05cd743b Merge ae96b02b9d ("soundwire: stream: Revert "soundwire: stream: fix programming slave ports for non-continous port maps"") into android12-5.10-lts
|\|
| * ae96b02b9d soundwire: stream: Revert "soundwire: stream: fix programming slave ports for non-continous port maps"
| * 609260542c spi: nxp-fspi: fix the KASAN report out-of-bounds bug
| * 1f31f51bfc net: dpaa: Pad packets to ETH_ZLEN
| * f2b13ec208 net: ftgmac100: Enable TX interrupt to avoid TX timeout
| * 392f6a97fc fou: fix initialization of grc
| * b9063702a0 net/mlx5e: Add missing link modes to ptys2ethtool_map
| * 097cc80396 net/mlx5: Update the list of the PCI supported devices
| * e7a9cca35e ice: fix accounting for filters shared by multiple VSIs
| * a38c552abf hwmon: (pmbus) Conditionally clear individual status bits for pmbus rev >= 1.2
| * b9d15b50b2 hwmon: (pmbus) Introduce and use write_byte_data callback
| * e829dbaf76 minmax: reduce min/max macro expansion in atomisp driver
| * 78078862f0 arm64: dts: rockchip: override BIOS_DISABLE signal via GPIO hog on RK3399 Puma
| * 14341f28a3 NFS: Avoid unnecessary rescanning of the per-server delegation list
| * 4f0e491644 Input: i8042 - add Fujitsu Lifebook E756 to i8042 quirk table
| * 00d54431b0 drm/msm/adreno: Fix error return if missing firmware-name
| * 44eb665889 scripts: kconfig: merge_config: config files: add a trailing newline
| * 9deecde637 Input: synaptics - enable SMBus for HP Elitebook 840 G2
| * 3f7183e28f Input: ads7846 - ratelimit the spi_sync error message
| * f08589057f btrfs: update target inode's ctime on unlink
| * 43662ba6ca powerpc/mm: Fix boot warning with hugepages and CONFIG_DEBUG_VIRTUAL
| * acb4baa484 net: phy: vitesse: repair vsc73xx autonegotiation
| * 3b9ca02300 net: ethernet: use ip_hdrlen() instead of bit shift
| * b06bb81ef9 usbnet: ipheth: fix carrier detection in modes 1 and 4
* | 8441327954 Revert "Merge 8a30bee7f5 ("usb: dwc3: core: update LC timer as per USB Spec V3.2") into android12-5.10-lts"
* | 18eef3d55a Merge 8a30bee7f5 ("usb: dwc3: core: update LC timer as per USB Spec V3.2") into android12-5.10-lts
|\|
| * 8a30bee7f5 usb: dwc3: core: update LC timer as per USB Spec V3.2
| * 1ac0667658 usb: dwc3: core: Enable GUCTL1 bit 10 for fixing termination error after resume bug
| * 6b3af2ad53 usb: dwc3: Decouple USB 2.0 L1 & L2 events
* e477d44e5f Merge branch 'android12-5.10' into android12-5.10-lts

Change-Id: I8bacb03dd3c3b30729c5ec54bdd57a03f6ff7fe1
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Greg Kroah-Hartman 2024-11-28 17:25:05 +00:00
commit b0e9b554c3
507 changed files with 3897 additions and 1733 deletions

1
.gitignore vendored
View File

@ -125,7 +125,6 @@ GTAGS
# id-utils files
ID
*.orig
*~
\#*#

View File

@ -4161,6 +4161,16 @@
printk.time= Show timing data prefixed to each printk message line
Format: <bool> (1/Y/y=enable, 0/N/n=disable)
proc_mem.force_override= [KNL]
Format: {always | ptrace | never}
Traditionally /proc/pid/mem allows memory permissions to be
overridden without restrictions. This option may be set to
restrict that. Can be one of:
- 'always': traditional behavior always allows mem overrides.
- 'ptrace': only allow mem overrides for active ptracers.
- 'never': never allow mem overrides.
If not specified, default is the CONFIG_PROC_MEM_* choice.
processor.max_cstate= [HW,ACPI]
Limit processor to maximum C-state
max_cstate=9 overrides any DMI blacklist limit.

View File

@ -112,6 +112,8 @@ stable kernels.
+----------------+-----------------+-----------------+-----------------------------+
| ARM | Cortex-A710 | #3324338 | ARM64_ERRATUM_3194386 |
+----------------+-----------------+-----------------+-----------------------------+
| ARM | Cortex-A715 | #3456084 | ARM64_ERRATUM_3194386 |
+----------------+-----------------+-----------------+-----------------------------+
| ARM | Cortex-A720 | #3456091 | ARM64_ERRATUM_3194386 |
+----------------+-----------------+-----------------+-----------------------------+
| ARM | Cortex-A725 | #3456106 | ARM64_ERRATUM_3194386 |
@ -140,6 +142,8 @@ stable kernels.
+----------------+-----------------+-----------------+-----------------------------+
| ARM | Neoverse-N2 | #3324339 | ARM64_ERRATUM_3194386 |
+----------------+-----------------+-----------------+-----------------------------+
| ARM | Neoverse-N3 | #3456111 | ARM64_ERRATUM_3194386 |
+----------------+-----------------+-----------------+-----------------------------+
| ARM | Neoverse-V1 | #3324341 | ARM64_ERRATUM_3194386 |
+----------------+-----------------+-----------------+-----------------------------+
| ARM | Neoverse-V2 | #3324336 | ARM64_ERRATUM_3194386 |

View File

@ -519,7 +519,7 @@ at module load time (for a module) with::
alerts_broken
The addresses are normal I2C addresses. The adapter is the string
name of the adapter, as shown in /sys/class/i2c-adapter/i2c-<n>/name.
name of the adapter, as shown in /sys/bus/i2c/devices/i2c-<n>/name.
It is *NOT* i2c-<n> itself. Also, the comparison is done ignoring
spaces, so if the name is "This is an I2C chip" you can say
adapter_name=ThisisanI2cchip. This is because it's hard to pass in

View File

@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 5
PATCHLEVEL = 10
SUBLEVEL = 226
SUBLEVEL = 228
EXTRAVERSION =
NAME = Dare mighty things

View File

@ -77,7 +77,7 @@ &gpio {
};
&hdmi {
hpd-gpios = <&expgpio 1 GPIO_ACTIVE_LOW>;
hpd-gpios = <&expgpio 0 GPIO_ACTIVE_LOW>;
power-domains = <&power RPI_POWER_DOMAIN_HDMI>;
status = "okay";
};

View File

@ -350,7 +350,7 @@ MX7D_PAD_SD3_RESET_B__SD3_RESET_B 0x59
&iomuxc_lpsr {
pinctrl_enet1_phy_interrupt: enet1phyinterruptgrp {
fsl,phy = <
fsl,pins = <
MX7D_PAD_LPSR_GPIO1_IO02__GPIO1_IO2 0x08
>;
};

View File

@ -692,7 +692,7 @@ rtt: rtt@fffffe20 {
compatible = "microchip,sam9x60-rtt", "atmel,at91sam9260-rtt";
reg = <0xfffffe20 0x20>;
interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
clocks = <&clk32k 0>;
clocks = <&clk32k 1>;
};
pit: timer@fffffe40 {
@ -718,7 +718,7 @@ rtc: rtc@fffffea8 {
compatible = "microchip,sam9x60-rtc", "atmel,at91sam9x5-rtc";
reg = <0xfffffea8 0x100>;
interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
clocks = <&clk32k 0>;
clocks = <&clk32k 1>;
};
watchdog: watchdog@ffffff80 {

View File

@ -66,6 +66,7 @@ static void __init realview_smp_prepare_cpus(unsigned int max_cpus)
return;
}
map = syscon_node_to_regmap(np);
of_node_put(np);
if (IS_ERR(map)) {
pr_err("PLATSMP: No syscon regmap\n");
return;

View File

@ -782,6 +782,7 @@ config ARM64_ERRATUM_3194386
* ARM Cortex-A78C erratum 3324346
* ARM Cortex-A78C erratum 3324347
* ARM Cortex-A710 erratam 3324338
* ARM Cortex-A715 errartum 3456084
* ARM Cortex-A720 erratum 3456091
* ARM Cortex-A725 erratum 3456106
* ARM Cortex-X1 erratum 3324344
@ -792,6 +793,7 @@ config ARM64_ERRATUM_3194386
* ARM Cortex-X925 erratum 3324334
* ARM Neoverse-N1 erratum 3324349
* ARM Neoverse N2 erratum 3324339
* ARM Neoverse-N3 erratum 3456111
* ARM Neoverse-V1 erratum 3324341
* ARM Neoverse V2 erratum 3324336
* ARM Neoverse-V3 erratum 3312417

View File

@ -10,7 +10,7 @@
#
# Copyright (C) 1995-2001 by Russell King
LDFLAGS_vmlinux :=--no-undefined -X
LDFLAGS_vmlinux :=--no-undefined -X --pic-veneer
ifeq ($(CONFIG_RELOCATABLE), y)
# Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour

View File

@ -25,12 +25,12 @@ chosen {
backlight: edp-backlight {
compatible = "pwm-backlight";
power-supply = <&vcc_12v>;
pwms = <&pwm0 0 740740 0>;
pwms = <&pwm0 0 125000 0>;
};
bat: battery {
compatible = "simple-battery";
charge-full-design-microamp-hours = <9800000>;
charge-full-design-microamp-hours = <10000000>;
voltage-max-design-microvolt = <4350000>;
voltage-min-design-microvolt = <3000000>;
};

View File

@ -148,6 +148,22 @@ &emmc_phy {
drive-impedance-ohm = <33>;
};
&gpio3 {
/*
* The Qseven BIOS_DISABLE signal on the RK3399-Q7 keeps the on-module
* eMMC and SPI flash powered-down initially (in fact it keeps the
* reset signal asserted). BIOS_DISABLE_OVERRIDE pin allows to override
* that signal so that eMMC and SPI can be used regardless of the state
* of the signal.
*/
bios-disable-override-hog {
gpios = <RK_PD5 GPIO_ACTIVE_LOW>;
gpio-hog;
line-name = "bios_disable_override";
output-high;
};
};
&gmac {
assigned-clocks = <&cru SCLK_RMII_SRC>;
assigned-clock-parents = <&clkin_gmac>;
@ -437,9 +453,14 @@ &pcie_clkreqn_cpm {
&pinctrl {
pinctrl-names = "default";
pinctrl-0 = <&q7_thermal_pin>;
pinctrl-0 = <&q7_thermal_pin &bios_disable_override_hog_pin>;
gpios {
bios_disable_override_hog_pin: bios-disable-override-hog-pin {
rockchip,pins =
<3 RK_PD5 RK_FUNC_GPIO &pcfg_pull_down>;
};
q7_thermal_pin: q7-thermal-pin {
rockchip,pins =
<0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>;

View File

@ -81,6 +81,7 @@
#define ARM_CPU_PART_CORTEX_A510 0xD46
#define ARM_CPU_PART_CORTEX_A520 0xD80
#define ARM_CPU_PART_CORTEX_A710 0xD47
#define ARM_CPU_PART_CORTEX_A715 0xD4D
#define ARM_CPU_PART_CORTEX_X2 0xD48
#define ARM_CPU_PART_NEOVERSE_N2 0xD49
#define ARM_CPU_PART_CORTEX_A78C 0xD4B
@ -92,6 +93,7 @@
#define ARM_CPU_PART_NEOVERSE_V3 0xD84
#define ARM_CPU_PART_CORTEX_X925 0xD85
#define ARM_CPU_PART_CORTEX_A725 0xD87
#define ARM_CPU_PART_NEOVERSE_N3 0xD8E
#define APM_CPU_PART_POTENZA 0x000
@ -141,6 +143,7 @@
#define MIDR_CORTEX_A510 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A510)
#define MIDR_CORTEX_A520 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A520)
#define MIDR_CORTEX_A710 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A710)
#define MIDR_CORTEX_A715 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A715)
#define MIDR_CORTEX_X2 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_X2)
#define MIDR_NEOVERSE_N2 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_N2)
#define MIDR_CORTEX_A78C MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A78C)
@ -152,6 +155,7 @@
#define MIDR_NEOVERSE_V3 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_V3)
#define MIDR_CORTEX_X925 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_X925)
#define MIDR_CORTEX_A725 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A725)
#define MIDR_NEOVERSE_N3 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_NEOVERSE_N3)
#define MIDR_THUNDERX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX)
#define MIDR_THUNDERX_81XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_81XX)
#define MIDR_THUNDERX_83XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_83XX)

View File

@ -10,11 +10,9 @@
#include <asm/insn.h>
#include <asm/probes.h>
#define MAX_UINSN_BYTES AARCH64_INSN_SIZE
#define UPROBE_SWBP_INSN BRK64_OPCODE_UPROBES
#define UPROBE_SWBP_INSN cpu_to_le32(BRK64_OPCODE_UPROBES)
#define UPROBE_SWBP_INSN_SIZE AARCH64_INSN_SIZE
#define UPROBE_XOL_SLOT_BYTES MAX_UINSN_BYTES
#define UPROBE_XOL_SLOT_BYTES AARCH64_INSN_SIZE
typedef u32 uprobe_opcode_t;
@ -23,8 +21,8 @@ struct arch_uprobe_task {
struct arch_uprobe {
union {
u8 insn[MAX_UINSN_BYTES];
u8 ixol[MAX_UINSN_BYTES];
__le32 insn;
__le32 ixol;
};
struct arch_probe_insn api;
bool simulate;

View File

@ -373,6 +373,7 @@ static const struct midr_range erratum_spec_ssbs_list[] = {
MIDR_ALL_VERSIONS(MIDR_CORTEX_A78),
MIDR_ALL_VERSIONS(MIDR_CORTEX_A78C),
MIDR_ALL_VERSIONS(MIDR_CORTEX_A710),
MIDR_ALL_VERSIONS(MIDR_CORTEX_A715),
MIDR_ALL_VERSIONS(MIDR_CORTEX_A720),
MIDR_ALL_VERSIONS(MIDR_CORTEX_A725),
MIDR_ALL_VERSIONS(MIDR_CORTEX_X1),
@ -383,6 +384,7 @@ static const struct midr_range erratum_spec_ssbs_list[] = {
MIDR_ALL_VERSIONS(MIDR_CORTEX_X925),
MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N1),
MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N2),
MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N3),
MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V1),
MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V2),
MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V3),

View File

@ -99,10 +99,6 @@ arm_probe_decode_insn(probe_opcode_t insn, struct arch_probe_insn *api)
aarch64_insn_is_blr(insn) ||
aarch64_insn_is_ret(insn)) {
api->handler = simulate_br_blr_ret;
} else if (aarch64_insn_is_ldr_lit(insn)) {
api->handler = simulate_ldr_literal;
} else if (aarch64_insn_is_ldrsw_lit(insn)) {
api->handler = simulate_ldrsw_literal;
} else {
/*
* Instruction cannot be stepped out-of-line and we don't
@ -140,6 +136,17 @@ arm_kprobe_decode_insn(kprobe_opcode_t *addr, struct arch_specific_insn *asi)
probe_opcode_t insn = le32_to_cpu(*addr);
probe_opcode_t *scan_end = NULL;
unsigned long size = 0, offset = 0;
struct arch_probe_insn *api = &asi->api;
if (aarch64_insn_is_ldr_lit(insn)) {
api->handler = simulate_ldr_literal;
decoded = INSN_GOOD_NO_SLOT;
} else if (aarch64_insn_is_ldrsw_lit(insn)) {
api->handler = simulate_ldrsw_literal;
decoded = INSN_GOOD_NO_SLOT;
} else {
decoded = arm_probe_decode_insn(insn, &asi->api);
}
/*
* If there's a symbol defined in front of and near enough to
@ -157,7 +164,6 @@ arm_kprobe_decode_insn(kprobe_opcode_t *addr, struct arch_specific_insn *asi)
else
scan_end = addr - MAX_ATOMIC_CONTEXT_SIZE;
}
decoded = arm_probe_decode_insn(insn, &asi->api);
if (decoded != INSN_REJECTED && scan_end)
if (is_probed_address_atomic(addr - 1, scan_end))

View File

@ -170,17 +170,15 @@ simulate_tbz_tbnz(u32 opcode, long addr, struct pt_regs *regs)
void __kprobes
simulate_ldr_literal(u32 opcode, long addr, struct pt_regs *regs)
{
u64 *load_addr;
unsigned long load_addr;
int xn = opcode & 0x1f;
int disp;
disp = ldr_displacement(opcode);
load_addr = (u64 *) (addr + disp);
load_addr = addr + ldr_displacement(opcode);
if (opcode & (1 << 30)) /* x0-x30 */
set_x_reg(regs, xn, *load_addr);
set_x_reg(regs, xn, READ_ONCE(*(u64 *)load_addr));
else /* w0-w30 */
set_w_reg(regs, xn, *load_addr);
set_w_reg(regs, xn, READ_ONCE(*(u32 *)load_addr));
instruction_pointer_set(regs, instruction_pointer(regs) + 4);
}
@ -188,14 +186,12 @@ simulate_ldr_literal(u32 opcode, long addr, struct pt_regs *regs)
void __kprobes
simulate_ldrsw_literal(u32 opcode, long addr, struct pt_regs *regs)
{
s32 *load_addr;
unsigned long load_addr;
int xn = opcode & 0x1f;
int disp;
disp = ldr_displacement(opcode);
load_addr = (s32 *) (addr + disp);
load_addr = addr + ldr_displacement(opcode);
set_x_reg(regs, xn, *load_addr);
set_x_reg(regs, xn, READ_ONCE(*(s32 *)load_addr));
instruction_pointer_set(regs, instruction_pointer(regs) + 4);
}

View File

@ -42,7 +42,7 @@ int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, struct mm_struct *mm,
else if (!IS_ALIGNED(addr, AARCH64_INSN_SIZE))
return -EINVAL;
insn = *(probe_opcode_t *)(&auprobe->insn[0]);
insn = le32_to_cpu(auprobe->insn);
switch (arm_probe_decode_insn(insn, &auprobe->api)) {
case INSN_REJECTED:
@ -108,7 +108,7 @@ bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs)
if (!auprobe->simulate)
return false;
insn = *(probe_opcode_t *)(&auprobe->insn[0]);
insn = le32_to_cpu(auprobe->insn);
addr = instruction_pointer(regs);
if (auprobe->api.handler)

View File

@ -116,7 +116,7 @@ asmlinkage int m68k_clone(struct pt_regs *regs)
{
/* regs will be equal to current_pt_regs() */
struct kernel_clone_args args = {
.flags = regs->d1 & ~CSIGNAL,
.flags = (u32)(regs->d1) & ~CSIGNAL,
.pidfd = (int __user *)regs->d3,
.child_tid = (int __user *)regs->d4,
.parent_tid = (int __user *)regs->d3,

View File

@ -245,11 +245,6 @@ asmlinkage void __init mmu_init(void)
{
unsigned int kstart, ksize;
if (!memblock.reserved.cnt) {
pr_emerg("Error memory count\n");
machine_restart(NULL);
}
if ((u32) memblock.memory.regions[0].size < 0x400000) {
pr_emerg("Memory must be greater than 4MB\n");
machine_restart(NULL);

View File

@ -1071,8 +1071,7 @@ ENTRY_CFI(intr_save) /* for os_hpmc */
STREG %r16, PT_ISR(%r29)
STREG %r17, PT_IOR(%r29)
#if 0 && defined(CONFIG_64BIT)
/* Revisit when we have 64-bit code above 4Gb */
#if defined(CONFIG_64BIT)
b,n intr_save2
skip_save_ior:
@ -1080,8 +1079,7 @@ skip_save_ior:
* need to adjust iasq/iaoq here in the same way we adjusted isr/ior
* above.
*/
extrd,u,* %r8,PSW_W_BIT,1,%r1
cmpib,COND(=),n 1,%r1,intr_save2
bb,COND(>=),n %r8,PSW_W_BIT,intr_save2
LDREG PT_IASQ0(%r29), %r16
LDREG PT_IAOQ0(%r29), %r17
/* adjust iasq/iaoq */

View File

@ -217,10 +217,10 @@ linux_gateway_entry:
#ifdef CONFIG_64BIT
ldil L%sys_call_table, %r1
or,= %r2,%r2,%r2
addil L%(sys_call_table64-sys_call_table), %r1
or,ev %r2,%r2,%r2
ldil L%sys_call_table64, %r1
ldo R%sys_call_table(%r1), %r19
or,= %r2,%r2,%r2
or,ev %r2,%r2,%r2
ldo R%sys_call_table64(%r1), %r19
#else
load32 sys_call_table, %r19
@ -355,10 +355,10 @@ tracesys_next:
extrd,u %r19,63,1,%r2 /* W hidden in bottom bit */
ldil L%sys_call_table, %r1
or,= %r2,%r2,%r2
addil L%(sys_call_table64-sys_call_table), %r1
or,ev %r2,%r2,%r2
ldil L%sys_call_table64, %r1
ldo R%sys_call_table(%r1), %r19
or,= %r2,%r2,%r2
or,ev %r2,%r2,%r2
ldo R%sys_call_table64(%r1), %r19
#else
load32 sys_call_table, %r19
@ -931,6 +931,8 @@ ENTRY(sys_call_table)
END(sys_call_table)
#ifdef CONFIG_64BIT
#undef __SYSCALL_WITH_COMPAT
#define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, native)
.align 8
ENTRY(sys_call_table64)
#include <asm/syscall_table_64.h> /* 64-bit native syscalls */

View File

@ -908,6 +908,7 @@ void __init setup_arch(char **cmdline_p)
mem_topology_setup();
/* Set max_mapnr before paging_init() */
set_max_mapnr(max_pfn);
high_memory = (void *)__va(max_low_pfn * PAGE_SIZE);
/*
* Release secondary cpus out of their spinloops at 0x60 now that

View File

@ -292,8 +292,6 @@ void __init mem_init(void)
swiotlb_init(0);
#endif
high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
kasan_late_init();
memblock_free_all();

View File

@ -1177,6 +1177,9 @@ void __init mem_topology_setup(void)
{
int cpu;
max_low_pfn = max_pfn = memblock_end_of_DRAM() >> PAGE_SHIFT;
min_low_pfn = MEMORY_START >> PAGE_SHIFT;
/*
* Linux/mm assumes node 0 to be online at boot. However this is not
* true on PowerPC, where node 0 is similar to any other node, it
@ -1221,9 +1224,6 @@ void __init initmem_init(void)
{
int nid;
max_low_pfn = memblock_end_of_DRAM() >> PAGE_SHIFT;
max_pfn = max_low_pfn;
memblock_dump_all();
for_each_online_node(nid) {

View File

@ -193,6 +193,11 @@ config GENERIC_HWEIGHT
config FIX_EARLYCON_MEM
def_bool MMU
config ILLEGAL_POINTER_VALUE
hex
default 0 if 32BIT
default 0xdead000000000000 if 64BIT
config PGTABLE_LEVELS
int
default 3 if 64BIT

View File

@ -71,7 +71,7 @@ void perf_callchain_user(struct perf_callchain_entry_ctx *entry,
perf_callchain_store(entry, regs->epc);
fp = user_backtrace(entry, fp, regs->ra);
while (fp && !(fp & 0x3) && entry->nr < entry->max_stack)
while (fp && !(fp & 0x7) && entry->nr < entry->max_stack)
fp = user_backtrace(entry, fp, 0);
}

View File

@ -53,8 +53,10 @@ static inline int test_facility(unsigned long nr)
unsigned long facilities_als[] = { FACILITIES_ALS };
if (__builtin_constant_p(nr) && nr < sizeof(facilities_als) * 8) {
if (__test_facility(nr, &facilities_als))
return 1;
if (__test_facility(nr, &facilities_als)) {
if (!__is_defined(__DECOMPRESSOR))
return 1;
}
}
return __test_facility(nr, &S390_lowcore.stfle_fac_list);
}

View File

@ -75,6 +75,7 @@ struct perf_sf_sde_regs {
#define SAMPLE_FREQ_MODE(hwc) (SAMPL_FLAGS(hwc) & PERF_CPUM_SF_FREQ_MODE)
#define perf_arch_fetch_caller_regs(regs, __ip) do { \
(regs)->psw.mask = 0; \
(regs)->psw.addr = (__ip); \
(regs)->gprs[15] = (unsigned long)__builtin_frame_address(0) - \
offsetof(struct stack_frame, back_chain); \

View File

@ -1432,7 +1432,7 @@ static int aux_output_begin(struct perf_output_handle *handle,
unsigned long head, base, offset;
struct hws_trailer_entry *te;
if (WARN_ON_ONCE(handle->head & ~PAGE_MASK))
if (handle->head & ~PAGE_MASK)
return -EINVAL;
aux->head = handle->head >> PAGE_SHIFT;
@ -1613,7 +1613,7 @@ static void hw_collect_aux(struct cpu_hw_sf *cpuhw)
unsigned long num_sdb;
aux = perf_get_aux(handle);
if (WARN_ON_ONCE(!aux))
if (!aux)
return;
/* Inform user space new data arrived */
@ -1635,7 +1635,7 @@ static void hw_collect_aux(struct cpu_hw_sf *cpuhw)
__func__);
break;
}
if (WARN_ON_ONCE(!aux))
if (!aux)
return;
/* Update head and alert_mark to new position */
@ -1870,12 +1870,8 @@ static void cpumsf_pmu_start(struct perf_event *event, int flags)
{
struct cpu_hw_sf *cpuhw = this_cpu_ptr(&cpu_hw_sf);
if (WARN_ON_ONCE(!(event->hw.state & PERF_HES_STOPPED)))
if (!(event->hw.state & PERF_HES_STOPPED))
return;
if (flags & PERF_EF_RELOAD)
WARN_ON_ONCE(!(event->hw.state & PERF_HES_UPTODATE));
perf_pmu_disable(event->pmu);
event->hw.state = 0;
cpuhw->lsctl.cs = 1;

View File

@ -77,7 +77,7 @@ static int __diag_page_ref_service(struct kvm_vcpu *vcpu)
vcpu->stat.diagnose_258++;
if (vcpu->run->s.regs.gprs[rx] & 7)
return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
rc = read_guest(vcpu, vcpu->run->s.regs.gprs[rx], rx, &parm, sizeof(parm));
rc = read_guest_real(vcpu, vcpu->run->s.regs.gprs[rx], &parm, sizeof(parm));
if (rc)
return kvm_s390_inject_prog_cond(vcpu, rc);
if (parm.parm_version != 2 || parm.parm_len < 5 || parm.code != 0x258)

View File

@ -794,46 +794,102 @@ static int low_address_protection_enabled(struct kvm_vcpu *vcpu,
return 1;
}
static int guest_page_range(struct kvm_vcpu *vcpu, unsigned long ga, u8 ar,
unsigned long *pages, unsigned long nr_pages,
const union asce asce, enum gacc_mode mode)
/**
* guest_range_to_gpas() - Calculate guest physical addresses of page fragments
* covering a logical range
* @vcpu: virtual cpu
* @ga: guest address, start of range
* @ar: access register
* @gpas: output argument, may be NULL
* @len: length of range in bytes
* @asce: address-space-control element to use for translation
* @mode: access mode
*
* Translate a logical range to a series of guest absolute addresses,
* such that the concatenation of page fragments starting at each gpa make up
* the whole range.
* The translation is performed as if done by the cpu for the given @asce, @ar,
* @mode and state of the @vcpu.
* If the translation causes an exception, its program interruption code is
* returned and the &struct kvm_s390_pgm_info pgm member of @vcpu is modified
* such that a subsequent call to kvm_s390_inject_prog_vcpu() will inject
* a correct exception into the guest.
* The resulting gpas are stored into @gpas, unless it is NULL.
*
* Note: All fragments except the first one start at the beginning of a page.
* When deriving the boundaries of a fragment from a gpa, all but the last
* fragment end at the end of the page.
*
* Return:
* * 0 - success
* * <0 - translation could not be performed, for example if guest
* memory could not be accessed
* * >0 - an access exception occurred. In this case the returned value
* is the program interruption code and the contents of pgm may
* be used to inject an exception into the guest.
*/
static int guest_range_to_gpas(struct kvm_vcpu *vcpu, unsigned long ga, u8 ar,
unsigned long *gpas, unsigned long len,
const union asce asce, enum gacc_mode mode)
{
psw_t *psw = &vcpu->arch.sie_block->gpsw;
unsigned int offset = offset_in_page(ga);
unsigned int fragment_len;
int lap_enabled, rc = 0;
enum prot_type prot;
unsigned long gpa;
lap_enabled = low_address_protection_enabled(vcpu, asce);
while (nr_pages) {
while (min(PAGE_SIZE - offset, len) > 0) {
fragment_len = min(PAGE_SIZE - offset, len);
ga = kvm_s390_logical_to_effective(vcpu, ga);
if (mode == GACC_STORE && lap_enabled && is_low_address(ga))
return trans_exc(vcpu, PGM_PROTECTION, ga, ar, mode,
PROT_TYPE_LA);
ga &= PAGE_MASK;
if (psw_bits(*psw).dat) {
rc = guest_translate(vcpu, ga, pages, asce, mode, &prot);
rc = guest_translate(vcpu, ga, &gpa, asce, mode, &prot);
if (rc < 0)
return rc;
} else {
*pages = kvm_s390_real_to_abs(vcpu, ga);
if (kvm_is_error_gpa(vcpu->kvm, *pages))
gpa = kvm_s390_real_to_abs(vcpu, ga);
if (kvm_is_error_gpa(vcpu->kvm, gpa))
rc = PGM_ADDRESSING;
}
if (rc)
return trans_exc(vcpu, rc, ga, ar, mode, prot);
ga += PAGE_SIZE;
pages++;
nr_pages--;
if (gpas)
*gpas++ = gpa;
offset = 0;
ga += fragment_len;
len -= fragment_len;
}
return 0;
}
static int access_guest_page(struct kvm *kvm, enum gacc_mode mode, gpa_t gpa,
void *data, unsigned int len)
{
const unsigned int offset = offset_in_page(gpa);
const gfn_t gfn = gpa_to_gfn(gpa);
int rc;
if (!gfn_to_memslot(kvm, gfn))
return PGM_ADDRESSING;
if (mode == GACC_STORE)
rc = kvm_write_guest_page(kvm, gfn, data, offset, len);
else
rc = kvm_read_guest_page(kvm, gfn, data, offset, len);
return rc;
}
int access_guest(struct kvm_vcpu *vcpu, unsigned long ga, u8 ar, void *data,
unsigned long len, enum gacc_mode mode)
{
psw_t *psw = &vcpu->arch.sie_block->gpsw;
unsigned long _len, nr_pages, gpa, idx;
unsigned long pages_array[2];
unsigned long *pages;
unsigned long nr_pages, idx;
unsigned long gpa_array[2];
unsigned int fragment_len;
unsigned long *gpas;
int need_ipte_lock;
union asce asce;
int rc;
@ -845,50 +901,45 @@ int access_guest(struct kvm_vcpu *vcpu, unsigned long ga, u8 ar, void *data,
if (rc)
return rc;
nr_pages = (((ga & ~PAGE_MASK) + len - 1) >> PAGE_SHIFT) + 1;
pages = pages_array;
if (nr_pages > ARRAY_SIZE(pages_array))
pages = vmalloc(array_size(nr_pages, sizeof(unsigned long)));
if (!pages)
gpas = gpa_array;
if (nr_pages > ARRAY_SIZE(gpa_array))
gpas = vmalloc(array_size(nr_pages, sizeof(unsigned long)));
if (!gpas)
return -ENOMEM;
need_ipte_lock = psw_bits(*psw).dat && !asce.r;
if (need_ipte_lock)
ipte_lock(vcpu);
rc = guest_page_range(vcpu, ga, ar, pages, nr_pages, asce, mode);
rc = guest_range_to_gpas(vcpu, ga, ar, gpas, len, asce, mode);
for (idx = 0; idx < nr_pages && !rc; idx++) {
gpa = *(pages + idx) + (ga & ~PAGE_MASK);
_len = min(PAGE_SIZE - (gpa & ~PAGE_MASK), len);
if (mode == GACC_STORE)
rc = kvm_write_guest(vcpu->kvm, gpa, data, _len);
else
rc = kvm_read_guest(vcpu->kvm, gpa, data, _len);
len -= _len;
ga += _len;
data += _len;
fragment_len = min(PAGE_SIZE - offset_in_page(gpas[idx]), len);
rc = access_guest_page(vcpu->kvm, mode, gpas[idx], data, fragment_len);
len -= fragment_len;
data += fragment_len;
}
if (need_ipte_lock)
ipte_unlock(vcpu);
if (nr_pages > ARRAY_SIZE(pages_array))
vfree(pages);
if (nr_pages > ARRAY_SIZE(gpa_array))
vfree(gpas);
return rc;
}
int access_guest_real(struct kvm_vcpu *vcpu, unsigned long gra,
void *data, unsigned long len, enum gacc_mode mode)
{
unsigned long _len, gpa;
unsigned int fragment_len;
unsigned long gpa;
int rc = 0;
while (len && !rc) {
gpa = kvm_s390_real_to_abs(vcpu, gra);
_len = min(PAGE_SIZE - (gpa & ~PAGE_MASK), len);
if (mode)
rc = write_guest_abs(vcpu, gpa, data, _len);
else
rc = read_guest_abs(vcpu, gpa, data, _len);
len -= _len;
gra += _len;
data += _len;
fragment_len = min(PAGE_SIZE - offset_in_page(gpa), len);
rc = access_guest_page(vcpu->kvm, mode, gpa, data, fragment_len);
len -= fragment_len;
gra += fragment_len;
data += fragment_len;
}
if (rc > 0)
vcpu->arch.pgm.code = rc;
return rc;
}
@ -904,8 +955,6 @@ int access_guest_real(struct kvm_vcpu *vcpu, unsigned long gra,
int guest_translate_address(struct kvm_vcpu *vcpu, unsigned long gva, u8 ar,
unsigned long *gpa, enum gacc_mode mode)
{
psw_t *psw = &vcpu->arch.sie_block->gpsw;
enum prot_type prot;
union asce asce;
int rc;
@ -913,23 +962,7 @@ int guest_translate_address(struct kvm_vcpu *vcpu, unsigned long gva, u8 ar,
rc = get_vcpu_asce(vcpu, &asce, gva, ar, mode);
if (rc)
return rc;
if (is_low_address(gva) && low_address_protection_enabled(vcpu, asce)) {
if (mode == GACC_STORE)
return trans_exc(vcpu, PGM_PROTECTION, gva, 0,
mode, PROT_TYPE_LA);
}
if (psw_bits(*psw).dat && !asce.r) { /* Use DAT? */
rc = guest_translate(vcpu, gva, gpa, asce, mode, &prot);
if (rc > 0)
return trans_exc(vcpu, rc, gva, 0, mode, prot);
} else {
*gpa = kvm_s390_real_to_abs(vcpu, gva);
if (kvm_is_error_gpa(vcpu->kvm, *gpa))
return trans_exc(vcpu, rc, gva, PGM_ADDRESSING, mode, 0);
}
return rc;
return guest_range_to_gpas(vcpu, gva, ar, gpa, 1, asce, mode);
}
/**
@ -938,17 +971,14 @@ int guest_translate_address(struct kvm_vcpu *vcpu, unsigned long gva, u8 ar,
int check_gva_range(struct kvm_vcpu *vcpu, unsigned long gva, u8 ar,
unsigned long length, enum gacc_mode mode)
{
unsigned long gpa;
unsigned long currlen;
union asce asce;
int rc = 0;
rc = get_vcpu_asce(vcpu, &asce, gva, ar, mode);
if (rc)
return rc;
ipte_lock(vcpu);
while (length > 0 && !rc) {
currlen = min(length, PAGE_SIZE - (gva % PAGE_SIZE));
rc = guest_translate_address(vcpu, gva, ar, &gpa, mode);
gva += currlen;
length -= currlen;
}
rc = guest_range_to_gpas(vcpu, gva, ar, NULL, length, asce, mode);
ipte_unlock(vcpu);
return rc;

View File

@ -344,11 +344,12 @@ int read_guest_abs(struct kvm_vcpu *vcpu, unsigned long gpa, void *data,
* @len: number of bytes to copy
*
* Copy @len bytes from @data (kernel space) to @gra (guest real address).
* It is up to the caller to ensure that the entire guest memory range is
* valid memory before calling this function.
* Guest low address and key protection are not checked.
*
* Returns zero on success or -EFAULT on error.
* Returns zero on success, -EFAULT when copying from @data failed, or
* PGM_ADRESSING in case @gra is outside a memslot. In this case, pgm check info
* is also stored to allow injecting into the guest (if applicable) using
* kvm_s390_inject_prog_cond().
*
* If an error occurs data may have been copied partially to guest memory.
*/
@ -367,11 +368,12 @@ int write_guest_real(struct kvm_vcpu *vcpu, unsigned long gra, void *data,
* @len: number of bytes to copy
*
* Copy @len bytes from @gra (guest real address) to @data (kernel space).
* It is up to the caller to ensure that the entire guest memory range is
* valid memory before calling this function.
* Guest key protection is not checked.
*
* Returns zero on success or -EFAULT on error.
* Returns zero on success, -EFAULT when copying to @data failed, or
* PGM_ADRESSING in case @gra is outside a memslot. In this case, pgm check info
* is also stored to allow injecting into the guest (if applicable) using
* kvm_s390_inject_prog_cond().
*
* If an error occurs data may have been copied partially to kernel space.
*/

View File

@ -95,11 +95,12 @@ static long cmm_alloc_pages(long nr, long *counter,
(*counter)++;
spin_unlock(&cmm_lock);
nr--;
cond_resched();
}
return nr;
}
static long cmm_free_pages(long nr, long *counter, struct cmm_page_array **list)
static long __cmm_free_pages(long nr, long *counter, struct cmm_page_array **list)
{
struct cmm_page_array *pa;
unsigned long addr;
@ -123,6 +124,21 @@ static long cmm_free_pages(long nr, long *counter, struct cmm_page_array **list)
return nr;
}
static long cmm_free_pages(long nr, long *counter, struct cmm_page_array **list)
{
long inc = 0;
while (nr) {
inc = min(256L, nr);
nr -= inc;
inc = __cmm_free_pages(inc, counter, list);
if (inc)
break;
cond_resched();
}
return nr + inc;
}
static int cmm_oom_notify(struct notifier_block *self,
unsigned long dummy, void *parm)
{

View File

@ -9,6 +9,8 @@
#include <asm/unwind_hints.h>
#include <asm/segment.h>
#include <asm/cache.h>
#include <asm/cpufeatures.h>
#include <asm/nospec-branch.h>
.pushsection .noinstr.text, "ax"
@ -17,6 +19,9 @@ SYM_FUNC_START(entry_ibpb)
movl $PRED_CMD_IBPB, %eax
xorl %edx, %edx
wrmsr
/* Make sure IBPB clears return stack preductions too. */
FILL_RETURN_BUFFER %rax, RSB_CLEAR_LOOPS, X86_BUG_IBPB_NO_RET
RET
SYM_FUNC_END(entry_ibpb)
/* For KVM */

View File

@ -939,6 +939,8 @@ SYM_FUNC_START(entry_SYSENTER_32)
/* Now ready to switch the cr3 */
SWITCH_TO_USER_CR3 scratch_reg=%eax
/* Clobbers ZF */
CLEAR_CPU_BUFFERS
/*
* Restore all flags except IF. (We restore IF separately because
@ -949,7 +951,6 @@ SYM_FUNC_START(entry_SYSENTER_32)
BUG_IF_WRONG_CR3 no_user_check=1
popfl
popl %eax
CLEAR_CPU_BUFFERS
/*
* Return back to the vDSO, which will pop ecx and edx.
@ -1221,7 +1222,6 @@ SYM_CODE_START(asm_exc_nmi)
/* Not on SYSENTER stack. */
call exc_nmi
CLEAR_CPU_BUFFERS
jmp .Lnmi_return
.Lnmi_from_sysenter_stack:
@ -1242,6 +1242,7 @@ SYM_CODE_START(asm_exc_nmi)
CHECK_AND_APPLY_ESPFIX
RESTORE_ALL_NMI cr3_reg=%edi pop=4
CLEAR_CPU_BUFFERS
jmp .Lirq_return
#ifdef CONFIG_X86_ESPFIX32
@ -1283,6 +1284,7 @@ SYM_CODE_START(asm_exc_nmi)
* 1 - orig_ax
*/
lss (1+5+6)*4(%esp), %esp # back to espfix stack
CLEAR_CPU_BUFFERS
jmp .Lirq_return
#endif
SYM_CODE_END(asm_exc_nmi)

View File

@ -1586,6 +1586,7 @@ static void pt_event_stop(struct perf_event *event, int mode)
* see comment in intel_pt_interrupt().
*/
WRITE_ONCE(pt->handle_nmi, 0);
barrier();
pt_config_stop(event);
@ -1637,11 +1638,10 @@ static long pt_event_snapshot_aux(struct perf_event *event,
return 0;
/*
* Here, handle_nmi tells us if the tracing is on
* There is no PT interrupt in this mode, so stop the trace and it will
* remain stopped while the buffer is copied.
*/
if (READ_ONCE(pt->handle_nmi))
pt_config_stop(event);
pt_config_stop(event);
pt_read_offset(buf);
pt_update_head(pt);
@ -1653,11 +1653,10 @@ static long pt_event_snapshot_aux(struct perf_event *event,
ret = perf_output_copy_aux(&pt->handle, handle, from, to);
/*
* If the tracing was on when we turned up, restart it.
* Compiler barrier not needed as we couldn't have been
* preempted by anything that touches pt->handle_nmi.
* Here, handle_nmi tells us if the tracing was on.
* If the tracing was on, restart it.
*/
if (pt->handle_nmi)
if (READ_ONCE(pt->handle_nmi))
pt_config_start(event);
return ret;

View File

@ -217,7 +217,7 @@
#define X86_FEATURE_SPEC_STORE_BYPASS_DISABLE ( 7*32+23) /* "" Disable Speculative Store Bypass. */
#define X86_FEATURE_LS_CFG_SSBD ( 7*32+24) /* "" AMD SSBD implementation via LS_CFG MSR */
#define X86_FEATURE_IBRS ( 7*32+25) /* Indirect Branch Restricted Speculation */
#define X86_FEATURE_IBPB ( 7*32+26) /* Indirect Branch Prediction Barrier */
#define X86_FEATURE_IBPB ( 7*32+26) /* "ibpb" Indirect Branch Prediction Barrier without a guaranteed RSB flush */
#define X86_FEATURE_STIBP ( 7*32+27) /* Single Thread Indirect Branch Predictors */
#define X86_FEATURE_ZEN ( 7*32+28) /* "" CPU is AMD family 0x17 or above (Zen) */
#define X86_FEATURE_L1TF_PTEINV ( 7*32+29) /* "" L1TF workaround PTE inversion */
@ -324,6 +324,7 @@
#define X86_FEATURE_VIRT_SSBD (13*32+25) /* Virtualized Speculative Store Bypass Disable */
#define X86_FEATURE_AMD_SSB_NO (13*32+26) /* "" Speculative Store Bypass is fixed in hardware. */
#define X86_FEATURE_BTC_NO (13*32+29) /* "" Not vulnerable to Branch Type Confusion */
#define X86_FEATURE_AMD_IBPB_RET (13*32+30) /* "" IBPB clears return address predictor */
/* Thermal and Power Management Leaf, CPUID level 0x00000006 (EAX), word 14 */
#define X86_FEATURE_DTHERM (14*32+ 0) /* Digital Thermal Sensor */
@ -455,4 +456,6 @@
#define X86_BUG_SRSO X86_BUG(1*32 + 0) /* AMD SRSO bug */
#define X86_BUG_DIV0 X86_BUG(1*32 + 1) /* AMD DIV0 speculation bug */
#define X86_BUG_RFDS X86_BUG(1*32 + 2) /* CPU is vulnerable to Register File Data Sampling */
#define X86_BUG_BHI X86_BUG(1*32 + 3) /* CPU is affected by Branch History Injection */
#define X86_BUG_IBPB_NO_RET X86_BUG(1*32 + 4) /* "ibpb_no_ret" IBPB omits return target predictions */
#endif /* _ASM_X86_CPUFEATURES_H */

View File

@ -85,7 +85,12 @@ static inline void syscall_get_arguments(struct task_struct *task,
struct pt_regs *regs,
unsigned long *args)
{
memcpy(args, &regs->bx, 6 * sizeof(args[0]));
args[0] = regs->bx;
args[1] = regs->cx;
args[2] = regs->dx;
args[3] = regs->si;
args[4] = regs->di;
args[5] = regs->bp;
}
static inline void syscall_set_arguments(struct task_struct *task,

View File

@ -491,7 +491,19 @@ static int lapic_timer_shutdown(struct clock_event_device *evt)
v = apic_read(APIC_LVTT);
v |= (APIC_LVT_MASKED | LOCAL_TIMER_VECTOR);
apic_write(APIC_LVTT, v);
apic_write(APIC_TMICT, 0);
/*
* Setting APIC_LVT_MASKED (above) should be enough to tell
* the hardware that this timer will never fire. But AMD
* erratum 411 and some Intel CPU behavior circa 2024 say
* otherwise. Time for belt and suspenders programming: mask
* the timer _and_ zero the counter registers:
*/
if (v & APIC_LVT_TIMER_TSCDEADLINE)
wrmsrl(MSR_IA32_TSC_DEADLINE, 0);
else
apic_write(APIC_TMICT, 0);
return 0;
}

View File

@ -1061,7 +1061,24 @@ static void __init retbleed_select_mitigation(void)
case RETBLEED_MITIGATION_IBPB:
setup_force_cpu_cap(X86_FEATURE_ENTRY_IBPB);
/*
* IBPB on entry already obviates the need for
* software-based untraining so clear those in case some
* other mitigation like SRSO has selected them.
*/
setup_clear_cpu_cap(X86_FEATURE_UNRET);
setup_clear_cpu_cap(X86_FEATURE_RETHUNK);
mitigate_smt = true;
/*
* There is no need for RSB filling: entry_ibpb() ensures
* all predictions, including the RSB, are invalidated,
* regardless of IBPB implementation.
*/
setup_clear_cpu_cap(X86_FEATURE_RSB_VMEXIT);
break;
default:
@ -2453,6 +2470,14 @@ static void __init srso_select_mitigation(void)
if (has_microcode) {
setup_force_cpu_cap(X86_FEATURE_ENTRY_IBPB);
srso_mitigation = SRSO_MITIGATION_IBPB;
/*
* IBPB on entry already obviates the need for
* software-based untraining so clear those in case some
* other mitigation like Retbleed has selected them.
*/
setup_clear_cpu_cap(X86_FEATURE_UNRET);
setup_clear_cpu_cap(X86_FEATURE_RETHUNK);
}
} else {
pr_err("WARNING: kernel not compiled with CPU_IBPB_ENTRY.\n");
@ -2465,6 +2490,13 @@ static void __init srso_select_mitigation(void)
if (!boot_cpu_has(X86_FEATURE_ENTRY_IBPB) && has_microcode) {
setup_force_cpu_cap(X86_FEATURE_IBPB_ON_VMEXIT);
srso_mitigation = SRSO_MITIGATION_IBPB_ON_VMEXIT;
/*
* There is no need for RSB filling: entry_ibpb() ensures
* all predictions, including the RSB, are invalidated,
* regardless of IBPB implementation.
*/
setup_clear_cpu_cap(X86_FEATURE_RSB_VMEXIT);
}
} else {
pr_err("WARNING: kernel not compiled with CPU_SRSO.\n");

View File

@ -1335,6 +1335,9 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c)
if (vulnerable_to_rfds(ia32_cap))
setup_force_cpu_bug(X86_BUG_RFDS);
if (cpu_has(c, X86_FEATURE_AMD_IBPB) && !cpu_has(c, X86_FEATURE_AMD_IBPB_RET))
setup_force_cpu_bug(X86_BUG_IBPB_NO_RET);
if (cpu_matches(cpu_vuln_whitelist, NO_MELTDOWN))
return;

View File

@ -275,6 +275,7 @@ static void __init ms_hyperv_init_platform(void)
ms_hyperv.misc_features & HV_FEATURE_FREQUENCY_MSRS_AVAILABLE) {
x86_platform.calibrate_tsc = hv_get_tsc_khz;
x86_platform.calibrate_cpu = hv_get_tsc_khz;
setup_force_cpu_cap(X86_FEATURE_TSC_KNOWN_FREQ);
}
if (ms_hyperv.hints & HV_X64_ENLIGHTENED_VMCS_RECOMMENDED) {

View File

@ -251,7 +251,7 @@ static inline bool rdt_get_mb_table(struct rdt_resource *r)
return false;
}
static bool __get_mem_config_intel(struct rdt_resource *r)
static __init bool __get_mem_config_intel(struct rdt_resource *r)
{
union cpuid_0x10_3_eax eax;
union cpuid_0x10_x_edx edx;
@ -285,7 +285,7 @@ static bool __get_mem_config_intel(struct rdt_resource *r)
return true;
}
static bool __rdt_get_mem_config_amd(struct rdt_resource *r)
static __init bool __rdt_get_mem_config_amd(struct rdt_resource *r)
{
union cpuid_0x10_3_eax eax;
union cpuid_0x10_x_edx edx;

View File

@ -194,17 +194,10 @@ static unsigned long
__recover_probed_insn(kprobe_opcode_t *buf, unsigned long addr)
{
struct kprobe *kp;
unsigned long faddr;
bool faddr;
kp = get_kprobe((void *)addr);
faddr = ftrace_location(addr);
/*
* Addresses inside the ftrace location are refused by
* arch_check_ftrace_location(). Something went terribly wrong
* if such an address is checked here.
*/
if (WARN_ON(faddr && faddr != addr))
return 0UL;
faddr = ftrace_location(addr) == addr;
/*
* Use the current code if it is not modified by Kprobe
* and it cannot be modified by ftrace.

View File

@ -263,21 +263,17 @@ static void __init probe_page_size_mask(void)
}
}
#define INTEL_MATCH(_model) { .vendor = X86_VENDOR_INTEL, \
.family = 6, \
.model = _model, \
}
/*
* INVLPG may not properly flush Global entries
* on these CPUs when PCIDs are enabled.
*/
static const struct x86_cpu_id invlpg_miss_ids[] = {
INTEL_MATCH(INTEL_FAM6_ALDERLAKE ),
INTEL_MATCH(INTEL_FAM6_ALDERLAKE_L ),
INTEL_MATCH(INTEL_FAM6_ALDERLAKE_N ),
INTEL_MATCH(INTEL_FAM6_RAPTORLAKE ),
INTEL_MATCH(INTEL_FAM6_RAPTORLAKE_P),
INTEL_MATCH(INTEL_FAM6_RAPTORLAKE_S),
X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE, 0),
X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE_L, 0),
X86_MATCH_INTEL_FAM6_MODEL(ALDERLAKE_N, 0),
X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE, 0),
X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_P, 0),
X86_MATCH_INTEL_FAM6_MODEL(RAPTORLAKE_S, 0),
{}
};

View File

@ -856,7 +856,7 @@ char * __init xen_memory_setup(void)
* to relocating (and even reusing) pages with kernel text or data.
*/
if (xen_is_e820_reserved(__pa_symbol(_text),
__pa_symbol(__bss_stop) - __pa_symbol(_text))) {
__pa_symbol(_end) - __pa_symbol(_text))) {
xen_raw_console_write("Xen hypervisor allocated kernel memory conflicts with E820 map\n");
BUG();
}

View File

@ -2616,8 +2616,12 @@ bfq_setup_cooperator(struct bfq_data *bfqd, struct bfq_queue *bfqq,
struct bfq_queue *in_service_bfqq, *new_bfqq;
/* if a merge has already been setup, then proceed with that first */
if (bfqq->new_bfqq)
return bfqq->new_bfqq;
new_bfqq = bfqq->new_bfqq;
if (new_bfqq) {
while (new_bfqq->new_bfqq)
new_bfqq = new_bfqq->new_bfqq;
return new_bfqq;
}
/*
* Do not perform queue merging if the device is non
@ -2770,10 +2774,12 @@ void bfq_release_process_ref(struct bfq_data *bfqd, struct bfq_queue *bfqq)
bfq_put_queue(bfqq);
}
static void
bfq_merge_bfqqs(struct bfq_data *bfqd, struct bfq_io_cq *bic,
struct bfq_queue *bfqq, struct bfq_queue *new_bfqq)
static struct bfq_queue *bfq_merge_bfqqs(struct bfq_data *bfqd,
struct bfq_io_cq *bic,
struct bfq_queue *bfqq)
{
struct bfq_queue *new_bfqq = bfqq->new_bfqq;
bfq_log_bfqq(bfqd, bfqq, "merging with queue %lu",
(unsigned long)new_bfqq->pid);
/* Save weight raising and idle window of the merged queues */
@ -2841,6 +2847,8 @@ bfq_merge_bfqqs(struct bfq_data *bfqd, struct bfq_io_cq *bic,
new_bfqq->pid = -1;
bfqq->bic = NULL;
bfq_release_process_ref(bfqd, bfqq);
return new_bfqq;
}
static bool bfq_allow_bio_merge(struct request_queue *q, struct request *rq,
@ -2876,14 +2884,8 @@ static bool bfq_allow_bio_merge(struct request_queue *q, struct request *rq,
* fulfilled, i.e., bic can be redirected to new_bfqq
* and bfqq can be put.
*/
bfq_merge_bfqqs(bfqd, bfqd->bio_bic, bfqq,
new_bfqq);
/*
* If we get here, bio will be queued into new_queue,
* so use new_bfqq to decide whether bio and rq can be
* merged.
*/
bfqq = new_bfqq;
while (bfqq != new_bfqq)
bfqq = bfq_merge_bfqqs(bfqd, bfqd->bio_bic, bfqq);
/*
* Change also bqfd->bio_bfqq, as
@ -5437,6 +5439,7 @@ static bool __bfq_insert_request(struct bfq_data *bfqd, struct request *rq)
bool waiting, idle_timer_disabled = false;
if (new_bfqq) {
struct bfq_queue *old_bfqq = bfqq;
/*
* Release the request's reference to the old bfqq
* and make sure one is taken to the shared queue.
@ -5452,18 +5455,18 @@ static bool __bfq_insert_request(struct bfq_data *bfqd, struct request *rq)
* then complete the merge and redirect it to
* new_bfqq.
*/
if (bic_to_bfqq(RQ_BIC(rq), 1) == bfqq)
bfq_merge_bfqqs(bfqd, RQ_BIC(rq),
bfqq, new_bfqq);
if (bic_to_bfqq(RQ_BIC(rq), 1) == bfqq) {
while (bfqq != new_bfqq)
bfqq = bfq_merge_bfqqs(bfqd, RQ_BIC(rq), bfqq);
}
bfq_clear_bfqq_just_created(bfqq);
bfq_clear_bfqq_just_created(old_bfqq);
/*
* rq is about to be enqueued into new_bfqq,
* release rq reference on bfqq
*/
bfq_put_queue(bfqq);
bfq_put_queue(old_bfqq);
rq->elv.priv[1] = new_bfqq;
bfqq = new_bfqq;
}
bfq_update_io_thinktime(bfqd, bfqq);
@ -6004,7 +6007,7 @@ bfq_split_bfqq(struct bfq_io_cq *bic, struct bfq_queue *bfqq)
{
bfq_log_bfqq(bfqq->bfqd, bfqq, "splitting queue");
if (bfqq_process_refs(bfqq) == 1) {
if (bfqq_process_refs(bfqq) == 1 && !bfqq->new_bfqq) {
bfqq->pid = current->pid;
bfq_clear_bfqq_coop(bfqq);
bfq_clear_bfqq_split_coop(bfqq);
@ -6189,7 +6192,8 @@ static struct bfq_queue *bfq_init_rq(struct request *rq)
* addition, if the queue has also just been split, we have to
* resume its state.
*/
if (likely(bfqq != &bfqd->oom_bfqq) && bfqq_process_refs(bfqq) == 1) {
if (likely(bfqq != &bfqd->oom_bfqq) && !bfqq->new_bfqq &&
bfqq_process_refs(bfqq) == 1) {
bfqq->bic = bic;
if (split) {
/*

View File

@ -2022,7 +2022,7 @@ static void ioc_forgive_debts(struct ioc *ioc, u64 usage_us_sum, int nr_debtors,
struct ioc_now *now)
{
struct ioc_gq *iocg;
u64 dur, usage_pct, nr_cycles;
u64 dur, usage_pct, nr_cycles, nr_cycles_shift;
/* if no debtor, reset the cycle */
if (!nr_debtors) {
@ -2084,10 +2084,12 @@ static void ioc_forgive_debts(struct ioc *ioc, u64 usage_us_sum, int nr_debtors,
old_debt = iocg->abs_vdebt;
old_delay = iocg->delay;
nr_cycles_shift = min_t(u64, nr_cycles, BITS_PER_LONG - 1);
if (iocg->abs_vdebt)
iocg->abs_vdebt = iocg->abs_vdebt >> nr_cycles ?: 1;
iocg->abs_vdebt = iocg->abs_vdebt >> nr_cycles_shift ?: 1;
if (iocg->delay)
iocg->delay = iocg->delay >> nr_cycles ?: 1;
iocg->delay = iocg->delay >> nr_cycles_shift ?: 1;
iocg_kick_waitq(iocg, true, now);

View File

@ -225,8 +225,8 @@ static int rq_qos_wake_function(struct wait_queue_entry *curr,
data->got_token = true;
smp_wmb();
list_del_init(&curr->entry);
wake_up_process(data->task);
list_del_init_careful(&curr->entry);
return 1;
}

View File

@ -691,9 +691,11 @@ static bool blk_add_partition(struct gendisk *disk, struct block_device *bdev,
part = add_partition(disk, p, from, size, state->parts[p].flags,
&state->parts[p].info);
if (IS_ERR(part) && PTR_ERR(part) != -ENXIO) {
printk(KERN_ERR " %s: p%d could not be added: %ld\n",
disk->disk_name, p, -PTR_ERR(part));
if (IS_ERR(part)) {
if (PTR_ERR(part) != -ENXIO) {
printk(KERN_ERR " %s: p%d could not be added: %pe\n",
disk->disk_name, p, part);
}
return true;
}

View File

@ -174,6 +174,8 @@ acpi_status acpi_db_convert_to_package(char *string, union acpi_object *object)
elements =
ACPI_ALLOCATE_ZEROED(DB_DEFAULT_PKG_ELEMENTS *
sizeof(union acpi_object));
if (!elements)
return (AE_NO_MEMORY);
this = string;
for (i = 0; i < (DB_DEFAULT_PKG_ELEMENTS - 1); i++) {

View File

@ -437,6 +437,9 @@ acpi_status acpi_ex_prep_field_value(struct acpi_create_field_info *info)
if (info->connection_node) {
second_desc = info->connection_node->object;
if (second_desc == NULL) {
break;
}
if (!(second_desc->common.flags & AOPOBJ_DATA_VALID)) {
status =
acpi_ds_get_buffer_arguments(second_desc);

View File

@ -25,6 +25,8 @@ acpi_ps_get_next_package_length(struct acpi_parse_state *parser_state);
static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state
*parser_state);
static void acpi_ps_free_field_list(union acpi_parse_object *start);
/*******************************************************************************
*
* FUNCTION: acpi_ps_get_next_package_length
@ -683,6 +685,39 @@ static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state
return_PTR(field);
}
/*******************************************************************************
*
* FUNCTION: acpi_ps_free_field_list
*
* PARAMETERS: start - First Op in field list
*
* RETURN: None.
*
* DESCRIPTION: Free all Op objects inside a field list.
*
******************************************************************************/
static void acpi_ps_free_field_list(union acpi_parse_object *start)
{
union acpi_parse_object *cur = start;
union acpi_parse_object *next;
union acpi_parse_object *arg;
while (cur) {
next = cur->common.next;
/* AML_INT_CONNECTION_OP can have a single argument */
arg = acpi_ps_get_arg(cur, 0);
if (arg) {
acpi_ps_free_op(arg);
}
acpi_ps_free_op(cur);
cur = next;
}
}
/*******************************************************************************
*
* FUNCTION: acpi_ps_get_next_arg
@ -751,6 +786,10 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
while (parser_state->aml < parser_state->pkg_end) {
field = acpi_ps_get_next_field(parser_state);
if (!field) {
if (arg) {
acpi_ps_free_field_list(arg);
}
return_ACPI_STATUS(AE_NO_MEMORY);
}
@ -820,6 +859,10 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
acpi_ps_get_next_namepath(walk_state, parser_state,
arg,
ACPI_NOT_METHOD_CALL);
if (ACPI_FAILURE(status)) {
acpi_ps_free_op(arg);
return_ACPI_STATUS(status);
}
} else {
/* Single complex argument, nothing returned */
@ -854,6 +897,10 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
acpi_ps_get_next_namepath(walk_state, parser_state,
arg,
ACPI_POSSIBLE_METHOD_CALL);
if (ACPI_FAILURE(status)) {
acpi_ps_free_op(arg);
return_ACPI_STATUS(status);
}
if (arg->common.aml_opcode == AML_INT_METHODCALL_OP) {

View File

@ -695,27 +695,34 @@ static LIST_HEAD(acpi_battery_list);
static LIST_HEAD(battery_hook_list);
static DEFINE_MUTEX(hook_mutex);
static void __battery_hook_unregister(struct acpi_battery_hook *hook, int lock)
static void battery_hook_unregister_unlocked(struct acpi_battery_hook *hook)
{
struct acpi_battery *battery;
/*
* In order to remove a hook, we first need to
* de-register all the batteries that are registered.
*/
if (lock)
mutex_lock(&hook_mutex);
list_for_each_entry(battery, &acpi_battery_list, list) {
hook->remove_battery(battery->bat);
}
list_del(&hook->list);
if (lock)
mutex_unlock(&hook_mutex);
list_del_init(&hook->list);
pr_info("extension unregistered: %s\n", hook->name);
}
void battery_hook_unregister(struct acpi_battery_hook *hook)
{
__battery_hook_unregister(hook, 1);
mutex_lock(&hook_mutex);
/*
* Ignore already unregistered battery hooks. This might happen
* if a battery hook was previously unloaded due to an error when
* adding a new battery.
*/
if (!list_empty(&hook->list))
battery_hook_unregister_unlocked(hook);
mutex_unlock(&hook_mutex);
}
EXPORT_SYMBOL_GPL(battery_hook_unregister);
@ -724,7 +731,6 @@ void battery_hook_register(struct acpi_battery_hook *hook)
struct acpi_battery *battery;
mutex_lock(&hook_mutex);
INIT_LIST_HEAD(&hook->list);
list_add(&hook->list, &battery_hook_list);
/*
* Now that the driver is registered, we need
@ -741,7 +747,7 @@ void battery_hook_register(struct acpi_battery_hook *hook)
* hooks.
*/
pr_err("extension failed to load: %s", hook->name);
__battery_hook_unregister(hook, 0);
battery_hook_unregister_unlocked(hook);
goto end;
}
}
@ -778,7 +784,7 @@ static void battery_hook_add_battery(struct acpi_battery *battery)
*/
pr_err("error in extension, unloading: %s",
hook_node->name);
__battery_hook_unregister(hook_node, 0);
battery_hook_unregister_unlocked(hook_node);
}
}
mutex_unlock(&hook_mutex);
@ -811,7 +817,7 @@ static void __exit battery_hook_exit(void)
* need to remove the hooks.
*/
list_for_each_entry_safe(hook, ptr, &battery_hook_list, list) {
__battery_hook_unregister(hook, 1);
battery_hook_unregister(hook);
}
mutex_destroy(&hook_mutex);
}

View File

@ -533,8 +533,9 @@ int acpi_device_setup_files(struct acpi_device *dev)
* If device has _STR, 'description' file is created
*/
if (acpi_has_method(dev->handle, "_STR")) {
status = acpi_evaluate_object(dev->handle, "_STR",
NULL, &buffer);
status = acpi_evaluate_object_typed(dev->handle, "_STR",
NULL, &buffer,
ACPI_TYPE_BUFFER);
if (ACPI_FAILURE(status))
buffer.pointer = NULL;
dev->pnp.str_obj = buffer.pointer;

View File

@ -786,6 +786,9 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec,
unsigned long tmp;
int ret = 0;
if (t->rdata)
memset(t->rdata, 0, t->rlen);
/* start transaction */
spin_lock_irqsave(&ec->lock, tmp);
/* Enable GPE for command processing (IBF=0/OBF=1) */
@ -822,8 +825,6 @@ static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t)
if (!ec || (!t) || (t->wlen && !t->wdata) || (t->rlen && !t->rdata))
return -EINVAL;
if (t->rdata)
memset(t->rdata, 0, t->rlen);
mutex_lock(&ec->mutex);
if (ec->global_lock) {
@ -850,7 +851,7 @@ static int acpi_ec_burst_enable(struct acpi_ec *ec)
.wdata = NULL, .rdata = &d,
.wlen = 0, .rlen = 1};
return acpi_ec_transaction(ec, &t);
return acpi_ec_transaction_unlocked(ec, &t);
}
static int acpi_ec_burst_disable(struct acpi_ec *ec)
@ -860,7 +861,7 @@ static int acpi_ec_burst_disable(struct acpi_ec *ec)
.wlen = 0, .rlen = 0};
return (acpi_ec_read_status(ec) & ACPI_EC_FLAG_BURST) ?
acpi_ec_transaction(ec, &t) : 0;
acpi_ec_transaction_unlocked(ec, &t) : 0;
}
static int acpi_ec_read(struct acpi_ec *ec, u8 address, u8 *data)
@ -876,6 +877,19 @@ static int acpi_ec_read(struct acpi_ec *ec, u8 address, u8 *data)
return result;
}
static int acpi_ec_read_unlocked(struct acpi_ec *ec, u8 address, u8 *data)
{
int result;
u8 d;
struct transaction t = {.command = ACPI_EC_COMMAND_READ,
.wdata = &address, .rdata = &d,
.wlen = 1, .rlen = 1};
result = acpi_ec_transaction_unlocked(ec, &t);
*data = d;
return result;
}
static int acpi_ec_write(struct acpi_ec *ec, u8 address, u8 data)
{
u8 wdata[2] = { address, data };
@ -886,6 +900,16 @@ static int acpi_ec_write(struct acpi_ec *ec, u8 address, u8 data)
return acpi_ec_transaction(ec, &t);
}
static int acpi_ec_write_unlocked(struct acpi_ec *ec, u8 address, u8 data)
{
u8 wdata[2] = { address, data };
struct transaction t = {.command = ACPI_EC_COMMAND_WRITE,
.wdata = wdata, .rdata = NULL,
.wlen = 2, .rlen = 0};
return acpi_ec_transaction_unlocked(ec, &t);
}
int ec_read(u8 addr, u8 *val)
{
int err;
@ -1306,6 +1330,7 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
struct acpi_ec *ec = handler_context;
int result = 0, i, bytes = bits / 8;
u8 *value = (u8 *)value64;
u32 glk;
if ((address > 0xFF) || !value || !handler_context)
return AE_BAD_PARAMETER;
@ -1313,13 +1338,25 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
if (function != ACPI_READ && function != ACPI_WRITE)
return AE_BAD_PARAMETER;
mutex_lock(&ec->mutex);
if (ec->global_lock) {
acpi_status status;
status = acpi_acquire_global_lock(ACPI_EC_UDELAY_GLK, &glk);
if (ACPI_FAILURE(status)) {
result = -ENODEV;
goto unlock;
}
}
if (ec->busy_polling || bits > 8)
acpi_ec_burst_enable(ec);
for (i = 0; i < bytes; ++i, ++address, ++value) {
result = (function == ACPI_READ) ?
acpi_ec_read(ec, address, value) :
acpi_ec_write(ec, address, *value);
acpi_ec_read_unlocked(ec, address, value) :
acpi_ec_write_unlocked(ec, address, *value);
if (result < 0)
break;
}
@ -1327,6 +1364,12 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
if (ec->busy_polling || bits > 8)
acpi_ec_burst_disable(ec);
if (ec->global_lock)
acpi_release_global_lock(glk);
unlock:
mutex_unlock(&ec->mutex);
switch (result) {
case -EINVAL:
return AE_BAD_PARAMETER;

View File

@ -376,10 +376,8 @@ static int tps68470_pmic_opregion_probe(struct platform_device *pdev)
struct tps68470_pmic_opregion *opregion;
acpi_status status;
if (!dev || !tps68470_regmap) {
dev_warn(dev, "dev or regmap is NULL\n");
return -EINVAL;
}
if (!tps68470_regmap)
return dev_err_probe(dev, -EINVAL, "regmap is missing\n");
if (!handle) {
dev_warn(dev, "acpi handle is NULL\n");

View File

@ -442,6 +442,13 @@ static const struct dmi_system_id asus_laptop[] = {
DMI_MATCH(DMI_BOARD_NAME, "B2402CBA"),
},
},
{
/* Asus Vivobook X1704VAP */
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
DMI_MATCH(DMI_BOARD_NAME, "X1704VAP"),
},
},
{
/* TongFang GMxXGxx/TUXEDO Polaris 15 Gen5 AMD */
.matches = {
@ -455,6 +462,12 @@ static const struct dmi_system_id asus_laptop[] = {
DMI_MATCH(DMI_BOARD_NAME, "B1402CVA"),
},
},
{
/* TongFang GMxXGxX/TUXEDO Polaris 15 Gen5 AMD */
.matches = {
DMI_MATCH(DMI_BOARD_NAME, "GMxXGxX"),
},
},
{
/* TongFang GMxXGxx sold as Eluktronics Inc. RP-15 */
.matches = {
@ -481,6 +494,13 @@ static const struct dmi_system_id asus_laptop[] = {
DMI_MATCH(DMI_BOARD_NAME, "GXxHRXx"),
},
},
{
/* Asus ExpertBook B2502CVA */
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
DMI_MATCH(DMI_BOARD_NAME, "B2502CVA"),
},
},
{
/* TongFang GMxHGxx/TUXEDO Stellaris Slim Gen1 AMD */
.matches = {

View File

@ -128,7 +128,7 @@ static const struct pci_device_id sil_pci_tbl[] = {
static const struct sil_drivelist {
const char *product;
unsigned int quirk;
} sil_blacklist [] = {
} sil_quirks[] = {
{ "ST320012AS", SIL_QUIRK_MOD15WRITE },
{ "ST330013AS", SIL_QUIRK_MOD15WRITE },
{ "ST340017AS", SIL_QUIRK_MOD15WRITE },
@ -601,8 +601,8 @@ static void sil_thaw(struct ata_port *ap)
* list, and apply the fixups to only the specific
* devices/hosts/firmwares that need it.
*
* 20040111 - Seagate drives affected by the Mod15Write bug are blacklisted
* The Maxtor quirk is in the blacklist, but I'm keeping the original
* 20040111 - Seagate drives affected by the Mod15Write bug are quirked
* The Maxtor quirk is in sil_quirks, but I'm keeping the original
* pessimistic fix for the following reasons...
* - There seems to be less info on it, only one device gleaned off the
* Windows driver, maybe only one is affected. More info would be greatly
@ -621,9 +621,9 @@ static void sil_dev_config(struct ata_device *dev)
ata_id_c_string(dev->id, model_num, ATA_ID_PROD, sizeof(model_num));
for (n = 0; sil_blacklist[n].product; n++)
if (!strcmp(sil_blacklist[n].product, model_num)) {
quirks = sil_blacklist[n].quirk;
for (n = 0; sil_quirks[n].product; n++)
if (!strcmp(sil_quirks[n].product, model_num)) {
quirks = sil_quirks[n].quirk;
break;
}

View File

@ -104,7 +104,8 @@ static ssize_t bus_attr_show(struct kobject *kobj, struct attribute *attr,
{
struct bus_attribute *bus_attr = to_bus_attr(attr);
struct subsys_private *subsys_priv = to_subsys_private(kobj);
ssize_t ret = 0;
/* return -EIO for reading a bus attribute without show() */
ssize_t ret = -EIO;
if (bus_attr->show)
ret = bus_attr->show(subsys_priv->bus, buf);
@ -116,7 +117,8 @@ static ssize_t bus_attr_store(struct kobject *kobj, struct attribute *attr,
{
struct bus_attribute *bus_attr = to_bus_attr(attr);
struct subsys_private *subsys_priv = to_subsys_private(kobj);
ssize_t ret = 0;
/* return -EIO for writing a bus attribute without store() */
ssize_t ret = -EIO;
if (bus_attr->store)
ret = bus_attr->store(subsys_priv->bus, buf, count);

View File

@ -787,6 +787,26 @@ static void fw_abort_batch_reqs(struct firmware *fw)
mutex_unlock(&fw_lock);
}
/*
* Reject firmware file names with ".." path components.
* There are drivers that construct firmware file names from device-supplied
* strings, and we don't want some device to be able to tell us "I would like to
* be sent my firmware from ../../../etc/shadow, please".
*
* Search for ".." surrounded by either '/' or start/end of string.
*
* This intentionally only looks at the firmware name, not at the firmware base
* directory or at symlink contents.
*/
static bool name_contains_dotdot(const char *name)
{
size_t name_len = strlen(name);
return strcmp(name, "..") == 0 || strncmp(name, "../", 3) == 0 ||
strstr(name, "/../") != NULL ||
(name_len >= 3 && strcmp(name+name_len-3, "/..") == 0);
}
/* called from request_firmware() and request_firmware_work_func() */
static int
_request_firmware(const struct firmware **firmware_p, const char *name,
@ -805,6 +825,14 @@ _request_firmware(const struct firmware **firmware_p, const char *name,
goto out;
}
if (name_contains_dotdot(name)) {
dev_warn(device,
"Firmware load for '%s' refused, path contains '..' component\n",
name);
ret = -EINVAL;
goto out;
}
ret = _request_firmware_prepare(&fw, name, device, buf, size,
offset, opt_flags);
if (ret <= 0) /* error or already assigned */
@ -860,6 +888,8 @@ _request_firmware(const struct firmware **firmware_p, const char *name,
* @name will be used as $FIRMWARE in the uevent environment and
* should be distinctive enough not to be confused with any other
* firmware image for this or any other device.
* It must not contain any ".." path components - "foo/bar..bin" is
* allowed, but "foo/../bar.bin" is not.
*
* Caller must hold the reference count of @device.
*

View File

@ -362,6 +362,7 @@ ata_rw_frameinit(struct frame *f)
}
ah->cmdstat = ATA_CMD_PIO_READ | writebit | extbit;
dev_hold(t->ifp->nd);
skb->dev = t->ifp->nd;
}
@ -402,6 +403,8 @@ aoecmd_ata_rw(struct aoedev *d)
__skb_queue_head_init(&queue);
__skb_queue_tail(&queue, skb);
aoenet_xmit(&queue);
} else {
dev_put(f->t->ifp->nd);
}
return 1;
}
@ -484,10 +487,13 @@ resend(struct aoedev *d, struct frame *f)
memcpy(h->dst, t->addr, sizeof h->dst);
memcpy(h->src, t->ifp->nd->dev_addr, sizeof h->src);
dev_hold(t->ifp->nd);
skb->dev = t->ifp->nd;
skb = skb_clone(skb, GFP_ATOMIC);
if (skb == NULL)
if (skb == NULL) {
dev_put(t->ifp->nd);
return;
}
f->sent = ktime_get();
__skb_queue_head_init(&queue);
__skb_queue_tail(&queue, skb);
@ -618,6 +624,8 @@ probe(struct aoetgt *t)
__skb_queue_head_init(&queue);
__skb_queue_tail(&queue, skb);
aoenet_xmit(&queue);
} else {
dev_put(f->t->ifp->nd);
}
}
@ -1403,6 +1411,7 @@ aoecmd_ata_id(struct aoedev *d)
ah->cmdstat = ATA_CMD_ID_ATA;
ah->lba3 = 0xa0;
dev_hold(t->ifp->nd);
skb->dev = t->ifp->nd;
d->rttavg = RTTAVG_INIT;
@ -1412,6 +1421,8 @@ aoecmd_ata_id(struct aoedev *d)
skb = skb_clone(skb, GFP_ATOMIC);
if (skb)
f->sent = ktime_get();
else
dev_put(t->ifp->nd);
return skb;
}

View File

@ -3429,10 +3429,12 @@ void drbd_uuid_new_current(struct drbd_device *device) __must_hold(local)
void drbd_uuid_set_bm(struct drbd_device *device, u64 val) __must_hold(local)
{
unsigned long flags;
if (device->ldev->md.uuid[UI_BITMAP] == 0 && val == 0)
return;
spin_lock_irqsave(&device->ldev->md.uuid_lock, flags);
if (device->ldev->md.uuid[UI_BITMAP] == 0 && val == 0) {
spin_unlock_irqrestore(&device->ldev->md.uuid_lock, flags);
return;
}
if (val == 0) {
drbd_uuid_move_history(device);
device->ldev->md.uuid[UI_HISTORY_START] = device->ldev->md.uuid[UI_BITMAP];

View File

@ -876,7 +876,7 @@ is_valid_state(struct drbd_device *device, union drbd_state ns)
ns.disk == D_OUTDATED)
rv = SS_CONNECTED_OUTDATES;
else if ((ns.conn == C_VERIFY_S || ns.conn == C_VERIFY_T) &&
else if (nc && (ns.conn == C_VERIFY_S || ns.conn == C_VERIFY_T) &&
(nc->verify_alg[0] == 0))
rv = SS_NO_VERIFY_ALG;

View File

@ -105,7 +105,7 @@ static int btmrvl_sdio_probe_of(struct device *dev,
} else {
ret = devm_request_irq(dev, cfg->irq_bt,
btmrvl_wake_irq_bt,
0, "bt_wake", card);
IRQF_NO_AUTOEN, "bt_wake", card);
if (ret) {
dev_err(dev,
"Failed to request irq_bt %d (%d)\n",
@ -114,7 +114,6 @@ static int btmrvl_sdio_probe_of(struct device *dev,
/* Configure wakeup (enabled by default) */
device_init_wakeup(dev, true);
disable_irq(cfg->irq_bt);
}
}

View File

@ -928,7 +928,15 @@ static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags)
if (!urb)
return -ENOMEM;
size = le16_to_cpu(data->intr_ep->wMaxPacketSize);
if (le16_to_cpu(data->udev->descriptor.idVendor) == 0x0a12 &&
le16_to_cpu(data->udev->descriptor.idProduct) == 0x0001)
/* Fake CSR devices don't seem to support sort-transter */
size = le16_to_cpu(data->intr_ep->wMaxPacketSize);
else
/* Use maximum HCI Event size so the USB stack handles
* ZPL/short-transfer automatically.
*/
size = HCI_MAX_EVENT_SIZE;
buf = kmalloc(size, mem_flags);
if (!buf) {

View File

@ -84,6 +84,7 @@ static int integrator_ap_lm_probe(struct platform_device *pdev)
return -ENODEV;
}
map = syscon_node_to_regmap(syscon);
of_node_put(syscon);
if (IS_ERR(map)) {
dev_err(dev,
"could not find Integrator/AP system controller\n");

View File

@ -679,6 +679,7 @@ static int __maybe_unused cctrng_resume(struct device *dev)
/* wait for Cryptocell reset completion */
if (!cctrng_wait_for_reset_completion(drvdata)) {
dev_err(dev, "Cryptocell reset not completed");
clk_disable_unprepare(drvdata->clk);
return -EBUSY;
}

View File

@ -142,7 +142,7 @@ static int mtk_rng_probe(struct platform_device *pdev)
dev_set_drvdata(&pdev->dev, priv);
pm_runtime_set_autosuspend_delay(&pdev->dev, RNG_AUTOSUSPEND_TIMEOUT);
pm_runtime_use_autosuspend(&pdev->dev);
pm_runtime_enable(&pdev->dev);
devm_pm_runtime_enable(&pdev->dev);
dev_info(&pdev->dev, "registered RNG driver\n");

View File

@ -48,6 +48,8 @@ static ssize_t tpm_dev_transmit(struct tpm_chip *chip, struct tpm_space *space,
if (!ret)
ret = tpm2_commit_space(chip, space, buf, &len);
else
tpm2_flush_space(chip);
out_rc:
return ret ? ret : len;

View File

@ -166,6 +166,9 @@ void tpm2_flush_space(struct tpm_chip *chip)
struct tpm_space *space = &chip->work_space;
int i;
if (!space)
return;
for (i = 0; i < ARRAY_SIZE(space->context_tbl); i++)
if (space->context_tbl[i] && ~space->context_tbl[i])
tpm2_flush_context(chip, space->context_tbl[i]);

View File

@ -2049,25 +2049,27 @@ static int virtcons_probe(struct virtio_device *vdev)
multiport = true;
}
err = init_vqs(portdev);
if (err < 0) {
dev_err(&vdev->dev, "Error %d initializing vqs\n", err);
goto free_chrdev;
}
spin_lock_init(&portdev->ports_lock);
INIT_LIST_HEAD(&portdev->ports);
INIT_LIST_HEAD(&portdev->list);
virtio_device_ready(portdev->vdev);
INIT_WORK(&portdev->config_work, &config_work_handler);
INIT_WORK(&portdev->control_work, &control_work_handler);
if (multiport) {
spin_lock_init(&portdev->c_ivq_lock);
spin_lock_init(&portdev->c_ovq_lock);
}
err = init_vqs(portdev);
if (err < 0) {
dev_err(&vdev->dev, "Error %d initializing vqs\n", err);
goto free_chrdev;
}
virtio_device_ready(portdev->vdev);
if (multiport) {
err = fill_queue(portdev->c_ivq, &portdev->c_ivq_lock);
if (err < 0) {
dev_err(&vdev->dev,

View File

@ -112,7 +112,7 @@ static void bcm53573_ilp_init(struct device_node *np)
goto err_free_ilp;
}
ilp->regmap = syscon_node_to_regmap(of_get_parent(np));
ilp->regmap = syscon_node_to_regmap(np->parent);
if (IS_ERR(ilp->regmap)) {
err = PTR_ERR(ilp->regmap);
goto err_free_ilp;

View File

@ -498,9 +498,9 @@ static void __init imx7d_clocks_init(struct device_node *ccm_node)
hws[IMX7D_ENET_AXI_ROOT_SRC] = imx_clk_hw_mux2_flags("enet_axi_src", base + 0x8900, 24, 3, enet_axi_sel, ARRAY_SIZE(enet_axi_sel), CLK_SET_PARENT_GATE);
hws[IMX7D_NAND_USDHC_BUS_ROOT_SRC] = imx_clk_hw_mux2_flags("nand_usdhc_src", base + 0x8980, 24, 3, nand_usdhc_bus_sel, ARRAY_SIZE(nand_usdhc_bus_sel), CLK_SET_PARENT_GATE);
hws[IMX7D_DRAM_PHYM_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_phym_src", base + 0x9800, 24, 1, dram_phym_sel, ARRAY_SIZE(dram_phym_sel), CLK_SET_PARENT_GATE);
hws[IMX7D_DRAM_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_src", base + 0x9880, 24, 1, dram_sel, ARRAY_SIZE(dram_sel), CLK_SET_PARENT_GATE);
hws[IMX7D_DRAM_ROOT_SRC] = imx_clk_hw_mux2("dram_src", base + 0x9880, 24, 1, dram_sel, ARRAY_SIZE(dram_sel));
hws[IMX7D_DRAM_PHYM_ALT_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_phym_alt_src", base + 0xa000, 24, 3, dram_phym_alt_sel, ARRAY_SIZE(dram_phym_alt_sel), CLK_SET_PARENT_GATE);
hws[IMX7D_DRAM_ALT_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_alt_src", base + 0xa080, 24, 3, dram_alt_sel, ARRAY_SIZE(dram_alt_sel), CLK_SET_PARENT_GATE);
hws[IMX7D_DRAM_ALT_ROOT_SRC] = imx_clk_hw_mux2("dram_alt_src", base + 0xa080, 24, 3, dram_alt_sel, ARRAY_SIZE(dram_alt_sel));
hws[IMX7D_USB_HSIC_ROOT_SRC] = imx_clk_hw_mux2_flags("usb_hsic_src", base + 0xa100, 24, 3, usb_hsic_sel, ARRAY_SIZE(usb_hsic_sel), CLK_SET_PARENT_GATE);
hws[IMX7D_PCIE_CTRL_ROOT_SRC] = imx_clk_hw_mux2_flags("pcie_ctrl_src", base + 0xa180, 24, 3, pcie_ctrl_sel, ARRAY_SIZE(pcie_ctrl_sel), CLK_SET_PARENT_GATE);
hws[IMX7D_PCIE_PHY_ROOT_SRC] = imx_clk_hw_mux2_flags("pcie_phy_src", base + 0xa200, 24, 3, pcie_phy_sel, ARRAY_SIZE(pcie_phy_sel), CLK_SET_PARENT_GATE);

View File

@ -579,8 +579,8 @@ static int imx8mp_clocks_probe(struct platform_device *pdev)
hws[IMX8MP_CLK_IPG_ROOT] = imx_clk_hw_divider2("ipg_root", "ahb_root", ccm_base + 0x9080, 0, 1);
hws[IMX8MP_CLK_IPG_AUDIO_ROOT] = imx_clk_hw_divider2("ipg_audio_root", "audio_ahb", ccm_base + 0x9180, 0, 1);
hws[IMX8MP_CLK_DRAM_ALT] = imx8m_clk_hw_composite("dram_alt", imx8mp_dram_alt_sels, ccm_base + 0xa000);
hws[IMX8MP_CLK_DRAM_APB] = imx8m_clk_hw_composite_critical("dram_apb", imx8mp_dram_apb_sels, ccm_base + 0xa080);
hws[IMX8MP_CLK_DRAM_ALT] = imx8m_clk_hw_fw_managed_composite("dram_alt", imx8mp_dram_alt_sels, ccm_base + 0xa000);
hws[IMX8MP_CLK_DRAM_APB] = imx8m_clk_hw_fw_managed_composite_critical("dram_apb", imx8mp_dram_apb_sels, ccm_base + 0xa080);
hws[IMX8MP_CLK_VPU_G1] = imx8m_clk_hw_composite("vpu_g1", imx8mp_vpu_g1_sels, ccm_base + 0xa100);
hws[IMX8MP_CLK_VPU_G2] = imx8m_clk_hw_composite("vpu_g2", imx8mp_vpu_g2_sels, ccm_base + 0xa180);
hws[IMX8MP_CLK_CAN1] = imx8m_clk_hw_composite("can1", imx8mp_can1_sels, ccm_base + 0xa200);

View File

@ -665,6 +665,7 @@ static struct clk_branch disp_cc_mdss_dp_link1_intf_clk = {
.hw = &disp_cc_mdss_dp_link1_div_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
@ -700,6 +701,7 @@ static struct clk_branch disp_cc_mdss_dp_link_intf_clk = {
.hw = &disp_cc_mdss_dp_link_div_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},
@ -825,6 +827,7 @@ static struct clk_branch disp_cc_mdss_mdp_lut_clk = {
.hw = &disp_cc_mdss_mdp_clk_src.clkr.hw,
},
.num_parents = 1,
.flags = CLK_SET_RATE_PARENT,
.ops = &clk_branch2_ops,
},
},

View File

@ -3229,7 +3229,7 @@ static struct gdsc pcie_0_gdsc = {
.pd = {
.name = "pcie_0_gdsc",
},
.pwrsts = PWRSTS_OFF_ON,
.pwrsts = PWRSTS_RET_ON,
};
static struct gdsc pcie_1_gdsc = {
@ -3237,7 +3237,7 @@ static struct gdsc pcie_1_gdsc = {
.pd = {
.name = "pcie_1_gdsc",
},
.pwrsts = PWRSTS_OFF_ON,
.pwrsts = PWRSTS_RET_ON,
};
static struct gdsc pcie_2_gdsc = {
@ -3245,7 +3245,7 @@ static struct gdsc pcie_2_gdsc = {
.pd = {
.name = "pcie_2_gdsc",
},
.pwrsts = PWRSTS_OFF_ON,
.pwrsts = PWRSTS_RET_ON,
};
static struct gdsc ufs_card_gdsc = {

View File

@ -408,7 +408,7 @@ static struct rockchip_clk_branch rk3228_clk_branches[] __initdata = {
RK2928_CLKSEL_CON(29), 0, 3, DFLAGS),
DIV(0, "sclk_vop_pre", "sclk_vop_src", 0,
RK2928_CLKSEL_CON(27), 8, 8, DFLAGS),
MUX(DCLK_VOP, "dclk_vop", mux_dclk_vop_p, 0,
MUX(DCLK_VOP, "dclk_vop", mux_dclk_vop_p, CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
RK2928_CLKSEL_CON(27), 1, 1, MFLAGS),
FACTOR(0, "xin12m", "xin24m", 0, 1, 2),

View File

@ -442,12 +442,13 @@ void rockchip_clk_register_branches(struct rockchip_clk_provider *ctx,
struct rockchip_clk_branch *list,
unsigned int nr_clk)
{
struct clk *clk = NULL;
struct clk *clk;
unsigned int idx;
unsigned long flags;
for (idx = 0; idx < nr_clk; idx++, list++) {
flags = list->flags;
clk = NULL;
/* catch simple muxes */
switch (list->branch_type) {

View File

@ -258,6 +258,7 @@ static int of_dra7_atl_clk_probe(struct platform_device *pdev)
}
clk = of_clk_get_from_provider(&clkspec);
of_node_put(clkspec.np);
if (IS_ERR(clk)) {
pr_err("%s: failed to get atl clock %d from provider\n",
__func__, i);

View File

@ -233,6 +233,7 @@ static int __init msm_dt_timer_init(struct device_node *np)
}
if (of_property_read_u32(np, "clock-frequency", &freq)) {
iounmap(cpu0_base);
pr_err("Unknown frequency\n");
return -EINVAL;
}
@ -243,7 +244,11 @@ static int __init msm_dt_timer_init(struct device_node *np)
freq /= 4;
writel_relaxed(DGT_CLK_CTL_DIV_4, source_base + DGT_CLK_CTL);
return msm_timer_init(freq, 32, irq, !!percpu_offset);
ret = msm_timer_init(freq, 32, irq, !!percpu_offset);
if (ret)
iounmap(cpu0_base);
return ret;
}
TIMER_OF_DECLARE(kpss_timer, "qcom,kpss-timer", msm_dt_timer_init);
TIMER_OF_DECLARE(scss_timer, "qcom,scss-timer", msm_dt_timer_init);

View File

@ -53,6 +53,9 @@ struct ti_cpufreq_soc_data {
unsigned long efuse_shift;
unsigned long rev_offset;
bool multi_regulator;
/* Backward compatibility hack: Might have missing syscon */
#define TI_QUIRK_SYSCON_MAY_BE_MISSING 0x1
u8 quirks;
};
struct ti_cpufreq_data {
@ -156,6 +159,7 @@ static struct ti_cpufreq_soc_data omap34xx_soc_data = {
.efuse_mask = BIT(3),
.rev_offset = OMAP3_CONTROL_IDCODE - OMAP3_SYSCON_BASE,
.multi_regulator = false,
.quirks = TI_QUIRK_SYSCON_MAY_BE_MISSING,
};
/*
@ -183,6 +187,7 @@ static struct ti_cpufreq_soc_data omap36xx_soc_data = {
.efuse_mask = BIT(9),
.rev_offset = OMAP3_CONTROL_IDCODE - OMAP3_SYSCON_BASE,
.multi_regulator = true,
.quirks = TI_QUIRK_SYSCON_MAY_BE_MISSING,
};
/*
@ -197,6 +202,7 @@ static struct ti_cpufreq_soc_data am3517_soc_data = {
.efuse_mask = 0,
.rev_offset = OMAP3_CONTROL_IDCODE - OMAP3_SYSCON_BASE,
.multi_regulator = false,
.quirks = TI_QUIRK_SYSCON_MAY_BE_MISSING,
};
@ -216,7 +222,7 @@ static int ti_cpufreq_get_efuse(struct ti_cpufreq_data *opp_data,
ret = regmap_read(opp_data->syscon, opp_data->soc_data->efuse_offset,
&efuse);
if (ret == -EIO) {
if (opp_data->soc_data->quirks & TI_QUIRK_SYSCON_MAY_BE_MISSING && ret == -EIO) {
/* not a syscon register! */
void __iomem *regs = ioremap(OMAP3_SYSCON_BASE +
opp_data->soc_data->efuse_offset, 4);
@ -257,7 +263,7 @@ static int ti_cpufreq_get_rev(struct ti_cpufreq_data *opp_data,
ret = regmap_read(opp_data->syscon, opp_data->soc_data->rev_offset,
&revision);
if (ret == -EIO) {
if (opp_data->soc_data->quirks & TI_QUIRK_SYSCON_MAY_BE_MISSING && ret == -EIO) {
/* not a syscon register! */
void __iomem *regs = ioremap(OMAP3_SYSCON_BASE +
opp_data->soc_data->rev_offset, 4);

View File

@ -1129,6 +1129,8 @@ void sev_pci_init(void)
return;
err:
sev_dev_destroy(psp_master);
psp_master->sev_data = NULL;
}

View File

@ -115,7 +115,7 @@ void efi_retrieve_tpm2_eventlog(void)
}
/* Allocate space for the logs and copy them. */
status = efi_bs_call(allocate_pool, EFI_LOADER_DATA,
status = efi_bs_call(allocate_pool, EFI_ACPI_RECLAIM_MEMORY,
sizeof(*log_tbl) + log_size, (void **)&log_tbl);
if (status != EFI_SUCCESS) {

View File

@ -25,12 +25,6 @@
#define MSG_RING BIT(1)
#define TAG_SZ 32
static inline struct tegra_bpmp *
mbox_client_to_bpmp(struct mbox_client *client)
{
return container_of(client, struct tegra_bpmp, mbox.client);
}
static inline const struct tegra_bpmp_ops *
channel_to_ops(struct tegra_bpmp_channel *channel)
{

View File

@ -404,6 +404,8 @@ static void __aspeed_gpio_set(struct gpio_chip *gc, unsigned int offset,
gpio->dcache[GPIO_BANK(offset)] = reg;
iowrite32(reg, addr);
/* Flush write */
ioread32(addr);
}
static void aspeed_gpio_set(struct gpio_chip *gc, unsigned int offset,
@ -1157,7 +1159,7 @@ static int __init aspeed_gpio_probe(struct platform_device *pdev)
if (!gpio_id)
return -EINVAL;
gpio->clk = of_clk_get(pdev->dev.of_node, 0);
gpio->clk = devm_clk_get_enabled(&pdev->dev, NULL);
if (IS_ERR(gpio->clk)) {
dev_warn(&pdev->dev,
"Failed to get clock from devicetree, debouncing disabled\n");

View File

@ -293,7 +293,7 @@ static int davinci_gpio_probe(struct platform_device *pdev)
* serve as EDMA event triggers.
*/
static void gpio_irq_disable(struct irq_data *d)
static void gpio_irq_mask(struct irq_data *d)
{
struct davinci_gpio_regs __iomem *g = irq2regs(d);
uintptr_t mask = (uintptr_t)irq_data_get_irq_handler_data(d);
@ -302,7 +302,7 @@ static void gpio_irq_disable(struct irq_data *d)
writel_relaxed(mask, &g->clr_rising);
}
static void gpio_irq_enable(struct irq_data *d)
static void gpio_irq_unmask(struct irq_data *d)
{
struct davinci_gpio_regs __iomem *g = irq2regs(d);
uintptr_t mask = (uintptr_t)irq_data_get_irq_handler_data(d);
@ -328,8 +328,8 @@ static int gpio_irq_type(struct irq_data *d, unsigned trigger)
static struct irq_chip gpio_irqchip = {
.name = "GPIO",
.irq_enable = gpio_irq_enable,
.irq_disable = gpio_irq_disable,
.irq_unmask = gpio_irq_unmask,
.irq_mask = gpio_irq_mask,
.irq_set_type = gpio_irq_type,
.flags = IRQCHIP_SET_TYPE_MASKED | IRQCHIP_SKIP_SET_WAKE,
};

View File

@ -1110,15 +1110,18 @@ static long linereq_set_config_unlocked(struct linereq *lr,
for (i = 0; i < lr->num_lines; i++) {
desc = lr->lines[i].desc;
flags = gpio_v2_line_config_flags(lc, i);
/*
* Lines not explicitly reconfigured as input or output
* are left unchanged.
*/
if (!(flags & GPIO_V2_LINE_DIRECTION_FLAGS))
continue;
polarity_change =
(!!test_bit(FLAG_ACTIVE_LOW, &desc->flags) !=
((flags & GPIO_V2_LINE_FLAG_ACTIVE_LOW) != 0));
gpio_v2_line_config_flags_to_desc_flags(flags, &desc->flags);
/*
* Lines have to be requested explicitly for input
* or output, else the line will be treated "as is".
*/
if (flags & GPIO_V2_LINE_FLAG_OUTPUT) {
int val = gpio_v2_line_config_output_value(lc, i);
@ -1126,7 +1129,7 @@ static long linereq_set_config_unlocked(struct linereq *lr,
ret = gpiod_direction_output(desc, val);
if (ret)
return ret;
} else if (flags & GPIO_V2_LINE_FLAG_INPUT) {
} else {
ret = gpiod_direction_input(desc);
if (ret)
return ret;

View File

@ -4,6 +4,7 @@
#include <linux/module.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/nospec.h>
#include <linux/spinlock.h>
#include <linux/list.h>
#include <linux/device.h>
@ -147,7 +148,7 @@ struct gpio_desc *gpiochip_get_desc(struct gpio_chip *gc,
if (hwnum >= gdev->ngpio)
return ERR_PTR(-EINVAL);
return &gdev->descs[hwnum];
return &gdev->descs[array_index_nospec(hwnum, gdev->ngpio)];
}
EXPORT_SYMBOL_GPL(gpiochip_get_desc);

View File

@ -2098,23 +2098,29 @@ amdgpu_atombios_encoder_get_lcd_info(struct amdgpu_encoder *encoder)
fake_edid_record = (ATOM_FAKE_EDID_PATCH_RECORD *)record;
if (fake_edid_record->ucFakeEDIDLength) {
struct edid *edid;
int edid_size =
max((int)EDID_LENGTH, (int)fake_edid_record->ucFakeEDIDLength);
edid = kmalloc(edid_size, GFP_KERNEL);
if (edid) {
memcpy((u8 *)edid, (u8 *)&fake_edid_record->ucFakeEDIDString[0],
fake_edid_record->ucFakeEDIDLength);
int edid_size;
if (fake_edid_record->ucFakeEDIDLength == 128)
edid_size = fake_edid_record->ucFakeEDIDLength;
else
edid_size = fake_edid_record->ucFakeEDIDLength * 128;
edid = kmemdup(&fake_edid_record->ucFakeEDIDString[0],
edid_size, GFP_KERNEL);
if (edid) {
if (drm_edid_is_valid(edid)) {
adev->mode_info.bios_hardcoded_edid = edid;
adev->mode_info.bios_hardcoded_edid_size = edid_size;
} else
} else {
kfree(edid);
}
}
record += struct_size(fake_edid_record,
ucFakeEDIDString,
edid_size);
} else {
/* empty fake edid record must be 3 bytes long */
record += sizeof(ATOM_FAKE_EDID_PATCH_RECORD) + 1;
}
record += fake_edid_record->ucFakeEDIDLength ?
fake_edid_record->ucFakeEDIDLength + 2 :
sizeof(ATOM_FAKE_EDID_PATCH_RECORD);
break;
case LCD_PANEL_RESOLUTION_RECORD_TYPE:
panel_res_record = (ATOM_PANEL_RESOLUTION_PATCH_RECORD *)record;

View File

@ -1250,6 +1250,10 @@ static const struct amdgpu_gfxoff_quirk amdgpu_gfxoff_quirk_list[] = {
{ 0x1002, 0x15dd, 0x1002, 0x15dd, 0xc6 },
/* Apple MacBook Pro (15-inch, 2019) Radeon Pro Vega 20 4 GB */
{ 0x1002, 0x69af, 0x106b, 0x019a, 0xc0 },
/* https://bbs.openkylin.top/t/topic/171497 */
{ 0x1002, 0x15d8, 0x19e5, 0x3e14, 0xc2 },
/* HP 705G4 DM with R5 2400G */
{ 0x1002, 0x15dd, 0x103c, 0x8464, 0xd6 },
{ 0, 0, 0, 0, 0 },
};

View File

@ -201,7 +201,7 @@ static bool validate_dsc_caps_on_connector(struct amdgpu_dm_connector *aconnecto
aconnector->dsc_aux = &aconnector->mst_port->dm_dp_aux.aux;
/* synaptics cascaded MST hub case */
if (!aconnector->dsc_aux && is_synaptics_cascaded_panamera(aconnector->dc_link, port))
if (is_synaptics_cascaded_panamera(aconnector->dc_link, port))
aconnector->dsc_aux = port->mgr->aux;
if (!aconnector->dsc_aux)

View File

@ -1258,7 +1258,7 @@ bool dc_validate_seamless_boot_timing(const struct dc *dc,
if (crtc_timing->pix_clk_100hz != pix_clk_100hz)
return false;
if (!se->funcs->dp_get_pixel_format)
if (!se || !se->funcs->dp_get_pixel_format)
return false;
if (!se->funcs->dp_get_pixel_format(
@ -2614,7 +2614,8 @@ static void commit_planes_for_stream(struct dc *dc,
dc->hwss.pipe_control_lock(dc, top_pipe_to_program, false);
if ((update_type != UPDATE_TYPE_FAST) && stream->update_flags.bits.dsc_changed)
if (top_pipe_to_program->stream_res.tg->funcs->lock_doublebuffer_enable) {
if (top_pipe_to_program &&
top_pipe_to_program->stream_res.tg->funcs->lock_doublebuffer_enable) {
top_pipe_to_program->stream_res.tg->funcs->wait_for_state(
top_pipe_to_program->stream_res.tg,
CRTC_STATE_VACTIVE);
@ -3082,7 +3083,8 @@ void dc_allow_idle_optimizations(struct dc *dc, bool allow)
if (allow == dc->idle_optimizations_allowed)
return;
if (dc->hwss.apply_idle_power_optimizations && dc->hwss.apply_idle_power_optimizations(dc, allow))
if (dc->hwss.apply_idle_power_optimizations && dc->clk_mgr != NULL &&
dc->hwss.apply_idle_power_optimizations(dc, allow))
dc->idle_optimizations_allowed = allow;
}

View File

@ -1697,6 +1697,8 @@ static bool are_stream_backends_same(
bool dc_is_stream_unchanged(
struct dc_stream_state *old_stream, struct dc_stream_state *stream)
{
if (!old_stream || !stream)
return false;
if (!are_stream_backends_same(old_stream, stream))
return false;

View File

@ -560,6 +560,8 @@ bool cm_helper_translate_curve_to_degamma_hw_format(
i += increment) {
if (j == hw_points - 1)
break;
if (i >= TRANSFER_FUNC_POINTS)
return false;
rgb_resulted[j].red = output_tf->tf_pts.red[i];
rgb_resulted[j].green = output_tf->tf_pts.green[i];
rgb_resulted[j].blue = output_tf->tf_pts.blue[i];

View File

@ -178,6 +178,8 @@ bool cm3_helper_translate_curve_to_hw_format(
i += increment) {
if (j == hw_points - 1)
break;
if (i >= TRANSFER_FUNC_POINTS)
return false;
rgb_resulted[j].red = output_tf->tf_pts.red[i];
rgb_resulted[j].green = output_tf->tf_pts.green[i];
rgb_resulted[j].blue = output_tf->tf_pts.blue[i];
@ -355,6 +357,8 @@ bool cm3_helper_translate_curve_to_degamma_hw_format(
i += increment) {
if (j == hw_points - 1)
break;
if (i >= TRANSFER_FUNC_POINTS)
return false;
rgb_resulted[j].red = output_tf->tf_pts.red[i];
rgb_resulted[j].green = output_tf->tf_pts.green[i];
rgb_resulted[j].blue = output_tf->tf_pts.blue[i];

View File

@ -78,7 +78,7 @@ static void calculate_ttu_cursor(struct display_mode_lib *mode_lib,
static unsigned int get_bytes_per_element(enum source_format_class source_format, bool is_chroma)
{
unsigned int ret_val = 0;
unsigned int ret_val = 1;
if (source_format == dm_444_16) {
if (!is_chroma)

View File

@ -53,7 +53,7 @@ static void calculate_ttu_cursor(
static unsigned int get_bytes_per_element(enum source_format_class source_format, bool is_chroma)
{
unsigned int ret_val = 0;
unsigned int ret_val = 1;
if (source_format == dm_444_16) {
if (!is_chroma)

Some files were not shown because too many files have changed in this diff Show More