Merge 6.1.93 into android14-6.1-lts

Changes in 6.1.93
	SUNRPC: Fix loop termination condition in gss_free_in_token_pages()
	x86/tsc: Trust initial offset in architectural TSC-adjust MSRs
	ftrace: Fix possible use-after-free issue in ftrace_location()
	tty: n_gsm: fix possible out-of-bounds in gsm0_receive()
	tty: n_gsm: fix missing receive state reset after mode switch
	speakup: Fix sizeof() vs ARRAY_SIZE() bug
	serial: 8250_bcm7271: use default_mux_rate if possible
	serial: 8520_mtk: Set RTS on shutdown for Rx in-band wakeup
	io_uring: fail NOP if non-zero op flags is passed in
	Revert "r8169: don't try to disable interrupts if NAPI is, scheduled already"
	r8169: Fix possible ring buffer corruption on fragmented Tx packets.
	ring-buffer: Fix a race between readers and resize checks
	tools/latency-collector: Fix -Wformat-security compile warns
	tools/nolibc/stdlib: fix memory error in realloc()
	net: smc91x: Fix m68k kernel compilation for ColdFire CPU
	nilfs2: fix unexpected freezing of nilfs_segctor_sync()
	nilfs2: fix potential hang in nilfs_detach_log_writer()
	fs/ntfs3: Remove max link count info display during driver init
	fs/ntfs3: Taking DOS names into account during link counting
	fs/ntfs3: Fix case when index is reused during tree transformation
	fs/ntfs3: Break dir enumeration if directory contents error
	ksmbd: avoid to send duplicate oplock break notifications
	ksmbd: ignore trailing slashes in share paths
	ALSA: hda/realtek: fix mute/micmute LEDs don't work for ProBook 440/460 G11.
	ALSA: core: Fix NULL module pointer assignment at card init
	ALSA: Fix deadlocks with kctl removals at disconnection
	KEYS: asymmetric: Add missing dependencies of FIPS_SIGNATURE_SELFTEST
	wifi: mac80211: don't use rate mask for scanning
	wifi: mac80211: ensure beacon is non-S1G prior to extracting the beacon timestamp field
	wifi: cfg80211: fix the order of arguments for trace events of the tx_rx_evt class
	dt-bindings: rockchip: grf: Add missing type to 'pcie-phy' node
	net: usb: qmi_wwan: add Telit FN920C04 compositions
	drm/amd/display: Set color_mgmt_changed to true on unsuspend
	drm/amdgpu: Update BO eviction priorities
	drm/amdgpu: Fix the ring buffer size for queue VM flush
	drm/amdgpu/mes: fix use-after-free issue
	LoongArch: Lately init pmu after smp is online
	selftests: sud_test: return correct emulated syscall value on RISC-V
	sched/isolation: Fix boot crash when maxcpus < first housekeeping CPU
	ASoC: Intel: bytcr_rt5640: Apply Asus T100TA quirk to Asus T100TAM too
	regulator: irq_helpers: duplicate IRQ name
	ASoC: rt5645: Fix the electric noise due to the CBJ contacts floating
	ASoC: dt-bindings: rt5645: add cbj sleeve gpio property
	regulator: vqmmc-ipq4019: fix module autoloading
	ASoC: rt715: add vendor clear control register
	ASoC: rt715-sdca: volume step modification
	KVM: selftests: Add test for uaccesses to non-existent vgic-v2 CPUIF
	x86/efistub: Omit physical KASLR when memory reservations exist
	efi: libstub: only free priv.runtime_map when allocated
	KVM: x86: Don't advertise guest.MAXPHYADDR as host.MAXPHYADDR in CPUID
	genirq/cpuhotplug, x86/vector: Prevent vector leak during CPU offline
	fpga: dfl-pci: add PCI subdevice ID for Intel D5005 card
	softirq: Fix suspicious RCU usage in __do_softirq()
	ASoC: da7219-aad: fix usage of device_get_named_child_node()
	ALSA: hda: intel-dsp-config: harden I2C/I2S codec detection
	drm/amd/display: Add dtbclk access to dcn315
	drm/amd/display: Add VCO speed parameter for DCN31 FPU
	drm/amdkfd: Flush the process wq before creating a kfd_process
	x86/mm: Remove broken vsyscall emulation code from the page fault code
	nvme: find numa distance only if controller has valid numa id
	nvmet-auth: return the error code to the nvmet_auth_host_hash() callers
	nvmet-auth: replace pr_debug() with pr_err() to report an error.
	nvmet-tcp: fix possible memory leak when tearing down a controller
	nvmet: fix nvme status code when namespace is disabled
	epoll: be better about file lifetimes
	nvmet: prevent sprintf() overflow in nvmet_subsys_nsid_exists()
	openpromfs: finish conversion to the new mount API
	crypto: bcm - Fix pointer arithmetic
	mm/slub, kunit: Use inverted data to corrupt kmem cache
	firmware: raspberrypi: Use correct device for DMA mappings
	ecryptfs: Fix buffer size for tag 66 packet
	nilfs2: fix out-of-range warning
	parisc: add missing export of __cmpxchg_u8()
	crypto: ccp - drop platform ifdef checks
	crypto: x86/nh-avx2 - add missing vzeroupper
	crypto: x86/sha256-avx2 - add missing vzeroupper
	crypto: x86/sha512-avx2 - add missing vzeroupper
	s390/cio: fix tracepoint subchannel type field
	io_uring: don't use TIF_NOTIFY_SIGNAL to test for availability of task_work
	io_uring: use the right type for work_llist empty check
	rcu-tasks: Fix show_rcu_tasks_trace_gp_kthread buffer overflow
	rcu: Fix buffer overflow in print_cpu_stall_info()
	ARM: configs: sunxi: Enable DRM_DW_HDMI
	jffs2: prevent xattr node from overflowing the eraseblock
	soc: mediatek: cmdq: Fix typo of CMDQ_JUMP_RELATIVE
	null_blk: Fix missing mutex_destroy() at module removal
	md: fix resync softlockup when bitmap size is less than array size
	block: open code __blk_account_io_start()
	block: open code __blk_account_io_done()
	block: support to account io_ticks precisely
	wifi: ath10k: poll service ready message before failing
	wifi: brcmfmac: pcie: handle randbuf allocation failure
	wifi: ath11k: don't force enable power save on non-running vdevs
	bpftool: Fix missing pids during link show
	x86/boot: Ignore relocations in .notes sections in walk_relocs() too
	sched/fair: Add EAS checks before updating root_domain::overutilized
	ACPI: Fix Generic Initiator Affinity _OSC bit
	qed: avoid truncating work queue length
	net/mlx5e: Fail with messages when params are not valid for XSK
	mlx5: stop warning for 64KB pages
	bitops: add missing prototype check
	wifi: carl9170: re-fix fortified-memset warning
	bpf: Pack struct bpf_fib_lookup
	scsi: ufs: qcom: Perform read back after writing reset bit
	scsi: ufs: qcom: Perform read back after writing REG_UFS_SYS1CLK_1US
	scsi: ufs: ufs-qcom: Fix the Qcom register name for offset 0xD0
	scsi: ufs: ufs-qcom: Clear qunipro_g4_sel for HW version major 5
	scsi: ufs: qcom: Perform read back after writing unipro mode
	scsi: ufs: qcom: Perform read back after writing CGC enable
	scsi: ufs: cdns-pltfrm: Perform read back after writing HCLKDIV
	scsi: ufs: core: Perform read back after disabling interrupts
	scsi: ufs: core: Perform read back after disabling UIC_COMMAND_COMPL
	ACPI: LPSS: Advertise number of chip selects via property
	irqchip/alpine-msi: Fix off-by-one in allocation error path
	irqchip/loongson-pch-msi: Fix off-by-one on allocation error path
	ACPI: disable -Wstringop-truncation
	gfs2: Don't forget to complete delayed withdraw
	gfs2: Fix "ignore unlock failures after withdraw"
	x86/boot/64: Clear most of CR4 in startup_64(), except PAE, MCE and LA57
	selftests/bpf: Fix umount cgroup2 error in test_sockmap
	cpufreq: exit() callback is optional
	x86/pat: Introduce lookup_address_in_pgd_attr()
	x86/pat: Restructure _lookup_address_cpa()
	x86/pat: Fix W^X violation false-positives when running as Xen PV guest
	net: export inet_lookup_reuseport and inet6_lookup_reuseport
	net: remove duplicate reuseport_lookup functions
	udp: Avoid call to compute_score on multiple sites
	cppc_cpufreq: Fix possible null pointer dereference
	scsi: libsas: Fix the failure of adding phy with zero-address to port
	scsi: hpsa: Fix allocation size for Scsi_Host private data
	x86/purgatory: Switch to the position-independent small code model
	thermal/drivers/tsens: Fix null pointer dereference
	wifi: ath10k: Fix an error code problem in ath10k_dbg_sta_write_peer_debug_trigger()
	selftests/bpf: Fix a fd leak in error paths in open_netns
	wifi: ath10k: populate board data for WCN3990
	net: dsa: mv88e6xxx: Add support for model-specific pre- and post-reset handlers
	net: dsa: mv88e6xxx: Avoid EEPROM timeout without EEPROM on 88E6250-family switches
	tcp: avoid premature drops in tcp_add_backlog()
	pwm: sti: Convert to platform remove callback returning void
	pwm: sti: Prepare removing pwm_chip from driver data
	pwm: sti: Simplify probe function using devm functions
	drivers/perf: hisi_pcie: Fix out-of-bound access when valid event group
	drivers/perf: hisi: hns3: Fix out-of-bound access when valid event group
	drivers/perf: hisi: hns3: Actually use devm_add_action_or_reset()
	net: give more chances to rcu in netdev_wait_allrefs_any()
	macintosh/via-macii: Fix "BUG: sleeping function called from invalid context"
	wifi: carl9170: add a proper sanity check for endpoints
	wifi: ar5523: enable proper endpoint verification
	sh: kprobes: Merge arch_copy_kprobe() into arch_prepare_kprobe()
	Revert "sh: Handle calling csum_partial with misaligned data"
	wifi: mt76: mt7603: add wpdma tx eof flag for PSE client reset
	libbpf: Fix error message in attach_kprobe_multi
	selftests/binderfs: use the Makefile's rules, not Make's implicit rules
	selftests/resctrl: fix clang build failure: use LOCAL_HDRS
	selftests: default to host arch for LLVM builds
	kunit: Fix kthread reference
	HID: intel-ish-hid: ipc: Add check for pci_alloc_irq_vectors
	scsi: bfa: Ensure the copied buf is NUL terminated
	scsi: qedf: Ensure the copied buf is NUL terminated
	scsi: qla2xxx: Fix debugfs output for fw_resource_count
	kernel/numa.c: Move logging out of numa.h
	x86/numa: Fix SRAT lookup of CFMWS ranges with numa_fill_memblks()
	wifi: mwl8k: initialize cmd->addr[] properly
	HID: amd_sfh: Handle "no sensors" in PM operations
	usb: aqc111: stop lying about skb->truesize
	net: usb: sr9700: stop lying about skb->truesize
	m68k: Fix spinlock race in kernel thread creation
	m68k: mac: Fix reboot hang on Mac IIci
	net: ipv6: fix wrong start position when receive hop-by-hop fragment
	eth: sungem: remove .ndo_poll_controller to avoid deadlocks
	selftests: net: move amt to socat for better compatibility
	net: ethernet: cortina: Locking fixes
	af_unix: Fix data races in unix_release_sock/unix_stream_sendmsg
	net: usb: smsc95xx: stop lying about skb->truesize
	net: openvswitch: fix overwriting ct original tuple for ICMPv6
	ipv6: sr: add missing seg6_local_exit
	ipv6: sr: fix incorrect unregister order
	ipv6: sr: fix invalid unregister error path
	net/mlx5: Add a timeout to acquire the command queue semaphore
	net/mlx5: Discard command completions in internal error
	s390/bpf: Emit a barrier for BPF_FETCH instructions
	riscv, bpf: make some atomic operations fully ordered
	ax25: Use kernel universal linked list to implement ax25_dev_list
	ax25: Fix reference count leak issues of ax25_dev
	ax25: Fix reference count leak issue of net_device
	mptcp: SO_KEEPALIVE: fix getsockopt support
	Bluetooth: Consolidate code around sk_alloc into a helper function
	Bluetooth: compute LE flow credits based on recvbuf space
	Bluetooth: qca: Fix error code in qca_read_fw_build_info()
	drm/bridge: Fix improper bridge init order with pre_enable_prev_first
	printk: Let no_printk() use _printk()
	dev_printk: Add and use dev_no_printk()
	drm/lcdif: Do not disable clocks on already suspended hardware
	drm/panel-samsung-atna33xc20: Use ktime_get_boottime for delays
	drm/dp: Don't attempt AUX transfers when eDP panels are not powered
	drm/panel: atna33xc20: Fix unbalanced regulator in the case HPD doesn't assert
	drm/amd/display: Fix potential index out of bounds in color transformation function
	ASoC: Intel: Disable route checks for Skylake boards
	ASoC: Intel: avs: ssm4567: Do not ignore route checks
	mtd: core: Report error if first mtd_otp_size() call fails in mtd_otp_nvmem_add()
	mtd: rawnand: hynix: fixed typo
	fbdev: shmobile: fix snprintf truncation
	ASoC: kirkwood: Fix potential NULL dereference
	drm/meson: vclk: fix calculation of 59.94 fractional rates
	drm/mediatek: Add 0 size check to mtk_drm_gem_obj
	powerpc/fsl-soc: hide unused const variable
	fbdev: sisfb: hide unused variables
	ASoC: Intel: avs: Fix ASRC module initialization
	ASoC: Intel: avs: Fix potential integer overflow
	media: ngene: Add dvb_ca_en50221_init return value check
	media: rcar-vin: work around -Wenum-compare-conditional warning
	media: radio-shark2: Avoid led_names truncations
	drm: bridge: cdns-mhdp8546: Fix possible null pointer dereference
	drm/msm/dp: allow voltage swing / pre emphasis of 3
	drm/msm/dp: Return IRQ_NONE for unhandled interrupts
	drm/msm/dp: Avoid a long timeout for AUX transfer if nothing connected
	media: ipu3-cio2: Request IRQ earlier
	media: dt-bindings: ovti,ov2680: Fix the power supply names
	fbdev: sh7760fb: allow modular build
	media: atomisp: ssh_css: Fix a null-pointer dereference in load_video_binaries
	drm/arm/malidp: fix a possible null pointer dereference
	drm: vc4: Fix possible null pointer dereference
	ASoC: tracing: Export SND_SOC_DAPM_DIR_OUT to its value
	drm/bridge: anx7625: Don't log an error when DSI host can't be found
	drm/bridge: icn6211: Don't log an error when DSI host can't be found
	drm/bridge: lt8912b: Don't log an error when DSI host can't be found
	drm/bridge: lt9611: Don't log an error when DSI host can't be found
	drm/bridge: lt9611uxc: Don't log an error when DSI host can't be found
	drm/bridge: tc358775: Don't log an error when DSI host can't be found
	drm/bridge: dpc3433: Don't log an error when DSI host can't be found
	drm/panel: novatek-nt35950: Don't log an error when DSI host can't be found
	drm/panel: simple: Add missing Innolux G121X1-L03 format, flags, connector
	drm/mipi-dsi: use correct return type for the DSC functions
	drm/rockchip: vop2: Do not divide height twice for YUV
	clk: samsung: exynosautov9: fix wrong pll clock id value
	RDMA/mlx5: Adding remote atomic access flag to updatable flags
	RDMA/hns: Fix return value in hns_roce_map_mr_sg
	RDMA/hns: Fix deadlock on SRQ async events.
	RDMA/hns: Fix UAF for cq async event
	RDMA/hns: Fix GMV table pagesize
	RDMA/hns: Use complete parentheses in macros
	RDMA/hns: Modify the print level of CQE error
	clk: mediatek: mt8365-mm: fix DPI0 parent
	clk: rs9: fix wrong default value for clock amplitude
	RDMA/rxe: Fix seg fault in rxe_comp_queue_pkt
	RDMA/rxe: Replace pr_xxx by rxe_dbg_xxx in rxe_net.c
	RDMA/rxe: Fix incorrect rxe_put in error path
	IB/mlx5: Use __iowrite64_copy() for write combining stores
	clk: renesas: r8a779a0: Fix CANFD parent clock
	clk: renesas: r9a07g043: Add clock and reset entry for PLIC
	lib/test_hmm.c: handle src_pfns and dst_pfns allocation failure
	clk: qcom: dispcc-sm8450: fix DisplayPort clocks
	clk: qcom: dispcc-sm6350: fix DisplayPort clocks
	clk: qcom: mmcc-msm8998: fix venus clock issue
	x86/insn: Fix PUSH instruction in x86 instruction decoder opcode map
	x86/insn: Add VEX versions of VPDPBUSD, VPDPBUSDS, VPDPWSSD and VPDPWSSDS
	ext4: avoid excessive credit estimate in ext4_tmpfile()
	virt: acrn: stop using follow_pfn
	drivers/virt/acrn: fix PFNMAP PTE checks in acrn_vm_ram_map()
	sunrpc: removed redundant procp check
	ext4: simplify calculation of blkoff in ext4_mb_new_blocks_simple
	ext4: fix unit mismatch in ext4_mb_new_blocks_simple
	ext4: try all groups in ext4_mb_new_blocks_simple
	ext4: remove unused parameter from ext4_mb_new_blocks_simple()
	ext4: fix potential unnitialized variable
	SUNRPC: Fix gss_free_in_token_pages()
	selftests/kcmp: remove unused open mode
	RDMA/IPoIB: Fix format truncation compilation errors
	net: add pskb_may_pull_reason() helper
	net: bridge: xmit: make sure we have at least eth header len bytes
	selftests: net: bridge: increase IGMP/MLD exclude timeout membership interval
	net: bridge: mst: fix vlan use-after-free
	net: qrtr: ns: Fix module refcnt
	netrom: fix possible dead-lock in nr_rt_ioctl()
	af_packet: do not call packet_read_pending() from tpacket_destruct_skb()
	sched/fair: Allow disabling sched_balance_newidle with sched_relax_domain_level
	sched/core: Fix incorrect initialization of the 'burst' parameter in cpu_max_write()
	scsi: ufs: ufs-qcom: Clear qunipro_g4_sel for HW major version > 5
	perf record: Delete session after stopping sideband thread
	perf probe: Add missing libgen.h header needed for using basename()
	iio: core: Leave private pointer NULL when no private data supplied
	greybus: lights: check return of get_channel_from_mode
	f2fs: multidev: fix to recognize valid zero block address
	f2fs: fix to wait on page writeback in __clone_blkaddrs()
	counter: linux/counter.h: fix Excess kernel-doc description warning
	perf annotate: Get rid of duplicate --group option item
	soundwire: cadence: fix invalid PDI offset
	dmaengine: idma64: Add check for dma_set_max_seg_size
	firmware: dmi-id: add a release callback function
	serial: max3100: Lock port->lock when calling uart_handle_cts_change()
	serial: max3100: Update uart_driver_registered on driver removal
	serial: max3100: Fix bitwise types
	greybus: arche-ctrl: move device table to its right location
	PCI: tegra194: Fix probe path for Endpoint mode
	serial: sc16is7xx: add proper sched.h include for sched_set_fifo()
	interconnect: qcom: qcm2290: Fix mas_snoc_bimc QoS port assignment
	arm64: dts: meson: fix S4 power-controller node
	perf test: Add -w/--workload option
	perf test: Add 'thloop' test workload
	perf test: Add 'leafloop' test workload
	perf test: Add 'sqrtloop' test workload
	perf test: Add 'brstack' test workload
	perf test: Add 'datasym' test workload
	perf tests: Make "test data symbol" more robust on Neoverse N1
	dt-bindings: PCI: rcar-pci-host: Add optional regulators
	dt-bindings: PCI: rcar-pci-host: Add missing IOMMU properties
	f2fs: compress: fix to relocate check condition in f2fs_{release,reserve}_compress_blocks()
	f2fs: compress: fix to relocate check condition in f2fs_ioc_{,de}compress_file()
	f2fs: fix typos in comments
	f2fs: fix to relocate check condition in f2fs_fallocate()
	f2fs: fix to check pinfile flag in f2fs_move_file_range()
	iio: adc: stm32: Fixing err code to not indicate success
	coresight: etm4x: Fix unbalanced pm_runtime_enable()
	perf docs: Document bpf event modifier
	iio: pressure: dps310: support negative temperature values
	coresight: etm4x: Do not hardcode IOMEM access for register restore
	coresight: etm4x: Do not save/restore Data trace control registers
	coresight: etm4x: Safe access for TRCQCLTR
	coresight: etm4x: Fix access to resource selector registers
	fpga: region: add owner module and take its refcount
	microblaze: Remove gcc flag for non existing early_printk.c file
	microblaze: Remove early printk call from cpuinfo-static.c
	perf intel-pt: Fix unassigned instruction op (discovered by MemorySanitizer)
	ovl: remove upper umask handling from ovl_create_upper()
	VMCI: Fix an error handling path in vmci_guest_probe_device()
	dt-bindings: pinctrl: mediatek: mt7622: fix array properties
	watchdog: bd9576: Drop "always-running" property
	watchdog: sa1100: Fix PTR_ERR_OR_ZERO() vs NULL check in sa1100dog_probe()
	usb: gadget: u_audio: Fix race condition use of controls after free during gadget unbind.
	usb: gadget: u_audio: Clear uac pointer when freed.
	stm class: Fix a double free in stm_register_device()
	ppdev: Remove usage of the deprecated ida_simple_xx() API
	ppdev: Add an error check in register_device
	perf bench internals inject-build-id: Fix trap divide when collecting just one DSO
	perf ui browser: Don't save pointer to stack memory
	extcon: max8997: select IRQ_DOMAIN instead of depending on it
	PCI/EDR: Align EDR_PORT_DPC_ENABLE_DSM with PCI Firmware r3.3
	PCI/EDR: Align EDR_PORT_LOCATE_DSM with PCI Firmware r3.3
	perf ui browser: Avoid SEGV on title
	perf report: Avoid SEGV in report__setup_sample_type()
	f2fs: compress: fix to update i_compr_blocks correctly
	f2fs: compress: fix to cover {reserve,release}_compress_blocks() w/ cp_rwsem lock
	f2fs: fix to release node block count in error path of f2fs_new_node_page()
	f2fs: compress: don't allow unaligned truncation on released compress inode
	serial: sh-sci: protect invalidating RXDMA on shutdown
	libsubcmd: Fix parse-options memory leak
	perf daemon: Fix file leak in daemon_session__control
	f2fs: fix to add missing iput() in gc_data_segment()
	perf stat: Don't display metric header for non-leader uncore events
	LoongArch: Fix callchain parse error with kernel tracepoint events again
	s390/vdso: filter out mno-pic-data-is-text-relative cflag
	s390/vdso64: filter out munaligned-symbols flag for vdso
	s390/vdso: Generate unwind information for C modules
	s390/vdso: Use standard stack frame layout
	s390/ipl: Fix incorrect initialization of len fields in nvme reipl block
	s390/ipl: Fix incorrect initialization of nvme dump block
	s390/boot: Remove alt_stfle_fac_list from decompressor
	Input: ims-pcu - fix printf string overflow
	Input: ioc3kbd - convert to platform remove callback returning void
	Input: ioc3kbd - add device table
	mmc: sdhci_am654: Add tuning algorithm for delay chain
	mmc: sdhci_am654: Write ITAPDLY for DDR52 timing
	mmc: sdhci_am654: Drop lookup for deprecated ti,otap-del-sel
	mmc: sdhci_am654: Add OTAP/ITAP delay enable
	mmc: sdhci_am654: Add ITAPDLYSEL in sdhci_j721e_4bit_set_clock
	mmc: sdhci_am654: Fix ITAPDLY for HS400 timing
	Input: pm8xxx-vibrator - correct VIB_MAX_LEVELS calculation
	drm/msm/dsi: Print dual-DSI-adjusted pclk instead of original mode pclk
	drm/msm/dpu: Always flush the slave INTF on the CTL
	drm/mediatek: dp: Move PHY registration to new function
	drm/mediatek: dp: Add support for embedded DisplayPort aux-bus
	drm/mediatek: dp: Fix mtk_dp_aux_transfer return value
	um: Fix return value in ubd_init()
	um: Add winch to winch_handlers before registering winch IRQ
	um: vector: fix bpfflash parameter evaluation
	fs/ntfs3: Use 64 bit variable to avoid 32 bit overflow
	fs/ntfs3: Use variable length array instead of fixed size
	drm/bridge: tc358775: fix support for jeida-18 and jeida-24
	media: stk1160: fix bounds checking in stk1160_copy_video()
	scsi: qla2xxx: Replace all non-returning strlcpy() with strscpy()
	Input: cyapa - add missing input core locking to suspend/resume functions
	media: flexcop-usb: fix sanity check of bNumEndpoints
	powerpc/pseries: Add failure related checks for h_get_mpp and h_get_ppp
	um: Fix the -Wmissing-prototypes warning for __switch_mm
	um: Fix the -Wmissing-prototypes warning for get_thread_reg
	um: Fix the declaration of kasan_map_memory
	media: sunxi: a83-mips-csi2: also select GENERIC_PHY
	media: cec: cec-adap: always cancel work in cec_transmit_msg_fh
	media: cec: cec-api: add locking in cec_release()
	media: cec: core: avoid recursive cec_claim_log_addrs
	media: cec: core: avoid confusing "transmit timed out" message
	Revert "drm/bridge: ti-sn65dsi83: Fix enable error path"
	drm/msm: Enable clamp_to_idle for 7c3
	drm/msm/a6xx: Avoid a nullptr dereference when speedbin setting fails
	null_blk: Fix the WARNING: modpost: missing MODULE_DESCRIPTION()
	ALSA: hda/cs_dsp_ctl: Use private_free for control cleanup
	ASoC: mediatek: mt8192: fix register configuration for tdm
	regulator: bd71828: Don't overwrite runtime voltages
	perf/arm-dmc620: Fix lockdep assert in ->event_init()
	x86/kconfig: Select ARCH_WANT_FRAME_POINTERS again when UNWINDER_FRAME_POINTER=y
	net: Always descend into dsa/ folder with CONFIG_NET_DSA enabled
	ipv6: sr: fix missing sk_buff release in seg6_input_core
	selftests: net: kill smcrouted in the cleanup logic in amt.sh
	nfc: nci: Fix uninit-value in nci_rx_work
	ASoC: tas2552: Add TX path for capturing AUDIO-OUT data
	NFSv4: Fixup smatch warning for ambiguous return
	nfs: keep server info for remounts
	sunrpc: fix NFSACL RPC retry on soft mount
	rpcrdma: fix handling for RDMA_CM_EVENT_DEVICE_REMOVAL
	af_unix: Update unix_sk(sk)->oob_skb under sk_receive_queue lock.
	ipv6: sr: fix memleak in seg6_hmac_init_algo
	tcp: Fix shift-out-of-bounds in dctcp_update_alpha().
	pNFS/filelayout: fixup pNfs allocation modes
	openvswitch: Set the skbuff pkt_type for proper pmtud support.
	arm64: asm-bug: Add .align 2 to the end of __BUG_ENTRY
	rv: Update rv_en(dis)able_monitor doc to match kernel-doc
	virtio: delete vq in vp_find_vqs_msix() when request_irq() fails
	riscv: stacktrace: Make walk_stackframe cross pt_regs frame
	riscv: stacktrace: fixed walk_stackframe()
	Revert "ixgbe: Manual AN-37 for troublesome link partners for X550 SFI"
	net: fec: avoid lock evasion when reading pps_enable
	tls: fix missing memory barrier in tls_init
	inet: factor out locked section of inet_accept() in a new helper
	net: relax socket state check at accept time.
	nfc: nci: Fix kcov check in nci_rx_work()
	nfc: nci: Fix handling of zero-length payload packets in nci_rx_work()
	drivers/xen: Improve the late XenStore init protocol
	ice: Interpret .set_channels() input differently
	netfilter: nfnetlink_queue: acquire rcu_read_lock() in instance_destroy_rcu()
	netfilter: nft_payload: restore vlan q-in-q match support
	spi: Don't mark message DMA mapped when no transfer in it is
	dma-mapping: benchmark: fix node id validation
	dma-mapping: benchmark: handle NUMA_NO_NODE correctly
	nvmet: fix ns enable/disable possible hang
	net: phy: micrel: set soft_reset callback to genphy_soft_reset for KSZ8061
	net/mlx5: Lag, do bond only if slaves agree on roce state
	net/mlx5e: Fix IPsec tunnel mode offload feature check
	net/mlx5e: Use rx_missed_errors instead of rx_dropped for reporting buffer exhaustion
	net/mlx5e: Fix UDP GSO for encapsulated packets
	dma-buf/sw-sync: don't enable IRQ from sync_print_obj()
	bpf: Fix potential integer overflow in resolve_btfids
	ALSA: jack: Use guard() for locking
	ALSA: core: Remove debugfs at disconnection
	ALSA: hda/realtek: Add quirk for ASUS ROG G634Z
	ALSA: hda/realtek: Amend G634 quirk to enable rear speakers
	ALSA: hda/realtek: Adjust G814JZR to use SPI init for amp
	enic: Validate length of nl attributes in enic_set_vf_port
	af_unix: Read sk->sk_hash under bindlock during bind().
	net: usb: smsc95xx: fix changing LED_SEL bit value updated from EEPROM
	bpf: Allow delete from sockmap/sockhash only if update is allowed
	net:fec: Add fec_enet_deinit()
	ice: fix accounting if a VLAN already exists
	netfilter: nft_payload: move struct nft_payload_set definition where it belongs
	netfilter: nft_payload: rebuild vlan header when needed
	netfilter: nft_payload: rebuild vlan header on h_proto access
	netfilter: nft_payload: skbuff vlan metadata mangle support
	netfilter: tproxy: bail out if IP has been disabled on the device
	netfilter: nft_fib: allow from forward/input without iif selector
	kconfig: fix comparison to constant symbols, 'm', 'n'
	drm/i915/guc: avoid FIELD_PREP warning
	spi: stm32: Don't warn about spurious interrupts
	net: dsa: microchip: fix RGMII error in KSZ DSA driver
	net: ena: Add dynamic recycling mechanism for rx buffers
	net: ena: Reduce lines with longer column width boundary
	net: ena: Fix redundant device NUMA node override
	ipvlan: Dont Use skb->sk in ipvlan_process_v{4,6}_outbound
	powerpc/pseries/lparcfg: drop error message from guest name lookup
	hwmon: (shtc1) Fix property misspelling
	riscv: prevent pt_regs corruption for secondary idle threads
	ALSA: timer: Set lower bound of start tick time
	net: ena: Fix DMA syncing in XDP path when SWIOTLB is on
	Linux 6.1.93

Change-Id: I15fdbacdaee5a6d68347a7fd5218929488d594af
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Greg Kroah-Hartman
2024-07-24 14:20:22 +00:00
467 changed files with 3994 additions and 2300 deletions

View File

@@ -37,15 +37,15 @@ properties:
active low. active low.
maxItems: 1 maxItems: 1
dovdd-supply: DOVDD-supply:
description: description:
Definition of the regulator used as interface power supply. Definition of the regulator used as interface power supply.
avdd-supply: AVDD-supply:
description: description:
Definition of the regulator used as analog power supply. Definition of the regulator used as analog power supply.
dvdd-supply: DVDD-supply:
description: description:
Definition of the regulator used as digital power supply. Definition of the regulator used as digital power supply.
@@ -59,9 +59,9 @@ required:
- reg - reg
- clocks - clocks
- clock-names - clock-names
- dovdd-supply - DOVDD-supply
- avdd-supply - AVDD-supply
- dvdd-supply - DVDD-supply
- reset-gpios - reset-gpios
- port - port
@@ -82,9 +82,9 @@ examples:
clock-names = "xvclk"; clock-names = "xvclk";
reset-gpios = <&gpio1 3 GPIO_ACTIVE_LOW>; reset-gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
dovdd-supply = <&sw2_reg>; DOVDD-supply = <&sw2_reg>;
dvdd-supply = <&sw2_reg>; DVDD-supply = <&sw2_reg>;
avdd-supply = <&reg_peri_3p15v>; AVDD-supply = <&reg_peri_3p15v>;
port { port {
ov2680_to_mipi: endpoint { ov2680_to_mipi: endpoint {

View File

@@ -68,6 +68,18 @@ properties:
phy-names: phy-names:
const: pcie const: pcie
vpcie1v5-supply:
description: The 1.5v regulator to use for PCIe.
vpcie3v3-supply:
description: The 3.3v regulator to use for PCIe.
vpcie12v-supply:
description: The 12v regulator to use for PCIe.
iommu-map: true
iommu-map-mask: true
required: required:
- compatible - compatible
- reg - reg
@@ -121,5 +133,7 @@ examples:
clock-names = "pcie", "pcie_bus"; clock-names = "pcie", "pcie_bus";
power-domains = <&sysc R8A7791_PD_ALWAYS_ON>; power-domains = <&sysc R8A7791_PD_ALWAYS_ON>;
resets = <&cpg 319>; resets = <&cpg 319>;
vpcie3v3-supply = <&pcie_3v3>;
vpcie12v-supply = <&pcie_12v>;
}; };
}; };

View File

@@ -97,7 +97,8 @@ patternProperties:
then: then:
properties: properties:
groups: groups:
enum: [emmc, emmc_rst] items:
enum: [emmc, emmc_rst]
- if: - if:
properties: properties:
function: function:
@@ -105,8 +106,9 @@ patternProperties:
then: then:
properties: properties:
groups: groups:
enum: [esw, esw_p0_p1, esw_p2_p3_p4, rgmii_via_esw, items:
rgmii_via_gmac1, rgmii_via_gmac2, mdc_mdio] enum: [esw, esw_p0_p1, esw_p2_p3_p4, rgmii_via_esw,
rgmii_via_gmac1, rgmii_via_gmac2, mdc_mdio]
- if: - if:
properties: properties:
function: function:
@@ -123,10 +125,11 @@ patternProperties:
then: then:
properties: properties:
groups: groups:
enum: [i2s_in_mclk_bclk_ws, i2s1_in_data, i2s2_in_data, items:
i2s3_in_data, i2s4_in_data, i2s_out_mclk_bclk_ws, enum: [i2s_in_mclk_bclk_ws, i2s1_in_data, i2s2_in_data,
i2s1_out_data, i2s2_out_data, i2s3_out_data, i2s3_in_data, i2s4_in_data, i2s_out_mclk_bclk_ws,
i2s4_out_data] i2s1_out_data, i2s2_out_data, i2s3_out_data,
i2s4_out_data]
- if: - if:
properties: properties:
function: function:
@@ -159,10 +162,11 @@ patternProperties:
then: then:
properties: properties:
groups: groups:
enum: [pcie0_0_waken, pcie0_1_waken, pcie1_0_waken, items:
pcie0_0_clkreq, pcie0_1_clkreq, pcie1_0_clkreq, enum: [pcie0_0_waken, pcie0_1_waken, pcie1_0_waken,
pcie0_pad_perst, pcie1_pad_perst, pcie_pereset, pcie0_0_clkreq, pcie0_1_clkreq, pcie1_0_clkreq,
pcie_wake, pcie_clkreq] pcie0_pad_perst, pcie1_pad_perst, pcie_pereset,
pcie_wake, pcie_clkreq]
- if: - if:
properties: properties:
function: function:
@@ -178,11 +182,12 @@ patternProperties:
then: then:
properties: properties:
groups: groups:
enum: [pwm_ch1_0, pwm_ch1_1, pwm_ch1_2, pwm_ch2_0, pwm_ch2_1, items:
pwm_ch2_2, pwm_ch3_0, pwm_ch3_1, pwm_ch3_2, pwm_ch4_0, enum: [pwm_ch1_0, pwm_ch1_1, pwm_ch1_2, pwm_ch2_0, pwm_ch2_1,
pwm_ch4_1, pwm_ch4_2, pwm_ch4_3, pwm_ch5_0, pwm_ch5_1, pwm_ch2_2, pwm_ch3_0, pwm_ch3_1, pwm_ch3_2, pwm_ch4_0,
pwm_ch5_2, pwm_ch6_0, pwm_ch6_1, pwm_ch6_2, pwm_ch6_3, pwm_ch4_1, pwm_ch4_2, pwm_ch4_3, pwm_ch5_0, pwm_ch5_1,
pwm_ch7_0, pwm_0, pwm_1] pwm_ch5_2, pwm_ch6_0, pwm_ch6_1, pwm_ch6_2, pwm_ch6_3,
pwm_ch7_0, pwm_0, pwm_1]
- if: - if:
properties: properties:
function: function:
@@ -260,33 +265,34 @@ patternProperties:
pins: pins:
description: | description: |
An array of strings. Each string contains the name of a pin. An array of strings. Each string contains the name of a pin.
enum: [GPIO_A, I2S1_IN, I2S1_OUT, I2S_BCLK, I2S_WS, I2S_MCLK, TXD0, items:
RXD0, SPI_WP, SPI_HOLD, SPI_CLK, SPI_MOSI, SPI_MISO, SPI_CS, enum: [GPIO_A, I2S1_IN, I2S1_OUT, I2S_BCLK, I2S_WS, I2S_MCLK, TXD0,
I2C_SDA, I2C_SCL, I2S2_IN, I2S3_IN, I2S4_IN, I2S2_OUT, RXD0, SPI_WP, SPI_HOLD, SPI_CLK, SPI_MOSI, SPI_MISO, SPI_CS,
I2S3_OUT, I2S4_OUT, GPIO_B, MDC, MDIO, G2_TXD0, G2_TXD1, I2C_SDA, I2C_SCL, I2S2_IN, I2S3_IN, I2S4_IN, I2S2_OUT,
G2_TXD2, G2_TXD3, G2_TXEN, G2_TXC, G2_RXD0, G2_RXD1, G2_RXD2, I2S3_OUT, I2S4_OUT, GPIO_B, MDC, MDIO, G2_TXD0, G2_TXD1,
G2_RXD3, G2_RXDV, G2_RXC, NCEB, NWEB, NREB, NDL4, NDL5, NDL6, G2_TXD2, G2_TXD3, G2_TXEN, G2_TXC, G2_RXD0, G2_RXD1, G2_RXD2,
NDL7, NRB, NCLE, NALE, NDL0, NDL1, NDL2, NDL3, MDI_TP_P0, G2_RXD3, G2_RXDV, G2_RXC, NCEB, NWEB, NREB, NDL4, NDL5, NDL6,
MDI_TN_P0, MDI_RP_P0, MDI_RN_P0, MDI_TP_P1, MDI_TN_P1, NDL7, NRB, NCLE, NALE, NDL0, NDL1, NDL2, NDL3, MDI_TP_P0,
MDI_RP_P1, MDI_RN_P1, MDI_RP_P2, MDI_RN_P2, MDI_TP_P2, MDI_TN_P0, MDI_RP_P0, MDI_RN_P0, MDI_TP_P1, MDI_TN_P1,
MDI_TN_P2, MDI_TP_P3, MDI_TN_P3, MDI_RP_P3, MDI_RN_P3, MDI_RP_P1, MDI_RN_P1, MDI_RP_P2, MDI_RN_P2, MDI_TP_P2,
MDI_RP_P4, MDI_RN_P4, MDI_TP_P4, MDI_TN_P4, PMIC_SCL, MDI_TN_P2, MDI_TP_P3, MDI_TN_P3, MDI_RP_P3, MDI_RN_P3,
PMIC_SDA, SPIC1_CLK, SPIC1_MOSI, SPIC1_MISO, SPIC1_CS, MDI_RP_P4, MDI_RN_P4, MDI_TP_P4, MDI_TN_P4, PMIC_SCL,
GPIO_D, WATCHDOG, RTS3_N, CTS3_N, TXD3, RXD3, PERST0_N, PMIC_SDA, SPIC1_CLK, SPIC1_MOSI, SPIC1_MISO, SPIC1_CS,
PERST1_N, WLED_N, EPHY_LED0_N, AUXIN0, AUXIN1, AUXIN2, GPIO_D, WATCHDOG, RTS3_N, CTS3_N, TXD3, RXD3, PERST0_N,
AUXIN3, TXD4, RXD4, RTS4_N, CST4_N, PWM1, PWM2, PWM3, PWM4, PERST1_N, WLED_N, EPHY_LED0_N, AUXIN0, AUXIN1, AUXIN2,
PWM5, PWM6, PWM7, GPIO_E, TOP_5G_CLK, TOP_5G_DATA, AUXIN3, TXD4, RXD4, RTS4_N, CST4_N, PWM1, PWM2, PWM3, PWM4,
WF0_5G_HB0, WF0_5G_HB1, WF0_5G_HB2, WF0_5G_HB3, WF0_5G_HB4, PWM5, PWM6, PWM7, GPIO_E, TOP_5G_CLK, TOP_5G_DATA,
WF0_5G_HB5, WF0_5G_HB6, XO_REQ, TOP_RST_N, SYS_WATCHDOG, WF0_5G_HB0, WF0_5G_HB1, WF0_5G_HB2, WF0_5G_HB3, WF0_5G_HB4,
EPHY_LED0_N_JTDO, EPHY_LED1_N_JTDI, EPHY_LED2_N_JTMS, WF0_5G_HB5, WF0_5G_HB6, XO_REQ, TOP_RST_N, SYS_WATCHDOG,
EPHY_LED3_N_JTCLK, EPHY_LED4_N_JTRST_N, WF2G_LED_N, EPHY_LED0_N_JTDO, EPHY_LED1_N_JTDI, EPHY_LED2_N_JTMS,
WF5G_LED_N, GPIO_9, GPIO_10, GPIO_11, GPIO_12, UART1_TXD, EPHY_LED3_N_JTCLK, EPHY_LED4_N_JTRST_N, WF2G_LED_N,
UART1_RXD, UART1_CTS, UART1_RTS, UART2_TXD, UART2_RXD, WF5G_LED_N, GPIO_9, GPIO_10, GPIO_11, GPIO_12, UART1_TXD,
UART2_CTS, UART2_RTS, SMI_MDC, SMI_MDIO, PCIE_PERESET_N, UART1_RXD, UART1_CTS, UART1_RTS, UART2_TXD, UART2_RXD,
PWM_0, GPIO_0, GPIO_1, GPIO_2, GPIO_3, GPIO_4, GPIO_5, UART2_CTS, UART2_RTS, SMI_MDC, SMI_MDIO, PCIE_PERESET_N,
GPIO_6, GPIO_7, GPIO_8, UART0_TXD, UART0_RXD, TOP_2G_CLK, PWM_0, GPIO_0, GPIO_1, GPIO_2, GPIO_3, GPIO_4, GPIO_5,
TOP_2G_DATA, WF0_2G_HB0, WF0_2G_HB1, WF0_2G_HB2, WF0_2G_HB3, GPIO_6, GPIO_7, GPIO_8, UART0_TXD, UART0_RXD, TOP_2G_CLK,
WF0_2G_HB4, WF0_2G_HB5, WF0_2G_HB6] TOP_2G_DATA, WF0_2G_HB0, WF0_2G_HB1, WF0_2G_HB2, WF0_2G_HB3,
WF0_2G_HB4, WF0_2G_HB5, WF0_2G_HB6]
bias-disable: true bias-disable: true

View File

@@ -151,6 +151,7 @@ allOf:
unevaluatedProperties: false unevaluatedProperties: false
pcie-phy: pcie-phy:
type: object
description: description:
Documentation/devicetree/bindings/phy/rockchip-pcie-phy.txt Documentation/devicetree/bindings/phy/rockchip-pcie-phy.txt

View File

@@ -20,6 +20,11 @@ Optional properties:
a GPIO spec for the external headphone detect pin. If jd-mode = 0, a GPIO spec for the external headphone detect pin. If jd-mode = 0,
we will get the JD status by getting the value of hp-detect-gpios. we will get the JD status by getting the value of hp-detect-gpios.
- cbj-sleeve-gpios:
a GPIO spec to control the external combo jack circuit to tie the sleeve/ring2
contacts to the ground or floating. It could avoid some electric noise from the
active speaker jacks.
- realtek,in2-differential - realtek,in2-differential
Boolean. Indicate MIC2 input are differential, rather than single-ended. Boolean. Indicate MIC2 input are differential, rather than single-ended.
@@ -68,6 +73,7 @@ codec: rt5650@1a {
compatible = "realtek,rt5650"; compatible = "realtek,rt5650";
reg = <0x1a>; reg = <0x1a>;
hp-detect-gpios = <&gpio 19 0>; hp-detect-gpios = <&gpio 19 0>;
cbj-sleeve-gpios = <&gpio 20 0>;
interrupt-parent = <&gpio>; interrupt-parent = <&gpio>;
interrupts = <7 IRQ_TYPE_EDGE_FALLING>; interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
realtek,dmic-en = "true"; realtek,dmic-en = "true";

View File

@@ -46,13 +46,16 @@ API to add a new FPGA region
---------------------------- ----------------------------
* struct fpga_region - The FPGA region struct * struct fpga_region - The FPGA region struct
* struct fpga_region_info - Parameter structure for fpga_region_register_full() * struct fpga_region_info - Parameter structure for __fpga_region_register_full()
* fpga_region_register_full() - Create and register an FPGA region using the * __fpga_region_register_full() - Create and register an FPGA region using the
fpga_region_info structure to provide the full flexibility of options fpga_region_info structure to provide the full flexibility of options
* fpga_region_register() - Create and register an FPGA region using standard * __fpga_region_register() - Create and register an FPGA region using standard
arguments arguments
* fpga_region_unregister() - Unregister an FPGA region * fpga_region_unregister() - Unregister an FPGA region
Helper macros ``fpga_region_register()`` and ``fpga_region_register_full()``
automatically set the module that registers the FPGA region as the owner.
The FPGA region's probe function will need to get a reference to the FPGA The FPGA region's probe function will need to get a reference to the FPGA
Manager it will be using to do the programming. This usually would happen Manager it will be using to do the programming. This usually would happen
during the region's probe function. during the region's probe function.
@@ -82,10 +85,10 @@ following APIs to handle building or tearing down that list.
:functions: fpga_region_info :functions: fpga_region_info
.. kernel-doc:: drivers/fpga/fpga-region.c .. kernel-doc:: drivers/fpga/fpga-region.c
:functions: fpga_region_register_full :functions: __fpga_region_register_full
.. kernel-doc:: drivers/fpga/fpga-region.c .. kernel-doc:: drivers/fpga/fpga-region.c
:functions: fpga_region_register :functions: __fpga_region_register
.. kernel-doc:: drivers/fpga/fpga-region.c .. kernel-doc:: drivers/fpga/fpga-region.c
:functions: fpga_region_unregister :functions: fpga_region_unregister

View File

@@ -205,6 +205,7 @@ Adaptive coalescing can be switched on/off through `ethtool(8)`'s
More information about Adaptive Interrupt Moderation (DIM) can be found in More information about Adaptive Interrupt Moderation (DIM) can be found in
Documentation/networking/net_dim.rst Documentation/networking/net_dim.rst
.. _`RX copybreak`:
RX copybreak RX copybreak
============ ============
The rx_copybreak is initialized by default to ENA_DEFAULT_RX_COPYBREAK The rx_copybreak is initialized by default to ENA_DEFAULT_RX_COPYBREAK
@@ -315,3 +316,34 @@ Rx
- The new SKB is updated with the necessary information (protocol, - The new SKB is updated with the necessary information (protocol,
checksum hw verify result, etc), and then passed to the network checksum hw verify result, etc), and then passed to the network
stack, using the NAPI interface function :code:`napi_gro_receive()`. stack, using the NAPI interface function :code:`napi_gro_receive()`.
Dynamic RX Buffers (DRB)
------------------------
Each RX descriptor in the RX ring is a single memory page (which is either 4KB
or 16KB long depending on system's configurations).
To reduce the memory allocations required when dealing with a high rate of small
packets, the driver tries to reuse the remaining RX descriptor's space if more
than 2KB of this page remain unused.
A simple example of this mechanism is the following sequence of events:
::
1. Driver allocates page-sized RX buffer and passes it to hardware
+----------------------+
|4KB RX Buffer |
+----------------------+
2. A 300Bytes packet is received on this buffer
3. The driver increases the ref count on this page and returns it back to
HW as an RX buffer of size 4KB - 300Bytes = 3796 Bytes
+----+--------------------+
|****|3796 Bytes RX Buffer|
+----+--------------------+
This mechanism isn't used when an XDP program is loaded, or when the
RX packet is less than rx_copybreak bytes (in which case the packet is
copied out of the RX buffer into the linear part of a new skb allocated
for it and the RX buffer remains the same size, see `RX copybreak`_).

View File

@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0 # SPDX-License-Identifier: GPL-2.0
VERSION = 6 VERSION = 6
PATCHLEVEL = 1 PATCHLEVEL = 1
SUBLEVEL = 92 SUBLEVEL = 93
EXTRAVERSION = EXTRAVERSION =
NAME = Curry Ramen NAME = Curry Ramen

View File

@@ -110,6 +110,7 @@ CONFIG_DRM_PANEL_LVDS=y
CONFIG_DRM_PANEL_SIMPLE=y CONFIG_DRM_PANEL_SIMPLE=y
CONFIG_DRM_PANEL_EDP=y CONFIG_DRM_PANEL_EDP=y
CONFIG_DRM_SIMPLE_BRIDGE=y CONFIG_DRM_SIMPLE_BRIDGE=y
CONFIG_DRM_DW_HDMI=y
CONFIG_DRM_LIMA=y CONFIG_DRM_LIMA=y
CONFIG_FB_SIMPLE=y CONFIG_FB_SIMPLE=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y CONFIG_BACKLIGHT_CLASS_DEVICE=y

View File

@@ -61,10 +61,15 @@
#clock-cells = <0>; #clock-cells = <0>;
}; };
pwrc: power-controller { firmware {
compatible = "amlogic,meson-s4-pwrc"; sm: secure-monitor {
#power-domain-cells = <1>; compatible = "amlogic,meson-gxbb-sm";
status = "okay";
pwrc: power-controller {
compatible = "amlogic,meson-s4-pwrc";
#power-domain-cells = <1>;
};
};
}; };
soc { soc {

View File

@@ -28,6 +28,7 @@
14470: .long 14471f - .; \ 14470: .long 14471f - .; \
_BUGVERBOSE_LOCATION(__FILE__, __LINE__) \ _BUGVERBOSE_LOCATION(__FILE__, __LINE__) \
.short flags; \ .short flags; \
.align 2; \
.popsection; \ .popsection; \
14471: 14471:
#else #else

View File

@@ -13,8 +13,7 @@
#define perf_arch_fetch_caller_regs(regs, __ip) { \ #define perf_arch_fetch_caller_regs(regs, __ip) { \
(regs)->csr_era = (__ip); \ (regs)->csr_era = (__ip); \
(regs)->regs[3] = current_stack_pointer; \ (regs)->regs[3] = (unsigned long) __builtin_frame_address(0); \
(regs)->regs[22] = (unsigned long) __builtin_frame_address(0); \
} }
#endif /* __LOONGARCH_PERF_EVENT_H__ */ #endif /* __LOONGARCH_PERF_EVENT_H__ */

View File

@@ -884,4 +884,4 @@ static int __init init_hw_perf_events(void)
return 0; return 0;
} }
early_initcall(init_hw_perf_events); pure_initcall(init_hw_perf_events);

View File

@@ -430,7 +430,9 @@ resume:
movec %a0,%dfc movec %a0,%dfc
/* restore status register */ /* restore status register */
movew %a1@(TASK_THREAD+THREAD_SR),%sr movew %a1@(TASK_THREAD+THREAD_SR),%d0
oriw #0x0700,%d0
movew %d0,%sr
rts rts

View File

@@ -451,30 +451,18 @@ void mac_poweroff(void)
void mac_reset(void) void mac_reset(void)
{ {
if (macintosh_config->adb_type == MAC_ADB_II &&
macintosh_config->ident != MAC_MODEL_SE30) {
/* need ROMBASE in booter */
/* indeed, plus need to MAP THE ROM !! */
if (mac_bi_data.rombase == 0)
mac_bi_data.rombase = 0x40800000;
/* works on some */
rom_reset = (void *) (mac_bi_data.rombase + 0xa);
local_irq_disable();
rom_reset();
#ifdef CONFIG_ADB_CUDA #ifdef CONFIG_ADB_CUDA
} else if (macintosh_config->adb_type == MAC_ADB_EGRET || if (macintosh_config->adb_type == MAC_ADB_EGRET ||
macintosh_config->adb_type == MAC_ADB_CUDA) { macintosh_config->adb_type == MAC_ADB_CUDA) {
cuda_restart(); cuda_restart();
} else
#endif #endif
#ifdef CONFIG_ADB_PMU #ifdef CONFIG_ADB_PMU
} else if (macintosh_config->adb_type == MAC_ADB_PB2) { if (macintosh_config->adb_type == MAC_ADB_PB2) {
pmu_restart(); pmu_restart();
} else
#endif #endif
} else if (CPU_IS_030) { if (CPU_IS_030) {
/* 030-specific reset routine. The idea is general, but the /* 030-specific reset routine. The idea is general, but the
* specific registers to reset are '030-specific. Until I * specific registers to reset are '030-specific. Until I
* have a non-030 machine, I can't test anything else. * have a non-030 machine, I can't test anything else.
@@ -522,6 +510,18 @@ void mac_reset(void)
"jmp %/a0@\n\t" /* jump to the reset vector */ "jmp %/a0@\n\t" /* jump to the reset vector */
".chip 68k" ".chip 68k"
: : "r" (offset), "a" (rombase) : "a0"); : : "r" (offset), "a" (rombase) : "a0");
} else {
/* need ROMBASE in booter */
/* indeed, plus need to MAP THE ROM !! */
if (mac_bi_data.rombase == 0)
mac_bi_data.rombase = 0x40800000;
/* works on some */
rom_reset = (void *)(mac_bi_data.rombase + 0xa);
local_irq_disable();
rom_reset();
} }
/* should never get here */ /* should never get here */

View File

@@ -7,7 +7,6 @@ ifdef CONFIG_FUNCTION_TRACER
# Do not trace early boot code and low level code # Do not trace early boot code and low level code
CFLAGS_REMOVE_timer.o = -pg CFLAGS_REMOVE_timer.o = -pg
CFLAGS_REMOVE_intc.o = -pg CFLAGS_REMOVE_intc.o = -pg
CFLAGS_REMOVE_early_printk.o = -pg
CFLAGS_REMOVE_ftrace.o = -pg CFLAGS_REMOVE_ftrace.o = -pg
CFLAGS_REMOVE_process.o = -pg CFLAGS_REMOVE_process.o = -pg
endif endif

View File

@@ -18,7 +18,7 @@ static const char family_string[] = CONFIG_XILINX_MICROBLAZE0_FAMILY;
static const char cpu_ver_string[] = CONFIG_XILINX_MICROBLAZE0_HW_VER; static const char cpu_ver_string[] = CONFIG_XILINX_MICROBLAZE0_HW_VER;
#define err_printk(x) \ #define err_printk(x) \
early_printk("ERROR: Microblaze " x "-different for kernel and DTS\n"); pr_err("ERROR: Microblaze " x "-different for kernel and DTS\n");
void __init set_cpuinfo_static(struct cpuinfo *ci, struct device_node *cpu) void __init set_cpuinfo_static(struct cpuinfo *ci, struct device_node *cpu)
{ {

View File

@@ -21,6 +21,7 @@ EXPORT_SYMBOL(memset);
#include <linux/atomic.h> #include <linux/atomic.h>
EXPORT_SYMBOL(__xchg8); EXPORT_SYMBOL(__xchg8);
EXPORT_SYMBOL(__xchg32); EXPORT_SYMBOL(__xchg32);
EXPORT_SYMBOL(__cmpxchg_u8);
EXPORT_SYMBOL(__cmpxchg_u32); EXPORT_SYMBOL(__cmpxchg_u32);
EXPORT_SYMBOL(__cmpxchg_u64); EXPORT_SYMBOL(__cmpxchg_u64);
#ifdef CONFIG_SMP #ifdef CONFIG_SMP

View File

@@ -539,7 +539,7 @@ struct hvcall_mpp_data {
unsigned long backing_mem; unsigned long backing_mem;
}; };
int h_get_mpp(struct hvcall_mpp_data *); long h_get_mpp(struct hvcall_mpp_data *mpp_data);
struct hvcall_mpp_x_data { struct hvcall_mpp_x_data {
unsigned long coalesced_bytes; unsigned long coalesced_bytes;

View File

@@ -1904,10 +1904,10 @@ out:
* h_get_mpp * h_get_mpp
* H_GET_MPP hcall returns info in 7 parms * H_GET_MPP hcall returns info in 7 parms
*/ */
int h_get_mpp(struct hvcall_mpp_data *mpp_data) long h_get_mpp(struct hvcall_mpp_data *mpp_data)
{ {
int rc; unsigned long retbuf[PLPAR_HCALL9_BUFSIZE] = {0};
unsigned long retbuf[PLPAR_HCALL9_BUFSIZE]; long rc;
rc = plpar_hcall9(H_GET_MPP, retbuf); rc = plpar_hcall9(H_GET_MPP, retbuf);

View File

@@ -112,8 +112,8 @@ struct hvcall_ppp_data {
*/ */
static unsigned int h_get_ppp(struct hvcall_ppp_data *ppp_data) static unsigned int h_get_ppp(struct hvcall_ppp_data *ppp_data)
{ {
unsigned long rc; unsigned long retbuf[PLPAR_HCALL9_BUFSIZE] = {0};
unsigned long retbuf[PLPAR_HCALL9_BUFSIZE]; long rc;
rc = plpar_hcall9(H_GET_PPP, retbuf); rc = plpar_hcall9(H_GET_PPP, retbuf);
@@ -192,7 +192,7 @@ static void parse_ppp_data(struct seq_file *m)
struct hvcall_ppp_data ppp_data; struct hvcall_ppp_data ppp_data;
struct device_node *root; struct device_node *root;
const __be32 *perf_level; const __be32 *perf_level;
int rc; long rc;
rc = h_get_ppp(&ppp_data); rc = h_get_ppp(&ppp_data);
if (rc) if (rc)
@@ -393,8 +393,8 @@ static int read_dt_lpar_name(struct seq_file *m)
static void read_lpar_name(struct seq_file *m) static void read_lpar_name(struct seq_file *m)
{ {
if (read_rtas_lpar_name(m) && read_dt_lpar_name(m)) if (read_rtas_lpar_name(m))
pr_err_once("Error can't get the LPAR name"); read_dt_lpar_name(m);
} }
#define SPLPAR_CHARACTERISTICS_TOKEN 20 #define SPLPAR_CHARACTERISTICS_TOKEN 20

View File

@@ -567,10 +567,12 @@ static const struct fsl_msi_feature ipic_msi_feature = {
.msiir_offset = 0x38, .msiir_offset = 0x38,
}; };
#ifdef CONFIG_EPAPR_PARAVIRT
static const struct fsl_msi_feature vmpic_msi_feature = { static const struct fsl_msi_feature vmpic_msi_feature = {
.fsl_pic_ip = FSL_PIC_IP_VMPIC, .fsl_pic_ip = FSL_PIC_IP_VMPIC,
.msiir_offset = 0, .msiir_offset = 0,
}; };
#endif
static const struct of_device_id fsl_of_msi_ids[] = { static const struct of_device_id fsl_of_msi_ids[] = {
{ {

View File

@@ -72,7 +72,7 @@ static int sbi_cpu_start(unsigned int cpuid, struct task_struct *tidle)
/* Make sure tidle is updated */ /* Make sure tidle is updated */
smp_mb(); smp_mb();
bdata->task_ptr = tidle; bdata->task_ptr = tidle;
bdata->stack_ptr = task_stack_page(tidle) + THREAD_SIZE; bdata->stack_ptr = task_pt_regs(tidle);
/* Make sure boot data is updated */ /* Make sure boot data is updated */
smp_mb(); smp_mb();
hsm_data = __pa(bdata); hsm_data = __pa(bdata);

View File

@@ -34,8 +34,7 @@ static void cpu_update_secondary_bootdata(unsigned int cpuid,
/* Make sure tidle is updated */ /* Make sure tidle is updated */
smp_mb(); smp_mb();
WRITE_ONCE(__cpu_spinwait_stack_pointer[hartid], WRITE_ONCE(__cpu_spinwait_stack_pointer[hartid], task_pt_regs(tidle));
task_stack_page(tidle) + THREAD_SIZE);
WRITE_ONCE(__cpu_spinwait_task_pointer[hartid], tidle); WRITE_ONCE(__cpu_spinwait_task_pointer[hartid], tidle);
} }

View File

@@ -248,7 +248,7 @@ ret_from_syscall_rejected:
andi t0, t0, _TIF_SYSCALL_WORK andi t0, t0, _TIF_SYSCALL_WORK
bnez t0, handle_syscall_trace_exit bnez t0, handle_syscall_trace_exit
ret_from_exception: SYM_CODE_START_NOALIGN(ret_from_exception)
REG_L s0, PT_STATUS(sp) REG_L s0, PT_STATUS(sp)
csrc CSR_STATUS, SR_IE csrc CSR_STATUS, SR_IE
#ifdef CONFIG_TRACE_IRQFLAGS #ifdef CONFIG_TRACE_IRQFLAGS
@@ -262,6 +262,7 @@ ret_from_exception:
andi s0, s0, SR_SPP andi s0, s0, SR_SPP
#endif #endif
bnez s0, resume_kernel bnez s0, resume_kernel
SYM_CODE_END(ret_from_exception)
/* Interrupts must be disabled here so flags are checked atomically */ /* Interrupts must be disabled here so flags are checked atomically */
REG_L s0, TASK_TI_FLAGS(tp) /* current_thread_info->flags */ REG_L s0, TASK_TI_FLAGS(tp) /* current_thread_info->flags */

View File

@@ -16,6 +16,18 @@
#ifdef CONFIG_FRAME_POINTER #ifdef CONFIG_FRAME_POINTER
extern asmlinkage void ret_from_exception(void);
static inline int fp_is_valid(unsigned long fp, unsigned long sp)
{
unsigned long low, high;
low = sp + sizeof(struct stackframe);
high = ALIGN(sp, THREAD_SIZE);
return !(fp < low || fp > high || fp & 0x07);
}
void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs, void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs,
bool (*fn)(void *, unsigned long), void *arg) bool (*fn)(void *, unsigned long), void *arg)
{ {
@@ -39,27 +51,32 @@ void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs,
} }
for (;;) { for (;;) {
unsigned long low, high;
struct stackframe *frame; struct stackframe *frame;
if (unlikely(!__kernel_text_address(pc) || (level++ >= 0 && !fn(arg, pc)))) if (unlikely(!__kernel_text_address(pc) || (level++ >= 0 && !fn(arg, pc))))
break; break;
/* Validate frame pointer */ if (unlikely(!fp_is_valid(fp, sp)))
low = sp + sizeof(struct stackframe);
high = ALIGN(sp, THREAD_SIZE);
if (unlikely(fp < low || fp > high || fp & 0x7))
break; break;
/* Unwind stack frame */ /* Unwind stack frame */
frame = (struct stackframe *)fp - 1; frame = (struct stackframe *)fp - 1;
sp = fp; sp = fp;
if (regs && (regs->epc == pc) && (frame->fp & 0x7)) { if (regs && (regs->epc == pc) && fp_is_valid(frame->ra, sp)) {
/* We hit function where ra is not saved on the stack */
fp = frame->ra; fp = frame->ra;
pc = regs->ra; pc = regs->ra;
} else { } else {
fp = frame->fp; fp = frame->fp;
pc = ftrace_graph_ret_addr(current, NULL, frame->ra, pc = ftrace_graph_ret_addr(current, NULL, frame->ra,
&frame->ra); &frame->ra);
if (pc == (unsigned long)ret_from_exception) {
if (unlikely(!__kernel_text_address(pc) || !fn(arg, pc)))
break;
pc = ((struct pt_regs *)sp)->epc;
fp = ((struct pt_regs *)sp)->s0;
}
} }
} }

View File

@@ -503,33 +503,33 @@ static void emit_atomic(u8 rd, u8 rs, s16 off, s32 imm, bool is64,
break; break;
/* src_reg = atomic_fetch_<op>(dst_reg + off16, src_reg) */ /* src_reg = atomic_fetch_<op>(dst_reg + off16, src_reg) */
case BPF_ADD | BPF_FETCH: case BPF_ADD | BPF_FETCH:
emit(is64 ? rv_amoadd_d(rs, rs, rd, 0, 0) : emit(is64 ? rv_amoadd_d(rs, rs, rd, 1, 1) :
rv_amoadd_w(rs, rs, rd, 0, 0), ctx); rv_amoadd_w(rs, rs, rd, 1, 1), ctx);
if (!is64) if (!is64)
emit_zext_32(rs, ctx); emit_zext_32(rs, ctx);
break; break;
case BPF_AND | BPF_FETCH: case BPF_AND | BPF_FETCH:
emit(is64 ? rv_amoand_d(rs, rs, rd, 0, 0) : emit(is64 ? rv_amoand_d(rs, rs, rd, 1, 1) :
rv_amoand_w(rs, rs, rd, 0, 0), ctx); rv_amoand_w(rs, rs, rd, 1, 1), ctx);
if (!is64) if (!is64)
emit_zext_32(rs, ctx); emit_zext_32(rs, ctx);
break; break;
case BPF_OR | BPF_FETCH: case BPF_OR | BPF_FETCH:
emit(is64 ? rv_amoor_d(rs, rs, rd, 0, 0) : emit(is64 ? rv_amoor_d(rs, rs, rd, 1, 1) :
rv_amoor_w(rs, rs, rd, 0, 0), ctx); rv_amoor_w(rs, rs, rd, 1, 1), ctx);
if (!is64) if (!is64)
emit_zext_32(rs, ctx); emit_zext_32(rs, ctx);
break; break;
case BPF_XOR | BPF_FETCH: case BPF_XOR | BPF_FETCH:
emit(is64 ? rv_amoxor_d(rs, rs, rd, 0, 0) : emit(is64 ? rv_amoxor_d(rs, rs, rd, 1, 1) :
rv_amoxor_w(rs, rs, rd, 0, 0), ctx); rv_amoxor_w(rs, rs, rd, 1, 1), ctx);
if (!is64) if (!is64)
emit_zext_32(rs, ctx); emit_zext_32(rs, ctx);
break; break;
/* src_reg = atomic_xchg(dst_reg + off16, src_reg); */ /* src_reg = atomic_xchg(dst_reg + off16, src_reg); */
case BPF_XCHG: case BPF_XCHG:
emit(is64 ? rv_amoswap_d(rs, rs, rd, 0, 0) : emit(is64 ? rv_amoswap_d(rs, rs, rd, 1, 1) :
rv_amoswap_w(rs, rs, rd, 0, 0), ctx); rv_amoswap_w(rs, rs, rd, 1, 1), ctx);
if (!is64) if (!is64)
emit_zext_32(rs, ctx); emit_zext_32(rs, ctx);
break; break;

View File

@@ -30,7 +30,6 @@ int __bootdata(is_full_image) = 1;
struct initrd_data __bootdata(initrd_data); struct initrd_data __bootdata(initrd_data);
u64 __bootdata_preserved(stfle_fac_list[16]); u64 __bootdata_preserved(stfle_fac_list[16]);
u64 __bootdata_preserved(alt_stfle_fac_list[16]);
struct oldmem_data __bootdata_preserved(oldmem_data); struct oldmem_data __bootdata_preserved(oldmem_data);
void error(char *x) void error(char *x)

View File

@@ -834,8 +834,8 @@ static ssize_t reipl_nvme_scpdata_write(struct file *filp, struct kobject *kobj,
scpdata_len += padding; scpdata_len += padding;
} }
reipl_block_nvme->hdr.len = IPL_BP_FCP_LEN + scpdata_len; reipl_block_nvme->hdr.len = IPL_BP_NVME_LEN + scpdata_len;
reipl_block_nvme->nvme.len = IPL_BP0_FCP_LEN + scpdata_len; reipl_block_nvme->nvme.len = IPL_BP0_NVME_LEN + scpdata_len;
reipl_block_nvme->nvme.scp_data_len = scpdata_len; reipl_block_nvme->nvme.scp_data_len = scpdata_len;
return count; return count;
@@ -1604,9 +1604,9 @@ static int __init dump_nvme_init(void)
} }
dump_block_nvme->hdr.len = IPL_BP_NVME_LEN; dump_block_nvme->hdr.len = IPL_BP_NVME_LEN;
dump_block_nvme->hdr.version = IPL_PARM_BLOCK_VERSION; dump_block_nvme->hdr.version = IPL_PARM_BLOCK_VERSION;
dump_block_nvme->fcp.len = IPL_BP0_NVME_LEN; dump_block_nvme->nvme.len = IPL_BP0_NVME_LEN;
dump_block_nvme->fcp.pbt = IPL_PBT_NVME; dump_block_nvme->nvme.pbt = IPL_PBT_NVME;
dump_block_nvme->fcp.opt = IPL_PB0_NVME_OPT_DUMP; dump_block_nvme->nvme.opt = IPL_PB0_NVME_OPT_DUMP;
dump_capabilities |= DUMP_TYPE_NVME; dump_capabilities |= DUMP_TYPE_NVME;
return 0; return 0;
} }

View File

@@ -155,7 +155,7 @@ unsigned int __bootdata_preserved(zlib_dfltcc_support);
EXPORT_SYMBOL(zlib_dfltcc_support); EXPORT_SYMBOL(zlib_dfltcc_support);
u64 __bootdata_preserved(stfle_fac_list[16]); u64 __bootdata_preserved(stfle_fac_list[16]);
EXPORT_SYMBOL(stfle_fac_list); EXPORT_SYMBOL(stfle_fac_list);
u64 __bootdata_preserved(alt_stfle_fac_list[16]); u64 alt_stfle_fac_list[16];
struct oldmem_data __bootdata_preserved(oldmem_data); struct oldmem_data __bootdata_preserved(oldmem_data);
unsigned long VMALLOC_START; unsigned long VMALLOC_START;

View File

@@ -20,7 +20,10 @@ KBUILD_AFLAGS_32 := $(filter-out -m64,$(KBUILD_AFLAGS))
KBUILD_AFLAGS_32 += -m31 -s KBUILD_AFLAGS_32 += -m31 -s
KBUILD_CFLAGS_32 := $(filter-out -m64,$(KBUILD_CFLAGS)) KBUILD_CFLAGS_32 := $(filter-out -m64,$(KBUILD_CFLAGS))
KBUILD_CFLAGS_32 += -m31 -fPIC -shared -fno-common -fno-builtin KBUILD_CFLAGS_32 := $(filter-out -mpacked-stack,$(KBUILD_CFLAGS))
KBUILD_CFLAGS_32 := $(filter-out -mno-pic-data-is-text-relative,$(KBUILD_CFLAGS_32))
KBUILD_CFLAGS_32 := $(filter-out -fno-asynchronous-unwind-tables,$(KBUILD_CFLAGS_32))
KBUILD_CFLAGS_32 += -m31 -fPIC -shared -fno-common -fno-builtin -fasynchronous-unwind-tables
LDFLAGS_vdso32.so.dbg += -shared -soname=linux-vdso32.so.1 \ LDFLAGS_vdso32.so.dbg += -shared -soname=linux-vdso32.so.1 \
--hash-style=both --build-id=sha1 -melf_s390 -T --hash-style=both --build-id=sha1 -melf_s390 -T

View File

@@ -25,7 +25,11 @@ KBUILD_AFLAGS_64 := $(filter-out -m64,$(KBUILD_AFLAGS))
KBUILD_AFLAGS_64 += -m64 -s KBUILD_AFLAGS_64 += -m64 -s
KBUILD_CFLAGS_64 := $(filter-out -m64,$(KBUILD_CFLAGS)) KBUILD_CFLAGS_64 := $(filter-out -m64,$(KBUILD_CFLAGS))
KBUILD_CFLAGS_64 += -m64 -fPIC -fno-common -fno-builtin KBUILD_CFLAGS_64 := $(filter-out -mpacked-stack,$(KBUILD_CFLAGS_64))
KBUILD_CFLAGS_64 := $(filter-out -mno-pic-data-is-text-relative,$(KBUILD_CFLAGS_64))
KBUILD_CFLAGS_64 := $(filter-out -munaligned-symbols,$(KBUILD_CFLAGS_64))
KBUILD_CFLAGS_64 := $(filter-out -fno-asynchronous-unwind-tables,$(KBUILD_CFLAGS_64))
KBUILD_CFLAGS_64 += -m64 -fPIC -fno-common -fno-builtin -fasynchronous-unwind-tables
ldflags-y := -shared -soname=linux-vdso64.so.1 \ ldflags-y := -shared -soname=linux-vdso64.so.1 \
--hash-style=both --build-id=sha1 -T --hash-style=both --build-id=sha1 -T

View File

@@ -1207,8 +1207,12 @@ static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp,
EMIT6_DISP_LH(0xeb000000, is32 ? (op32) : (op64), \ EMIT6_DISP_LH(0xeb000000, is32 ? (op32) : (op64), \
(insn->imm & BPF_FETCH) ? src_reg : REG_W0, \ (insn->imm & BPF_FETCH) ? src_reg : REG_W0, \
src_reg, dst_reg, off); \ src_reg, dst_reg, off); \
if (is32 && (insn->imm & BPF_FETCH)) \ if (insn->imm & BPF_FETCH) { \
EMIT_ZERO(src_reg); \ /* bcr 14,0 - see atomic_fetch_{add,and,or,xor}() */ \
_EMIT2(0x07e0); \
if (is32) \
EMIT_ZERO(src_reg); \
} \
} while (0) } while (0)
case BPF_ADD: case BPF_ADD:
case BPF_ADD | BPF_FETCH: case BPF_ADD | BPF_FETCH:

View File

@@ -44,17 +44,12 @@ int __kprobes arch_prepare_kprobe(struct kprobe *p)
if (OPCODE_RTE(opcode)) if (OPCODE_RTE(opcode))
return -EFAULT; /* Bad breakpoint */ return -EFAULT; /* Bad breakpoint */
memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t));
p->opcode = opcode; p->opcode = opcode;
return 0; return 0;
} }
void __kprobes arch_copy_kprobe(struct kprobe *p)
{
memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t));
p->opcode = *p->addr;
}
void __kprobes arch_arm_kprobe(struct kprobe *p) void __kprobes arch_arm_kprobe(struct kprobe *p)
{ {
*p->addr = BREAKPOINT_INSTRUCTION; *p->addr = BREAKPOINT_INSTRUCTION;

View File

@@ -33,7 +33,8 @@
*/ */
/* /*
* asmlinkage __wsum csum_partial(const void *buf, int len, __wsum sum); * unsigned int csum_partial(const unsigned char *buf, int len,
* unsigned int sum);
*/ */
.text .text
@@ -45,31 +46,11 @@ ENTRY(csum_partial)
* Fortunately, it is easy to convert 2-byte alignment to 4-byte * Fortunately, it is easy to convert 2-byte alignment to 4-byte
* alignment for the unrolled loop. * alignment for the unrolled loop.
*/ */
mov r5, r1
mov r4, r0 mov r4, r0
tst #3, r0 ! Check alignment. tst #2, r0 ! Check alignment.
bt/s 2f ! Jump if alignment is ok. bt 2f ! Jump if alignment is ok.
mov r4, r7 ! Keep a copy to check for alignment
! !
tst #1, r0 ! Check alignment.
bt 21f ! Jump if alignment is boundary of 2bytes.
! buf is odd
tst r5, r5
add #-1, r5
bt 9f
mov.b @r4+, r0
extu.b r0, r0
addc r0, r6 ! t=0 from previous tst
mov r6, r0
shll8 r6
shlr16 r0
shlr8 r0
or r0, r6
mov r4, r0
tst #2, r0
bt 2f
21:
! buf is 2 byte aligned (len could be 0)
add #-2, r5 ! Alignment uses up two bytes. add #-2, r5 ! Alignment uses up two bytes.
cmp/pz r5 ! cmp/pz r5 !
bt/s 1f ! Jump if we had at least two bytes. bt/s 1f ! Jump if we had at least two bytes.
@@ -77,17 +58,16 @@ ENTRY(csum_partial)
bra 6f bra 6f
add #2, r5 ! r5 was < 2. Deal with it. add #2, r5 ! r5 was < 2. Deal with it.
1: 1:
mov r5, r1 ! Save new len for later use.
mov.w @r4+, r0 mov.w @r4+, r0
extu.w r0, r0 extu.w r0, r0
addc r0, r6 addc r0, r6
bf 2f bf 2f
add #1, r6 add #1, r6
2: 2:
! buf is 4 byte aligned (len could be 0)
mov r5, r1
mov #-5, r0 mov #-5, r0
shld r0, r1 shld r0, r5
tst r1, r1 tst r5, r5
bt/s 4f ! if it's =0, go to 4f bt/s 4f ! if it's =0, go to 4f
clrt clrt
.align 2 .align 2
@@ -109,31 +89,30 @@ ENTRY(csum_partial)
addc r0, r6 addc r0, r6
addc r2, r6 addc r2, r6
movt r0 movt r0
dt r1 dt r5
bf/s 3b bf/s 3b
cmp/eq #1, r0 cmp/eq #1, r0
! here, we know r1==0 ! here, we know r5==0
addc r1, r6 ! add carry to r6 addc r5, r6 ! add carry to r6
4: 4:
mov r5, r0 mov r1, r0
and #0x1c, r0 and #0x1c, r0
tst r0, r0 tst r0, r0
bt 6f bt/s 6f
! 4 bytes or more remaining mov r0, r5
mov r0, r1 shlr2 r5
shlr2 r1
mov #0, r2 mov #0, r2
5: 5:
addc r2, r6 addc r2, r6
mov.l @r4+, r2 mov.l @r4+, r2
movt r0 movt r0
dt r1 dt r5
bf/s 5b bf/s 5b
cmp/eq #1, r0 cmp/eq #1, r0
addc r2, r6 addc r2, r6
addc r1, r6 ! r1==0 here, so it means add carry-bit addc r5, r6 ! r5==0 here, so it means add carry-bit
6: 6:
! 3 bytes or less remaining mov r1, r5
mov #3, r0 mov #3, r0
and r0, r5 and r0, r5
tst r5, r5 tst r5, r5
@@ -159,16 +138,6 @@ ENTRY(csum_partial)
mov #0, r0 mov #0, r0
addc r0, r6 addc r0, r6
9: 9:
! Check if the buffer was misaligned, if so realign sum
mov r7, r0
tst #1, r0
bt 10f
mov r6, r0
shll8 r6
shlr16 r0
shlr8 r0
or r0, r6
10:
rts rts
mov r6, r0 mov r6, r0

View File

@@ -673,24 +673,26 @@ void register_winch_irq(int fd, int tty_fd, int pid, struct tty_port *port,
goto cleanup; goto cleanup;
} }
*winch = ((struct winch) { .list = LIST_HEAD_INIT(winch->list), *winch = ((struct winch) { .fd = fd,
.fd = fd,
.tty_fd = tty_fd, .tty_fd = tty_fd,
.pid = pid, .pid = pid,
.port = port, .port = port,
.stack = stack }); .stack = stack });
spin_lock(&winch_handler_lock);
list_add(&winch->list, &winch_handlers);
spin_unlock(&winch_handler_lock);
if (um_request_irq(WINCH_IRQ, fd, IRQ_READ, winch_interrupt, if (um_request_irq(WINCH_IRQ, fd, IRQ_READ, winch_interrupt,
IRQF_SHARED, "winch", winch) < 0) { IRQF_SHARED, "winch", winch) < 0) {
printk(KERN_ERR "register_winch_irq - failed to register " printk(KERN_ERR "register_winch_irq - failed to register "
"IRQ\n"); "IRQ\n");
spin_lock(&winch_handler_lock);
list_del(&winch->list);
spin_unlock(&winch_handler_lock);
goto out_free; goto out_free;
} }
spin_lock(&winch_handler_lock);
list_add(&winch->list, &winch_handlers);
spin_unlock(&winch_handler_lock);
return; return;
out_free: out_free:

View File

@@ -1099,7 +1099,7 @@ static int __init ubd_init(void)
if (irq_req_buffer == NULL) { if (irq_req_buffer == NULL) {
printk(KERN_ERR "Failed to initialize ubd buffering\n"); printk(KERN_ERR "Failed to initialize ubd buffering\n");
return -1; return -ENOMEM;
} }
io_req_buffer = kmalloc_array(UBD_REQ_BUFFER_SIZE, io_req_buffer = kmalloc_array(UBD_REQ_BUFFER_SIZE,
sizeof(struct io_thread_req *), sizeof(struct io_thread_req *),
@@ -1110,7 +1110,7 @@ static int __init ubd_init(void)
if (io_req_buffer == NULL) { if (io_req_buffer == NULL) {
printk(KERN_ERR "Failed to initialize ubd buffering\n"); printk(KERN_ERR "Failed to initialize ubd buffering\n");
return -1; return -ENOMEM;
} }
platform_driver_register(&ubd_driver); platform_driver_register(&ubd_driver);
mutex_lock(&ubd_lock); mutex_lock(&ubd_lock);

View File

@@ -141,7 +141,7 @@ static bool get_bpf_flash(struct arglist *def)
if (allow != NULL) { if (allow != NULL) {
if (kstrtoul(allow, 10, &result) == 0) if (kstrtoul(allow, 10, &result) == 0)
return (allow > 0); return result > 0;
} }
return false; return false;
} }

View File

@@ -24,7 +24,6 @@
#ifdef CONFIG_KASAN #ifdef CONFIG_KASAN
void kasan_init(void); void kasan_init(void);
void kasan_map_memory(void *start, unsigned long len);
extern int kasan_um_is_ready; extern int kasan_um_is_ready;
#ifdef CONFIG_STATIC_LINK #ifdef CONFIG_STATIC_LINK

View File

@@ -15,8 +15,6 @@ typedef struct mm_context {
struct page *stub_pages[2]; struct page *stub_pages[2];
} mm_context_t; } mm_context_t;
extern void __switch_mm(struct mm_id * mm_idp);
/* Avoid tangled inclusion with asm/ldt.h */ /* Avoid tangled inclusion with asm/ldt.h */
extern long init_new_ldt(struct mm_context *to_mm, struct mm_context *from_mm); extern long init_new_ldt(struct mm_context *to_mm, struct mm_context *from_mm);
extern void free_ldt(struct mm_context *mm); extern void free_ldt(struct mm_context *mm);

View File

@@ -95,7 +95,6 @@ extern struct cpuinfo_um boot_cpu_data;
#define current_cpu_data boot_cpu_data #define current_cpu_data boot_cpu_data
#define cache_line_size() (boot_cpu_data.cache_alignment) #define cache_line_size() (boot_cpu_data.cache_alignment)
extern unsigned long get_thread_reg(int reg, jmp_buf *buf);
#define KSTK_REG(tsk, reg) get_thread_reg(reg, &tsk->thread.switch_buf) #define KSTK_REG(tsk, reg) get_thread_reg(reg, &tsk->thread.switch_buf)
extern unsigned long __get_wchan(struct task_struct *p); extern unsigned long __get_wchan(struct task_struct *p);

View File

@@ -67,4 +67,6 @@ extern void fatal_sigsegv(void) __attribute__ ((noreturn));
void um_idle_sleep(void); void um_idle_sleep(void);
void kasan_map_memory(void *start, size_t len);
#endif #endif

View File

@@ -15,4 +15,6 @@ struct mm_id {
int kill; int kill;
}; };
void __switch_mm(struct mm_id *mm_idp);
#endif #endif

View File

@@ -15,6 +15,7 @@
#include <sys/vfs.h> #include <sys/vfs.h>
#include <linux/magic.h> #include <linux/magic.h>
#include <init.h> #include <init.h>
#include <kern_util.h>
#include <os.h> #include <os.h>
/* /*

View File

@@ -248,6 +248,7 @@ config UNWINDER_ORC
config UNWINDER_FRAME_POINTER config UNWINDER_FRAME_POINTER
bool "Frame pointer unwinder" bool "Frame pointer unwinder"
select ARCH_WANT_FRAME_POINTERS
select FRAME_POINTER select FRAME_POINTER
help help
This option enables the frame pointer unwinder for unwinding kernel This option enables the frame pointer unwinder for unwinding kernel
@@ -271,7 +272,3 @@ config UNWINDER_GUESS
overhead. overhead.
endchoice endchoice
config FRAME_POINTER
depends on !UNWINDER_ORC && !UNWINDER_GUESS
bool

View File

@@ -390,6 +390,11 @@ SYM_CODE_START(startup_64)
call sev_enable call sev_enable
#endif #endif
/* Preserve only the CR4 bits that must be preserved, and clear the rest */
movq %cr4, %rax
andl $(X86_CR4_PAE | X86_CR4_MCE | X86_CR4_LA57), %eax
movq %rax, %cr4
/* /*
* configure_5level_paging() updates the number of paging levels using * configure_5level_paging() updates the number of paging levels using
* a trampoline in 32-bit addressable memory if the current number does * a trampoline in 32-bit addressable memory if the current number does

View File

@@ -153,5 +153,6 @@ SYM_FUNC_START(nh_avx2)
vpaddq T1, T0, T0 vpaddq T1, T0, T0
vpaddq T4, T0, T0 vpaddq T4, T0, T0
vmovdqu T0, (HASH) vmovdqu T0, (HASH)
vzeroupper
RET RET
SYM_FUNC_END(nh_avx2) SYM_FUNC_END(nh_avx2)

View File

@@ -711,6 +711,7 @@ done_hash:
popq %r13 popq %r13
popq %r12 popq %r12
popq %rbx popq %rbx
vzeroupper
RET RET
SYM_FUNC_END(sha256_transform_rorx) SYM_FUNC_END(sha256_transform_rorx)

View File

@@ -680,6 +680,7 @@ done_hash:
pop %r12 pop %r12
pop %rbx pop %rbx
vzeroupper
RET RET
SYM_FUNC_END(sha512_transform_rorx) SYM_FUNC_END(sha512_transform_rorx)

View File

@@ -98,11 +98,6 @@ static int addr_to_vsyscall_nr(unsigned long addr)
static bool write_ok_or_segv(unsigned long ptr, size_t size) static bool write_ok_or_segv(unsigned long ptr, size_t size)
{ {
/*
* XXX: if access_ok, get_user, and put_user handled
* sig_on_uaccess_err, this could go away.
*/
if (!access_ok((void __user *)ptr, size)) { if (!access_ok((void __user *)ptr, size)) {
struct thread_struct *thread = &current->thread; struct thread_struct *thread = &current->thread;
@@ -120,10 +115,8 @@ static bool write_ok_or_segv(unsigned long ptr, size_t size)
bool emulate_vsyscall(unsigned long error_code, bool emulate_vsyscall(unsigned long error_code,
struct pt_regs *regs, unsigned long address) struct pt_regs *regs, unsigned long address)
{ {
struct task_struct *tsk;
unsigned long caller; unsigned long caller;
int vsyscall_nr, syscall_nr, tmp; int vsyscall_nr, syscall_nr, tmp;
int prev_sig_on_uaccess_err;
long ret; long ret;
unsigned long orig_dx; unsigned long orig_dx;
@@ -172,8 +165,6 @@ bool emulate_vsyscall(unsigned long error_code,
goto sigsegv; goto sigsegv;
} }
tsk = current;
/* /*
* Check for access_ok violations and find the syscall nr. * Check for access_ok violations and find the syscall nr.
* *
@@ -234,12 +225,8 @@ bool emulate_vsyscall(unsigned long error_code,
goto do_ret; /* skip requested */ goto do_ret; /* skip requested */
/* /*
* With a real vsyscall, page faults cause SIGSEGV. We want to * With a real vsyscall, page faults cause SIGSEGV.
* preserve that behavior to make writing exploits harder.
*/ */
prev_sig_on_uaccess_err = current->thread.sig_on_uaccess_err;
current->thread.sig_on_uaccess_err = 1;
ret = -EFAULT; ret = -EFAULT;
switch (vsyscall_nr) { switch (vsyscall_nr) {
case 0: case 0:
@@ -262,23 +249,12 @@ bool emulate_vsyscall(unsigned long error_code,
break; break;
} }
current->thread.sig_on_uaccess_err = prev_sig_on_uaccess_err;
check_fault: check_fault:
if (ret == -EFAULT) { if (ret == -EFAULT) {
/* Bad news -- userspace fed a bad pointer to a vsyscall. */ /* Bad news -- userspace fed a bad pointer to a vsyscall. */
warn_bad_vsyscall(KERN_INFO, regs, warn_bad_vsyscall(KERN_INFO, regs,
"vsyscall fault (exploit attempt?)"); "vsyscall fault (exploit attempt?)");
goto sigsegv;
/*
* If we failed to generate a signal for any reason,
* generate one here. (This should be impossible.)
*/
if (WARN_ON_ONCE(!sigismember(&tsk->pending.signal, SIGBUS) &&
!sigismember(&tsk->pending.signal, SIGSEGV)))
goto sigsegv;
return true; /* Don't emulate the ret. */
} }
regs->ax = ret; regs->ax = ret;

View File

@@ -544,6 +544,8 @@ static inline void update_page_count(int level, unsigned long pages) { }
extern pte_t *lookup_address(unsigned long address, unsigned int *level); extern pte_t *lookup_address(unsigned long address, unsigned int *level);
extern pte_t *lookup_address_in_pgd(pgd_t *pgd, unsigned long address, extern pte_t *lookup_address_in_pgd(pgd_t *pgd, unsigned long address,
unsigned int *level); unsigned int *level);
pte_t *lookup_address_in_pgd_attr(pgd_t *pgd, unsigned long address,
unsigned int *level, bool *nx, bool *rw);
extern pmd_t *lookup_pmd_address(unsigned long address); extern pmd_t *lookup_pmd_address(unsigned long address);
extern phys_addr_t slow_virt_to_phys(void *__address); extern phys_addr_t slow_virt_to_phys(void *__address);
extern int __init kernel_map_pages_in_pgd(pgd_t *pgd, u64 pfn, extern int __init kernel_map_pages_in_pgd(pgd_t *pgd, u64 pfn,

View File

@@ -519,7 +519,6 @@ struct thread_struct {
unsigned long iopl_emul; unsigned long iopl_emul;
unsigned int iopl_warn:1; unsigned int iopl_warn:1;
unsigned int sig_on_uaccess_err:1;
/* /*
* Protection Keys Register for Userspace. Loaded immediately on * Protection Keys Register for Userspace. Loaded immediately on

View File

@@ -37,8 +37,6 @@ extern int phys_to_target_node(phys_addr_t start);
#define phys_to_target_node phys_to_target_node #define phys_to_target_node phys_to_target_node
extern int memory_add_physaddr_to_nid(u64 start); extern int memory_add_physaddr_to_nid(u64 start);
#define memory_add_physaddr_to_nid memory_add_physaddr_to_nid #define memory_add_physaddr_to_nid memory_add_physaddr_to_nid
extern int numa_fill_memblks(u64 start, u64 end);
#define numa_fill_memblks numa_fill_memblks
#endif #endif
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */

View File

@@ -982,7 +982,8 @@ static void __send_cleanup_vector(struct apic_chip_data *apicd)
hlist_add_head(&apicd->clist, per_cpu_ptr(&cleanup_list, cpu)); hlist_add_head(&apicd->clist, per_cpu_ptr(&cleanup_list, cpu));
apic->send_IPI(cpu, IRQ_MOVE_CLEANUP_VECTOR); apic->send_IPI(cpu, IRQ_MOVE_CLEANUP_VECTOR);
} else { } else {
apicd->prev_vector = 0; pr_warn("IRQ %u schedule cleanup for offline CPU %u\n", apicd->irq, cpu);
free_moved_vector(apicd);
} }
raw_spin_unlock(&vector_lock); raw_spin_unlock(&vector_lock);
} }
@@ -1019,6 +1020,7 @@ void irq_complete_move(struct irq_cfg *cfg)
*/ */
void irq_force_complete_move(struct irq_desc *desc) void irq_force_complete_move(struct irq_desc *desc)
{ {
unsigned int cpu = smp_processor_id();
struct apic_chip_data *apicd; struct apic_chip_data *apicd;
struct irq_data *irqd; struct irq_data *irqd;
unsigned int vector; unsigned int vector;
@@ -1043,10 +1045,11 @@ void irq_force_complete_move(struct irq_desc *desc)
goto unlock; goto unlock;
/* /*
* If prev_vector is empty, no action required. * If prev_vector is empty or the descriptor is neither currently
* nor previously on the outgoing CPU no action required.
*/ */
vector = apicd->prev_vector; vector = apicd->prev_vector;
if (!vector) if (!vector || (apicd->cpu != cpu && apicd->prev_cpu != cpu))
goto unlock; goto unlock;
/* /*

View File

@@ -192,11 +192,9 @@ bool tsc_store_and_check_tsc_adjust(bool bootcpu)
cur->warned = false; cur->warned = false;
/* /*
* If a non-zero TSC value for socket 0 may be valid then the default * The default adjust value cannot be assumed to be zero on any socket.
* adjusted value cannot assumed to be zero either.
*/ */
if (tsc_async_resets) cur->adjusted = bootval;
cur->adjusted = bootval;
/* /*
* Check whether this CPU is the first in a package to come up. In * Check whether this CPU is the first in a package to come up. In

View File

@@ -1157,9 +1157,8 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function)
entry->eax = entry->ebx = entry->ecx = 0; entry->eax = entry->ebx = entry->ecx = 0;
break; break;
case 0x80000008: { case 0x80000008: {
unsigned g_phys_as = (entry->eax >> 16) & 0xff; unsigned int virt_as = max((entry->eax >> 8) & 0xff, 48U);
unsigned virt_as = max((entry->eax >> 8) & 0xff, 48U); unsigned int phys_as;
unsigned phys_as = entry->eax & 0xff;
/* /*
* If TDP (NPT) is disabled use the adjusted host MAXPHYADDR as * If TDP (NPT) is disabled use the adjusted host MAXPHYADDR as
@@ -1167,16 +1166,16 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function)
* reductions in MAXPHYADDR for memory encryption affect shadow * reductions in MAXPHYADDR for memory encryption affect shadow
* paging, too. * paging, too.
* *
* If TDP is enabled but an explicit guest MAXPHYADDR is not * If TDP is enabled, use the raw bare metal MAXPHYADDR as
* provided, use the raw bare metal MAXPHYADDR as reductions to * reductions to the HPAs do not affect GPAs.
* the HPAs do not affect GPAs.
*/ */
if (!tdp_enabled) if (!tdp_enabled) {
g_phys_as = boot_cpu_data.x86_phys_bits; phys_as = boot_cpu_data.x86_phys_bits;
else if (!g_phys_as) } else {
g_phys_as = phys_as; phys_as = entry->eax & 0xff;
}
entry->eax = g_phys_as | (virt_as << 8); entry->eax = phys_as | (virt_as << 8);
entry->ecx &= ~(GENMASK(31, 16) | GENMASK(11, 8)); entry->ecx &= ~(GENMASK(31, 16) | GENMASK(11, 8));
entry->edx = 0; entry->edx = 0;
cpuid_entry_override(entry, CPUID_8000_0008_EBX); cpuid_entry_override(entry, CPUID_8000_0008_EBX);

View File

@@ -148,7 +148,7 @@ AVXcode:
65: SEG=GS (Prefix) 65: SEG=GS (Prefix)
66: Operand-Size (Prefix) 66: Operand-Size (Prefix)
67: Address-Size (Prefix) 67: Address-Size (Prefix)
68: PUSH Iz (d64) 68: PUSH Iz
69: IMUL Gv,Ev,Iz 69: IMUL Gv,Ev,Iz
6a: PUSH Ib (d64) 6a: PUSH Ib (d64)
6b: IMUL Gv,Ev,Ib 6b: IMUL Gv,Ev,Ib
@@ -698,10 +698,10 @@ AVXcode: 2
4d: vrcp14ss/d Vsd,Hpd,Wsd (66),(ev) 4d: vrcp14ss/d Vsd,Hpd,Wsd (66),(ev)
4e: vrsqrt14ps/d Vpd,Wpd (66),(ev) 4e: vrsqrt14ps/d Vpd,Wpd (66),(ev)
4f: vrsqrt14ss/d Vsd,Hsd,Wsd (66),(ev) 4f: vrsqrt14ss/d Vsd,Hsd,Wsd (66),(ev)
50: vpdpbusd Vx,Hx,Wx (66),(ev) 50: vpdpbusd Vx,Hx,Wx (66)
51: vpdpbusds Vx,Hx,Wx (66),(ev) 51: vpdpbusds Vx,Hx,Wx (66)
52: vdpbf16ps Vx,Hx,Wx (F3),(ev) | vpdpwssd Vx,Hx,Wx (66),(ev) | vp4dpwssd Vdqq,Hdqq,Wdq (F2),(ev) 52: vdpbf16ps Vx,Hx,Wx (F3),(ev) | vpdpwssd Vx,Hx,Wx (66) | vp4dpwssd Vdqq,Hdqq,Wdq (F2),(ev)
53: vpdpwssds Vx,Hx,Wx (66),(ev) | vp4dpwssds Vdqq,Hdqq,Wdq (F2),(ev) 53: vpdpwssds Vx,Hx,Wx (66) | vp4dpwssds Vdqq,Hdqq,Wdq (F2),(ev)
54: vpopcntb/w Vx,Wx (66),(ev) 54: vpopcntb/w Vx,Wx (66),(ev)
55: vpopcntd/q Vx,Wx (66),(ev) 55: vpopcntd/q Vx,Wx (66),(ev)
58: vpbroadcastd Vx,Wx (66),(v) 58: vpbroadcastd Vx,Wx (66),(v)

View File

@@ -738,39 +738,8 @@ kernelmode_fixup_or_oops(struct pt_regs *regs, unsigned long error_code,
WARN_ON_ONCE(user_mode(regs)); WARN_ON_ONCE(user_mode(regs));
/* Are we prepared to handle this kernel fault? */ /* Are we prepared to handle this kernel fault? */
if (fixup_exception(regs, X86_TRAP_PF, error_code, address)) { if (fixup_exception(regs, X86_TRAP_PF, error_code, address))
/*
* Any interrupt that takes a fault gets the fixup. This makes
* the below recursive fault logic only apply to a faults from
* task context.
*/
if (in_interrupt())
return;
/*
* Per the above we're !in_interrupt(), aka. task context.
*
* In this case we need to make sure we're not recursively
* faulting through the emulate_vsyscall() logic.
*/
if (current->thread.sig_on_uaccess_err && signal) {
sanitize_error_code(address, &error_code);
set_signal_archinfo(address, error_code);
if (si_code == SEGV_PKUERR) {
force_sig_pkuerr((void __user *)address, pkey);
} else {
/* XXX: hwpoison faults will set the wrong code. */
force_sig_fault(signal, si_code, (void __user *)address);
}
}
/*
* Barring that, we can do the fixup and be happy.
*/
return; return;
}
/* /*
* AMD erratum #91 manifests as a spurious page fault on a PREFETCH * AMD erratum #91 manifests as a spurious page fault on a PREFETCH

View File

@@ -956,6 +956,8 @@ int memory_add_physaddr_to_nid(u64 start)
} }
EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid); EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid);
#endif
static int __init cmp_memblk(const void *a, const void *b) static int __init cmp_memblk(const void *a, const void *b)
{ {
const struct numa_memblk *ma = *(const struct numa_memblk **)a; const struct numa_memblk *ma = *(const struct numa_memblk **)a;
@@ -1028,5 +1030,3 @@ int __init numa_fill_memblks(u64 start, u64 end)
} }
return 0; return 0;
} }
#endif

View File

@@ -583,7 +583,8 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long start,
* Validate strict W^X semantics. * Validate strict W^X semantics.
*/ */
static inline pgprot_t verify_rwx(pgprot_t old, pgprot_t new, unsigned long start, static inline pgprot_t verify_rwx(pgprot_t old, pgprot_t new, unsigned long start,
unsigned long pfn, unsigned long npg) unsigned long pfn, unsigned long npg,
bool nx, bool rw)
{ {
unsigned long end; unsigned long end;
@@ -609,6 +610,10 @@ static inline pgprot_t verify_rwx(pgprot_t old, pgprot_t new, unsigned long star
if ((pgprot_val(new) & (_PAGE_RW | _PAGE_NX)) != _PAGE_RW) if ((pgprot_val(new) & (_PAGE_RW | _PAGE_NX)) != _PAGE_RW)
return new; return new;
/* Non-leaf translation entries can disable writing or execution. */
if (!rw || nx)
return new;
end = start + npg * PAGE_SIZE - 1; end = start + npg * PAGE_SIZE - 1;
WARN_ONCE(1, "CPA detected W^X violation: %016llx -> %016llx range: 0x%016lx - 0x%016lx PFN %lx\n", WARN_ONCE(1, "CPA detected W^X violation: %016llx -> %016llx range: 0x%016lx - 0x%016lx PFN %lx\n",
(unsigned long long)pgprot_val(old), (unsigned long long)pgprot_val(old),
@@ -625,20 +630,26 @@ static inline pgprot_t verify_rwx(pgprot_t old, pgprot_t new, unsigned long star
/* /*
* Lookup the page table entry for a virtual address in a specific pgd. * Lookup the page table entry for a virtual address in a specific pgd.
* Return a pointer to the entry and the level of the mapping. * Return a pointer to the entry, the level of the mapping, and the effective
* NX and RW bits of all page table levels.
*/ */
pte_t *lookup_address_in_pgd(pgd_t *pgd, unsigned long address, pte_t *lookup_address_in_pgd_attr(pgd_t *pgd, unsigned long address,
unsigned int *level) unsigned int *level, bool *nx, bool *rw)
{ {
p4d_t *p4d; p4d_t *p4d;
pud_t *pud; pud_t *pud;
pmd_t *pmd; pmd_t *pmd;
*level = PG_LEVEL_NONE; *level = PG_LEVEL_NONE;
*nx = false;
*rw = true;
if (pgd_none(*pgd)) if (pgd_none(*pgd))
return NULL; return NULL;
*nx |= pgd_flags(*pgd) & _PAGE_NX;
*rw &= pgd_flags(*pgd) & _PAGE_RW;
p4d = p4d_offset(pgd, address); p4d = p4d_offset(pgd, address);
if (p4d_none(*p4d)) if (p4d_none(*p4d))
return NULL; return NULL;
@@ -647,6 +658,9 @@ pte_t *lookup_address_in_pgd(pgd_t *pgd, unsigned long address,
if (p4d_large(*p4d) || !p4d_present(*p4d)) if (p4d_large(*p4d) || !p4d_present(*p4d))
return (pte_t *)p4d; return (pte_t *)p4d;
*nx |= p4d_flags(*p4d) & _PAGE_NX;
*rw &= p4d_flags(*p4d) & _PAGE_RW;
pud = pud_offset(p4d, address); pud = pud_offset(p4d, address);
if (pud_none(*pud)) if (pud_none(*pud))
return NULL; return NULL;
@@ -655,6 +669,9 @@ pte_t *lookup_address_in_pgd(pgd_t *pgd, unsigned long address,
if (pud_large(*pud) || !pud_present(*pud)) if (pud_large(*pud) || !pud_present(*pud))
return (pte_t *)pud; return (pte_t *)pud;
*nx |= pud_flags(*pud) & _PAGE_NX;
*rw &= pud_flags(*pud) & _PAGE_RW;
pmd = pmd_offset(pud, address); pmd = pmd_offset(pud, address);
if (pmd_none(*pmd)) if (pmd_none(*pmd))
return NULL; return NULL;
@@ -663,11 +680,26 @@ pte_t *lookup_address_in_pgd(pgd_t *pgd, unsigned long address,
if (pmd_large(*pmd) || !pmd_present(*pmd)) if (pmd_large(*pmd) || !pmd_present(*pmd))
return (pte_t *)pmd; return (pte_t *)pmd;
*nx |= pmd_flags(*pmd) & _PAGE_NX;
*rw &= pmd_flags(*pmd) & _PAGE_RW;
*level = PG_LEVEL_4K; *level = PG_LEVEL_4K;
return pte_offset_kernel(pmd, address); return pte_offset_kernel(pmd, address);
} }
/*
* Lookup the page table entry for a virtual address in a specific pgd.
* Return a pointer to the entry and the level of the mapping.
*/
pte_t *lookup_address_in_pgd(pgd_t *pgd, unsigned long address,
unsigned int *level)
{
bool nx, rw;
return lookup_address_in_pgd_attr(pgd, address, level, &nx, &rw);
}
/* /*
* Lookup the page table entry for a virtual address. Return a pointer * Lookup the page table entry for a virtual address. Return a pointer
* to the entry and the level of the mapping. * to the entry and the level of the mapping.
@@ -683,13 +715,16 @@ pte_t *lookup_address(unsigned long address, unsigned int *level)
EXPORT_SYMBOL_GPL(lookup_address); EXPORT_SYMBOL_GPL(lookup_address);
static pte_t *_lookup_address_cpa(struct cpa_data *cpa, unsigned long address, static pte_t *_lookup_address_cpa(struct cpa_data *cpa, unsigned long address,
unsigned int *level) unsigned int *level, bool *nx, bool *rw)
{ {
if (cpa->pgd) pgd_t *pgd;
return lookup_address_in_pgd(cpa->pgd + pgd_index(address),
address, level);
return lookup_address(address, level); if (!cpa->pgd)
pgd = pgd_offset_k(address);
else
pgd = cpa->pgd + pgd_index(address);
return lookup_address_in_pgd_attr(pgd, address, level, nx, rw);
} }
/* /*
@@ -813,12 +848,13 @@ static int __should_split_large_page(pte_t *kpte, unsigned long address,
pgprot_t old_prot, new_prot, req_prot, chk_prot; pgprot_t old_prot, new_prot, req_prot, chk_prot;
pte_t new_pte, *tmp; pte_t new_pte, *tmp;
enum pg_level level; enum pg_level level;
bool nx, rw;
/* /*
* Check for races, another CPU might have split this page * Check for races, another CPU might have split this page
* up already: * up already:
*/ */
tmp = _lookup_address_cpa(cpa, address, &level); tmp = _lookup_address_cpa(cpa, address, &level, &nx, &rw);
if (tmp != kpte) if (tmp != kpte)
return 1; return 1;
@@ -929,7 +965,8 @@ static int __should_split_large_page(pte_t *kpte, unsigned long address,
new_prot = static_protections(req_prot, lpaddr, old_pfn, numpages, new_prot = static_protections(req_prot, lpaddr, old_pfn, numpages,
psize, CPA_DETECT); psize, CPA_DETECT);
new_prot = verify_rwx(old_prot, new_prot, lpaddr, old_pfn, numpages); new_prot = verify_rwx(old_prot, new_prot, lpaddr, old_pfn, numpages,
nx, rw);
/* /*
* If there is a conflict, split the large page. * If there is a conflict, split the large page.
@@ -1010,6 +1047,7 @@ __split_large_page(struct cpa_data *cpa, pte_t *kpte, unsigned long address,
pte_t *pbase = (pte_t *)page_address(base); pte_t *pbase = (pte_t *)page_address(base);
unsigned int i, level; unsigned int i, level;
pgprot_t ref_prot; pgprot_t ref_prot;
bool nx, rw;
pte_t *tmp; pte_t *tmp;
spin_lock(&pgd_lock); spin_lock(&pgd_lock);
@@ -1017,7 +1055,7 @@ __split_large_page(struct cpa_data *cpa, pte_t *kpte, unsigned long address,
* Check for races, another CPU might have split this page * Check for races, another CPU might have split this page
* up for us already: * up for us already:
*/ */
tmp = _lookup_address_cpa(cpa, address, &level); tmp = _lookup_address_cpa(cpa, address, &level, &nx, &rw);
if (tmp != kpte) { if (tmp != kpte) {
spin_unlock(&pgd_lock); spin_unlock(&pgd_lock);
return 1; return 1;
@@ -1558,10 +1596,11 @@ static int __change_page_attr(struct cpa_data *cpa, int primary)
int do_split, err; int do_split, err;
unsigned int level; unsigned int level;
pte_t *kpte, old_pte; pte_t *kpte, old_pte;
bool nx, rw;
address = __cpa_addr(cpa, cpa->curpage); address = __cpa_addr(cpa, cpa->curpage);
repeat: repeat:
kpte = _lookup_address_cpa(cpa, address, &level); kpte = _lookup_address_cpa(cpa, address, &level, &nx, &rw);
if (!kpte) if (!kpte)
return __cpa_process_fault(cpa, address, primary); return __cpa_process_fault(cpa, address, primary);
@@ -1583,7 +1622,8 @@ repeat:
new_prot = static_protections(new_prot, address, pfn, 1, 0, new_prot = static_protections(new_prot, address, pfn, 1, 0,
CPA_PROTECT); CPA_PROTECT);
new_prot = verify_rwx(old_prot, new_prot, address, pfn, 1); new_prot = verify_rwx(old_prot, new_prot, address, pfn, 1,
nx, rw);
new_prot = pgprot_clear_protnone_bits(new_prot); new_prot = pgprot_clear_protnone_bits(new_prot);

View File

@@ -42,7 +42,8 @@ KCOV_INSTRUMENT := n
# make up the standalone purgatory.ro # make up the standalone purgatory.ro
PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel
PURGATORY_CFLAGS := -mcmodel=large -ffreestanding -fno-zero-initialized-in-bss -g0 PURGATORY_CFLAGS := -mcmodel=small -ffreestanding -fno-zero-initialized-in-bss -g0
PURGATORY_CFLAGS += -fpic -fvisibility=hidden
PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING
PURGATORY_CFLAGS += -fno-stack-protector PURGATORY_CFLAGS += -fno-stack-protector

View File

@@ -746,6 +746,15 @@ static void walk_relocs(int (*process)(struct section *sec, Elf_Rel *rel,
if (!(sec_applies->shdr.sh_flags & SHF_ALLOC)) { if (!(sec_applies->shdr.sh_flags & SHF_ALLOC)) {
continue; continue;
} }
/*
* Do not perform relocations in .notes sections; any
* values there are meant for pre-boot consumption (e.g.
* startup_xen).
*/
if (sec_applies->shdr.sh_type == SHT_NOTE)
continue;
sh_symtab = sec_symtab->symtab; sh_symtab = sec_symtab->symtab;
sym_strtab = sec_symtab->link->strtab; sym_strtab = sec_symtab->link->strtab;
for (j = 0; j < sec->shdr.sh_size/sizeof(Elf_Rel); j++) { for (j = 0; j < sec->shdr.sh_size/sizeof(Elf_Rel); j++) {

View File

@@ -1,6 +1,13 @@
/* SPDX-License-Identifier: GPL-2.0 */ /* SPDX-License-Identifier: GPL-2.0 */
#ifndef __X86_UM_SYSDEP_ARCHSETJMP_H
#define __X86_UM_SYSDEP_ARCHSETJMP_H
#ifdef __i386__ #ifdef __i386__
#include "archsetjmp_32.h" #include "archsetjmp_32.h"
#else #else
#include "archsetjmp_64.h" #include "archsetjmp_64.h"
#endif #endif
unsigned long get_thread_reg(int reg, jmp_buf *buf);
#endif /* __X86_UM_SYSDEP_ARCHSETJMP_H */

View File

@@ -942,10 +942,11 @@ void update_io_ticks(struct block_device *part, unsigned long now, bool end)
unsigned long stamp; unsigned long stamp;
again: again:
stamp = READ_ONCE(part->bd_stamp); stamp = READ_ONCE(part->bd_stamp);
if (unlikely(time_after(now, stamp))) { if (unlikely(time_after(now, stamp)) &&
if (likely(try_cmpxchg(&part->bd_stamp, &stamp, now))) likely(try_cmpxchg(&part->bd_stamp, &stamp, now)) &&
__part_stat_add(part, io_ticks, end ? now - stamp : 1); (end || part_in_flight(part)))
} __part_stat_add(part, io_ticks, now - stamp);
if (part->bd_partno) { if (part->bd_partno) {
part = bdev_whole(part); part = bdev_whole(part);
goto again; goto again;

View File

@@ -783,6 +783,8 @@ static void blk_account_io_merge_request(struct request *req)
if (blk_do_io_stat(req)) { if (blk_do_io_stat(req)) {
part_stat_lock(); part_stat_lock();
part_stat_inc(req->part, merges[op_stat_group(req_op(req))]); part_stat_inc(req->part, merges[op_stat_group(req_op(req))]);
part_stat_local_dec(req->part,
in_flight[op_is_write(req_op(req))]);
part_stat_unlock(); part_stat_unlock();
} }
} }

View File

@@ -971,17 +971,6 @@ bool blk_update_request(struct request *req, blk_status_t error,
} }
EXPORT_SYMBOL_GPL(blk_update_request); EXPORT_SYMBOL_GPL(blk_update_request);
static void __blk_account_io_done(struct request *req, u64 now)
{
const int sgrp = op_stat_group(req_op(req));
part_stat_lock();
update_io_ticks(req->part, jiffies, true);
part_stat_inc(req->part, ios[sgrp]);
part_stat_add(req->part, nsecs[sgrp], now - req->start_time_ns);
part_stat_unlock();
}
static inline void blk_account_io_done(struct request *req, u64 now) static inline void blk_account_io_done(struct request *req, u64 now)
{ {
/* /*
@@ -990,32 +979,39 @@ static inline void blk_account_io_done(struct request *req, u64 now)
* containing request is enough. * containing request is enough.
*/ */
if (blk_do_io_stat(req) && req->part && if (blk_do_io_stat(req) && req->part &&
!(req->rq_flags & RQF_FLUSH_SEQ)) !(req->rq_flags & RQF_FLUSH_SEQ)) {
__blk_account_io_done(req, now); const int sgrp = op_stat_group(req_op(req));
}
static void __blk_account_io_start(struct request *rq) part_stat_lock();
{ update_io_ticks(req->part, jiffies, true);
/* part_stat_inc(req->part, ios[sgrp]);
* All non-passthrough requests are created from a bio with one part_stat_add(req->part, nsecs[sgrp], now - req->start_time_ns);
* exception: when a flush command that is part of a flush sequence part_stat_local_dec(req->part,
* generated by the state machine in blk-flush.c is cloned onto the in_flight[op_is_write(req_op(req))]);
* lower device by dm-multipath we can get here without a bio. part_stat_unlock();
*/ }
if (rq->bio)
rq->part = rq->bio->bi_bdev;
else
rq->part = rq->q->disk->part0;
part_stat_lock();
update_io_ticks(rq->part, jiffies, false);
part_stat_unlock();
} }
static inline void blk_account_io_start(struct request *req) static inline void blk_account_io_start(struct request *req)
{ {
if (blk_do_io_stat(req)) if (blk_do_io_stat(req)) {
__blk_account_io_start(req); /*
* All non-passthrough requests are created from a bio with one
* exception: when a flush command that is part of a flush sequence
* generated by the state machine in blk-flush.c is cloned onto the
* lower device by dm-multipath we can get here without a bio.
*/
if (req->bio)
req->part = req->bio->bi_bdev;
else
req->part = req->q->disk->part0;
part_stat_lock();
update_io_ticks(req->part, jiffies, false);
part_stat_local_inc(req->part,
in_flight[op_is_write(req_op(req))]);
part_stat_unlock();
}
} }
static inline void __blk_mq_end_request_acct(struct request *rq, u64 now) static inline void __blk_mq_end_request_acct(struct request *rq, u64 now)

View File

@@ -373,6 +373,7 @@ static inline bool blk_do_io_stat(struct request *rq)
} }
void update_io_ticks(struct block_device *part, unsigned long now, bool end); void update_io_ticks(struct block_device *part, unsigned long now, bool end);
unsigned int part_in_flight(struct block_device *part);
static inline void req_set_nomerge(struct request_queue *q, struct request *req) static inline void req_set_nomerge(struct request_queue *q, struct request *req)
{ {

View File

@@ -125,7 +125,7 @@ static void part_stat_read_all(struct block_device *part,
} }
} }
static unsigned int part_in_flight(struct block_device *part) unsigned int part_in_flight(struct block_device *part)
{ {
unsigned int inflight = 0; unsigned int inflight = 0;
int cpu; int cpu;

View File

@@ -84,5 +84,7 @@ config FIPS_SIGNATURE_SELFTEST
depends on KEYS depends on KEYS
depends on ASYMMETRIC_KEY_TYPE depends on ASYMMETRIC_KEY_TYPE
depends on PKCS7_MESSAGE_PARSER depends on PKCS7_MESSAGE_PARSER
depends on CRYPTO_RSA
depends on CRYPTO_SHA256
endif # ASYMMETRIC_KEY_TYPE endif # ASYMMETRIC_KEY_TYPE

View File

@@ -573,7 +573,7 @@ static u_long get_word(struct vc_data *vc)
} }
attr_ch = get_char(vc, (u_short *)tmp_pos, &spk_attr); attr_ch = get_char(vc, (u_short *)tmp_pos, &spk_attr);
buf[cnt++] = attr_ch; buf[cnt++] = attr_ch;
while (tmpx < vc->vc_cols - 1 && cnt < sizeof(buf) - 1) { while (tmpx < vc->vc_cols - 1 && cnt < ARRAY_SIZE(buf) - 1) {
tmp_pos += 2; tmp_pos += 2;
tmpx++; tmpx++;
ch = get_char(vc, (u_short *)tmp_pos, &temp); ch = get_char(vc, (u_short *)tmp_pos, &temp);

View File

@@ -319,6 +319,7 @@ static const struct lpss_device_desc bsw_i2c_dev_desc = {
static const struct property_entry bsw_spi_properties[] = { static const struct property_entry bsw_spi_properties[] = {
PROPERTY_ENTRY_U32("intel,spi-pxa2xx-type", LPSS_BSW_SSP), PROPERTY_ENTRY_U32("intel,spi-pxa2xx-type", LPSS_BSW_SSP),
PROPERTY_ENTRY_U32("num-cs", 2),
{ } { }
}; };

View File

@@ -5,6 +5,7 @@
ccflags-y := -D_LINUX -DBUILDING_ACPICA ccflags-y := -D_LINUX -DBUILDING_ACPICA
ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT
CFLAGS_tbfind.o += $(call cc-disable-warning, stringop-truncation)
# use acpi.o to put all files here into acpi.o modparam namespace # use acpi.o to put all files here into acpi.o modparam namespace
obj-y += acpi.o obj-y += acpi.o

View File

@@ -206,6 +206,11 @@ int __init srat_disabled(void)
return acpi_numa < 0; return acpi_numa < 0;
} }
__weak int __init numa_fill_memblks(u64 start, u64 end)
{
return NUMA_NO_MEMBLK;
}
#if defined(CONFIG_X86) || defined(CONFIG_ARM64) || defined(CONFIG_LOONGARCH) #if defined(CONFIG_X86) || defined(CONFIG_ARM64) || defined(CONFIG_LOONGARCH)
/* /*
* Callback for SLIT parsing. pxm_to_node() returns NUMA_NO_NODE for * Callback for SLIT parsing. pxm_to_node() returns NUMA_NO_NODE for

View File

@@ -2311,10 +2311,13 @@ static void __exit null_exit(void)
if (g_queue_mode == NULL_Q_MQ && shared_tags) if (g_queue_mode == NULL_Q_MQ && shared_tags)
blk_mq_free_tag_set(&tag_set); blk_mq_free_tag_set(&tag_set);
mutex_destroy(&lock);
} }
module_init(null_init); module_init(null_init);
module_exit(null_exit); module_exit(null_exit);
MODULE_AUTHOR("Jens Axboe <axboe@kernel.dk>"); MODULE_AUTHOR("Jens Axboe <axboe@kernel.dk>");
MODULE_DESCRIPTION("multi queue aware block test driver");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");

View File

@@ -148,8 +148,10 @@ static int qca_read_fw_build_info(struct hci_dev *hdev)
} }
build_label = kstrndup(&edl->data[1], build_lbl_len, GFP_KERNEL); build_label = kstrndup(&edl->data[1], build_lbl_len, GFP_KERNEL);
if (!build_label) if (!build_label) {
err = -ENOMEM;
goto out; goto out;
}
hci_set_fw_info(hdev, "%s", build_label); hci_set_fw_info(hdev, "%s", build_label);

View File

@@ -296,28 +296,35 @@ static int register_device(int minor, struct pp_struct *pp)
if (!port) { if (!port) {
pr_warn("%s: no associated port!\n", name); pr_warn("%s: no associated port!\n", name);
rc = -ENXIO; rc = -ENXIO;
goto err; goto err_free_name;
}
index = ida_alloc(&ida_index, GFP_KERNEL);
if (index < 0) {
pr_warn("%s: failed to get index!\n", name);
rc = index;
goto err_put_port;
} }
index = ida_simple_get(&ida_index, 0, 0, GFP_KERNEL);
memset(&ppdev_cb, 0, sizeof(ppdev_cb)); memset(&ppdev_cb, 0, sizeof(ppdev_cb));
ppdev_cb.irq_func = pp_irq; ppdev_cb.irq_func = pp_irq;
ppdev_cb.flags = (pp->flags & PP_EXCL) ? PARPORT_FLAG_EXCL : 0; ppdev_cb.flags = (pp->flags & PP_EXCL) ? PARPORT_FLAG_EXCL : 0;
ppdev_cb.private = pp; ppdev_cb.private = pp;
pdev = parport_register_dev_model(port, name, &ppdev_cb, index); pdev = parport_register_dev_model(port, name, &ppdev_cb, index);
parport_put_port(port);
if (!pdev) { if (!pdev) {
pr_warn("%s: failed to register device!\n", name); pr_warn("%s: failed to register device!\n", name);
rc = -ENXIO; rc = -ENXIO;
ida_simple_remove(&ida_index, index); ida_free(&ida_index, index);
goto err; goto err_put_port;
} }
pp->pdev = pdev; pp->pdev = pdev;
pp->index = index; pp->index = index;
dev_dbg(&pdev->dev, "registered pardevice\n"); dev_dbg(&pdev->dev, "registered pardevice\n");
err: err_put_port:
parport_put_port(port);
err_free_name:
kfree(name); kfree(name);
return rc; return rc;
} }
@@ -750,7 +757,7 @@ static int pp_release(struct inode *inode, struct file *file)
if (pp->pdev) { if (pp->pdev) {
parport_unregister_device(pp->pdev); parport_unregister_device(pp->pdev);
ida_simple_remove(&ida_index, pp->index); ida_free(&ida_index, pp->index);
pp->pdev = NULL; pp->pdev = NULL;
pr_debug(CHRDEV "%x: unregistered pardevice\n", minor); pr_debug(CHRDEV "%x: unregistered pardevice\n", minor);
} }

View File

@@ -24,10 +24,12 @@
#define RS9_REG_SS_AMP_0V7 0x1 #define RS9_REG_SS_AMP_0V7 0x1
#define RS9_REG_SS_AMP_0V8 0x2 #define RS9_REG_SS_AMP_0V8 0x2
#define RS9_REG_SS_AMP_0V9 0x3 #define RS9_REG_SS_AMP_0V9 0x3
#define RS9_REG_SS_AMP_DEFAULT RS9_REG_SS_AMP_0V8
#define RS9_REG_SS_AMP_MASK 0x3 #define RS9_REG_SS_AMP_MASK 0x3
#define RS9_REG_SS_SSC_100 0 #define RS9_REG_SS_SSC_100 0
#define RS9_REG_SS_SSC_M025 (1 << 3) #define RS9_REG_SS_SSC_M025 (1 << 3)
#define RS9_REG_SS_SSC_M050 (3 << 3) #define RS9_REG_SS_SSC_M050 (3 << 3)
#define RS9_REG_SS_SSC_DEFAULT RS9_REG_SS_SSC_100
#define RS9_REG_SS_SSC_MASK (3 << 3) #define RS9_REG_SS_SSC_MASK (3 << 3)
#define RS9_REG_SS_SSC_LOCK BIT(5) #define RS9_REG_SS_SSC_LOCK BIT(5)
#define RS9_REG_SR 0x2 #define RS9_REG_SR 0x2
@@ -196,8 +198,8 @@ static int rs9_get_common_config(struct rs9_driver_data *rs9)
int ret; int ret;
/* Set defaults */ /* Set defaults */
rs9->pll_amplitude = RS9_REG_SS_AMP_0V7; rs9->pll_amplitude = RS9_REG_SS_AMP_DEFAULT;
rs9->pll_ssc = RS9_REG_SS_SSC_100; rs9->pll_ssc = RS9_REG_SS_SSC_DEFAULT;
/* Output clock amplitude */ /* Output clock amplitude */
ret = of_property_read_u32(np, "renesas,out-amplitude-microvolt", ret = of_property_read_u32(np, "renesas,out-amplitude-microvolt",
@@ -238,13 +240,13 @@ static void rs9_update_config(struct rs9_driver_data *rs9)
int i; int i;
/* If amplitude is non-default, update it. */ /* If amplitude is non-default, update it. */
if (rs9->pll_amplitude != RS9_REG_SS_AMP_0V7) { if (rs9->pll_amplitude != RS9_REG_SS_AMP_DEFAULT) {
regmap_update_bits(rs9->regmap, RS9_REG_SS, RS9_REG_SS_AMP_MASK, regmap_update_bits(rs9->regmap, RS9_REG_SS, RS9_REG_SS_AMP_MASK,
rs9->pll_amplitude); rs9->pll_amplitude);
} }
/* If SSC is non-default, update it. */ /* If SSC is non-default, update it. */
if (rs9->pll_ssc != RS9_REG_SS_SSC_100) { if (rs9->pll_ssc != RS9_REG_SS_SSC_DEFAULT) {
regmap_update_bits(rs9->regmap, RS9_REG_SS, RS9_REG_SS_SSC_MASK, regmap_update_bits(rs9->regmap, RS9_REG_SS, RS9_REG_SS_SSC_MASK,
rs9->pll_ssc); rs9->pll_ssc);
} }

View File

@@ -53,7 +53,7 @@ static const struct mtk_gate mm_clks[] = {
GATE_MM0(CLK_MM_MM_DSI0, "mm_dsi0", "mm_sel", 17), GATE_MM0(CLK_MM_MM_DSI0, "mm_dsi0", "mm_sel", 17),
GATE_MM0(CLK_MM_MM_DISP_RDMA1, "mm_disp_rdma1", "mm_sel", 18), GATE_MM0(CLK_MM_MM_DISP_RDMA1, "mm_disp_rdma1", "mm_sel", 18),
GATE_MM0(CLK_MM_MM_MDP_RDMA1, "mm_mdp_rdma1", "mm_sel", 19), GATE_MM0(CLK_MM_MM_MDP_RDMA1, "mm_mdp_rdma1", "mm_sel", 19),
GATE_MM0(CLK_MM_DPI0_DPI0, "mm_dpi0_dpi0", "vpll_dpix", 20), GATE_MM0(CLK_MM_DPI0_DPI0, "mm_dpi0_dpi0", "dpi0_sel", 20),
GATE_MM0(CLK_MM_MM_FAKE, "mm_fake", "mm_sel", 21), GATE_MM0(CLK_MM_MM_FAKE, "mm_fake", "mm_sel", 21),
GATE_MM0(CLK_MM_MM_SMI_COMMON, "mm_smi_common", "mm_sel", 22), GATE_MM0(CLK_MM_MM_SMI_COMMON, "mm_smi_common", "mm_sel", 22),
GATE_MM0(CLK_MM_MM_SMI_LARB0, "mm_smi_larb0", "mm_sel", 23), GATE_MM0(CLK_MM_MM_SMI_LARB0, "mm_smi_larb0", "mm_sel", 23),

View File

@@ -221,26 +221,17 @@ static struct clk_rcg2 disp_cc_mdss_dp_crypto_clk_src = {
}, },
}; };
static const struct freq_tbl ftbl_disp_cc_mdss_dp_link_clk_src[] = {
F(162000, P_DP_PHY_PLL_LINK_CLK, 1, 0, 0),
F(270000, P_DP_PHY_PLL_LINK_CLK, 1, 0, 0),
F(540000, P_DP_PHY_PLL_LINK_CLK, 1, 0, 0),
F(810000, P_DP_PHY_PLL_LINK_CLK, 1, 0, 0),
{ }
};
static struct clk_rcg2 disp_cc_mdss_dp_link_clk_src = { static struct clk_rcg2 disp_cc_mdss_dp_link_clk_src = {
.cmd_rcgr = 0x10f8, .cmd_rcgr = 0x10f8,
.mnd_width = 0, .mnd_width = 0,
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_0, .parent_map = disp_cc_parent_map_0,
.freq_tbl = ftbl_disp_cc_mdss_dp_link_clk_src,
.clkr.hw.init = &(struct clk_init_data){ .clkr.hw.init = &(struct clk_init_data){
.name = "disp_cc_mdss_dp_link_clk_src", .name = "disp_cc_mdss_dp_link_clk_src",
.parent_data = disp_cc_parent_data_0, .parent_data = disp_cc_parent_data_0,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_0), .num_parents = ARRAY_SIZE(disp_cc_parent_data_0),
.flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE, .flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE,
.ops = &clk_rcg2_ops, .ops = &clk_byte2_ops,
}, },
}; };

View File

@@ -309,26 +309,17 @@ static struct clk_rcg2 disp_cc_mdss_dptx0_aux_clk_src = {
}, },
}; };
static const struct freq_tbl ftbl_disp_cc_mdss_dptx0_link_clk_src[] = {
F(162000, P_DP0_PHY_PLL_LINK_CLK, 1, 0, 0),
F(270000, P_DP0_PHY_PLL_LINK_CLK, 1, 0, 0),
F(540000, P_DP0_PHY_PLL_LINK_CLK, 1, 0, 0),
F(810000, P_DP0_PHY_PLL_LINK_CLK, 1, 0, 0),
{ }
};
static struct clk_rcg2 disp_cc_mdss_dptx0_link_clk_src = { static struct clk_rcg2 disp_cc_mdss_dptx0_link_clk_src = {
.cmd_rcgr = 0x819c, .cmd_rcgr = 0x819c,
.mnd_width = 0, .mnd_width = 0,
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_3, .parent_map = disp_cc_parent_map_3,
.freq_tbl = ftbl_disp_cc_mdss_dptx0_link_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(struct clk_init_data) {
.name = "disp_cc_mdss_dptx0_link_clk_src", .name = "disp_cc_mdss_dptx0_link_clk_src",
.parent_data = disp_cc_parent_data_3, .parent_data = disp_cc_parent_data_3,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_3), .num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
.flags = CLK_SET_RATE_PARENT, .flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops, .ops = &clk_byte2_ops,
}, },
}; };
@@ -382,13 +373,12 @@ static struct clk_rcg2 disp_cc_mdss_dptx1_link_clk_src = {
.mnd_width = 0, .mnd_width = 0,
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_3, .parent_map = disp_cc_parent_map_3,
.freq_tbl = ftbl_disp_cc_mdss_dptx0_link_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(struct clk_init_data) {
.name = "disp_cc_mdss_dptx1_link_clk_src", .name = "disp_cc_mdss_dptx1_link_clk_src",
.parent_data = disp_cc_parent_data_3, .parent_data = disp_cc_parent_data_3,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_3), .num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
.flags = CLK_SET_RATE_PARENT, .flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops, .ops = &clk_byte2_ops,
}, },
}; };
@@ -442,13 +432,12 @@ static struct clk_rcg2 disp_cc_mdss_dptx2_link_clk_src = {
.mnd_width = 0, .mnd_width = 0,
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_3, .parent_map = disp_cc_parent_map_3,
.freq_tbl = ftbl_disp_cc_mdss_dptx0_link_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(struct clk_init_data) {
.name = "disp_cc_mdss_dptx2_link_clk_src", .name = "disp_cc_mdss_dptx2_link_clk_src",
.parent_data = disp_cc_parent_data_3, .parent_data = disp_cc_parent_data_3,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_3), .num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
.flags = CLK_SET_RATE_PARENT, .flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops, .ops = &clk_byte2_ops,
}, },
}; };
@@ -502,13 +491,12 @@ static struct clk_rcg2 disp_cc_mdss_dptx3_link_clk_src = {
.mnd_width = 0, .mnd_width = 0,
.hid_width = 5, .hid_width = 5,
.parent_map = disp_cc_parent_map_3, .parent_map = disp_cc_parent_map_3,
.freq_tbl = ftbl_disp_cc_mdss_dptx0_link_clk_src,
.clkr.hw.init = &(struct clk_init_data) { .clkr.hw.init = &(struct clk_init_data) {
.name = "disp_cc_mdss_dptx3_link_clk_src", .name = "disp_cc_mdss_dptx3_link_clk_src",
.parent_data = disp_cc_parent_data_3, .parent_data = disp_cc_parent_data_3,
.num_parents = ARRAY_SIZE(disp_cc_parent_data_3), .num_parents = ARRAY_SIZE(disp_cc_parent_data_3),
.flags = CLK_SET_RATE_PARENT, .flags = CLK_SET_RATE_PARENT,
.ops = &clk_rcg2_ops, .ops = &clk_byte2_ops,
}, },
}; };

View File

@@ -2578,6 +2578,8 @@ static struct clk_hw *mmcc_msm8998_hws[] = {
static struct gdsc video_top_gdsc = { static struct gdsc video_top_gdsc = {
.gdscr = 0x1024, .gdscr = 0x1024,
.cxcs = (unsigned int []){ 0x1028, 0x1034, 0x1038 },
.cxc_count = 3,
.pd = { .pd = {
.name = "video_top", .name = "video_top",
}, },
@@ -2586,20 +2588,26 @@ static struct gdsc video_top_gdsc = {
static struct gdsc video_subcore0_gdsc = { static struct gdsc video_subcore0_gdsc = {
.gdscr = 0x1040, .gdscr = 0x1040,
.cxcs = (unsigned int []){ 0x1048 },
.cxc_count = 1,
.pd = { .pd = {
.name = "video_subcore0", .name = "video_subcore0",
}, },
.parent = &video_top_gdsc.pd, .parent = &video_top_gdsc.pd,
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.flags = HW_CTRL,
}; };
static struct gdsc video_subcore1_gdsc = { static struct gdsc video_subcore1_gdsc = {
.gdscr = 0x1044, .gdscr = 0x1044,
.cxcs = (unsigned int []){ 0x104c },
.cxc_count = 1,
.pd = { .pd = {
.name = "video_subcore1", .name = "video_subcore1",
}, },
.parent = &video_top_gdsc.pd, .parent = &video_top_gdsc.pd,
.pwrsts = PWRSTS_OFF_ON, .pwrsts = PWRSTS_OFF_ON,
.flags = HW_CTRL,
}; };
static struct gdsc mdss_gdsc = { static struct gdsc mdss_gdsc = {

View File

@@ -139,7 +139,7 @@ static const struct mssr_mod_clk r8a779a0_mod_clks[] __initconst = {
DEF_MOD("avb3", 214, R8A779A0_CLK_S3D2), DEF_MOD("avb3", 214, R8A779A0_CLK_S3D2),
DEF_MOD("avb4", 215, R8A779A0_CLK_S3D2), DEF_MOD("avb4", 215, R8A779A0_CLK_S3D2),
DEF_MOD("avb5", 216, R8A779A0_CLK_S3D2), DEF_MOD("avb5", 216, R8A779A0_CLK_S3D2),
DEF_MOD("canfd0", 328, R8A779A0_CLK_CANFD), DEF_MOD("canfd0", 328, R8A779A0_CLK_S3D2),
DEF_MOD("csi40", 331, R8A779A0_CLK_CSI0), DEF_MOD("csi40", 331, R8A779A0_CLK_CSI0),
DEF_MOD("csi41", 400, R8A779A0_CLK_CSI0), DEF_MOD("csi41", 400, R8A779A0_CLK_CSI0),
DEF_MOD("csi42", 401, R8A779A0_CLK_CSI0), DEF_MOD("csi42", 401, R8A779A0_CLK_CSI0),

View File

@@ -252,6 +252,10 @@ static struct rzg2l_mod_clk r9a07g043_mod_clks[] = {
0x5a8, 1), 0x5a8, 1),
DEF_MOD("tsu_pclk", R9A07G043_TSU_PCLK, R9A07G043_CLK_TSU, DEF_MOD("tsu_pclk", R9A07G043_TSU_PCLK, R9A07G043_CLK_TSU,
0x5ac, 0), 0x5ac, 0),
#ifdef CONFIG_RISCV
DEF_MOD("nceplic_aclk", R9A07G043_NCEPLIC_ACLK, R9A07G043_CLK_P1,
0x608, 0),
#endif
}; };
static struct rzg2l_reset r9a07g043_resets[] = { static struct rzg2l_reset r9a07g043_resets[] = {
@@ -305,6 +309,10 @@ static struct rzg2l_reset r9a07g043_resets[] = {
DEF_RST(R9A07G043_ADC_PRESETN, 0x8a8, 0), DEF_RST(R9A07G043_ADC_PRESETN, 0x8a8, 0),
DEF_RST(R9A07G043_ADC_ADRST_N, 0x8a8, 1), DEF_RST(R9A07G043_ADC_ADRST_N, 0x8a8, 1),
DEF_RST(R9A07G043_TSU_PRESETN, 0x8ac, 0), DEF_RST(R9A07G043_TSU_PRESETN, 0x8ac, 0),
#ifdef CONFIG_RISCV
DEF_RST(R9A07G043_NCEPLIC_ARESETN, 0x908, 0),
#endif
}; };
static const unsigned int r9a07g043_crit_mod_clks[] __initconst = { static const unsigned int r9a07g043_crit_mod_clks[] __initconst = {
@@ -314,6 +322,7 @@ static const unsigned int r9a07g043_crit_mod_clks[] __initconst = {
#endif #endif
#ifdef CONFIG_RISCV #ifdef CONFIG_RISCV
MOD_CLK_BASE + R9A07G043_IAX45_CLK, MOD_CLK_BASE + R9A07G043_IAX45_CLK,
MOD_CLK_BASE + R9A07G043_NCEPLIC_ACLK,
#endif #endif
MOD_CLK_BASE + R9A07G043_DMAC_ACLK, MOD_CLK_BASE + R9A07G043_DMAC_ACLK,
}; };

View File

@@ -343,13 +343,13 @@ static const struct samsung_pll_clock top_pll_clks[] __initconst = {
/* CMU_TOP_PURECLKCOMP */ /* CMU_TOP_PURECLKCOMP */
PLL(pll_0822x, FOUT_SHARED0_PLL, "fout_shared0_pll", "oscclk", PLL(pll_0822x, FOUT_SHARED0_PLL, "fout_shared0_pll", "oscclk",
PLL_LOCKTIME_PLL_SHARED0, PLL_CON3_PLL_SHARED0, NULL), PLL_LOCKTIME_PLL_SHARED0, PLL_CON3_PLL_SHARED0, NULL),
PLL(pll_0822x, FOUT_SHARED0_PLL, "fout_shared1_pll", "oscclk", PLL(pll_0822x, FOUT_SHARED1_PLL, "fout_shared1_pll", "oscclk",
PLL_LOCKTIME_PLL_SHARED1, PLL_CON3_PLL_SHARED1, NULL), PLL_LOCKTIME_PLL_SHARED1, PLL_CON3_PLL_SHARED1, NULL),
PLL(pll_0822x, FOUT_SHARED0_PLL, "fout_shared2_pll", "oscclk", PLL(pll_0822x, FOUT_SHARED2_PLL, "fout_shared2_pll", "oscclk",
PLL_LOCKTIME_PLL_SHARED2, PLL_CON3_PLL_SHARED2, NULL), PLL_LOCKTIME_PLL_SHARED2, PLL_CON3_PLL_SHARED2, NULL),
PLL(pll_0822x, FOUT_SHARED0_PLL, "fout_shared3_pll", "oscclk", PLL(pll_0822x, FOUT_SHARED3_PLL, "fout_shared3_pll", "oscclk",
PLL_LOCKTIME_PLL_SHARED3, PLL_CON3_PLL_SHARED3, NULL), PLL_LOCKTIME_PLL_SHARED3, PLL_CON3_PLL_SHARED3, NULL),
PLL(pll_0822x, FOUT_SHARED0_PLL, "fout_shared4_pll", "oscclk", PLL(pll_0822x, FOUT_SHARED4_PLL, "fout_shared4_pll", "oscclk",
PLL_LOCKTIME_PLL_SHARED4, PLL_CON3_PLL_SHARED4, NULL), PLL_LOCKTIME_PLL_SHARED4, PLL_CON3_PLL_SHARED4, NULL),
}; };

View File

@@ -841,10 +841,15 @@ static unsigned int cppc_cpufreq_get_rate(unsigned int cpu)
{ {
struct cppc_perf_fb_ctrs fb_ctrs_t0 = {0}, fb_ctrs_t1 = {0}; struct cppc_perf_fb_ctrs fb_ctrs_t0 = {0}, fb_ctrs_t1 = {0};
struct cpufreq_policy *policy = cpufreq_cpu_get(cpu); struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
struct cppc_cpudata *cpu_data = policy->driver_data; struct cppc_cpudata *cpu_data;
u64 delivered_perf; u64 delivered_perf;
int ret; int ret;
if (!policy)
return -ENODEV;
cpu_data = policy->driver_data;
cpufreq_cpu_put(policy); cpufreq_cpu_put(policy);
ret = cppc_get_perf_ctrs(cpu, &fb_ctrs_t0); ret = cppc_get_perf_ctrs(cpu, &fb_ctrs_t0);
@@ -924,10 +929,15 @@ static struct cpufreq_driver cppc_cpufreq_driver = {
static unsigned int hisi_cppc_cpufreq_get_rate(unsigned int cpu) static unsigned int hisi_cppc_cpufreq_get_rate(unsigned int cpu)
{ {
struct cpufreq_policy *policy = cpufreq_cpu_get(cpu); struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
struct cppc_cpudata *cpu_data = policy->driver_data; struct cppc_cpudata *cpu_data;
u64 desired_perf; u64 desired_perf;
int ret; int ret;
if (!policy)
return -ENODEV;
cpu_data = policy->driver_data;
cpufreq_cpu_put(policy); cpufreq_cpu_put(policy);
ret = cppc_get_desired_perf(cpu, &desired_perf); ret = cppc_get_desired_perf(cpu, &desired_perf);

View File

@@ -1636,10 +1636,13 @@ static void __cpufreq_offline(unsigned int cpu, struct cpufreq_policy *policy)
*/ */
if (cpufreq_driver->offline) { if (cpufreq_driver->offline) {
cpufreq_driver->offline(policy); cpufreq_driver->offline(policy);
} else if (cpufreq_driver->exit) { return;
cpufreq_driver->exit(policy);
policy->freq_table = NULL;
} }
if (cpufreq_driver->exit)
cpufreq_driver->exit(policy);
policy->freq_table = NULL;
} }
static int cpufreq_offline(unsigned int cpu) static int cpufreq_offline(unsigned int cpu)
@@ -1698,7 +1701,7 @@ static void cpufreq_remove_dev(struct device *dev, struct subsys_interface *sif)
} }
/* We did light-weight exit earlier, do full tear down now */ /* We did light-weight exit earlier, do full tear down now */
if (cpufreq_driver->offline) if (cpufreq_driver->offline && cpufreq_driver->exit)
cpufreq_driver->exit(policy); cpufreq_driver->exit(policy);
up_write(&policy->rwsem); up_write(&policy->rwsem);

View File

@@ -495,7 +495,7 @@ static void spu2_dump_omd(u8 *omd, u16 hash_key_len, u16 ciph_key_len,
if (hash_iv_len) { if (hash_iv_len) {
packet_log(" Hash IV Length %u bytes\n", hash_iv_len); packet_log(" Hash IV Length %u bytes\n", hash_iv_len);
packet_dump(" hash IV: ", ptr, hash_iv_len); packet_dump(" hash IV: ", ptr, hash_iv_len);
ptr += ciph_key_len; ptr += hash_iv_len;
} }
if (ciph_iv_len) { if (ciph_iv_len) {

View File

@@ -39,44 +39,38 @@ static const struct sp_dev_vdata dev_vdata[] = {
}, },
}; };
#ifdef CONFIG_ACPI
static const struct acpi_device_id sp_acpi_match[] = { static const struct acpi_device_id sp_acpi_match[] = {
{ "AMDI0C00", (kernel_ulong_t)&dev_vdata[0] }, { "AMDI0C00", (kernel_ulong_t)&dev_vdata[0] },
{ }, { },
}; };
MODULE_DEVICE_TABLE(acpi, sp_acpi_match); MODULE_DEVICE_TABLE(acpi, sp_acpi_match);
#endif
#ifdef CONFIG_OF
static const struct of_device_id sp_of_match[] = { static const struct of_device_id sp_of_match[] = {
{ .compatible = "amd,ccp-seattle-v1a", { .compatible = "amd,ccp-seattle-v1a",
.data = (const void *)&dev_vdata[0] }, .data = (const void *)&dev_vdata[0] },
{ }, { },
}; };
MODULE_DEVICE_TABLE(of, sp_of_match); MODULE_DEVICE_TABLE(of, sp_of_match);
#endif
static struct sp_dev_vdata *sp_get_of_version(struct platform_device *pdev) static struct sp_dev_vdata *sp_get_of_version(struct platform_device *pdev)
{ {
#ifdef CONFIG_OF
const struct of_device_id *match; const struct of_device_id *match;
match = of_match_node(sp_of_match, pdev->dev.of_node); match = of_match_node(sp_of_match, pdev->dev.of_node);
if (match && match->data) if (match && match->data)
return (struct sp_dev_vdata *)match->data; return (struct sp_dev_vdata *)match->data;
#endif
return NULL; return NULL;
} }
static struct sp_dev_vdata *sp_get_acpi_version(struct platform_device *pdev) static struct sp_dev_vdata *sp_get_acpi_version(struct platform_device *pdev)
{ {
#ifdef CONFIG_ACPI
const struct acpi_device_id *match; const struct acpi_device_id *match;
match = acpi_match_device(sp_acpi_match, &pdev->dev); match = acpi_match_device(sp_acpi_match, &pdev->dev);
if (match && match->driver_data) if (match && match->driver_data)
return (struct sp_dev_vdata *)match->driver_data; return (struct sp_dev_vdata *)match->driver_data;
#endif
return NULL; return NULL;
} }
@@ -214,12 +208,8 @@ static int sp_platform_resume(struct platform_device *pdev)
static struct platform_driver sp_platform_driver = { static struct platform_driver sp_platform_driver = {
.driver = { .driver = {
.name = "ccp", .name = "ccp",
#ifdef CONFIG_ACPI
.acpi_match_table = sp_acpi_match, .acpi_match_table = sp_acpi_match,
#endif
#ifdef CONFIG_OF
.of_match_table = sp_of_match, .of_match_table = sp_of_match,
#endif
}, },
.probe = sp_platform_probe, .probe = sp_platform_probe,
.remove = sp_platform_remove, .remove = sp_platform_remove,

View File

@@ -110,12 +110,12 @@ static void sync_print_obj(struct seq_file *s, struct sync_timeline *obj)
seq_printf(s, "%s: %d\n", obj->name, obj->value); seq_printf(s, "%s: %d\n", obj->name, obj->value);
spin_lock_irq(&obj->lock); spin_lock(&obj->lock); /* Caller already disabled IRQ. */
list_for_each(pos, &obj->pt_list) { list_for_each(pos, &obj->pt_list) {
struct sync_pt *pt = container_of(pos, struct sync_pt, link); struct sync_pt *pt = container_of(pos, struct sync_pt, link);
sync_print_fence(s, &pt->base, false); sync_print_fence(s, &pt->base, false);
} }
spin_unlock_irq(&obj->lock); spin_unlock(&obj->lock);
} }
static void sync_print_sync_file(struct seq_file *s, static void sync_print_sync_file(struct seq_file *s,

View File

@@ -594,7 +594,9 @@ static int idma64_probe(struct idma64_chip *chip)
idma64->dma.dev = chip->sysdev; idma64->dma.dev = chip->sysdev;
dma_set_max_seg_size(idma64->dma.dev, IDMA64C_CTLH_BLOCK_TS_MASK); ret = dma_set_max_seg_size(idma64->dma.dev, IDMA64C_CTLH_BLOCK_TS_MASK);
if (ret)
return ret;
ret = dma_async_device_register(&idma64->dma); ret = dma_async_device_register(&idma64->dma);
if (ret) if (ret)

View File

@@ -116,7 +116,8 @@ config EXTCON_MAX77843
config EXTCON_MAX8997 config EXTCON_MAX8997
tristate "Maxim MAX8997 EXTCON Support" tristate "Maxim MAX8997 EXTCON Support"
depends on MFD_MAX8997 && IRQ_DOMAIN depends on MFD_MAX8997
select IRQ_DOMAIN
help help
If you say yes here you get support for the MUIC device of If you say yes here you get support for the MUIC device of
Maxim MAX8997 PMIC. The MAX8997 MUIC is a USB port accessory Maxim MAX8997 PMIC. The MAX8997 MUIC is a USB port accessory

View File

@@ -169,9 +169,14 @@ static int dmi_dev_uevent(struct device *dev, struct kobj_uevent_env *env)
return 0; return 0;
} }
static void dmi_dev_release(struct device *dev)
{
kfree(dev);
}
static struct class dmi_class = { static struct class dmi_class = {
.name = "dmi", .name = "dmi",
.dev_release = (void(*)(struct device *)) kfree, .dev_release = dmi_dev_release,
.dev_uevent = dmi_dev_uevent, .dev_uevent = dmi_dev_uevent,
}; };

View File

@@ -335,8 +335,8 @@ fail_free_new_fdt:
fail: fail:
efi_free(fdt_size, fdt_addr); efi_free(fdt_size, fdt_addr);
if (!efi_novamap)
efi_bs_call(free_pool, priv.runtime_map); efi_bs_call(free_pool, priv.runtime_map);
return EFI_LOAD_ERROR; return EFI_LOAD_ERROR;
} }

View File

@@ -736,6 +736,26 @@ static void error(char *str)
efi_warn("Decompression failed: %s\n", str); efi_warn("Decompression failed: %s\n", str);
} }
static const char *cmdline_memmap_override;
static efi_status_t parse_options(const char *cmdline)
{
static const char opts[][14] = {
"mem=", "memmap=", "efi_fake_mem=", "hugepages="
};
for (int i = 0; i < ARRAY_SIZE(opts); i++) {
const char *p = strstr(cmdline, opts[i]);
if (p == cmdline || (p > cmdline && isspace(p[-1]))) {
cmdline_memmap_override = opts[i];
break;
}
}
return efi_parse_options(cmdline);
}
static efi_status_t efi_decompress_kernel(unsigned long *kernel_entry) static efi_status_t efi_decompress_kernel(unsigned long *kernel_entry)
{ {
unsigned long virt_addr = LOAD_PHYSICAL_ADDR; unsigned long virt_addr = LOAD_PHYSICAL_ADDR;
@@ -767,6 +787,10 @@ static efi_status_t efi_decompress_kernel(unsigned long *kernel_entry)
!memcmp(efistub_fw_vendor(), ami, sizeof(ami))) { !memcmp(efistub_fw_vendor(), ami, sizeof(ami))) {
efi_debug("AMI firmware v2.0 or older detected - disabling physical KASLR\n"); efi_debug("AMI firmware v2.0 or older detected - disabling physical KASLR\n");
seed[0] = 0; seed[0] = 0;
} else if (cmdline_memmap_override) {
efi_info("%s detected on the kernel command line - disabling physical KASLR\n",
cmdline_memmap_override);
seed[0] = 0;
} }
boot_params_ptr->hdr.loadflags |= KASLR_FLAG; boot_params_ptr->hdr.loadflags |= KASLR_FLAG;
@@ -843,7 +867,7 @@ void __noreturn efi_stub_entry(efi_handle_t handle,
} }
#ifdef CONFIG_CMDLINE_BOOL #ifdef CONFIG_CMDLINE_BOOL
status = efi_parse_options(CONFIG_CMDLINE); status = parse_options(CONFIG_CMDLINE);
if (status != EFI_SUCCESS) { if (status != EFI_SUCCESS) {
efi_err("Failed to parse options\n"); efi_err("Failed to parse options\n");
goto fail; goto fail;
@@ -852,7 +876,7 @@ void __noreturn efi_stub_entry(efi_handle_t handle,
if (!IS_ENABLED(CONFIG_CMDLINE_OVERRIDE)) { if (!IS_ENABLED(CONFIG_CMDLINE_OVERRIDE)) {
unsigned long cmdline_paddr = ((u64)hdr->cmd_line_ptr | unsigned long cmdline_paddr = ((u64)hdr->cmd_line_ptr |
((u64)boot_params->ext_cmd_line_ptr << 32)); ((u64)boot_params->ext_cmd_line_ptr << 32));
status = efi_parse_options((char *)cmdline_paddr); status = parse_options((char *)cmdline_paddr);
if (status != EFI_SUCCESS) { if (status != EFI_SUCCESS) {
efi_err("Failed to parse options\n"); efi_err("Failed to parse options\n");
goto fail; goto fail;

View File

@@ -9,6 +9,7 @@
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/kref.h> #include <linux/kref.h>
#include <linux/mailbox_client.h> #include <linux/mailbox_client.h>
#include <linux/mailbox_controller.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/of_platform.h> #include <linux/of_platform.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
@@ -96,8 +97,8 @@ int rpi_firmware_property_list(struct rpi_firmware *fw,
if (size & 3) if (size & 3)
return -EINVAL; return -EINVAL;
buf = dma_alloc_coherent(fw->cl.dev, PAGE_ALIGN(size), &bus_addr, buf = dma_alloc_coherent(fw->chan->mbox->dev, PAGE_ALIGN(size),
GFP_ATOMIC); &bus_addr, GFP_ATOMIC);
if (!buf) if (!buf)
return -ENOMEM; return -ENOMEM;
@@ -125,7 +126,7 @@ int rpi_firmware_property_list(struct rpi_firmware *fw,
ret = -EINVAL; ret = -EINVAL;
} }
dma_free_coherent(fw->cl.dev, PAGE_ALIGN(size), buf, bus_addr); dma_free_coherent(fw->chan->mbox->dev, PAGE_ALIGN(size), buf, bus_addr);
return ret; return ret;
} }

View File

@@ -79,6 +79,7 @@ static void cci_pci_free_irq(struct pci_dev *pcidev)
#define PCIE_DEVICE_ID_SILICOM_PAC_N5011 0x1001 #define PCIE_DEVICE_ID_SILICOM_PAC_N5011 0x1001
#define PCIE_DEVICE_ID_INTEL_DFL 0xbcce #define PCIE_DEVICE_ID_INTEL_DFL 0xbcce
/* PCI Subdevice ID for PCIE_DEVICE_ID_INTEL_DFL */ /* PCI Subdevice ID for PCIE_DEVICE_ID_INTEL_DFL */
#define PCIE_SUBDEVICE_ID_INTEL_D5005 0x138d
#define PCIE_SUBDEVICE_ID_INTEL_N6000 0x1770 #define PCIE_SUBDEVICE_ID_INTEL_N6000 0x1770
#define PCIE_SUBDEVICE_ID_INTEL_N6001 0x1771 #define PCIE_SUBDEVICE_ID_INTEL_N6001 0x1771
#define PCIE_SUBDEVICE_ID_INTEL_C6100 0x17d4 #define PCIE_SUBDEVICE_ID_INTEL_C6100 0x17d4
@@ -102,6 +103,8 @@ static struct pci_device_id cci_pcie_id_tbl[] = {
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIE_DEVICE_ID_INTEL_PAC_D5005_VF),}, {PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIE_DEVICE_ID_INTEL_PAC_D5005_VF),},
{PCI_DEVICE(PCI_VENDOR_ID_SILICOM_DENMARK, PCIE_DEVICE_ID_SILICOM_PAC_N5010),}, {PCI_DEVICE(PCI_VENDOR_ID_SILICOM_DENMARK, PCIE_DEVICE_ID_SILICOM_PAC_N5010),},
{PCI_DEVICE(PCI_VENDOR_ID_SILICOM_DENMARK, PCIE_DEVICE_ID_SILICOM_PAC_N5011),}, {PCI_DEVICE(PCI_VENDOR_ID_SILICOM_DENMARK, PCIE_DEVICE_ID_SILICOM_PAC_N5011),},
{PCI_DEVICE_SUB(PCI_VENDOR_ID_INTEL, PCIE_DEVICE_ID_INTEL_DFL,
PCI_VENDOR_ID_INTEL, PCIE_SUBDEVICE_ID_INTEL_D5005),},
{PCI_DEVICE_SUB(PCI_VENDOR_ID_INTEL, PCIE_DEVICE_ID_INTEL_DFL, {PCI_DEVICE_SUB(PCI_VENDOR_ID_INTEL, PCIE_DEVICE_ID_INTEL_DFL,
PCI_VENDOR_ID_INTEL, PCIE_SUBDEVICE_ID_INTEL_N6000),}, PCI_VENDOR_ID_INTEL, PCIE_SUBDEVICE_ID_INTEL_N6000),},
{PCI_DEVICE_SUB(PCI_VENDOR_ID_INTEL, PCIE_DEVICE_ID_INTEL_DFL_VF, {PCI_DEVICE_SUB(PCI_VENDOR_ID_INTEL, PCIE_DEVICE_ID_INTEL_DFL_VF,

View File

@@ -52,7 +52,7 @@ static struct fpga_region *fpga_region_get(struct fpga_region *region)
} }
get_device(dev); get_device(dev);
if (!try_module_get(dev->parent->driver->owner)) { if (!try_module_get(region->ops_owner)) {
put_device(dev); put_device(dev);
mutex_unlock(&region->mutex); mutex_unlock(&region->mutex);
return ERR_PTR(-ENODEV); return ERR_PTR(-ENODEV);
@@ -74,7 +74,7 @@ static void fpga_region_put(struct fpga_region *region)
dev_dbg(dev, "put\n"); dev_dbg(dev, "put\n");
module_put(dev->parent->driver->owner); module_put(region->ops_owner);
put_device(dev); put_device(dev);
mutex_unlock(&region->mutex); mutex_unlock(&region->mutex);
} }
@@ -180,14 +180,16 @@ static struct attribute *fpga_region_attrs[] = {
ATTRIBUTE_GROUPS(fpga_region); ATTRIBUTE_GROUPS(fpga_region);
/** /**
* fpga_region_register_full - create and register an FPGA Region device * __fpga_region_register_full - create and register an FPGA Region device
* @parent: device parent * @parent: device parent
* @info: parameters for FPGA Region * @info: parameters for FPGA Region
* @owner: module containing the get_bridges function
* *
* Return: struct fpga_region or ERR_PTR() * Return: struct fpga_region or ERR_PTR()
*/ */
struct fpga_region * struct fpga_region *
fpga_region_register_full(struct device *parent, const struct fpga_region_info *info) __fpga_region_register_full(struct device *parent, const struct fpga_region_info *info,
struct module *owner)
{ {
struct fpga_region *region; struct fpga_region *region;
int id, ret = 0; int id, ret = 0;
@@ -212,6 +214,7 @@ fpga_region_register_full(struct device *parent, const struct fpga_region_info *
region->compat_id = info->compat_id; region->compat_id = info->compat_id;
region->priv = info->priv; region->priv = info->priv;
region->get_bridges = info->get_bridges; region->get_bridges = info->get_bridges;
region->ops_owner = owner;
mutex_init(&region->mutex); mutex_init(&region->mutex);
INIT_LIST_HEAD(&region->bridge_list); INIT_LIST_HEAD(&region->bridge_list);
@@ -240,13 +243,14 @@ err_free:
return ERR_PTR(ret); return ERR_PTR(ret);
} }
EXPORT_SYMBOL_GPL(fpga_region_register_full); EXPORT_SYMBOL_GPL(__fpga_region_register_full);
/** /**
* fpga_region_register - create and register an FPGA Region device * __fpga_region_register - create and register an FPGA Region device
* @parent: device parent * @parent: device parent
* @mgr: manager that programs this region * @mgr: manager that programs this region
* @get_bridges: optional function to get bridges to a list * @get_bridges: optional function to get bridges to a list
* @owner: module containing the get_bridges function
* *
* This simple version of the register function should be sufficient for most users. * This simple version of the register function should be sufficient for most users.
* The fpga_region_register_full() function is available for users that need to * The fpga_region_register_full() function is available for users that need to
@@ -255,17 +259,17 @@ EXPORT_SYMBOL_GPL(fpga_region_register_full);
* Return: struct fpga_region or ERR_PTR() * Return: struct fpga_region or ERR_PTR()
*/ */
struct fpga_region * struct fpga_region *
fpga_region_register(struct device *parent, struct fpga_manager *mgr, __fpga_region_register(struct device *parent, struct fpga_manager *mgr,
int (*get_bridges)(struct fpga_region *)) int (*get_bridges)(struct fpga_region *), struct module *owner)
{ {
struct fpga_region_info info = { 0 }; struct fpga_region_info info = { 0 };
info.mgr = mgr; info.mgr = mgr;
info.get_bridges = get_bridges; info.get_bridges = get_bridges;
return fpga_region_register_full(parent, &info); return __fpga_region_register_full(parent, &info, owner);
} }
EXPORT_SYMBOL_GPL(fpga_region_register); EXPORT_SYMBOL_GPL(__fpga_region_register);
/** /**
* fpga_region_unregister - unregister an FPGA region * fpga_region_unregister - unregister an FPGA region

View File

@@ -1083,6 +1083,7 @@ void amdgpu_mes_remove_ring(struct amdgpu_device *adev,
return; return;
amdgpu_mes_remove_hw_queue(adev, ring->hw_queue_id); amdgpu_mes_remove_hw_queue(adev, ring->hw_queue_id);
del_timer_sync(&ring->fence_drv.fallback_timer);
amdgpu_ring_fini(ring); amdgpu_ring_fini(ring);
kfree(ring); kfree(ring);
} }

View File

@@ -585,6 +585,8 @@ int amdgpu_bo_create(struct amdgpu_device *adev,
else else
amdgpu_bo_placement_from_domain(bo, bp->domain); amdgpu_bo_placement_from_domain(bo, bp->domain);
if (bp->type == ttm_bo_type_kernel) if (bp->type == ttm_bo_type_kernel)
bo->tbo.priority = 2;
else if (!(bp->flags & AMDGPU_GEM_CREATE_DISCARDABLE))
bo->tbo.priority = 1; bo->tbo.priority = 1;
if (!bp->destroy) if (!bp->destroy)

View File

@@ -9352,7 +9352,7 @@ static const struct amdgpu_ring_funcs gfx_v10_0_ring_funcs_gfx = {
7 + /* PIPELINE_SYNC */ 7 + /* PIPELINE_SYNC */
SOC15_FLUSH_GPU_TLB_NUM_WREG * 5 + SOC15_FLUSH_GPU_TLB_NUM_WREG * 5 +
SOC15_FLUSH_GPU_TLB_NUM_REG_WAIT * 7 + SOC15_FLUSH_GPU_TLB_NUM_REG_WAIT * 7 +
2 + /* VM_FLUSH */ 4 + /* VM_FLUSH */
8 + /* FENCE for VM_FLUSH */ 8 + /* FENCE for VM_FLUSH */
20 + /* GDS switch */ 20 + /* GDS switch */
4 + /* double SWITCH_BUFFER, 4 + /* double SWITCH_BUFFER,
@@ -9445,7 +9445,6 @@ static const struct amdgpu_ring_funcs gfx_v10_0_ring_funcs_kiq = {
7 + /* gfx_v10_0_ring_emit_pipeline_sync */ 7 + /* gfx_v10_0_ring_emit_pipeline_sync */
SOC15_FLUSH_GPU_TLB_NUM_WREG * 5 + SOC15_FLUSH_GPU_TLB_NUM_WREG * 5 +
SOC15_FLUSH_GPU_TLB_NUM_REG_WAIT * 7 + SOC15_FLUSH_GPU_TLB_NUM_REG_WAIT * 7 +
2 + /* gfx_v10_0_ring_emit_vm_flush */
8 + 8 + 8, /* gfx_v10_0_ring_emit_fence_kiq x3 for user fence, vm fence */ 8 + 8 + 8, /* gfx_v10_0_ring_emit_fence_kiq x3 for user fence, vm fence */
.emit_ib_size = 7, /* gfx_v10_0_ring_emit_ib_compute */ .emit_ib_size = 7, /* gfx_v10_0_ring_emit_ib_compute */
.emit_ib = gfx_v10_0_ring_emit_ib_compute, .emit_ib = gfx_v10_0_ring_emit_ib_compute,

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