Merge 5.15.46 into android14-5.15
Changes in 5.15.46
binfmt_flat: do not stop relocating GOT entries prematurely on riscv
parisc/stifb: Implement fb_is_primary_device()
parisc/stifb: Keep track of hardware path of graphics card
RISC-V: Mark IORESOURCE_EXCLUSIVE for reserved mem instead of IORESOURCE_BUSY
riscv: Initialize thread pointer before calling C functions
riscv: Fix irq_work when SMP is disabled
riscv: Wire up memfd_secret in UAPI header
riscv: Move alternative length validation into subsection
ALSA: hda/realtek - Add new type for ALC245
ALSA: hda/realtek: Enable 4-speaker output for Dell XPS 15 9520 laptop
ALSA: hda/realtek - Fix microphone noise on ASUS TUF B550M-PLUS
ALSA: usb-audio: Cancel pending work at closing a MIDI substream
USB: serial: pl2303: fix type detection for odd device
USB: serial: option: add Quectel BG95 modem
USB: new quirk for Dell Gen 2 devices
usb: isp1760: Fix out-of-bounds array access
usb: dwc3: gadget: Move null pinter check to proper place
usb: core: hcd: Add support for deferring roothub registration
fs/ntfs3: Update valid size if -EIOCBQUEUED
fs/ntfs3: Fix fiemap + fix shrink file size (to remove preallocated space)
fs/ntfs3: Keep preallocated only if option prealloc enabled
fs/ntfs3: Check new size for limits
fs/ntfs3: In function ntfs_set_acl_ex do not change inode->i_mode if called from function ntfs_init_acl
fs/ntfs3: Fix some memory leaks in an error handling path of 'log_replay()'
fs/ntfs3: Update i_ctime when xattr is added
fs/ntfs3: Restore ntfs_xattr_get_acl and ntfs_xattr_set_acl functions
cifs: fix potential double free during failed mount
cifs: when extending a file with falloc we should make files not-sparse
xhci: Allow host runtime PM as default for Intel Alder Lake N xHCI
platform/x86: intel-hid: fix _DSM function index handling
x86/MCE/AMD: Fix memory leak when threshold_create_bank() fails
perf/x86/intel: Fix event constraints for ICL
x86/kexec: fix memory leak of elf header buffer
x86/sgx: Set active memcg prior to shmem allocation
ptrace/um: Replace PT_DTRACE with TIF_SINGLESTEP
ptrace/xtensa: Replace PT_SINGLESTEP with TIF_SINGLESTEP
ptrace: Reimplement PTRACE_KILL by always sending SIGKILL
btrfs: add "0x" prefix for unsupported optional features
btrfs: return correct error number for __extent_writepage_io()
btrfs: repair super block num_devices automatically
btrfs: fix the error handling for submit_extent_page() for btrfs_do_readpage()
iommu/vt-d: Add RPLS to quirk list to skip TE disabling
drm/vmwgfx: validate the screen formats
drm/virtio: fix NULL pointer dereference in virtio_gpu_conn_get_modes
selftests/bpf: Fix vfs_link kprobe definition
selftests/bpf: Fix parsing of prog types in UAPI hdr for bpftool sync
mwifiex: add mutex lock for call in mwifiex_dfs_chan_sw_work_queue
b43legacy: Fix assigning negative value to unsigned variable
b43: Fix assigning negative value to unsigned variable
ipw2x00: Fix potential NULL dereference in libipw_xmit()
ipv6: fix locking issues with loops over idev->addr_list
fbcon: Consistently protect deferred_takeover with console_lock()
x86/platform/uv: Update TSC sync state for UV5
ACPICA: Avoid cache flush inside virtual machines
mac80211: minstrel_ht: fix where rate stats are stored (fixes debugfs output)
drm/komeda: return early if drm_universal_plane_init() fails.
drm/amd/display: Disabling Z10 on DCN31
rcu-tasks: Fix race in schedule and flush work
rcu: Make TASKS_RUDE_RCU select IRQ_WORK
sfc: ef10: Fix assigning negative value to unsigned variable
ALSA: jack: Access input_dev under mutex
rtw88: 8821c: fix debugfs rssi value
spi: spi-rspi: Remove setting {src,dst}_{addr,addr_width} based on DMA direction
tools/power turbostat: fix ICX DRAM power numbers
scsi: lpfc: Move cfg_log_verbose check before calling lpfc_dmp_dbg()
scsi: lpfc: Fix SCSI I/O completion and abort handler deadlock
scsi: lpfc: Fix call trace observed during I/O with CMF enabled
cpuidle: PSCI: Improve support for suspend-to-RAM for PSCI OSI mode
drm/amd/pm: fix double free in si_parse_power_table()
ASoC: rsnd: care default case on rsnd_ssiu_busif_err_status_clear()
ASoC: rsnd: care return value from rsnd_node_fixed_index()
ath9k: fix QCA9561 PA bias level
media: venus: hfi: avoid null dereference in deinit
media: pci: cx23885: Fix the error handling in cx23885_initdev()
media: cx25821: Fix the warning when removing the module
md/bitmap: don't set sb values if can't pass sanity check
mmc: jz4740: Apply DMA engine limits to maximum segment size
drivers: mmc: sdhci_am654: Add the quirk to set TESTCD bit
scsi: megaraid: Fix error check return value of register_chrdev()
drm/amdgpu/sdma: Fix incorrect calculations of the wptr of the doorbells
scsi: ufs: Use pm_runtime_resume_and_get() instead of pm_runtime_get_sync()
scsi: lpfc: Fix resource leak in lpfc_sli4_send_seq_to_ulp()
ath11k: disable spectral scan during spectral deinit
ASoC: Intel: bytcr_rt5640: Add quirk for the HP Pro Tablet 408
drm/plane: Move range check for format_count earlier
drm/amd/pm: fix the compile warning
ath10k: skip ath10k_halt during suspend for driver state RESTARTING
arm64: compat: Do not treat syscall number as ESR_ELx for a bad syscall
drm: msm: fix error check return value of irq_of_parse_and_map()
scsi: target: tcmu: Fix possible data corruption
ipv6: Don't send rs packets to the interface of ARPHRD_TUNNEL
net/mlx5: fs, delete the FTE when there are no rules attached to it
ASoC: dapm: Don't fold register value changes into notifications
mlxsw: spectrum_dcb: Do not warn about priority changes
mlxsw: Treat LLDP packets as control
drm/amdgpu/psp: move PSP memory alloc from hw_init to sw_init
drm/amdgpu/ucode: Remove firmware load type check in amdgpu_ucode_free_bo
regulator: mt6315: Enforce regulator-compatible, not name
HID: bigben: fix slab-out-of-bounds Write in bigben_probe
of: Support more than one crash kernel regions for kexec -s
ASoC: tscs454: Add endianness flag in snd_soc_component_driver
scsi: lpfc: Alter FPIN stat accounting logic
net: remove two BUG() from skb_checksum_help()
s390/preempt: disable __preempt_count_add() optimization for PROFILE_ALL_BRANCHES
perf/amd/ibs: Cascade pmu init functions' return value
sched/core: Avoid obvious double update_rq_clock warning
spi: stm32-qspi: Fix wait_cmd timeout in APM mode
dma-debug: change allocation mode from GFP_NOWAIT to GFP_ATIOMIC
ACPI: PM: Block ASUS B1400CEAE from suspend to idle by default
ipmi:ssif: Check for NULL msg when handling events and messages
ipmi: Fix pr_fmt to avoid compilation issues
rtlwifi: Use pr_warn instead of WARN_ONCE
mt76: mt7921: accept rx frames with non-standard VHT MCS10-11
mt76: fix encap offload ethernet type check
media: rga: fix possible memory leak in rga_probe
media: coda: limit frame interval enumeration to supported encoder frame sizes
media: hantro: HEVC: unconditionnaly set pps_{cb/cr}_qp_offset values
media: ccs-core.c: fix failure to call clk_disable_unprepare
media: imon: reorganize serialization
media: cec-adap.c: fix is_configuring state
usbnet: Run unregister_netdev() before unbind() again
openrisc: start CPU timer early in boot
nvme-pci: fix a NULL pointer dereference in nvme_alloc_admin_tags
ASoC: rt5645: Fix errorenous cleanup order
nbd: Fix hung on disconnect request if socket is closed before
drm/amd/pm: update smartshift powerboost calc for smu12
drm/amd/pm: update smartshift powerboost calc for smu13
net: phy: micrel: Allow probing without .driver_data
media: exynos4-is: Fix compile warning
media: hantro: Stop using H.264 parameter pic_num
ASoC: max98357a: remove dependency on GPIOLIB
ASoC: rt1015p: remove dependency on GPIOLIB
ACPI: CPPC: Assume no transition latency if no PCCT
nvme: set non-mdts limits in nvme_scan_work
can: mcp251xfd: silence clang's -Wunaligned-access warning
x86/microcode: Add explicit CPU vendor dependency
net: ipa: ignore endianness if there is no header
m68k: atari: Make Atari ROM port I/O write macros return void
rxrpc: Return an error to sendmsg if call failed
rxrpc, afs: Fix selection of abort codes
afs: Adjust ACK interpretation to try and cope with NAT
eth: tg3: silence the GCC 12 array-bounds warning
char: tpm: cr50_i2c: Suppress duplicated error message in .remove()
selftests/bpf: fix btf_dump/btf_dump due to recent clang change
gfs2: use i_lock spin_lock for inode qadata
scsi: target: tcmu: Avoid holding XArray lock when calling lock_page
IB/rdmavt: add missing locks in rvt_ruc_loopback
ARM: dts: ox820: align interrupt controller node name with dtschema
ARM: dts: socfpga: align interrupt controller node name with dtschema
ARM: dts: s5pv210: align DMA channels with dtschema
arm64: dts: qcom: msm8994: Fix the cont_splash_mem address
arm64: dts: qcom: msm8994: Fix BLSP[12]_DMA channels count
PM / devfreq: rk3399_dmc: Disable edev on remove()
crypto: ccree - use fine grained DMA mapping dir
soc: ti: ti_sci_pm_domains: Check for null return of devm_kcalloc
fs: jfs: fix possible NULL pointer dereference in dbFree()
arm64: dts: qcom: sdm845-xiaomi-beryllium: fix typo in panel's vddio-supply property
ALSA: usb-audio: Add quirk bits for enabling/disabling generic implicit fb
ALSA: usb-audio: Move generic implicit fb quirk entries into quirks.c
ARM: OMAP1: clock: Fix UART rate reporting algorithm
powerpc/fadump: Fix fadump to work with a different endian capture kernel
fat: add ratelimit to fat*_ent_bread()
pinctrl: renesas: rzn1: Fix possible null-ptr-deref in sh_pfc_map_resources()
ARM: versatile: Add missing of_node_put in dcscb_init
ARM: dts: exynos: add atmel,24c128 fallback to Samsung EEPROM
ARM: hisi: Add missing of_node_put after of_find_compatible_node
cpufreq: Avoid unnecessary frequency updates due to mismatch
powerpc/rtas: Keep MSR[RI] set when calling RTAS
PCI: Avoid pci_dev_lock() AB/BA deadlock with sriov_numvfs_store()
KVM: PPC: Book3S HV Nested: L2 LPCR should inherit L1 LPES setting
alpha: fix alloc_zeroed_user_highpage_movable()
tracing: incorrect isolate_mote_t cast in mm_vmscan_lru_isolate
powerpc/powernv/vas: Assign real address to rx_fifo in vas_rx_win_attr
powerpc/xics: fix refcount leak in icp_opal_init()
powerpc/powernv: fix missing of_node_put in uv_init()
macintosh/via-pmu: Fix build failure when CONFIG_INPUT is disabled
powerpc/iommu: Add missing of_node_put in iommu_init_early_dart
smb3: check for null tcon
RDMA/hfi1: Prevent panic when SDMA is disabled
Input: gpio-keys - cancel delayed work only in case of GPIO
drm: fix EDID struct for old ARM OABI format
drm/bridge_connector: enable HPD by default if supported
dt-bindings: display: sitronix, st7735r: Fix backlight in example
drm/vmwgfx: Fix an invalid read
ath11k: acquire ab->base_lock in unassign when finding the peer by addr
drm: bridge: it66121: Fix the register page length
ath9k: fix ar9003_get_eepmisc
drm/edid: fix invalid EDID extension block filtering
drm/bridge: adv7511: clean up CEC adapter when probe fails
drm: bridge: icn6211: Fix register layout
drm: bridge: icn6211: Fix HFP_HSW_HBP_HI and HFP_MIN handling
mtd: spinand: gigadevice: fix Quad IO for GD5F1GQ5UExxG
spi: qcom-qspi: Add minItems to interconnect-names
ASoC: mediatek: Fix error handling in mt8173_max98090_dev_probe
ASoC: mediatek: Fix missing of_node_put in mt2701_wm8960_machine_probe
x86/delay: Fix the wrong asm constraint in delay_loop()
drm/vc4: hvs: Fix frame count register readout
drm/mediatek: Fix mtk_cec_mask()
drm/vc4: hvs: Reset muxes at probe time
drm/vc4: txp: Don't set TXP_VSTART_AT_EOF
drm/vc4: txp: Force alpha to be 0xff if it's disabled
libbpf: Don't error out on CO-RE relos for overriden weak subprogs
x86/PCI: Fix ALi M1487 (IBC) PIRQ router link value interpretation
mptcp: reset the packet scheduler on PRIO change
nl80211: show SSID for P2P_GO interfaces
drm/komeda: Fix an undefined behavior bug in komeda_plane_add()
drm: mali-dp: potential dereference of null pointer
spi: spi-ti-qspi: Fix return value handling of wait_for_completion_timeout
scftorture: Fix distribution of short handler delays
net: dsa: mt7530: 1G can also support 1000BASE-X link mode
ixp4xx_eth: fix error check return value of platform_get_irq()
NFC: NULL out the dev->rfkill to prevent UAF
efi: Add missing prototype for efi_capsule_setup_info
device property: Check fwnode->secondary when finding properties
device property: Allow error pointer to be passed to fwnode APIs
target: remove an incorrect unmap zeroes data deduction
drbd: fix duplicate array initializer
EDAC/dmc520: Don't print an error for each unconfigured interrupt line
mtd: rawnand: denali: Use managed device resources
HID: hid-led: fix maximum brightness for Dream Cheeky
HID: elan: Fix potential double free in elan_input_configured
drm/bridge: Fix error handling in analogix_dp_probe
regulator: da9121: Fix uninit-value in da9121_assign_chip_model()
drm/mediatek: dpi: Use mt8183 output formats for mt8192
signal: Deliver SIGTRAP on perf event asynchronously if blocked
sched/fair: Fix cfs_rq_clock_pelt() for throttled cfs_rq
sched/psi: report zeroes for CPU full at the system level
spi: img-spfi: Fix pm_runtime_get_sync() error checking
cpufreq: Fix possible race in cpufreq online error path
printk: use atomic updates for klogd work
printk: add missing memory barrier to wake_up_klogd()
printk: wake waiters for safe and NMI contexts
ath9k_htc: fix potential out of bounds access with invalid rxstatus->rs_keyix
media: i2c: max9286: Use dev_err_probe() helper
media: i2c: max9286: Use "maxim,gpio-poc" property
media: i2c: max9286: fix kernel oops when removing module
media: hantro: Empty encoder capture buffers by default
drm/panel: simple: Add missing bus flags for Innolux G070Y2-L01
ALSA: pcm: Check for null pointer of pointer substream before dereferencing it
mtdblock: warn if opened on NAND
inotify: show inotify mask flags in proc fdinfo
fsnotify: fix wrong lockdep annotations
spi: rockchip: Stop spi slave dma receiver when cs inactive
spi: rockchip: Preset cs-high and clk polarity in setup progress
spi: rockchip: fix missing error on unsupported SPI_CS_HIGH
of: overlay: do not break notify on NOTIFY_{OK|STOP}
selftests/damon: add damon to selftests root Makefile
drm/msm/dp: Modify prototype of encoder based API
drm/msm/hdmi: switch to drm_bridge_connector
drm/msm/dpu: adjust display_v_end for eDP and DP
scsi: iscsi: Fix harmless double shift bug
scsi: ufs: qcom: Fix ufs_qcom_resume()
scsi: ufs: core: Exclude UECxx from SFR dump list
drm/v3d: Fix null pointer dereference of pointer perfmon
selftests/resctrl: Fix null pointer dereference on open failed
libbpf: Fix logic for finding matching program for CO-RE relocation
mtd: spi-nor: core: Check written SR value in spi_nor_write_16bit_sr_and_check()
x86/pm: Fix false positive kmemleak report in msr_build_context()
mtd: rawnand: cadence: fix possible null-ptr-deref in cadence_nand_dt_probe()
mtd: rawnand: intel: fix possible null-ptr-deref in ebu_nand_probe()
x86/speculation: Add missing prototype for unpriv_ebpf_notify()
ASoC: rk3328: fix disabling mclk on pclk probe failure
perf tools: Add missing headers needed by util/data.h
drm/msm/disp/dpu1: set vbif hw config to NULL to avoid use after memory free during pm runtime resume
drm/msm/dp: stop event kernel thread when DP unbind
drm/msm/dp: fix error check return value of irq_of_parse_and_map()
drm/msm/dp: reset DP controller before transmit phy test pattern
drm/msm/dp: do not stop transmitting phy test pattern during DP phy compliance test
drm/msm/dsi: fix error checks and return values for DSI xmit functions
drm/msm/hdmi: check return value after calling platform_get_resource_byname()
drm/msm/hdmi: fix error check return value of irq_of_parse_and_map()
drm/msm: add missing include to msm_drv.c
drm/panel: panel-simple: Fix proper bpc for AM-1280800N3TZQW-T00H
kunit: fix debugfs code to use enum kunit_status, not bool
drm/rockchip: vop: fix possible null-ptr-deref in vop_bind()
spi: cadence-quadspi: fix Direct Access Mode disable for SoCFPGA
perf tools: Use Python devtools for version autodetection rather than runtime
virtio_blk: fix the discard_granularity and discard_alignment queue limits
nl80211: don't hold RTNL in color change request
x86: Fix return value of __setup handlers
irqchip/exiu: Fix acknowledgment of edge triggered interrupts
irqchip/aspeed-i2c-ic: Fix irq_of_parse_and_map() return value
irqchip/aspeed-scu-ic: Fix irq_of_parse_and_map() return value
x86/mm: Cleanup the control_va_addr_alignment() __setup handler
arm64: fix types in copy_highpage()
regulator: core: Fix enable_count imbalance with EXCLUSIVE_GET
drm/msm/dsi: fix address for second DSI PHY on SDM660
drm/msm/dp: fix event thread stuck in wait_event after kthread_stop()
drm/msm/mdp5: Return error code in mdp5_pipe_release when deadlock is detected
drm/msm/mdp5: Return error code in mdp5_mixer_release when deadlock is detected
drm/msm: return an error pointer in msm_gem_prime_get_sg_table()
media: uvcvideo: Fix missing check to determine if element is found in list
arm64: stackleak: fix current_top_of_stack()
iomap: iomap_write_failed fix
spi: spi-fsl-qspi: check return value after calling platform_get_resource_byname()
Revert "cpufreq: Fix possible race in cpufreq online error path"
regulator: qcom_smd: Fix up PM8950 regulator configuration
samples: bpf: Don't fail for a missing VMLINUX_BTF when VMLINUX_H is provided
perf/amd/ibs: Use interrupt regs ip for stack unwinding
ath11k: Don't check arvif->is_started before sending management frames
wilc1000: fix crash observed in AP mode with cfg80211_register_netdevice()
HID: amd_sfh: Modify the bus name
HID: amd_sfh: Modify the hid name
ASoC: fsl: Use dev_err_probe() helper
ASoC: fsl: Fix refcount leak in imx_sgtl5000_probe
ASoC: imx-hdmi: Fix refcount leak in imx_hdmi_probe
ASoC: mxs-saif: Fix refcount leak in mxs_saif_probe
regulator: pfuze100: Fix refcount leak in pfuze_parse_regulators_dt
dma-direct: factor out a helper for DMA_ATTR_NO_KERNEL_MAPPING allocations
dma-direct: don't fail on highmem CMA pages in dma_direct_alloc_pages
ASoC: samsung: Use dev_err_probe() helper
ASoC: samsung: Fix refcount leak in aries_audio_probe
block: Fix the bio.bi_opf comment
kselftest/cgroup: fix test_stress.sh to use OUTPUT dir
scripts/faddr2line: Fix overlapping text section failures
media: aspeed: Fix an error handling path in aspeed_video_probe()
media: exynos4-is: Fix PM disable depth imbalance in fimc_is_probe
mt76: mt7921: Fix the error handling path of mt7921_pci_probe()
mt76: do not attempt to reorder received 802.3 packets without agg session
media: st-delta: Fix PM disable depth imbalance in delta_probe
media: atmel: atmel-isc: Fix PM disable depth imbalance in atmel_isc_probe
media: i2c: rdacm2x: properly set subdev entity function
media: exynos4-is: Change clk_disable to clk_disable_unprepare
media: pvrusb2: fix array-index-out-of-bounds in pvr2_i2c_core_init
media: vsp1: Fix offset calculation for plane cropping
media: atmel: atmel-sama5d2-isc: fix wrong mask in YUYV format check
media: hantro: HEVC: Fix tile info buffer value computation
Bluetooth: fix dangling sco_conn and use-after-free in sco_sock_timeout
Bluetooth: use hdev lock in activate_scan for hci_is_adv_monitoring
Bluetooth: use hdev lock for accept_list and reject_list in conn req
nvme: set dma alignment to dword
m68k: math-emu: Fix dependencies of math emulation support
sctp: read sk->sk_bound_dev_if once in sctp_rcv()
net: hinic: add missing destroy_workqueue in hinic_pf_to_mgmt_init
ASoC: ti: j721e-evm: Fix refcount leak in j721e_soc_probe_*
kselftest/arm64: bti: force static linking
media: ov7670: remove ov7670_power_off from ov7670_remove
media: i2c: ov5648: fix wrong pointer passed to IS_ERR() and PTR_ERR()
media: staging: media: rkvdec: Make use of the helper function devm_platform_ioremap_resource()
media: rkvdec: h264: Fix dpb_valid implementation
media: rkvdec: h264: Fix bit depth wrap in pps packet
regulator: scmi: Fix refcount leak in scmi_regulator_probe
ext4: reject the 'commit' option on ext2 filesystems
drm/msm/a6xx: Fix refcount leak in a6xx_gpu_init
drm: msm: fix possible memory leak in mdp5_crtc_cursor_set()
x86/sev: Annotate stack change in the #VC handler
drm/msm: don't free the IRQ if it was not requested
selftests/bpf: Add missed ima_setup.sh in Makefile
drm/msm/dpu: handle pm_runtime_get_sync() errors in bind path
drm/i915: Fix CFI violation with show_dynamic_id()
thermal/drivers/bcm2711: Don't clamp temperature at zero
thermal/drivers/broadcom: Fix potential NULL dereference in sr_thermal_probe
thermal/core: Fix memory leak in __thermal_cooling_device_register()
thermal/drivers/imx_sc_thermal: Fix refcount leak in imx_sc_thermal_probe
bfq: Relax waker detection for shared queues
bfq: Allow current waker to defend against a tentative one
ASoC: wm2000: fix missing clk_disable_unprepare() on error in wm2000_anc_transition()
PM: domains: Fix initialization of genpd's next_wakeup
net: macb: Fix PTP one step sync support
NFC: hci: fix sleep in atomic context bugs in nfc_hci_hcp_message_tx
ASoC: max98090: Move check for invalid values before casting in max98090_put_enab_tlv()
net: stmmac: selftests: Use kcalloc() instead of kzalloc()
net: stmmac: fix out-of-bounds access in a selftest
hv_netvsc: Fix potential dereference of NULL pointer
hwmon: (pmbus) Check PEC support before reading other registers
rxrpc: Fix listen() setting the bar too high for the prealloc rings
rxrpc: Don't try to resend the request if we're receiving the reply
rxrpc: Fix overlapping ACK accounting
rxrpc: Don't let ack.previousPacket regress
rxrpc: Fix decision on when to generate an IDLE ACK
net: huawei: hinic: Use devm_kcalloc() instead of devm_kzalloc()
hinic: Avoid some over memory allocation
net: dsa: restrict SMSC_LAN9303_I2C kconfig
net/smc: postpone sk_refcnt increment in connect()
dma-direct: factor out dma_set_{de,en}crypted helpers
dma-direct: don't call dma_set_decrypted for remapped allocations
dma-direct: always leak memory that can't be re-encrypted
dma-direct: don't over-decrypt memory
arm64: dts: rockchip: Move drive-impedance-ohm to emmc phy on rk3399
arm64: dts: mt8192: Fix nor_flash status disable typo
PCI/ACPI: Allow D3 only if Root Port can signal and wake from D3
memory: samsung: exynos5422-dmc: Avoid some over memory allocation
ARM: dts: BCM5301X: update CRU block description
ARM: dts: BCM5301X: Update pin controller node name
ARM: dts: suniv: F1C100: fix watchdog compatible
soc: qcom: smp2p: Fix missing of_node_put() in smp2p_parse_ipc
soc: qcom: smsm: Fix missing of_node_put() in smsm_parse_ipc
PCI: cadence: Fix find_first_zero_bit() limit
PCI: rockchip: Fix find_first_zero_bit() limit
PCI: mediatek: Fix refcount leak in mtk_pcie_subsys_powerup()
PCI: dwc: Fix setting error return on MSI DMA mapping failure
ARM: dts: ci4x10: Adapt to changes in imx6qdl.dtsi regarding fec clocks
soc: qcom: llcc: Add MODULE_DEVICE_TABLE()
KVM: nVMX: Leave most VM-Exit info fields unmodified on failed VM-Entry
KVM: nVMX: Clear IDT vectoring on nested VM-Exit for double/triple fault
crypto: qat - set CIPHER capability for QAT GEN2
crypto: qat - set COMPRESSION capability for QAT GEN2
crypto: qat - set CIPHER capability for DH895XCC
crypto: qat - set COMPRESSION capability for DH895XCC
platform/chrome: cros_ec: fix error handling in cros_ec_register()
ARM: dts: imx6dl-colibri: Fix I2C pinmuxing
platform/chrome: Re-introduce cros_ec_cmd_xfer and use it for ioctls
can: xilinx_can: mark bit timing constants as const
ARM: dts: stm32: Fix PHY post-reset delay on Avenger96
ARM: dts: bcm2835-rpi-zero-w: Fix GPIO line name for Wifi/BT
ARM: dts: bcm2837-rpi-cm3-io3: Fix GPIO line names for SMPS I2C
ARM: dts: bcm2837-rpi-3-b-plus: Fix GPIO line name of power LED
ARM: dts: bcm2835-rpi-b: Fix GPIO line names
misc: ocxl: fix possible double free in ocxl_file_register_afu
crypto: marvell/cesa - ECB does not IV
gpiolib: of: Introduce hook for missing gpio-ranges
pinctrl: bcm2835: implement hook for missing gpio-ranges
arm: mediatek: select arch timer for mt7629
pinctrl/rockchip: support deferring other gpio params
pinctrl: mediatek: mt8195: enable driver on mtk platforms
arm64: dts: qcom: qrb5165-rb5: Fix can-clock node name
Drivers: hv: vmbus: Fix handling of messages with transaction ID of zero
powerpc/fadump: fix PT_LOAD segment for boot memory area
mfd: ipaq-micro: Fix error check return value of platform_get_irq()
scsi: fcoe: Fix Wstringop-overflow warnings in fcoe_wwn_from_mac()
soc: bcm: Check for NULL return of devm_kzalloc()
arm64: dts: ti: k3-am64-mcu: remove incorrect UART base clock rates
ASoC: sh: rz-ssi: Check return value of pm_runtime_resume_and_get()
ASoC: sh: rz-ssi: Propagate error codes returned from platform_get_irq_byname()
ASoC: sh: rz-ssi: Release the DMA channels in rz_ssi_probe() error path
firmware: arm_scmi: Fix list protocols enumeration in the base protocol
nvdimm: Fix firmware activation deadlock scenarios
nvdimm: Allow overwrite in the presence of disabled dimms
pinctrl: mvebu: Fix irq_of_parse_and_map() return value
drivers/base/node.c: fix compaction sysfs file leak
dax: fix cache flush on PMD-mapped pages
drivers/base/memory: fix an unlikely reference counting issue in __add_memory_block()
firmware: arm_ffa: Fix uuid parameter to ffa_partition_probe
firmware: arm_ffa: Remove incorrect assignment of driver_data
list: introduce list_is_head() helper and re-use it in list.h
list: fix a data-race around ep->rdllist
drm/msm/dpu: fix error check return value of irq_of_parse_and_map()
powerpc/8xx: export 'cpm_setbrg' for modules
pinctrl: renesas: r8a779a0: Fix GPIO function on I2C-capable pins
pinctrl: renesas: core: Fix possible null-ptr-deref in sh_pfc_map_resources()
powerpc/idle: Fix return value of __setup() handler
powerpc/4xx/cpm: Fix return value of __setup() handler
RDMA/hns: Add the detection for CMDQ status in the device initialization process
arm64: dts: marvell: espressobin-ultra: fix SPI-NOR config
arm64: dts: marvell: espressobin-ultra: enable front USB3 port
ASoC: atmel-pdmic: Remove endianness flag on pdmic component
ASoC: atmel-classd: Remove endianness flag on class d component
proc: fix dentry/inode overinstantiating under /proc/${pid}/net
ipc/mqueue: use get_tree_nodev() in mqueue_get_tree()
PCI: imx6: Fix PERST# start-up sequence
tty: fix deadlock caused by calling printk() under tty_port->lock
crypto: sun8i-ss - rework handling of IV
crypto: sun8i-ss - handle zero sized sg
crypto: cryptd - Protect per-CPU resource by disabling BH.
ARM: dts: at91: sama7g5: remove interrupt-parent from gic node
hugetlbfs: fix hugetlbfs_statfs() locking
Input: sparcspkr - fix refcount leak in bbc_beep_probe
PCI/AER: Clear MULTI_ERR_COR/UNCOR_RCV bits
PCI: microchip: Fix potential race in interrupt handling
hwrng: omap3-rom - fix using wrong clk_disable() in omap_rom_rng_runtime_resume()
powerpc/64: Only WARN if __pa()/__va() called with bad addresses
powerpc/perf: Fix the threshold compare group constraint for power10
powerpc/perf: Fix the threshold compare group constraint for power9
macintosh: via-pmu and via-cuda need RTC_LIB
powerpc/xive: Add some error handling code to 'xive_spapr_init()'
powerpc/xive: Fix refcount leak in xive_spapr_init
powerpc/fsl_rio: Fix refcount leak in fsl_rio_setup
mfd: davinci_voicecodec: Fix possible null-ptr-deref davinci_vc_probe()
nfsd: destroy percpu stats counters after reply cache shutdown
mailbox: forward the hrtimer if not queued and under a lock
RDMA/hfi1: Prevent use of lock before it is initialized
KVM: LAPIC: Drop pending LAPIC timer injection when canceling the timer
Input: stmfts - do not leave device disabled in stmfts_input_open
OPP: call of_node_put() on error path in _bandwidth_supported()
f2fs: support fault injection for dquot_initialize()
f2fs: fix to do sanity check on inline_dots inode
f2fs: fix dereference of stale list iterator after loop body
iommu/amd: Enable swiotlb in all cases
iommu/mediatek: Fix 2 HW sharing pgtable issue
iommu/mediatek: Add list_del in mtk_iommu_remove
iommu/mediatek: Remove clk_disable in mtk_iommu_remove
iommu/mediatek: Add mutex for m4u_group and m4u_dom in data
i2c: at91: use dma safe buffers
cpufreq: mediatek: Use module_init and add module_exit
cpufreq: mediatek: Unregister platform device on exit
iommu/arm-smmu-v3-sva: Fix mm use-after-free
MIPS: Loongson: Use hwmon_device_register_with_groups() to register hwmon
iommu/mediatek: Fix NULL pointer dereference when printing dev_name
i2c: at91: Initialize dma_buf in at91_twi_xfer()
dmaengine: idxd: Fix the error handling path in idxd_cdev_register()
NFS: Do not report EINTR/ERESTARTSYS as mapping errors
NFS: fsync() should report filesystem errors over EINTR/ERESTARTSYS
NFS: Don't report ENOSPC write errors twice
NFS: Do not report flush errors in nfs_write_end()
NFS: Don't report errors from nfs_pageio_complete() more than once
NFSv4/pNFS: Do not fail I/O when we fail to allocate the pNFS layout
NFS: Further fixes to the writeback error handling
video: fbdev: clcdfb: Fix refcount leak in clcdfb_of_vram_setup
dmaengine: stm32-mdma: remove GISR1 register
dmaengine: stm32-mdma: fix chan initialization in stm32_mdma_irq_handler()
iommu/amd: Increase timeout waiting for GA log enablement
i2c: npcm: Fix timeout calculation
i2c: npcm: Correct register access width
i2c: npcm: Handle spurious interrupts
i2c: rcar: fix PM ref counts in probe error paths
perf build: Fix btf__load_from_kernel_by_id() feature check
perf c2c: Use stdio interface if slang is not supported
perf jevents: Fix event syntax error caused by ExtSel
video: fbdev: vesafb: Fix a use-after-free due early fb_info cleanup
NFS: Always initialise fattr->label in nfs_fattr_alloc()
NFS: Create a new nfs_alloc_fattr_with_label() function
NFS: Convert GFP_NOFS to GFP_KERNEL
NFSv4.1 mark qualified async operations as MOVEABLE tasks
f2fs: fix to avoid f2fs_bug_on() in dec_valid_node_count()
f2fs: fix to do sanity check on block address in f2fs_do_zero_range()
f2fs: fix to clear dirty inode in f2fs_evict_inode()
f2fs: fix deadloop in foreground GC
f2fs: don't need inode lock for system hidden quota
f2fs: fix to do sanity check on total_data_blocks
f2fs: don't use casefolded comparison for "." and ".."
f2fs: fix fallocate to use file_modified to update permissions consistently
f2fs: fix to do sanity check for inline inode
objtool: Fix objtool regression on x32 systems
objtool: Fix symbol creation
wifi: mac80211: fix use-after-free in chanctx code
iwlwifi: mvm: fix assert 1F04 upon reconfig
fs-writeback: writeback_sb_inodes:Recalculate 'wrote' according skipped pages
efi: Do not import certificates from UEFI Secure Boot for T2 Macs
bfq: Avoid false marking of bic as stably merged
bfq: Avoid merging queues with different parents
bfq: Split shared queues on move between cgroups
bfq: Update cgroup information before merging bio
bfq: Drop pointless unlock-lock pair
bfq: Remove pointless bfq_init_rq() calls
bfq: Track whether bfq_group is still online
bfq: Get rid of __bio_blkcg() usage
bfq: Make sure bfqg for which we are queueing requests is online
ext4: mark group as trimmed only if it was fully scanned
ext4: fix use-after-free in ext4_rename_dir_prepare
ext4: fix race condition between ext4_write and ext4_convert_inline_data
ext4: fix warning in ext4_handle_inode_extension
ext4: fix bug_on in ext4_writepages
ext4: filter out EXT4_FC_REPLAY from on-disk superblock field s_state
ext4: fix bug_on in __es_tree_search
ext4: verify dir block before splitting it
ext4: avoid cycles in directory h-tree
ACPI: property: Release subnode properties with data nodes
tty: goldfish: Introduce gf_ioread32()/gf_iowrite32()
tracing: Fix potential double free in create_var_ref()
tracing: Initialize integer variable to prevent garbage return value
drm/amdgpu: add beige goby PCI ID
PCI/PM: Fix bridge_d3_blacklist[] Elo i2 overwrite of Gigabyte X299
PCI: qcom: Fix runtime PM imbalance on probe errors
PCI: qcom: Fix unbalanced PHY init on probe errors
staging: r8188eu: prevent ->Ssid overflow in rtw_wx_set_scan()
mm, compaction: fast_find_migrateblock() should return pfn in the target zone
s390/perf: obtain sie_block from the right address
s390/stp: clock_delta should be signed
dlm: fix plock invalid read
dlm: uninitialized variable on error in dlm_listen_for_all()
dlm: fix missing lkb refcount handling
ocfs2: dlmfs: fix error handling of user_dlm_destroy_lock
scsi: dc395x: Fix a missing check on list iterator
scsi: ufs: qcom: Add a readl() to make sure ref_clk gets enabled
landlock: Add clang-format exceptions
landlock: Format with clang-format
selftests/landlock: Add clang-format exceptions
selftests/landlock: Normalize array assignment
selftests/landlock: Format with clang-format
samples/landlock: Add clang-format exceptions
samples/landlock: Format with clang-format
landlock: Fix landlock_add_rule(2) documentation
selftests/landlock: Make tests build with old libc
selftests/landlock: Extend tests for minimal valid attribute size
selftests/landlock: Add tests for unknown access rights
selftests/landlock: Extend access right tests to directories
selftests/landlock: Fully test file rename with "remove" access
selftests/landlock: Add tests for O_PATH
landlock: Change landlock_add_rule(2) argument check ordering
landlock: Change landlock_restrict_self(2) check ordering
selftests/landlock: Test landlock_create_ruleset(2) argument check ordering
landlock: Define access_mask_t to enforce a consistent access mask size
landlock: Reduce the maximum number of layers to 16
landlock: Create find_rule() from unmask_layers()
landlock: Fix same-layer rule unions
drm/amdgpu/cs: make commands with 0 chunks illegal behaviour.
drm/nouveau/subdev/bus: Ratelimit logging for fault errors
drm/etnaviv: check for reaped mapping in etnaviv_iommu_unmap_gem
drm/nouveau/clk: Fix an incorrect NULL check on list iterator
drm/nouveau/kms/nv50-: atom: fix an incorrect NULL check on list iterator
drm/bridge: analogix_dp: Grab runtime PM reference for DP-AUX
drm/i915/dsi: fix VBT send packet port selection for ICL+
md: fix an incorrect NULL check in does_sb_need_changing
md: fix an incorrect NULL check in md_reload_sb
mtd: cfi_cmdset_0002: Move and rename chip_check/chip_ready/chip_good_for_write
mtd: cfi_cmdset_0002: Use chip_ready() for write on S29GL064N
media: coda: Fix reported H264 profile
media: coda: Add more H264 levels for CODA960
ima: remove the IMA_TEMPLATE Kconfig option
Kconfig: Add option for asm goto w/ tied outputs to workaround clang-13 bug
RDMA/hfi1: Fix potential integer multiplication overflow errors
mmc: core: Allows to override the timeout value for ioctl() path
csky: patch_text: Fixup last cpu should be master
irqchip/armada-370-xp: Do not touch Performance Counter Overflow on A375, A38x, A39x
irqchip: irq-xtensa-mx: fix initial IRQ affinity
thermal: devfreq_cooling: use local ops instead of global ops
cfg80211: declare MODULE_FIRMWARE for regulatory.db
mac80211: upgrade passive scan to active scan on DFS channels after beacon rx
um: Use asm-generic/dma-mapping.h
um: chan_user: Fix winch_tramp() return value
um: Fix out-of-bounds read in LDT setup
kexec_file: drop weak attribute from arch_kexec_apply_relocations[_add]
ftrace: Clean up hash direct_functions on register failures
ksmbd: fix outstanding credits related bugs
iommu/msm: Fix an incorrect NULL check on list iterator
iommu/dma: Fix iova map result check bug
Revert "mm/cma.c: remove redundant cma_mutex lock"
mm/page_alloc: always attempt to allocate at least one page during bulk allocation
nodemask.h: fix compilation error with GCC12
hugetlb: fix huge_pmd_unshare address update
mm/memremap: fix missing call to untrack_pfn() in pagemap_range()
xtensa/simdisk: fix proc_read_simdisk()
rtl818x: Prevent using not initialized queues
ASoC: rt5514: Fix event generation for "DSP Voice Wake Up" control
carl9170: tx: fix an incorrect use of list iterator
stm: ltdc: fix two incorrect NULL checks on list iterator
bcache: improve multithreaded bch_btree_check()
bcache: improve multithreaded bch_sectors_dirty_init()
bcache: remove incremental dirty sector counting for bch_sectors_dirty_init()
bcache: avoid journal no-space deadlock by reserving 1 journal bucket
serial: pch: don't overwrite xmit->buf[0] by x_char
tilcdc: tilcdc_external: fix an incorrect NULL check on list iterator
gma500: fix an incorrect NULL check on list iterator
arm64: dts: qcom: ipq8074: fix the sleep clock frequency
arm64: tegra: Add missing DFLL reset on Tegra210
clk: tegra: Add missing reset deassertion
phy: qcom-qmp: fix struct clk leak on probe errors
ARM: dts: s5pv210: Remove spi-cs-high on panel in Aries
ARM: pxa: maybe fix gpio lookup tables
SMB3: EBADF/EIO errors in rename/open caused by race condition in smb2_compound_op
docs/conf.py: Cope with removal of language=None in Sphinx 5.0.0
dt-bindings: gpio: altera: correct interrupt-cells
vdpasim: allow to enable a vq repeatedly
blk-iolatency: Fix inflight count imbalances and IO hangs on offline
coresight: core: Fix coresight device probe failure issue
phy: qcom-qmp: fix reset-controller leak on probe errors
net: ipa: fix page free in ipa_endpoint_trans_release()
net: ipa: fix page free in ipa_endpoint_replenish_one()
kseltest/cgroup: Make test_stress.sh work if run interactively
list: test: Add a test for list_is_head()
Revert "random: use static branch for crng_ready()"
staging: r8188eu: delete rtw_wx_read/write32()
RDMA/hns: Remove the num_cqc_timer variable
RDMA/rxe: Generate a completion for unsupported/invalid opcode
MIPS: IP27: Remove incorrect `cpu_has_fpu' override
MIPS: IP30: Remove incorrect `cpu_has_fpu' override
ext4: only allow test_dummy_encryption when supported
interconnect: qcom: sc7180: Drop IP0 interconnects
interconnect: qcom: icc-rpmh: Add BCMs to commit list in pre_aggregate
fs: add two trivial lookup helpers
exportfs: support idmapped mounts
fs/ntfs3: Fix invalid free in log_replay
md: Don't set mddev private to NULL in raid0 pers->free
md: fix double free of io_acct_set bioset
md: bcache: check the return value of kzalloc() in detached_dev_do_request()
pinctrl/rockchip: support setting input-enable param
block: fix bio_clone_blkg_association() to associate with proper blkcg_gq
Linux 5.15.46
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I7b65df29c22a01b81a94cd844867a18e73098a15
This commit is contained in:
@@ -37,11 +37,7 @@ Pressure interface
|
|||||||
Pressure information for each resource is exported through the
|
Pressure information for each resource is exported through the
|
||||||
respective file in /proc/pressure/ -- cpu, memory, and io.
|
respective file in /proc/pressure/ -- cpu, memory, and io.
|
||||||
|
|
||||||
The format for CPU is as such::
|
The format is as such::
|
||||||
|
|
||||||
some avg10=0.00 avg60=0.00 avg300=0.00 total=0
|
|
||||||
|
|
||||||
and for memory and IO::
|
|
||||||
|
|
||||||
some avg10=0.00 avg60=0.00 avg300=0.00 total=0
|
some avg10=0.00 avg60=0.00 avg300=0.00 total=0
|
||||||
full avg10=0.00 avg60=0.00 avg300=0.00 total=0
|
full avg10=0.00 avg60=0.00 avg300=0.00 total=0
|
||||||
@@ -58,6 +54,9 @@ situation from a state where some tasks are stalled but the CPU is
|
|||||||
still doing productive work. As such, time spent in this subset of the
|
still doing productive work. As such, time spent in this subset of the
|
||||||
stall state is tracked separately and exported in the "full" averages.
|
stall state is tracked separately and exported in the "full" averages.
|
||||||
|
|
||||||
|
CPU full is undefined at the system level, but has been reported
|
||||||
|
since 5.13, so it is set to zero for backward compatibility.
|
||||||
|
|
||||||
The ratios (in %) are tracked as recent trends over ten, sixty, and
|
The ratios (in %) are tracked as recent trends over ten, sixty, and
|
||||||
three hundred second windows, which gives insight into short term events
|
three hundred second windows, which gives insight into short term events
|
||||||
as well as medium and long term trends. The total absolute stall time
|
as well as medium and long term trends. The total absolute stall time
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ finally:
|
|||||||
#
|
#
|
||||||
# This is also used if you do content translation via gettext catalogs.
|
# This is also used if you do content translation via gettext catalogs.
|
||||||
# Usually you set "language" from the command line for these cases.
|
# Usually you set "language" from the command line for these cases.
|
||||||
language = None
|
language = 'en'
|
||||||
|
|
||||||
# There are two options for replacing |today|: either, you set today to some
|
# There are two options for replacing |today|: either, you set today to some
|
||||||
# non-false value, then it is used:
|
# non-false value, then it is used:
|
||||||
|
|||||||
@@ -72,6 +72,7 @@ examples:
|
|||||||
dc-gpios = <&gpio 43 GPIO_ACTIVE_HIGH>;
|
dc-gpios = <&gpio 43 GPIO_ACTIVE_HIGH>;
|
||||||
reset-gpios = <&gpio 80 GPIO_ACTIVE_HIGH>;
|
reset-gpios = <&gpio 80 GPIO_ACTIVE_HIGH>;
|
||||||
rotation = <270>;
|
rotation = <270>;
|
||||||
|
backlight = <&backlight>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,9 @@ Required properties:
|
|||||||
- The second cell is reserved and is currently unused.
|
- The second cell is reserved and is currently unused.
|
||||||
- gpio-controller : Marks the device node as a GPIO controller.
|
- gpio-controller : Marks the device node as a GPIO controller.
|
||||||
- interrupt-controller: Mark the device node as an interrupt controller
|
- interrupt-controller: Mark the device node as an interrupt controller
|
||||||
- #interrupt-cells : Should be 1. The interrupt type is fixed in the hardware.
|
- #interrupt-cells : Should be 2. The interrupt type is fixed in the hardware.
|
||||||
- The first cell is the GPIO offset number within the GPIO controller.
|
- The first cell is the GPIO offset number within the GPIO controller.
|
||||||
|
- The second cell is the interrupt trigger type and level flags.
|
||||||
- interrupts: Specify the interrupt.
|
- interrupts: Specify the interrupt.
|
||||||
- altr,interrupt-type: Specifies the interrupt trigger type the GPIO
|
- altr,interrupt-type: Specifies the interrupt trigger type the GPIO
|
||||||
hardware is synthesized. This field is required if the Altera GPIO controller
|
hardware is synthesized. This field is required if the Altera GPIO controller
|
||||||
@@ -38,6 +39,6 @@ gpio_altr: gpio@ff200000 {
|
|||||||
altr,interrupt-type = <IRQ_TYPE_EDGE_RISING>;
|
altr,interrupt-type = <IRQ_TYPE_EDGE_RISING>;
|
||||||
#gpio-cells = <2>;
|
#gpio-cells = <2>;
|
||||||
gpio-controller;
|
gpio-controller;
|
||||||
#interrupt-cells = <1>;
|
#interrupt-cells = <2>;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ properties:
|
|||||||
$ref: "regulator.yaml#"
|
$ref: "regulator.yaml#"
|
||||||
|
|
||||||
properties:
|
properties:
|
||||||
regulator-name:
|
regulator-compatible:
|
||||||
pattern: "^vbuck[1-4]$"
|
pattern: "^vbuck[1-4]$"
|
||||||
|
|
||||||
additionalProperties: false
|
additionalProperties: false
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ properties:
|
|||||||
maxItems: 2
|
maxItems: 2
|
||||||
|
|
||||||
interconnect-names:
|
interconnect-names:
|
||||||
|
minItems: 1
|
||||||
items:
|
items:
|
||||||
- const: qspi-config
|
- const: qspi-config
|
||||||
- const: qspi-memory
|
- const: qspi-memory
|
||||||
|
|||||||
@@ -2246,7 +2246,7 @@ implicit_fb
|
|||||||
Apply the generic implicit feedback sync mode. When this is set
|
Apply the generic implicit feedback sync mode. When this is set
|
||||||
and the playback stream sync mode is ASYNC, the driver tries to
|
and the playback stream sync mode is ASYNC, the driver tries to
|
||||||
tie an adjacent ASYNC capture stream as the implicit feedback
|
tie an adjacent ASYNC capture stream as the implicit feedback
|
||||||
source.
|
source. This is equivalent with quirk_flags bit 17.
|
||||||
use_vmalloc
|
use_vmalloc
|
||||||
Use vmalloc() for allocations of the PCM buffers (default: yes).
|
Use vmalloc() for allocations of the PCM buffers (default: yes).
|
||||||
For architectures with non-coherent memory like ARM or MIPS, the
|
For architectures with non-coherent memory like ARM or MIPS, the
|
||||||
@@ -2288,6 +2288,8 @@ quirk_flags
|
|||||||
* bit 14: Ignore errors for mixer access
|
* bit 14: Ignore errors for mixer access
|
||||||
* bit 15: Support generic DSD raw U32_BE format
|
* bit 15: Support generic DSD raw U32_BE format
|
||||||
* bit 16: Set up the interface at first like UAC1
|
* bit 16: Set up the interface at first like UAC1
|
||||||
|
* bit 17: Apply the generic implicit feedback sync mode
|
||||||
|
* bit 18: Don't apply implicit feedback sync mode
|
||||||
|
|
||||||
This module supports multiple devices, autoprobe and hotplugging.
|
This module supports multiple devices, autoprobe and hotplugging.
|
||||||
|
|
||||||
|
|||||||
@@ -267,8 +267,8 @@ restrict such paths with dedicated ruleset flags.
|
|||||||
Ruleset layers
|
Ruleset layers
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
There is a limit of 64 layers of stacked rulesets. This can be an issue for a
|
There is a limit of 16 layers of stacked rulesets. This can be an issue for a
|
||||||
task willing to enforce a new ruleset in complement to its 64 inherited
|
task willing to enforce a new ruleset in complement to its 16 inherited
|
||||||
rulesets. Once this limit is reached, sys_landlock_restrict_self() returns
|
rulesets. Once this limit is reached, sys_landlock_restrict_self() returns
|
||||||
E2BIG. It is then strongly suggested to carefully build rulesets once in the
|
E2BIG. It is then strongly suggested to carefully build rulesets once in the
|
||||||
life of a thread, especially for applications able to launch other applications
|
life of a thread, especially for applications able to launch other applications
|
||||||
|
|||||||
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
VERSION = 5
|
VERSION = 5
|
||||||
PATCHLEVEL = 15
|
PATCHLEVEL = 15
|
||||||
SUBLEVEL = 45
|
SUBLEVEL = 46
|
||||||
EXTRAVERSION =
|
EXTRAVERSION =
|
||||||
NAME = Trick or Treat
|
NAME = Trick or Treat
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ extern void clear_page(void *page);
|
|||||||
#define clear_user_page(page, vaddr, pg) clear_page(page)
|
#define clear_user_page(page, vaddr, pg) clear_page(page)
|
||||||
|
|
||||||
#define alloc_zeroed_user_highpage_movable(vma, vaddr) \
|
#define alloc_zeroed_user_highpage_movable(vma, vaddr) \
|
||||||
alloc_page_vma(GFP_HIGHUSER_MOVABLE | __GFP_ZERO, vma, vmaddr)
|
alloc_page_vma(GFP_HIGHUSER_MOVABLE | __GFP_ZERO, vma, vaddr)
|
||||||
#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE_MOVABLE
|
#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE_MOVABLE
|
||||||
|
|
||||||
extern void copy_page(void * _to, void * _from);
|
extern void copy_page(void * _to, void * _from);
|
||||||
|
|||||||
@@ -53,18 +53,17 @@
|
|||||||
"GPIO18",
|
"GPIO18",
|
||||||
"NC", /* GPIO19 */
|
"NC", /* GPIO19 */
|
||||||
"NC", /* GPIO20 */
|
"NC", /* GPIO20 */
|
||||||
"GPIO21",
|
"CAM_GPIO0",
|
||||||
"GPIO22",
|
"GPIO22",
|
||||||
"GPIO23",
|
"GPIO23",
|
||||||
"GPIO24",
|
"GPIO24",
|
||||||
"GPIO25",
|
"GPIO25",
|
||||||
"NC", /* GPIO26 */
|
"NC", /* GPIO26 */
|
||||||
"CAM_GPIO0",
|
"GPIO27",
|
||||||
/* Binary number representing build/revision */
|
"GPIO28",
|
||||||
"CONFIG0",
|
"GPIO29",
|
||||||
"CONFIG1",
|
"GPIO30",
|
||||||
"CONFIG2",
|
"GPIO31",
|
||||||
"CONFIG3",
|
|
||||||
"NC", /* GPIO32 */
|
"NC", /* GPIO32 */
|
||||||
"NC", /* GPIO33 */
|
"NC", /* GPIO33 */
|
||||||
"NC", /* GPIO34 */
|
"NC", /* GPIO34 */
|
||||||
|
|||||||
@@ -74,16 +74,18 @@
|
|||||||
"GPIO27",
|
"GPIO27",
|
||||||
"SDA0",
|
"SDA0",
|
||||||
"SCL0",
|
"SCL0",
|
||||||
"NC", /* GPIO30 */
|
/* Used by BT module */
|
||||||
"NC", /* GPIO31 */
|
"CTS0",
|
||||||
"NC", /* GPIO32 */
|
"RTS0",
|
||||||
"NC", /* GPIO33 */
|
"TXD0",
|
||||||
"NC", /* GPIO34 */
|
"RXD0",
|
||||||
"NC", /* GPIO35 */
|
/* Used by Wifi */
|
||||||
"NC", /* GPIO36 */
|
"SD1_CLK",
|
||||||
"NC", /* GPIO37 */
|
"SD1_CMD",
|
||||||
"NC", /* GPIO38 */
|
"SD1_DATA0",
|
||||||
"NC", /* GPIO39 */
|
"SD1_DATA1",
|
||||||
|
"SD1_DATA2",
|
||||||
|
"SD1_DATA3",
|
||||||
"CAM_GPIO1", /* GPIO40 */
|
"CAM_GPIO1", /* GPIO40 */
|
||||||
"WL_ON", /* GPIO41 */
|
"WL_ON", /* GPIO41 */
|
||||||
"NC", /* GPIO42 */
|
"NC", /* GPIO42 */
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
#gpio-cells = <2>;
|
#gpio-cells = <2>;
|
||||||
gpio-line-names = "BT_ON",
|
gpio-line-names = "BT_ON",
|
||||||
"WL_ON",
|
"WL_ON",
|
||||||
"STATUS_LED_R",
|
"PWR_LED_R",
|
||||||
"LAN_RUN",
|
"LAN_RUN",
|
||||||
"",
|
"",
|
||||||
"CAM_GPIO0",
|
"CAM_GPIO0",
|
||||||
|
|||||||
@@ -63,8 +63,8 @@
|
|||||||
"GPIO43",
|
"GPIO43",
|
||||||
"GPIO44",
|
"GPIO44",
|
||||||
"GPIO45",
|
"GPIO45",
|
||||||
"GPIO46",
|
"SMPS_SCL",
|
||||||
"GPIO47",
|
"SMPS_SDA",
|
||||||
/* Used by eMMC */
|
/* Used by eMMC */
|
||||||
"SD_CLK_R",
|
"SD_CLK_R",
|
||||||
"SD_CMD_R",
|
"SD_CMD_R",
|
||||||
|
|||||||
@@ -423,14 +423,14 @@
|
|||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
|
||||||
cru@100 {
|
cru-bus@100 {
|
||||||
compatible = "simple-bus";
|
compatible = "brcm,ns-cru", "simple-mfd";
|
||||||
reg = <0x100 0x1a4>;
|
reg = <0x100 0x1a4>;
|
||||||
ranges;
|
ranges;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
|
||||||
lcpll0: lcpll0@100 {
|
lcpll0: clock-controller@100 {
|
||||||
#clock-cells = <1>;
|
#clock-cells = <1>;
|
||||||
compatible = "brcm,nsp-lcpll0";
|
compatible = "brcm,nsp-lcpll0";
|
||||||
reg = <0x100 0x14>;
|
reg = <0x100 0x14>;
|
||||||
@@ -439,7 +439,7 @@
|
|||||||
"sdio", "ddr_phy";
|
"sdio", "ddr_phy";
|
||||||
};
|
};
|
||||||
|
|
||||||
genpll: genpll@140 {
|
genpll: clock-controller@140 {
|
||||||
#clock-cells = <1>;
|
#clock-cells = <1>;
|
||||||
compatible = "brcm,nsp-genpll";
|
compatible = "brcm,nsp-genpll";
|
||||||
reg = <0x140 0x24>;
|
reg = <0x140 0x24>;
|
||||||
@@ -450,7 +450,12 @@
|
|||||||
"sata1", "sata2";
|
"sata1", "sata2";
|
||||||
};
|
};
|
||||||
|
|
||||||
pinctrl: pin-controller@1c0 {
|
syscon@180 {
|
||||||
|
compatible = "brcm,cru-clkset", "syscon";
|
||||||
|
reg = <0x180 0x4>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pinctrl: pinctrl@1c0 {
|
||||||
compatible = "brcm,bcm4708-pinmux";
|
compatible = "brcm,bcm4708-pinmux";
|
||||||
reg = <0x1c0 0x24>;
|
reg = <0x1c0 0x24>;
|
||||||
reg-names = "cru_gpio_control";
|
reg-names = "cru_gpio_control";
|
||||||
|
|||||||
@@ -129,7 +129,7 @@
|
|||||||
samsung,i2c-max-bus-freq = <20000>;
|
samsung,i2c-max-bus-freq = <20000>;
|
||||||
|
|
||||||
eeprom@50 {
|
eeprom@50 {
|
||||||
compatible = "samsung,s524ad0xd1";
|
compatible = "samsung,s524ad0xd1", "atmel,24c128";
|
||||||
reg = <0x50>;
|
reg = <0x50>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -289,7 +289,7 @@
|
|||||||
samsung,i2c-max-bus-freq = <20000>;
|
samsung,i2c-max-bus-freq = <20000>;
|
||||||
|
|
||||||
eeprom@51 {
|
eeprom@51 {
|
||||||
compatible = "samsung,s524ad0xd1";
|
compatible = "samsung,s524ad0xd1", "atmel,24c128";
|
||||||
reg = <0x51>;
|
reg = <0x51>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -297,7 +297,11 @@
|
|||||||
phy-mode = "rmii";
|
phy-mode = "rmii";
|
||||||
phy-reset-gpios = <&gpio1 18 GPIO_ACTIVE_LOW>;
|
phy-reset-gpios = <&gpio1 18 GPIO_ACTIVE_LOW>;
|
||||||
phy-handle = <&phy>;
|
phy-handle = <&phy>;
|
||||||
clocks = <&clks IMX6QDL_CLK_ENET>, <&clks IMX6QDL_CLK_ENET>, <&rmii_clk>;
|
clocks = <&clks IMX6QDL_CLK_ENET>,
|
||||||
|
<&clks IMX6QDL_CLK_ENET>,
|
||||||
|
<&rmii_clk>,
|
||||||
|
<&clks IMX6QDL_CLK_ENET_REF>;
|
||||||
|
clock-names = "ipg", "ahb", "ptp", "enet_out";
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
||||||
mdio {
|
mdio {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0+ OR MIT
|
// SPDX-License-Identifier: GPL-2.0+ OR MIT
|
||||||
/*
|
/*
|
||||||
* Copyright 2014-2020 Toradex
|
* Copyright 2014-2022 Toradex
|
||||||
* Copyright 2012 Freescale Semiconductor, Inc.
|
* Copyright 2012 Freescale Semiconductor, Inc.
|
||||||
* Copyright 2011 Linaro Ltd.
|
* Copyright 2011 Linaro Ltd.
|
||||||
*/
|
*/
|
||||||
@@ -132,7 +132,7 @@
|
|||||||
clock-frequency = <100000>;
|
clock-frequency = <100000>;
|
||||||
pinctrl-names = "default", "gpio";
|
pinctrl-names = "default", "gpio";
|
||||||
pinctrl-0 = <&pinctrl_i2c2>;
|
pinctrl-0 = <&pinctrl_i2c2>;
|
||||||
pinctrl-0 = <&pinctrl_i2c2_gpio>;
|
pinctrl-1 = <&pinctrl_i2c2_gpio>;
|
||||||
scl-gpios = <&gpio2 30 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
scl-gpios = <&gpio2 30 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
||||||
sda-gpios = <&gpio3 16 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
sda-gpios = <&gpio3 16 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
@@ -488,7 +488,7 @@
|
|||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
pinctrl_i2c2_gpio: i2c2grp {
|
pinctrl_i2c2_gpio: i2c2gpiogrp {
|
||||||
fsl,pins = <
|
fsl,pins = <
|
||||||
MX6QDL_PAD_EIM_EB2__GPIO2_IO30 0x4001b8b1
|
MX6QDL_PAD_EIM_EB2__GPIO2_IO30 0x4001b8b1
|
||||||
MX6QDL_PAD_EIM_D16__GPIO3_IO16 0x4001b8b1
|
MX6QDL_PAD_EIM_D16__GPIO3_IO16 0x4001b8b1
|
||||||
|
|||||||
@@ -287,7 +287,7 @@
|
|||||||
clocks = <&armclk>;
|
clocks = <&armclk>;
|
||||||
};
|
};
|
||||||
|
|
||||||
gic: gic@1000 {
|
gic: interrupt-controller@1000 {
|
||||||
compatible = "arm,arm11mp-gic";
|
compatible = "arm,arm11mp-gic";
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
#interrupt-cells = <3>;
|
#interrupt-cells = <3>;
|
||||||
|
|||||||
@@ -564,7 +564,6 @@
|
|||||||
reset-gpios = <&mp05 5 GPIO_ACTIVE_LOW>;
|
reset-gpios = <&mp05 5 GPIO_ACTIVE_LOW>;
|
||||||
vdd3-supply = <&ldo7_reg>;
|
vdd3-supply = <&ldo7_reg>;
|
||||||
vci-supply = <&ldo17_reg>;
|
vci-supply = <&ldo17_reg>;
|
||||||
spi-cs-high;
|
|
||||||
spi-max-frequency = <1200000>;
|
spi-max-frequency = <1200000>;
|
||||||
|
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
@@ -636,7 +635,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
&i2s0 {
|
&i2s0 {
|
||||||
dmas = <&pdma0 9>, <&pdma0 10>, <&pdma0 11>;
|
dmas = <&pdma0 10>, <&pdma0 9>, <&pdma0 11>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -239,8 +239,8 @@
|
|||||||
reg = <0xeee30000 0x1000>;
|
reg = <0xeee30000 0x1000>;
|
||||||
interrupt-parent = <&vic2>;
|
interrupt-parent = <&vic2>;
|
||||||
interrupts = <16>;
|
interrupts = <16>;
|
||||||
dma-names = "rx", "tx", "tx-sec";
|
dma-names = "tx", "rx", "tx-sec";
|
||||||
dmas = <&pdma1 9>, <&pdma1 10>, <&pdma1 11>;
|
dmas = <&pdma1 10>, <&pdma1 9>, <&pdma1 11>;
|
||||||
clock-names = "iis",
|
clock-names = "iis",
|
||||||
"i2s_opclk0",
|
"i2s_opclk0",
|
||||||
"i2s_opclk1";
|
"i2s_opclk1";
|
||||||
@@ -259,8 +259,8 @@
|
|||||||
reg = <0xe2100000 0x1000>;
|
reg = <0xe2100000 0x1000>;
|
||||||
interrupt-parent = <&vic2>;
|
interrupt-parent = <&vic2>;
|
||||||
interrupts = <17>;
|
interrupts = <17>;
|
||||||
dma-names = "rx", "tx";
|
dma-names = "tx", "rx";
|
||||||
dmas = <&pdma1 12>, <&pdma1 13>;
|
dmas = <&pdma1 13>, <&pdma1 12>;
|
||||||
clock-names = "iis", "i2s_opclk0";
|
clock-names = "iis", "i2s_opclk0";
|
||||||
clocks = <&clocks CLK_I2S1>, <&clocks SCLK_AUDIO1>;
|
clocks = <&clocks CLK_I2S1>, <&clocks SCLK_AUDIO1>;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
@@ -274,8 +274,8 @@
|
|||||||
reg = <0xe2a00000 0x1000>;
|
reg = <0xe2a00000 0x1000>;
|
||||||
interrupt-parent = <&vic2>;
|
interrupt-parent = <&vic2>;
|
||||||
interrupts = <18>;
|
interrupts = <18>;
|
||||||
dma-names = "rx", "tx";
|
dma-names = "tx", "rx";
|
||||||
dmas = <&pdma1 14>, <&pdma1 15>;
|
dmas = <&pdma1 15>, <&pdma1 14>;
|
||||||
clock-names = "iis", "i2s_opclk0";
|
clock-names = "iis", "i2s_opclk0";
|
||||||
clocks = <&clocks CLK_I2S2>, <&clocks SCLK_AUDIO2>;
|
clocks = <&clocks CLK_I2S2>, <&clocks SCLK_AUDIO2>;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
|
|||||||
@@ -553,7 +553,6 @@
|
|||||||
#interrupt-cells = <3>;
|
#interrupt-cells = <3>;
|
||||||
#address-cells = <0>;
|
#address-cells = <0>;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
interrupt-parent;
|
|
||||||
reg = <0xe8c11000 0x1000>,
|
reg = <0xe8c11000 0x1000>,
|
||||||
<0xe8c12000 0x2000>;
|
<0xe8c12000 0x2000>;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
<0xff113000 0x1000>;
|
<0xff113000 0x1000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
intc: intc@fffed000 {
|
intc: interrupt-controller@fffed000 {
|
||||||
compatible = "arm,cortex-a9-gic";
|
compatible = "arm,cortex-a9-gic";
|
||||||
#interrupt-cells = <3>;
|
#interrupt-cells = <3>;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
<0xff113000 0x1000>;
|
<0xff113000 0x1000>;
|
||||||
};
|
};
|
||||||
|
|
||||||
intc: intc@ffffd000 {
|
intc: interrupt-controller@ffffd000 {
|
||||||
compatible = "arm,cortex-a9-gic";
|
compatible = "arm,cortex-a9-gic";
|
||||||
#interrupt-cells = <3>;
|
#interrupt-cells = <3>;
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
|
|||||||
@@ -141,6 +141,7 @@
|
|||||||
compatible = "snps,dwmac-mdio";
|
compatible = "snps,dwmac-mdio";
|
||||||
reset-gpios = <&gpioz 2 GPIO_ACTIVE_LOW>;
|
reset-gpios = <&gpioz 2 GPIO_ACTIVE_LOW>;
|
||||||
reset-delay-us = <1000>;
|
reset-delay-us = <1000>;
|
||||||
|
reset-post-delay-us = <1000>;
|
||||||
|
|
||||||
phy0: ethernet-phy@7 {
|
phy0: ethernet-phy@7 {
|
||||||
reg = <7>;
|
reg = <7>;
|
||||||
|
|||||||
@@ -104,8 +104,10 @@
|
|||||||
|
|
||||||
wdt: watchdog@1c20ca0 {
|
wdt: watchdog@1c20ca0 {
|
||||||
compatible = "allwinner,suniv-f1c100s-wdt",
|
compatible = "allwinner,suniv-f1c100s-wdt",
|
||||||
"allwinner,sun4i-a10-wdt";
|
"allwinner,sun6i-a31-wdt";
|
||||||
reg = <0x01c20ca0 0x20>;
|
reg = <0x01c20ca0 0x20>;
|
||||||
|
interrupts = <16>;
|
||||||
|
clocks = <&osc32k>;
|
||||||
};
|
};
|
||||||
|
|
||||||
uart0: serial@1c25000 {
|
uart0: serial@1c25000 {
|
||||||
|
|||||||
@@ -708,6 +708,7 @@ static_assert(offsetof(siginfo_t, si_upper) == 0x18);
|
|||||||
static_assert(offsetof(siginfo_t, si_pkey) == 0x14);
|
static_assert(offsetof(siginfo_t, si_pkey) == 0x14);
|
||||||
static_assert(offsetof(siginfo_t, si_perf_data) == 0x10);
|
static_assert(offsetof(siginfo_t, si_perf_data) == 0x10);
|
||||||
static_assert(offsetof(siginfo_t, si_perf_type) == 0x14);
|
static_assert(offsetof(siginfo_t, si_perf_type) == 0x14);
|
||||||
|
static_assert(offsetof(siginfo_t, si_perf_flags) == 0x18);
|
||||||
static_assert(offsetof(siginfo_t, si_band) == 0x0c);
|
static_assert(offsetof(siginfo_t, si_band) == 0x0c);
|
||||||
static_assert(offsetof(siginfo_t, si_fd) == 0x10);
|
static_assert(offsetof(siginfo_t, si_fd) == 0x10);
|
||||||
static_assert(offsetof(siginfo_t, si_call_addr) == 0x0c);
|
static_assert(offsetof(siginfo_t, si_call_addr) == 0x0c);
|
||||||
|
|||||||
@@ -67,14 +67,17 @@ static void __init hi3xxx_smp_prepare_cpus(unsigned int max_cpus)
|
|||||||
}
|
}
|
||||||
ctrl_base = of_iomap(np, 0);
|
ctrl_base = of_iomap(np, 0);
|
||||||
if (!ctrl_base) {
|
if (!ctrl_base) {
|
||||||
|
of_node_put(np);
|
||||||
pr_err("failed to map address\n");
|
pr_err("failed to map address\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (of_property_read_u32(np, "smp-offset", &offset) < 0) {
|
if (of_property_read_u32(np, "smp-offset", &offset) < 0) {
|
||||||
|
of_node_put(np);
|
||||||
pr_err("failed to find smp-offset property\n");
|
pr_err("failed to find smp-offset property\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ctrl_base += offset;
|
ctrl_base += offset;
|
||||||
|
of_node_put(np);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,6 +163,7 @@ static int hip01_boot_secondary(unsigned int cpu, struct task_struct *idle)
|
|||||||
if (WARN_ON(!node))
|
if (WARN_ON(!node))
|
||||||
return -1;
|
return -1;
|
||||||
ctrl_base = of_iomap(node, 0);
|
ctrl_base = of_iomap(node, 0);
|
||||||
|
of_node_put(node);
|
||||||
|
|
||||||
/* set the secondary core boot from DDR */
|
/* set the secondary core boot from DDR */
|
||||||
remap_reg_value = readl_relaxed(ctrl_base + REG_SC_CTRL);
|
remap_reg_value = readl_relaxed(ctrl_base + REG_SC_CTRL);
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ config MACH_MT7623
|
|||||||
config MACH_MT7629
|
config MACH_MT7629
|
||||||
bool "MediaTek MT7629 SoCs support"
|
bool "MediaTek MT7629 SoCs support"
|
||||||
default ARCH_MEDIATEK
|
default ARCH_MEDIATEK
|
||||||
|
select HAVE_ARM_ARCH_TIMER
|
||||||
|
|
||||||
config MACH_MT8127
|
config MACH_MT8127
|
||||||
bool "MediaTek MT8127 SoCs support"
|
bool "MediaTek MT8127 SoCs support"
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ static DEFINE_SPINLOCK(clockfw_lock);
|
|||||||
unsigned long omap1_uart_recalc(struct clk *clk)
|
unsigned long omap1_uart_recalc(struct clk *clk)
|
||||||
{
|
{
|
||||||
unsigned int val = __raw_readl(clk->enable_reg);
|
unsigned int val = __raw_readl(clk->enable_reg);
|
||||||
return val & clk->enable_bit ? 48000000 : 12000000;
|
return val & 1 << clk->enable_bit ? 48000000 : 12000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long omap1_sossi_recalc(struct clk *clk)
|
unsigned long omap1_sossi_recalc(struct clk *clk)
|
||||||
|
|||||||
@@ -354,13 +354,13 @@ static struct platform_device cm_x300_spi_gpio = {
|
|||||||
static struct gpiod_lookup_table cm_x300_spi_gpiod_table = {
|
static struct gpiod_lookup_table cm_x300_spi_gpiod_table = {
|
||||||
.dev_id = "spi_gpio",
|
.dev_id = "spi_gpio",
|
||||||
.table = {
|
.table = {
|
||||||
GPIO_LOOKUP("gpio-pxa", GPIO_LCD_SCL,
|
GPIO_LOOKUP("pca9555.1", GPIO_LCD_SCL - GPIO_LCD_BASE,
|
||||||
"sck", GPIO_ACTIVE_HIGH),
|
"sck", GPIO_ACTIVE_HIGH),
|
||||||
GPIO_LOOKUP("gpio-pxa", GPIO_LCD_DIN,
|
GPIO_LOOKUP("pca9555.1", GPIO_LCD_DIN - GPIO_LCD_BASE,
|
||||||
"mosi", GPIO_ACTIVE_HIGH),
|
"mosi", GPIO_ACTIVE_HIGH),
|
||||||
GPIO_LOOKUP("gpio-pxa", GPIO_LCD_DOUT,
|
GPIO_LOOKUP("pca9555.1", GPIO_LCD_DOUT - GPIO_LCD_BASE,
|
||||||
"miso", GPIO_ACTIVE_HIGH),
|
"miso", GPIO_ACTIVE_HIGH),
|
||||||
GPIO_LOOKUP("gpio-pxa", GPIO_LCD_CS,
|
GPIO_LOOKUP("pca9555.1", GPIO_LCD_CS - GPIO_LCD_BASE,
|
||||||
"cs", GPIO_ACTIVE_HIGH),
|
"cs", GPIO_ACTIVE_HIGH),
|
||||||
{ },
|
{ },
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -681,7 +681,7 @@ static struct platform_device bq24022 = {
|
|||||||
static struct gpiod_lookup_table bq24022_gpiod_table = {
|
static struct gpiod_lookup_table bq24022_gpiod_table = {
|
||||||
.dev_id = "gpio-regulator",
|
.dev_id = "gpio-regulator",
|
||||||
.table = {
|
.table = {
|
||||||
GPIO_LOOKUP("gpio-pxa", EGPIO_MAGICIAN_BQ24022_ISET2,
|
GPIO_LOOKUP("htc-egpio-0", EGPIO_MAGICIAN_BQ24022_ISET2 - MAGICIAN_EGPIO_BASE,
|
||||||
NULL, GPIO_ACTIVE_HIGH),
|
NULL, GPIO_ACTIVE_HIGH),
|
||||||
GPIO_LOOKUP("gpio-pxa", GPIO30_MAGICIAN_BQ24022_nCHARGE_EN,
|
GPIO_LOOKUP("gpio-pxa", GPIO30_MAGICIAN_BQ24022_nCHARGE_EN,
|
||||||
"enable", GPIO_ACTIVE_LOW),
|
"enable", GPIO_ACTIVE_LOW),
|
||||||
|
|||||||
@@ -296,9 +296,9 @@ static struct gpiod_lookup_table tosa_mci_gpio_table = {
|
|||||||
.table = {
|
.table = {
|
||||||
GPIO_LOOKUP("gpio-pxa", TOSA_GPIO_nSD_DETECT,
|
GPIO_LOOKUP("gpio-pxa", TOSA_GPIO_nSD_DETECT,
|
||||||
"cd", GPIO_ACTIVE_LOW),
|
"cd", GPIO_ACTIVE_LOW),
|
||||||
GPIO_LOOKUP("gpio-pxa", TOSA_GPIO_SD_WP,
|
GPIO_LOOKUP("sharp-scoop.0", TOSA_GPIO_SD_WP - TOSA_SCOOP_GPIO_BASE,
|
||||||
"wp", GPIO_ACTIVE_LOW),
|
"wp", GPIO_ACTIVE_LOW),
|
||||||
GPIO_LOOKUP("gpio-pxa", TOSA_GPIO_PWR_ON,
|
GPIO_LOOKUP("sharp-scoop.0", TOSA_GPIO_PWR_ON - TOSA_SCOOP_GPIO_BASE,
|
||||||
"power", GPIO_ACTIVE_HIGH),
|
"power", GPIO_ACTIVE_HIGH),
|
||||||
{ },
|
{ },
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -144,6 +144,7 @@ static int __init dcscb_init(void)
|
|||||||
if (!node)
|
if (!node)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
dcscb_base = of_iomap(node, 0);
|
dcscb_base = of_iomap(node, 0);
|
||||||
|
of_node_put(node);
|
||||||
if (!dcscb_base)
|
if (!dcscb_base)
|
||||||
return -EADDRNOTAVAIL;
|
return -EADDRNOTAVAIL;
|
||||||
cfg = readl_relaxed(dcscb_base + DCS_CFG_R);
|
cfg = readl_relaxed(dcscb_base + DCS_CFG_R);
|
||||||
|
|||||||
@@ -258,6 +258,7 @@ config ARCH_INTEL_SOCFPGA
|
|||||||
|
|
||||||
config ARCH_SYNQUACER
|
config ARCH_SYNQUACER
|
||||||
bool "Socionext SynQuacer SoC Family"
|
bool "Socionext SynQuacer SoC Family"
|
||||||
|
select IRQ_FASTEOI_HIERARCHY_HANDLERS
|
||||||
|
|
||||||
config ARCH_TEGRA
|
config ARCH_TEGRA
|
||||||
bool "NVIDIA Tegra SoC Family"
|
bool "NVIDIA Tegra SoC Family"
|
||||||
|
|||||||
@@ -71,10 +71,6 @@
|
|||||||
|
|
||||||
&spi0 {
|
&spi0 {
|
||||||
flash@0 {
|
flash@0 {
|
||||||
spi-max-frequency = <108000000>;
|
|
||||||
spi-rx-bus-width = <4>;
|
|
||||||
spi-tx-bus-width = <4>;
|
|
||||||
|
|
||||||
partitions {
|
partitions {
|
||||||
compatible = "fixed-partitions";
|
compatible = "fixed-partitions";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
@@ -112,7 +108,6 @@
|
|||||||
|
|
||||||
&usb3 {
|
&usb3 {
|
||||||
usb-phy = <&usb3_phy>;
|
usb-phy = <&usb3_phy>;
|
||||||
status = "disabled";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
&mdio {
|
&mdio {
|
||||||
|
|||||||
@@ -433,7 +433,7 @@
|
|||||||
clock-names = "spi", "sf", "axi";
|
clock-names = "spi", "sf", "axi";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
status = "disable";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c3: i2c3@11cb0000 {
|
i2c3: i2c3@11cb0000 {
|
||||||
|
|||||||
@@ -1355,8 +1355,9 @@
|
|||||||
<&tegra_car TEGRA210_CLK_DFLL_REF>,
|
<&tegra_car TEGRA210_CLK_DFLL_REF>,
|
||||||
<&tegra_car TEGRA210_CLK_I2C5>;
|
<&tegra_car TEGRA210_CLK_I2C5>;
|
||||||
clock-names = "soc", "ref", "i2c";
|
clock-names = "soc", "ref", "i2c";
|
||||||
resets = <&tegra_car TEGRA210_RST_DFLL_DVCO>;
|
resets = <&tegra_car TEGRA210_RST_DFLL_DVCO>,
|
||||||
reset-names = "dvco";
|
<&tegra_car 155>;
|
||||||
|
reset-names = "dvco", "dfll";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-output-names = "dfllCPU_out";
|
clock-output-names = "dfllCPU_out";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
clocks {
|
clocks {
|
||||||
sleep_clk: sleep_clk {
|
sleep_clk: sleep_clk {
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
clock-frequency = <32000>;
|
clock-frequency = <32768>;
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -183,8 +183,8 @@
|
|||||||
no-map;
|
no-map;
|
||||||
};
|
};
|
||||||
|
|
||||||
cont_splash_mem: memory@3800000 {
|
cont_splash_mem: memory@3401000 {
|
||||||
reg = <0 0x03800000 0 0x2400000>;
|
reg = <0 0x03401000 0 0x2200000>;
|
||||||
no-map;
|
no-map;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -498,7 +498,7 @@
|
|||||||
#dma-cells = <1>;
|
#dma-cells = <1>;
|
||||||
qcom,ee = <0>;
|
qcom,ee = <0>;
|
||||||
qcom,controlled-remotely;
|
qcom,controlled-remotely;
|
||||||
num-channels = <18>;
|
num-channels = <24>;
|
||||||
qcom,num-ees = <4>;
|
qcom,num-ees = <4>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -634,7 +634,7 @@
|
|||||||
#dma-cells = <1>;
|
#dma-cells = <1>;
|
||||||
qcom,ee = <0>;
|
qcom,ee = <0>;
|
||||||
qcom,controlled-remotely;
|
qcom,controlled-remotely;
|
||||||
num-channels = <18>;
|
num-channels = <24>;
|
||||||
qcom,num-ees = <4>;
|
qcom,num-ees = <4>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* Fixed crystal oscillator dedicated to MCP2518FD */
|
/* Fixed crystal oscillator dedicated to MCP2518FD */
|
||||||
clk40M: can_clock {
|
clk40M: can-clock {
|
||||||
compatible = "fixed-clock";
|
compatible = "fixed-clock";
|
||||||
#clock-cells = <0>;
|
#clock-cells = <0>;
|
||||||
clock-frequency = <40000000>;
|
clock-frequency = <40000000>;
|
||||||
|
|||||||
@@ -221,7 +221,7 @@
|
|||||||
panel@0 {
|
panel@0 {
|
||||||
compatible = "tianma,fhd-video";
|
compatible = "tianma,fhd-video";
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
vddi0-supply = <&vreg_l14a_1p8>;
|
vddio-supply = <&vreg_l14a_1p8>;
|
||||||
vddpos-supply = <&lab>;
|
vddpos-supply = <&lab>;
|
||||||
vddneg-supply = <&ibb>;
|
vddneg-supply = <&ibb>;
|
||||||
|
|
||||||
|
|||||||
@@ -1477,6 +1477,7 @@
|
|||||||
reg = <0xf780 0x24>;
|
reg = <0xf780 0x24>;
|
||||||
clocks = <&sdhci>;
|
clocks = <&sdhci>;
|
||||||
clock-names = "emmcclk";
|
clock-names = "emmcclk";
|
||||||
|
drive-impedance-ohm = <50>;
|
||||||
#phy-cells = <0>;
|
#phy-cells = <0>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
@@ -1487,7 +1488,6 @@
|
|||||||
clock-names = "refclk";
|
clock-names = "refclk";
|
||||||
#phy-cells = <1>;
|
#phy-cells = <1>;
|
||||||
resets = <&cru SRST_PCIEPHY>;
|
resets = <&cru SRST_PCIEPHY>;
|
||||||
drive-impedance-ohm = <50>;
|
|
||||||
reset-names = "phy";
|
reset-names = "phy";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,7 +10,6 @@
|
|||||||
compatible = "ti,am64-uart", "ti,am654-uart";
|
compatible = "ti,am64-uart", "ti,am654-uart";
|
||||||
reg = <0x00 0x04a00000 0x00 0x100>;
|
reg = <0x00 0x04a00000 0x00 0x100>;
|
||||||
interrupts = <GIC_SPI 185 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 185 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clock-frequency = <48000000>;
|
|
||||||
current-speed = <115200>;
|
current-speed = <115200>;
|
||||||
power-domains = <&k3_pds 149 TI_SCI_PD_EXCLUSIVE>;
|
power-domains = <&k3_pds 149 TI_SCI_PD_EXCLUSIVE>;
|
||||||
clocks = <&k3_clks 149 0>;
|
clocks = <&k3_clks 149 0>;
|
||||||
@@ -21,7 +20,6 @@
|
|||||||
compatible = "ti,am64-uart", "ti,am654-uart";
|
compatible = "ti,am64-uart", "ti,am654-uart";
|
||||||
reg = <0x00 0x04a10000 0x00 0x100>;
|
reg = <0x00 0x04a10000 0x00 0x100>;
|
||||||
interrupts = <GIC_SPI 186 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 186 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clock-frequency = <48000000>;
|
|
||||||
current-speed = <115200>;
|
current-speed = <115200>;
|
||||||
power-domains = <&k3_pds 160 TI_SCI_PD_EXCLUSIVE>;
|
power-domains = <&k3_pds 160 TI_SCI_PD_EXCLUSIVE>;
|
||||||
clocks = <&k3_clks 160 0>;
|
clocks = <&k3_clks 160 0>;
|
||||||
|
|||||||
@@ -339,12 +339,10 @@ long get_tagged_addr_ctrl(struct task_struct *task);
|
|||||||
* of header definitions for the use of task_stack_page.
|
* of header definitions for the use of task_stack_page.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define current_top_of_stack() \
|
/*
|
||||||
({ \
|
* The top of the current task's task stack
|
||||||
struct stack_info _info; \
|
*/
|
||||||
BUG_ON(!on_accessible_stack(current, current_stack_pointer, 1, &_info)); \
|
#define current_top_of_stack() ((unsigned long)current->stack + THREAD_SIZE)
|
||||||
_info.high; \
|
|
||||||
})
|
|
||||||
#define on_thread_stack() (on_task_stack(current, current_stack_pointer, 1, NULL))
|
#define on_thread_stack() (on_task_stack(current, current_stack_pointer, 1, NULL))
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|||||||
@@ -1012,6 +1012,7 @@ static_assert(offsetof(siginfo_t, si_upper) == 0x28);
|
|||||||
static_assert(offsetof(siginfo_t, si_pkey) == 0x20);
|
static_assert(offsetof(siginfo_t, si_pkey) == 0x20);
|
||||||
static_assert(offsetof(siginfo_t, si_perf_data) == 0x18);
|
static_assert(offsetof(siginfo_t, si_perf_data) == 0x18);
|
||||||
static_assert(offsetof(siginfo_t, si_perf_type) == 0x20);
|
static_assert(offsetof(siginfo_t, si_perf_type) == 0x20);
|
||||||
|
static_assert(offsetof(siginfo_t, si_perf_flags) == 0x24);
|
||||||
static_assert(offsetof(siginfo_t, si_band) == 0x10);
|
static_assert(offsetof(siginfo_t, si_band) == 0x10);
|
||||||
static_assert(offsetof(siginfo_t, si_fd) == 0x18);
|
static_assert(offsetof(siginfo_t, si_fd) == 0x18);
|
||||||
static_assert(offsetof(siginfo_t, si_call_addr) == 0x10);
|
static_assert(offsetof(siginfo_t, si_call_addr) == 0x10);
|
||||||
|
|||||||
@@ -487,6 +487,7 @@ static_assert(offsetof(compat_siginfo_t, si_upper) == 0x18);
|
|||||||
static_assert(offsetof(compat_siginfo_t, si_pkey) == 0x14);
|
static_assert(offsetof(compat_siginfo_t, si_pkey) == 0x14);
|
||||||
static_assert(offsetof(compat_siginfo_t, si_perf_data) == 0x10);
|
static_assert(offsetof(compat_siginfo_t, si_perf_data) == 0x10);
|
||||||
static_assert(offsetof(compat_siginfo_t, si_perf_type) == 0x14);
|
static_assert(offsetof(compat_siginfo_t, si_perf_type) == 0x14);
|
||||||
|
static_assert(offsetof(compat_siginfo_t, si_perf_flags) == 0x18);
|
||||||
static_assert(offsetof(compat_siginfo_t, si_band) == 0x0c);
|
static_assert(offsetof(compat_siginfo_t, si_band) == 0x0c);
|
||||||
static_assert(offsetof(compat_siginfo_t, si_fd) == 0x10);
|
static_assert(offsetof(compat_siginfo_t, si_fd) == 0x10);
|
||||||
static_assert(offsetof(compat_siginfo_t, si_call_addr) == 0x0c);
|
static_assert(offsetof(compat_siginfo_t, si_call_addr) == 0x0c);
|
||||||
|
|||||||
@@ -114,6 +114,6 @@ long compat_arm_syscall(struct pt_regs *regs, int scno)
|
|||||||
addr = instruction_pointer(regs) - (compat_thumb_mode(regs) ? 2 : 4);
|
addr = instruction_pointer(regs) - (compat_thumb_mode(regs) ? 2 : 4);
|
||||||
|
|
||||||
arm64_notify_die("Oops - bad compat syscall(2)", regs,
|
arm64_notify_die("Oops - bad compat syscall(2)", regs,
|
||||||
SIGILL, ILL_ILLTRP, addr, scno);
|
SIGILL, ILL_ILLTRP, addr, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,8 +16,8 @@
|
|||||||
|
|
||||||
void copy_highpage(struct page *to, struct page *from)
|
void copy_highpage(struct page *to, struct page *from)
|
||||||
{
|
{
|
||||||
struct page *kto = page_address(to);
|
void *kto = page_address(to);
|
||||||
struct page *kfrom = page_address(from);
|
void *kfrom = page_address(from);
|
||||||
|
|
||||||
copy_page(kto, kfrom);
|
copy_page(kto, kfrom);
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ static int __kprobes patch_text_cb(void *priv)
|
|||||||
struct csky_insn_patch *param = priv;
|
struct csky_insn_patch *param = priv;
|
||||||
unsigned int addr = (unsigned int)param->addr;
|
unsigned int addr = (unsigned int)param->addr;
|
||||||
|
|
||||||
if (atomic_inc_return(¶m->cpu_count) == 1) {
|
if (atomic_inc_return(¶m->cpu_count) == num_online_cpus()) {
|
||||||
*(u16 *) addr = cpu_to_le16(param->opcode);
|
*(u16 *) addr = cpu_to_le16(param->opcode);
|
||||||
dcache_wb_range(addr, addr + 2);
|
dcache_wb_range(addr, addr + 2);
|
||||||
atomic_inc(¶m->cpu_count);
|
atomic_inc(¶m->cpu_count);
|
||||||
|
|||||||
@@ -338,7 +338,7 @@ comment "Processor Specific Options"
|
|||||||
|
|
||||||
config M68KFPU_EMU
|
config M68KFPU_EMU
|
||||||
bool "Math emulation support"
|
bool "Math emulation support"
|
||||||
depends on MMU
|
depends on M68KCLASSIC && FPU
|
||||||
help
|
help
|
||||||
At some point in the future, this will cause floating-point math
|
At some point in the future, this will cause floating-point math
|
||||||
instructions to be emulated by the kernel on machines that lack a
|
instructions to be emulated by the kernel on machines that lack a
|
||||||
|
|||||||
@@ -80,14 +80,14 @@
|
|||||||
({ u16 __v = le16_to_cpu(*(__force volatile u16 *) (addr)); __v; })
|
({ u16 __v = le16_to_cpu(*(__force volatile u16 *) (addr)); __v; })
|
||||||
|
|
||||||
#define rom_out_8(addr, b) \
|
#define rom_out_8(addr, b) \
|
||||||
({u8 __maybe_unused __w, __v = (b); u32 _addr = ((u32) (addr)); \
|
(void)({u8 __maybe_unused __w, __v = (b); u32 _addr = ((u32) (addr)); \
|
||||||
__w = ((*(__force volatile u8 *) ((_addr | 0x10000) + (__v<<1)))); })
|
__w = ((*(__force volatile u8 *) ((_addr | 0x10000) + (__v<<1)))); })
|
||||||
#define rom_out_be16(addr, w) \
|
#define rom_out_be16(addr, w) \
|
||||||
({u16 __maybe_unused __w, __v = (w); u32 _addr = ((u32) (addr)); \
|
(void)({u16 __maybe_unused __w, __v = (w); u32 _addr = ((u32) (addr)); \
|
||||||
__w = ((*(__force volatile u16 *) ((_addr & 0xFFFF0000UL) + ((__v & 0xFF)<<1)))); \
|
__w = ((*(__force volatile u16 *) ((_addr & 0xFFFF0000UL) + ((__v & 0xFF)<<1)))); \
|
||||||
__w = ((*(__force volatile u16 *) ((_addr | 0x10000) + ((__v >> 8)<<1)))); })
|
__w = ((*(__force volatile u16 *) ((_addr | 0x10000) + ((__v >> 8)<<1)))); })
|
||||||
#define rom_out_le16(addr, w) \
|
#define rom_out_le16(addr, w) \
|
||||||
({u16 __maybe_unused __w, __v = (w); u32 _addr = ((u32) (addr)); \
|
(void)({u16 __maybe_unused __w, __v = (w); u32 _addr = ((u32) (addr)); \
|
||||||
__w = ((*(__force volatile u16 *) ((_addr & 0xFFFF0000UL) + ((__v >> 8)<<1)))); \
|
__w = ((*(__force volatile u16 *) ((_addr & 0xFFFF0000UL) + ((__v >> 8)<<1)))); \
|
||||||
__w = ((*(__force volatile u16 *) ((_addr | 0x10000) + ((__v & 0xFF)<<1)))); })
|
__w = ((*(__force volatile u16 *) ((_addr | 0x10000) + ((__v & 0xFF)<<1)))); })
|
||||||
|
|
||||||
|
|||||||
@@ -625,6 +625,7 @@ static inline void siginfo_build_tests(void)
|
|||||||
/* _sigfault._perf */
|
/* _sigfault._perf */
|
||||||
BUILD_BUG_ON(offsetof(siginfo_t, si_perf_data) != 0x10);
|
BUILD_BUG_ON(offsetof(siginfo_t, si_perf_data) != 0x10);
|
||||||
BUILD_BUG_ON(offsetof(siginfo_t, si_perf_type) != 0x14);
|
BUILD_BUG_ON(offsetof(siginfo_t, si_perf_type) != 0x14);
|
||||||
|
BUILD_BUG_ON(offsetof(siginfo_t, si_perf_flags) != 0x18);
|
||||||
|
|
||||||
/* _sigpoll */
|
/* _sigpoll */
|
||||||
BUILD_BUG_ON(offsetof(siginfo_t, si_band) != 0x0c);
|
BUILD_BUG_ON(offsetof(siginfo_t, si_band) != 0x0c);
|
||||||
|
|||||||
@@ -26,7 +26,6 @@
|
|||||||
#define cpu_has_3k_cache 0
|
#define cpu_has_3k_cache 0
|
||||||
#define cpu_has_4k_cache 1
|
#define cpu_has_4k_cache 1
|
||||||
#define cpu_has_tx39_cache 0
|
#define cpu_has_tx39_cache 0
|
||||||
#define cpu_has_fpu 1
|
|
||||||
#define cpu_has_nofpuex 0
|
#define cpu_has_nofpuex 0
|
||||||
#define cpu_has_32fpr 1
|
#define cpu_has_32fpr 1
|
||||||
#define cpu_has_counter 1
|
#define cpu_has_counter 1
|
||||||
|
|||||||
@@ -29,7 +29,6 @@
|
|||||||
#define cpu_has_3k_cache 0
|
#define cpu_has_3k_cache 0
|
||||||
#define cpu_has_4k_cache 1
|
#define cpu_has_4k_cache 1
|
||||||
#define cpu_has_tx39_cache 0
|
#define cpu_has_tx39_cache 0
|
||||||
#define cpu_has_fpu 1
|
|
||||||
#define cpu_has_nofpuex 0
|
#define cpu_has_nofpuex 0
|
||||||
#define cpu_has_32fpr 1
|
#define cpu_has_32fpr 1
|
||||||
#define cpu_has_counter 1
|
#define cpu_has_counter 1
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ static inline cycles_t get_cycles(void)
|
|||||||
{
|
{
|
||||||
return mfspr(SPR_TTCR);
|
return mfspr(SPR_TTCR);
|
||||||
}
|
}
|
||||||
|
#define get_cycles get_cycles
|
||||||
|
|
||||||
/* This isn't really used any more */
|
/* This isn't really used any more */
|
||||||
#define CLOCK_TICK_RATE 1000
|
#define CLOCK_TICK_RATE 1000
|
||||||
|
|||||||
@@ -521,6 +521,15 @@ _start:
|
|||||||
l.ori r3,r0,0x1
|
l.ori r3,r0,0x1
|
||||||
l.mtspr r0,r3,SPR_SR
|
l.mtspr r0,r3,SPR_SR
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Start the TTCR as early as possible, so that the RNG can make use of
|
||||||
|
* measurements of boot time from the earliest opportunity. Especially
|
||||||
|
* important is that the TTCR does not return zero by the time we reach
|
||||||
|
* rand_initialize().
|
||||||
|
*/
|
||||||
|
l.movhi r3,hi(SPR_TTMR_CR)
|
||||||
|
l.mtspr r0,r3,SPR_TTMR
|
||||||
|
|
||||||
CLEAR_GPR(r1)
|
CLEAR_GPR(r1)
|
||||||
CLEAR_GPR(r2)
|
CLEAR_GPR(r2)
|
||||||
CLEAR_GPR(r3)
|
CLEAR_GPR(r3)
|
||||||
|
|||||||
@@ -12,9 +12,13 @@ static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
|
|||||||
pgprot_val(vma->vm_page_prot) |= _PAGE_NO_CACHE;
|
pgprot_val(vma->vm_page_prot) |= _PAGE_NO_CACHE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_STI_CONSOLE) || defined(CONFIG_FB_STI)
|
||||||
|
int fb_is_primary_device(struct fb_info *info);
|
||||||
|
#else
|
||||||
static inline int fb_is_primary_device(struct fb_info *info)
|
static inline int fb_is_primary_device(struct fb_info *info)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* _ASM_FB_H_ */
|
#endif /* _ASM_FB_H_ */
|
||||||
|
|||||||
@@ -216,6 +216,9 @@ static inline bool pfn_valid(unsigned long pfn)
|
|||||||
#define __pa(x) ((phys_addr_t)(unsigned long)(x) - VIRT_PHYS_OFFSET)
|
#define __pa(x) ((phys_addr_t)(unsigned long)(x) - VIRT_PHYS_OFFSET)
|
||||||
#else
|
#else
|
||||||
#ifdef CONFIG_PPC64
|
#ifdef CONFIG_PPC64
|
||||||
|
|
||||||
|
#define VIRTUAL_WARN_ON(x) WARN_ON(IS_ENABLED(CONFIG_DEBUG_VIRTUAL) && (x))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* gcc miscompiles (unsigned long)(&static_var) - PAGE_OFFSET
|
* gcc miscompiles (unsigned long)(&static_var) - PAGE_OFFSET
|
||||||
* with -mcmodel=medium, so we use & and | instead of - and + on 64-bit.
|
* with -mcmodel=medium, so we use & and | instead of - and + on 64-bit.
|
||||||
@@ -223,13 +226,13 @@ static inline bool pfn_valid(unsigned long pfn)
|
|||||||
*/
|
*/
|
||||||
#define __va(x) \
|
#define __va(x) \
|
||||||
({ \
|
({ \
|
||||||
VIRTUAL_BUG_ON((unsigned long)(x) >= PAGE_OFFSET); \
|
VIRTUAL_WARN_ON((unsigned long)(x) >= PAGE_OFFSET); \
|
||||||
(void *)(unsigned long)((phys_addr_t)(x) | PAGE_OFFSET); \
|
(void *)(unsigned long)((phys_addr_t)(x) | PAGE_OFFSET); \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define __pa(x) \
|
#define __pa(x) \
|
||||||
({ \
|
({ \
|
||||||
VIRTUAL_BUG_ON((unsigned long)(x) < PAGE_OFFSET); \
|
VIRTUAL_WARN_ON((unsigned long)(x) < PAGE_OFFSET); \
|
||||||
(unsigned long)(x) & 0x0fffffffffffffffUL; \
|
(unsigned long)(x) & 0x0fffffffffffffffUL; \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ static inline void vas_user_win_add_mm_context(struct vas_user_win_ref *ref)
|
|||||||
* Receive window attributes specified by the (in-kernel) owner of window.
|
* Receive window attributes specified by the (in-kernel) owner of window.
|
||||||
*/
|
*/
|
||||||
struct vas_rx_win_attr {
|
struct vas_rx_win_attr {
|
||||||
void *rx_fifo;
|
u64 rx_fifo;
|
||||||
int rx_fifo_size;
|
int rx_fifo_size;
|
||||||
int wcreds_max;
|
int wcreds_max;
|
||||||
|
|
||||||
|
|||||||
@@ -330,23 +330,23 @@ _GLOBAL(enter_rtas)
|
|||||||
clrldi r4,r4,2 /* convert to realmode address */
|
clrldi r4,r4,2 /* convert to realmode address */
|
||||||
mtlr r4
|
mtlr r4
|
||||||
|
|
||||||
li r0,0
|
|
||||||
ori r0,r0,MSR_EE|MSR_SE|MSR_BE|MSR_RI
|
|
||||||
andc r0,r6,r0
|
|
||||||
|
|
||||||
li r9,1
|
|
||||||
rldicr r9,r9,MSR_SF_LG,(63-MSR_SF_LG)
|
|
||||||
ori r9,r9,MSR_IR|MSR_DR|MSR_FE0|MSR_FE1|MSR_FP|MSR_RI|MSR_LE
|
|
||||||
andc r6,r0,r9
|
|
||||||
|
|
||||||
__enter_rtas:
|
__enter_rtas:
|
||||||
sync /* disable interrupts so SRR0/1 */
|
|
||||||
mtmsrd r0 /* don't get trashed */
|
|
||||||
|
|
||||||
LOAD_REG_ADDR(r4, rtas)
|
LOAD_REG_ADDR(r4, rtas)
|
||||||
ld r5,RTASENTRY(r4) /* get the rtas->entry value */
|
ld r5,RTASENTRY(r4) /* get the rtas->entry value */
|
||||||
ld r4,RTASBASE(r4) /* get the rtas->base value */
|
ld r4,RTASBASE(r4) /* get the rtas->base value */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RTAS runs in 32-bit big endian real mode, but leave MSR[RI] on as we
|
||||||
|
* may hit NMI (SRESET or MCE) while in RTAS. RTAS should disable RI in
|
||||||
|
* its critical regions (as specified in PAPR+ section 7.2.1). MSR[S]
|
||||||
|
* is not impacted by RFI_TO_KERNEL (only urfid can unset it). So if
|
||||||
|
* MSR[S] is set, it will remain when entering RTAS.
|
||||||
|
*/
|
||||||
|
LOAD_REG_IMMEDIATE(r6, MSR_ME | MSR_RI)
|
||||||
|
|
||||||
|
li r0,0
|
||||||
|
mtmsrd r0,1 /* disable RI before using SRR0/1 */
|
||||||
|
|
||||||
mtspr SPRN_SRR0,r5
|
mtspr SPRN_SRR0,r5
|
||||||
mtspr SPRN_SRR1,r6
|
mtspr SPRN_SRR1,r6
|
||||||
RFI_TO_KERNEL
|
RFI_TO_KERNEL
|
||||||
|
|||||||
@@ -861,7 +861,6 @@ static int fadump_alloc_mem_ranges(struct fadump_mrange_info *mrange_info)
|
|||||||
sizeof(struct fadump_memory_range));
|
sizeof(struct fadump_memory_range));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int fadump_add_mem_range(struct fadump_mrange_info *mrange_info,
|
static inline int fadump_add_mem_range(struct fadump_mrange_info *mrange_info,
|
||||||
u64 base, u64 end)
|
u64 base, u64 end)
|
||||||
{
|
{
|
||||||
@@ -880,7 +879,12 @@ static inline int fadump_add_mem_range(struct fadump_mrange_info *mrange_info,
|
|||||||
start = mem_ranges[mrange_info->mem_range_cnt - 1].base;
|
start = mem_ranges[mrange_info->mem_range_cnt - 1].base;
|
||||||
size = mem_ranges[mrange_info->mem_range_cnt - 1].size;
|
size = mem_ranges[mrange_info->mem_range_cnt - 1].size;
|
||||||
|
|
||||||
if ((start + size) == base)
|
/*
|
||||||
|
* Boot memory area needs separate PT_LOAD segment(s) as it
|
||||||
|
* is moved to a different location at the time of crash.
|
||||||
|
* So, fold only if the region is not boot memory area.
|
||||||
|
*/
|
||||||
|
if ((start + size) == base && start >= fw_dump.boot_mem_top)
|
||||||
is_adjacent = true;
|
is_adjacent = true;
|
||||||
}
|
}
|
||||||
if (!is_adjacent) {
|
if (!is_adjacent) {
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ static int __init powersave_off(char *arg)
|
|||||||
{
|
{
|
||||||
ppc_md.power_save = NULL;
|
ppc_md.power_save = NULL;
|
||||||
cpuidle_disable = IDLE_POWERSAVE_OFF;
|
cpuidle_disable = IDLE_POWERSAVE_OFF;
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
__setup("powersave=off", powersave_off);
|
__setup("powersave=off", powersave_off);
|
||||||
|
|
||||||
|
|||||||
@@ -49,6 +49,15 @@ void enter_rtas(unsigned long);
|
|||||||
|
|
||||||
static inline void do_enter_rtas(unsigned long args)
|
static inline void do_enter_rtas(unsigned long args)
|
||||||
{
|
{
|
||||||
|
unsigned long msr;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make sure MSR[RI] is currently enabled as it will be forced later
|
||||||
|
* in enter_rtas.
|
||||||
|
*/
|
||||||
|
msr = mfmsr();
|
||||||
|
BUG_ON(!(msr & MSR_RI));
|
||||||
|
|
||||||
enter_rtas(args);
|
enter_rtas(args);
|
||||||
|
|
||||||
srr_regs_clobbered(); /* rtas uses SRRs, invalidate */
|
srr_regs_clobbered(); /* rtas uses SRRs, invalidate */
|
||||||
|
|||||||
@@ -5235,6 +5235,10 @@ static int kvmppc_core_init_vm_hv(struct kvm *kvm)
|
|||||||
kvm->arch.host_lpcr = lpcr = mfspr(SPRN_LPCR);
|
kvm->arch.host_lpcr = lpcr = mfspr(SPRN_LPCR);
|
||||||
lpcr &= LPCR_PECE | LPCR_LPES;
|
lpcr &= LPCR_PECE | LPCR_LPES;
|
||||||
} else {
|
} else {
|
||||||
|
/*
|
||||||
|
* The L2 LPES mode will be set by the L0 according to whether
|
||||||
|
* or not it needs to take external interrupts in HV mode.
|
||||||
|
*/
|
||||||
lpcr = 0;
|
lpcr = 0;
|
||||||
}
|
}
|
||||||
lpcr |= (4UL << LPCR_DPFD_SH) | LPCR_HDICE |
|
lpcr |= (4UL << LPCR_DPFD_SH) | LPCR_HDICE |
|
||||||
|
|||||||
@@ -261,8 +261,7 @@ static void load_l2_hv_regs(struct kvm_vcpu *vcpu,
|
|||||||
/*
|
/*
|
||||||
* Don't let L1 change LPCR bits for the L2 except these:
|
* Don't let L1 change LPCR bits for the L2 except these:
|
||||||
*/
|
*/
|
||||||
mask = LPCR_DPFD | LPCR_ILE | LPCR_TC | LPCR_AIL | LPCR_LD |
|
mask = LPCR_DPFD | LPCR_ILE | LPCR_TC | LPCR_AIL | LPCR_LD | LPCR_MER;
|
||||||
LPCR_LPES | LPCR_MER;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Additional filtering is required depending on hardware
|
* Additional filtering is required depending on hardware
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ static void mmcra_sdar_mode(u64 event, unsigned long *mmcra)
|
|||||||
*mmcra |= MMCRA_SDAR_MODE_TLB;
|
*mmcra |= MMCRA_SDAR_MODE_TLB;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u64 p10_thresh_cmp_val(u64 value)
|
static int p10_thresh_cmp_val(u64 value)
|
||||||
{
|
{
|
||||||
int exp = 0;
|
int exp = 0;
|
||||||
u64 result = value;
|
u64 result = value;
|
||||||
@@ -139,7 +139,7 @@ static u64 p10_thresh_cmp_val(u64 value)
|
|||||||
* exponent is also zero.
|
* exponent is also zero.
|
||||||
*/
|
*/
|
||||||
if (!(value & 0xC0) && exp)
|
if (!(value & 0xC0) && exp)
|
||||||
result = 0;
|
result = -1;
|
||||||
else
|
else
|
||||||
result = (exp << 8) | value;
|
result = (exp << 8) | value;
|
||||||
}
|
}
|
||||||
@@ -187,7 +187,7 @@ static bool is_thresh_cmp_valid(u64 event)
|
|||||||
unsigned int cmp, exp;
|
unsigned int cmp, exp;
|
||||||
|
|
||||||
if (cpu_has_feature(CPU_FTR_ARCH_31))
|
if (cpu_has_feature(CPU_FTR_ARCH_31))
|
||||||
return p10_thresh_cmp_val(event) != 0;
|
return p10_thresh_cmp_val(event) >= 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check the mantissa upper two bits are not zero, unless the
|
* Check the mantissa upper two bits are not zero, unless the
|
||||||
@@ -456,12 +456,14 @@ int isa207_get_constraint(u64 event, unsigned long *maskp, unsigned long *valp,
|
|||||||
value |= CNST_THRESH_CTL_SEL_VAL(event >> EVENT_THRESH_SHIFT);
|
value |= CNST_THRESH_CTL_SEL_VAL(event >> EVENT_THRESH_SHIFT);
|
||||||
mask |= p10_CNST_THRESH_CMP_MASK;
|
mask |= p10_CNST_THRESH_CMP_MASK;
|
||||||
value |= p10_CNST_THRESH_CMP_VAL(p10_thresh_cmp_val(event_config1));
|
value |= p10_CNST_THRESH_CMP_VAL(p10_thresh_cmp_val(event_config1));
|
||||||
}
|
} else if (event_is_threshold(event))
|
||||||
|
return -1;
|
||||||
} else if (cpu_has_feature(CPU_FTR_ARCH_300)) {
|
} else if (cpu_has_feature(CPU_FTR_ARCH_300)) {
|
||||||
if (event_is_threshold(event) && is_thresh_cmp_valid(event)) {
|
if (event_is_threshold(event) && is_thresh_cmp_valid(event)) {
|
||||||
mask |= CNST_THRESH_MASK;
|
mask |= CNST_THRESH_MASK;
|
||||||
value |= CNST_THRESH_VAL(event >> EVENT_THRESH_SHIFT);
|
value |= CNST_THRESH_VAL(event >> EVENT_THRESH_SHIFT);
|
||||||
}
|
} else if (event_is_threshold(event))
|
||||||
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* Special case for PM_MRK_FAB_RSP_MATCH and PM_MRK_FAB_RSP_MATCH_CYC,
|
* Special case for PM_MRK_FAB_RSP_MATCH and PM_MRK_FAB_RSP_MATCH_CYC,
|
||||||
|
|||||||
@@ -327,6 +327,6 @@ late_initcall(cpm_init);
|
|||||||
static int __init cpm_powersave_off(char *arg)
|
static int __init cpm_powersave_off(char *arg)
|
||||||
{
|
{
|
||||||
cpm.powersave_off = 1;
|
cpm.powersave_off = 1;
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
__setup("powersave=off", cpm_powersave_off);
|
__setup("powersave=off", cpm_powersave_off);
|
||||||
|
|||||||
@@ -280,6 +280,7 @@ cpm_setbrg(uint brg, uint rate)
|
|||||||
out_be32(bp, (((BRG_UART_CLK_DIV16 / rate) - 1) << 1) |
|
out_be32(bp, (((BRG_UART_CLK_DIV16 / rate) - 1) << 1) |
|
||||||
CPM_BRG_EN | CPM_BRG_DIV16);
|
CPM_BRG_EN | CPM_BRG_DIV16);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(cpm_setbrg);
|
||||||
|
|
||||||
struct cpm_ioport16 {
|
struct cpm_ioport16 {
|
||||||
__be16 dir, par, odr_sor, dat, intr;
|
__be16 dir, par, odr_sor, dat, intr;
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ void __init opal_fadump_dt_scan(struct fw_dump *fadump_conf, u64 node)
|
|||||||
addr = be64_to_cpu(addr);
|
addr = be64_to_cpu(addr);
|
||||||
pr_debug("Kernel metadata addr: %llx\n", addr);
|
pr_debug("Kernel metadata addr: %llx\n", addr);
|
||||||
opal_fdm_active = (void *)addr;
|
opal_fdm_active = (void *)addr;
|
||||||
if (opal_fdm_active->registered_regions == 0)
|
if (be16_to_cpu(opal_fdm_active->registered_regions) == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ret = opal_mpipl_query_tag(OPAL_MPIPL_TAG_BOOT_MEM, &addr);
|
ret = opal_mpipl_query_tag(OPAL_MPIPL_TAG_BOOT_MEM, &addr);
|
||||||
@@ -95,17 +95,17 @@ static int opal_fadump_unregister(struct fw_dump *fadump_conf);
|
|||||||
static void opal_fadump_update_config(struct fw_dump *fadump_conf,
|
static void opal_fadump_update_config(struct fw_dump *fadump_conf,
|
||||||
const struct opal_fadump_mem_struct *fdm)
|
const struct opal_fadump_mem_struct *fdm)
|
||||||
{
|
{
|
||||||
pr_debug("Boot memory regions count: %d\n", fdm->region_cnt);
|
pr_debug("Boot memory regions count: %d\n", be16_to_cpu(fdm->region_cnt));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The destination address of the first boot memory region is the
|
* The destination address of the first boot memory region is the
|
||||||
* destination address of boot memory regions.
|
* destination address of boot memory regions.
|
||||||
*/
|
*/
|
||||||
fadump_conf->boot_mem_dest_addr = fdm->rgn[0].dest;
|
fadump_conf->boot_mem_dest_addr = be64_to_cpu(fdm->rgn[0].dest);
|
||||||
pr_debug("Destination address of boot memory regions: %#016llx\n",
|
pr_debug("Destination address of boot memory regions: %#016llx\n",
|
||||||
fadump_conf->boot_mem_dest_addr);
|
fadump_conf->boot_mem_dest_addr);
|
||||||
|
|
||||||
fadump_conf->fadumphdr_addr = fdm->fadumphdr_addr;
|
fadump_conf->fadumphdr_addr = be64_to_cpu(fdm->fadumphdr_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -126,9 +126,9 @@ static void opal_fadump_get_config(struct fw_dump *fadump_conf,
|
|||||||
fadump_conf->boot_memory_size = 0;
|
fadump_conf->boot_memory_size = 0;
|
||||||
|
|
||||||
pr_debug("Boot memory regions:\n");
|
pr_debug("Boot memory regions:\n");
|
||||||
for (i = 0; i < fdm->region_cnt; i++) {
|
for (i = 0; i < be16_to_cpu(fdm->region_cnt); i++) {
|
||||||
base = fdm->rgn[i].src;
|
base = be64_to_cpu(fdm->rgn[i].src);
|
||||||
size = fdm->rgn[i].size;
|
size = be64_to_cpu(fdm->rgn[i].size);
|
||||||
pr_debug("\t[%03d] base: 0x%lx, size: 0x%lx\n", i, base, size);
|
pr_debug("\t[%03d] base: 0x%lx, size: 0x%lx\n", i, base, size);
|
||||||
|
|
||||||
fadump_conf->boot_mem_addr[i] = base;
|
fadump_conf->boot_mem_addr[i] = base;
|
||||||
@@ -143,7 +143,7 @@ static void opal_fadump_get_config(struct fw_dump *fadump_conf,
|
|||||||
* Start address of reserve dump area (permanent reservation) for
|
* Start address of reserve dump area (permanent reservation) for
|
||||||
* re-registering FADump after dump capture.
|
* re-registering FADump after dump capture.
|
||||||
*/
|
*/
|
||||||
fadump_conf->reserve_dump_area_start = fdm->rgn[0].dest;
|
fadump_conf->reserve_dump_area_start = be64_to_cpu(fdm->rgn[0].dest);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Rarely, but it can so happen that system crashes before all
|
* Rarely, but it can so happen that system crashes before all
|
||||||
@@ -155,13 +155,14 @@ static void opal_fadump_get_config(struct fw_dump *fadump_conf,
|
|||||||
* Hope the memory that could not be preserved only has pages
|
* Hope the memory that could not be preserved only has pages
|
||||||
* that are usually filtered out while saving the vmcore.
|
* that are usually filtered out while saving the vmcore.
|
||||||
*/
|
*/
|
||||||
if (fdm->region_cnt > fdm->registered_regions) {
|
if (be16_to_cpu(fdm->region_cnt) > be16_to_cpu(fdm->registered_regions)) {
|
||||||
pr_warn("Not all memory regions were saved!!!\n");
|
pr_warn("Not all memory regions were saved!!!\n");
|
||||||
pr_warn(" Unsaved memory regions:\n");
|
pr_warn(" Unsaved memory regions:\n");
|
||||||
i = fdm->registered_regions;
|
i = be16_to_cpu(fdm->registered_regions);
|
||||||
while (i < fdm->region_cnt) {
|
while (i < be16_to_cpu(fdm->region_cnt)) {
|
||||||
pr_warn("\t[%03d] base: 0x%llx, size: 0x%llx\n",
|
pr_warn("\t[%03d] base: 0x%llx, size: 0x%llx\n",
|
||||||
i, fdm->rgn[i].src, fdm->rgn[i].size);
|
i, be64_to_cpu(fdm->rgn[i].src),
|
||||||
|
be64_to_cpu(fdm->rgn[i].size));
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,7 +171,7 @@ static void opal_fadump_get_config(struct fw_dump *fadump_conf,
|
|||||||
}
|
}
|
||||||
|
|
||||||
fadump_conf->boot_mem_top = (fadump_conf->boot_memory_size + hole_size);
|
fadump_conf->boot_mem_top = (fadump_conf->boot_memory_size + hole_size);
|
||||||
fadump_conf->boot_mem_regs_cnt = fdm->region_cnt;
|
fadump_conf->boot_mem_regs_cnt = be16_to_cpu(fdm->region_cnt);
|
||||||
opal_fadump_update_config(fadump_conf, fdm);
|
opal_fadump_update_config(fadump_conf, fdm);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,34 +179,37 @@ static void opal_fadump_get_config(struct fw_dump *fadump_conf,
|
|||||||
static void opal_fadump_init_metadata(struct opal_fadump_mem_struct *fdm)
|
static void opal_fadump_init_metadata(struct opal_fadump_mem_struct *fdm)
|
||||||
{
|
{
|
||||||
fdm->version = OPAL_FADUMP_VERSION;
|
fdm->version = OPAL_FADUMP_VERSION;
|
||||||
fdm->region_cnt = 0;
|
fdm->region_cnt = cpu_to_be16(0);
|
||||||
fdm->registered_regions = 0;
|
fdm->registered_regions = cpu_to_be16(0);
|
||||||
fdm->fadumphdr_addr = 0;
|
fdm->fadumphdr_addr = cpu_to_be64(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static u64 opal_fadump_init_mem_struct(struct fw_dump *fadump_conf)
|
static u64 opal_fadump_init_mem_struct(struct fw_dump *fadump_conf)
|
||||||
{
|
{
|
||||||
u64 addr = fadump_conf->reserve_dump_area_start;
|
u64 addr = fadump_conf->reserve_dump_area_start;
|
||||||
|
u16 reg_cnt;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
opal_fdm = __va(fadump_conf->kernel_metadata);
|
opal_fdm = __va(fadump_conf->kernel_metadata);
|
||||||
opal_fadump_init_metadata(opal_fdm);
|
opal_fadump_init_metadata(opal_fdm);
|
||||||
|
|
||||||
/* Boot memory regions */
|
/* Boot memory regions */
|
||||||
|
reg_cnt = be16_to_cpu(opal_fdm->region_cnt);
|
||||||
for (i = 0; i < fadump_conf->boot_mem_regs_cnt; i++) {
|
for (i = 0; i < fadump_conf->boot_mem_regs_cnt; i++) {
|
||||||
opal_fdm->rgn[i].src = fadump_conf->boot_mem_addr[i];
|
opal_fdm->rgn[i].src = cpu_to_be64(fadump_conf->boot_mem_addr[i]);
|
||||||
opal_fdm->rgn[i].dest = addr;
|
opal_fdm->rgn[i].dest = cpu_to_be64(addr);
|
||||||
opal_fdm->rgn[i].size = fadump_conf->boot_mem_sz[i];
|
opal_fdm->rgn[i].size = cpu_to_be64(fadump_conf->boot_mem_sz[i]);
|
||||||
|
|
||||||
opal_fdm->region_cnt++;
|
reg_cnt++;
|
||||||
addr += fadump_conf->boot_mem_sz[i];
|
addr += fadump_conf->boot_mem_sz[i];
|
||||||
}
|
}
|
||||||
|
opal_fdm->region_cnt = cpu_to_be16(reg_cnt);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Kernel metadata is passed to f/w and retrieved in capture kerenl.
|
* Kernel metadata is passed to f/w and retrieved in capture kerenl.
|
||||||
* So, use it to save fadump header address instead of calculating it.
|
* So, use it to save fadump header address instead of calculating it.
|
||||||
*/
|
*/
|
||||||
opal_fdm->fadumphdr_addr = (opal_fdm->rgn[0].dest +
|
opal_fdm->fadumphdr_addr = cpu_to_be64(be64_to_cpu(opal_fdm->rgn[0].dest) +
|
||||||
fadump_conf->boot_memory_size);
|
fadump_conf->boot_memory_size);
|
||||||
|
|
||||||
opal_fadump_update_config(fadump_conf, opal_fdm);
|
opal_fadump_update_config(fadump_conf, opal_fdm);
|
||||||
@@ -269,18 +273,21 @@ static u64 opal_fadump_get_bootmem_min(void)
|
|||||||
static int opal_fadump_register(struct fw_dump *fadump_conf)
|
static int opal_fadump_register(struct fw_dump *fadump_conf)
|
||||||
{
|
{
|
||||||
s64 rc = OPAL_PARAMETER;
|
s64 rc = OPAL_PARAMETER;
|
||||||
|
u16 registered_regs;
|
||||||
int i, err = -EIO;
|
int i, err = -EIO;
|
||||||
|
|
||||||
for (i = 0; i < opal_fdm->region_cnt; i++) {
|
registered_regs = be16_to_cpu(opal_fdm->registered_regions);
|
||||||
|
for (i = 0; i < be16_to_cpu(opal_fdm->region_cnt); i++) {
|
||||||
rc = opal_mpipl_update(OPAL_MPIPL_ADD_RANGE,
|
rc = opal_mpipl_update(OPAL_MPIPL_ADD_RANGE,
|
||||||
opal_fdm->rgn[i].src,
|
be64_to_cpu(opal_fdm->rgn[i].src),
|
||||||
opal_fdm->rgn[i].dest,
|
be64_to_cpu(opal_fdm->rgn[i].dest),
|
||||||
opal_fdm->rgn[i].size);
|
be64_to_cpu(opal_fdm->rgn[i].size));
|
||||||
if (rc != OPAL_SUCCESS)
|
if (rc != OPAL_SUCCESS)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
opal_fdm->registered_regions++;
|
registered_regs++;
|
||||||
}
|
}
|
||||||
|
opal_fdm->registered_regions = cpu_to_be16(registered_regs);
|
||||||
|
|
||||||
switch (rc) {
|
switch (rc) {
|
||||||
case OPAL_SUCCESS:
|
case OPAL_SUCCESS:
|
||||||
@@ -291,7 +298,8 @@ static int opal_fadump_register(struct fw_dump *fadump_conf)
|
|||||||
case OPAL_RESOURCE:
|
case OPAL_RESOURCE:
|
||||||
/* If MAX regions limit in f/w is hit, warn and proceed. */
|
/* If MAX regions limit in f/w is hit, warn and proceed. */
|
||||||
pr_warn("%d regions could not be registered for MPIPL as MAX limit is reached!\n",
|
pr_warn("%d regions could not be registered for MPIPL as MAX limit is reached!\n",
|
||||||
(opal_fdm->region_cnt - opal_fdm->registered_regions));
|
(be16_to_cpu(opal_fdm->region_cnt) -
|
||||||
|
be16_to_cpu(opal_fdm->registered_regions)));
|
||||||
fadump_conf->dump_registered = 1;
|
fadump_conf->dump_registered = 1;
|
||||||
err = 0;
|
err = 0;
|
||||||
break;
|
break;
|
||||||
@@ -312,7 +320,7 @@ static int opal_fadump_register(struct fw_dump *fadump_conf)
|
|||||||
* If some regions were registered before OPAL_MPIPL_ADD_RANGE
|
* If some regions were registered before OPAL_MPIPL_ADD_RANGE
|
||||||
* OPAL call failed, unregister all regions.
|
* OPAL call failed, unregister all regions.
|
||||||
*/
|
*/
|
||||||
if ((err < 0) && (opal_fdm->registered_regions > 0))
|
if ((err < 0) && (be16_to_cpu(opal_fdm->registered_regions) > 0))
|
||||||
opal_fadump_unregister(fadump_conf);
|
opal_fadump_unregister(fadump_conf);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
@@ -328,7 +336,7 @@ static int opal_fadump_unregister(struct fw_dump *fadump_conf)
|
|||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
opal_fdm->registered_regions = 0;
|
opal_fdm->registered_regions = cpu_to_be16(0);
|
||||||
fadump_conf->dump_registered = 0;
|
fadump_conf->dump_registered = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -563,19 +571,20 @@ static void opal_fadump_region_show(struct fw_dump *fadump_conf,
|
|||||||
else
|
else
|
||||||
fdm_ptr = opal_fdm;
|
fdm_ptr = opal_fdm;
|
||||||
|
|
||||||
for (i = 0; i < fdm_ptr->region_cnt; i++) {
|
for (i = 0; i < be16_to_cpu(fdm_ptr->region_cnt); i++) {
|
||||||
/*
|
/*
|
||||||
* Only regions that are registered for MPIPL
|
* Only regions that are registered for MPIPL
|
||||||
* would have dump data.
|
* would have dump data.
|
||||||
*/
|
*/
|
||||||
if ((fadump_conf->dump_active) &&
|
if ((fadump_conf->dump_active) &&
|
||||||
(i < fdm_ptr->registered_regions))
|
(i < be16_to_cpu(fdm_ptr->registered_regions)))
|
||||||
dumped_bytes = fdm_ptr->rgn[i].size;
|
dumped_bytes = be64_to_cpu(fdm_ptr->rgn[i].size);
|
||||||
|
|
||||||
seq_printf(m, "DUMP: Src: %#016llx, Dest: %#016llx, ",
|
seq_printf(m, "DUMP: Src: %#016llx, Dest: %#016llx, ",
|
||||||
fdm_ptr->rgn[i].src, fdm_ptr->rgn[i].dest);
|
be64_to_cpu(fdm_ptr->rgn[i].src),
|
||||||
|
be64_to_cpu(fdm_ptr->rgn[i].dest));
|
||||||
seq_printf(m, "Size: %#llx, Dumped: %#llx bytes\n",
|
seq_printf(m, "Size: %#llx, Dumped: %#llx bytes\n",
|
||||||
fdm_ptr->rgn[i].size, dumped_bytes);
|
be64_to_cpu(fdm_ptr->rgn[i].size), dumped_bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dump is active. Show reserved area start address. */
|
/* Dump is active. Show reserved area start address. */
|
||||||
@@ -624,6 +633,7 @@ void __init opal_fadump_dt_scan(struct fw_dump *fadump_conf, u64 node)
|
|||||||
{
|
{
|
||||||
const __be32 *prop;
|
const __be32 *prop;
|
||||||
unsigned long dn;
|
unsigned long dn;
|
||||||
|
__be64 be_addr;
|
||||||
u64 addr = 0;
|
u64 addr = 0;
|
||||||
int i, len;
|
int i, len;
|
||||||
s64 ret;
|
s64 ret;
|
||||||
@@ -680,13 +690,13 @@ void __init opal_fadump_dt_scan(struct fw_dump *fadump_conf, u64 node)
|
|||||||
if (!prop)
|
if (!prop)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ret = opal_mpipl_query_tag(OPAL_MPIPL_TAG_KERNEL, &addr);
|
ret = opal_mpipl_query_tag(OPAL_MPIPL_TAG_KERNEL, &be_addr);
|
||||||
if ((ret != OPAL_SUCCESS) || !addr) {
|
if ((ret != OPAL_SUCCESS) || !be_addr) {
|
||||||
pr_err("Failed to get Kernel metadata (%lld)\n", ret);
|
pr_err("Failed to get Kernel metadata (%lld)\n", ret);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
addr = be64_to_cpu(addr);
|
addr = be64_to_cpu(be_addr);
|
||||||
pr_debug("Kernel metadata addr: %llx\n", addr);
|
pr_debug("Kernel metadata addr: %llx\n", addr);
|
||||||
|
|
||||||
opal_fdm_active = __va(addr);
|
opal_fdm_active = __va(addr);
|
||||||
@@ -697,14 +707,14 @@ void __init opal_fadump_dt_scan(struct fw_dump *fadump_conf, u64 node)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Kernel regions not registered with f/w for MPIPL */
|
/* Kernel regions not registered with f/w for MPIPL */
|
||||||
if (opal_fdm_active->registered_regions == 0) {
|
if (be16_to_cpu(opal_fdm_active->registered_regions) == 0) {
|
||||||
opal_fdm_active = NULL;
|
opal_fdm_active = NULL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = opal_mpipl_query_tag(OPAL_MPIPL_TAG_CPU, &addr);
|
ret = opal_mpipl_query_tag(OPAL_MPIPL_TAG_CPU, &be_addr);
|
||||||
if (addr) {
|
if (be_addr) {
|
||||||
addr = be64_to_cpu(addr);
|
addr = be64_to_cpu(be_addr);
|
||||||
pr_debug("CPU metadata addr: %llx\n", addr);
|
pr_debug("CPU metadata addr: %llx\n", addr);
|
||||||
opal_cpu_metadata = __va(addr);
|
opal_cpu_metadata = __va(addr);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,14 +31,14 @@
|
|||||||
* OPAL FADump kernel metadata
|
* OPAL FADump kernel metadata
|
||||||
*
|
*
|
||||||
* The address of this structure will be registered with f/w for retrieving
|
* The address of this structure will be registered with f/w for retrieving
|
||||||
* and processing during crash dump.
|
* in the capture kernel to process the crash dump.
|
||||||
*/
|
*/
|
||||||
struct opal_fadump_mem_struct {
|
struct opal_fadump_mem_struct {
|
||||||
u8 version;
|
u8 version;
|
||||||
u8 reserved[3];
|
u8 reserved[3];
|
||||||
u16 region_cnt; /* number of regions */
|
__be16 region_cnt; /* number of regions */
|
||||||
u16 registered_regions; /* Regions registered for MPIPL */
|
__be16 registered_regions; /* Regions registered for MPIPL */
|
||||||
u64 fadumphdr_addr;
|
__be64 fadumphdr_addr;
|
||||||
struct opal_mpipl_region rgn[FADUMP_MAX_MEM_REGS];
|
struct opal_mpipl_region rgn[FADUMP_MAX_MEM_REGS];
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
@@ -135,7 +135,7 @@ static inline void opal_fadump_read_regs(char *bufp, unsigned int regs_cnt,
|
|||||||
for (i = 0; i < regs_cnt; i++, bufp += reg_entry_size) {
|
for (i = 0; i < regs_cnt; i++, bufp += reg_entry_size) {
|
||||||
reg_entry = (struct hdat_fadump_reg_entry *)bufp;
|
reg_entry = (struct hdat_fadump_reg_entry *)bufp;
|
||||||
val = (cpu_endian ? be64_to_cpu(reg_entry->reg_val) :
|
val = (cpu_endian ? be64_to_cpu(reg_entry->reg_val) :
|
||||||
reg_entry->reg_val);
|
(u64)(reg_entry->reg_val));
|
||||||
opal_fadump_set_regval_regnum(regs,
|
opal_fadump_set_regval_regnum(regs,
|
||||||
be32_to_cpu(reg_entry->reg_type),
|
be32_to_cpu(reg_entry->reg_type),
|
||||||
be32_to_cpu(reg_entry->reg_num),
|
be32_to_cpu(reg_entry->reg_num),
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ static int __init uv_init(void)
|
|||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
uv_memcons = memcons_init(node, "memcons");
|
uv_memcons = memcons_init(node, "memcons");
|
||||||
|
of_node_put(node);
|
||||||
if (!uv_memcons)
|
if (!uv_memcons)
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
|
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ int vas_setup_fault_window(struct vas_instance *vinst)
|
|||||||
vas_init_rx_win_attr(&attr, VAS_COP_TYPE_FAULT);
|
vas_init_rx_win_attr(&attr, VAS_COP_TYPE_FAULT);
|
||||||
|
|
||||||
attr.rx_fifo_size = vinst->fault_fifo_size;
|
attr.rx_fifo_size = vinst->fault_fifo_size;
|
||||||
attr.rx_fifo = vinst->fault_fifo;
|
attr.rx_fifo = __pa(vinst->fault_fifo);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Max creds is based on number of CRBs can fit in the FIFO.
|
* Max creds is based on number of CRBs can fit in the FIFO.
|
||||||
|
|||||||
@@ -404,7 +404,7 @@ static void init_winctx_regs(struct pnv_vas_window *window,
|
|||||||
*
|
*
|
||||||
* See also: Design note in function header.
|
* See also: Design note in function header.
|
||||||
*/
|
*/
|
||||||
val = __pa(winctx->rx_fifo);
|
val = winctx->rx_fifo;
|
||||||
val = SET_FIELD(VAS_PAGE_MIGRATION_SELECT, val, 0);
|
val = SET_FIELD(VAS_PAGE_MIGRATION_SELECT, val, 0);
|
||||||
write_hvwc_reg(window, VREG(LFIFO_BAR), val);
|
write_hvwc_reg(window, VREG(LFIFO_BAR), val);
|
||||||
|
|
||||||
@@ -739,7 +739,7 @@ static void init_winctx_for_rxwin(struct pnv_vas_window *rxwin,
|
|||||||
*/
|
*/
|
||||||
winctx->fifo_disable = true;
|
winctx->fifo_disable = true;
|
||||||
winctx->intr_disable = true;
|
winctx->intr_disable = true;
|
||||||
winctx->rx_fifo = NULL;
|
winctx->rx_fifo = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
winctx->lnotify_lpid = rxattr->lnotify_lpid;
|
winctx->lnotify_lpid = rxattr->lnotify_lpid;
|
||||||
|
|||||||
@@ -376,7 +376,7 @@ struct pnv_vas_window {
|
|||||||
* is a container for the register fields in the window context.
|
* is a container for the register fields in the window context.
|
||||||
*/
|
*/
|
||||||
struct vas_winctx {
|
struct vas_winctx {
|
||||||
void *rx_fifo;
|
u64 rx_fifo;
|
||||||
int rx_fifo_size;
|
int rx_fifo_size;
|
||||||
int wcreds_max;
|
int wcreds_max;
|
||||||
int rsvd_txbuf_count;
|
int rsvd_txbuf_count;
|
||||||
|
|||||||
@@ -404,9 +404,10 @@ void __init iommu_init_early_dart(struct pci_controller_ops *controller_ops)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize the DART HW */
|
/* Initialize the DART HW */
|
||||||
if (dart_init(dn) != 0)
|
if (dart_init(dn) != 0) {
|
||||||
|
of_node_put(dn);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
* U4 supports a DART bypass, we use it for 64-bit capable devices to
|
* U4 supports a DART bypass, we use it for 64-bit capable devices to
|
||||||
* improve performance. However, that only works for devices connected
|
* improve performance. However, that only works for devices connected
|
||||||
@@ -419,6 +420,7 @@ void __init iommu_init_early_dart(struct pci_controller_ops *controller_ops)
|
|||||||
|
|
||||||
/* Setup pci_dma ops */
|
/* Setup pci_dma ops */
|
||||||
set_pci_dma_ops(&dma_iommu_ops);
|
set_pci_dma_ops(&dma_iommu_ops);
|
||||||
|
of_node_put(dn);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
|
|||||||
@@ -505,8 +505,10 @@ int fsl_rio_setup(struct platform_device *dev)
|
|||||||
if (rc) {
|
if (rc) {
|
||||||
dev_err(&dev->dev, "Can't get %pOF property 'reg'\n",
|
dev_err(&dev->dev, "Can't get %pOF property 'reg'\n",
|
||||||
rmu_node);
|
rmu_node);
|
||||||
|
of_node_put(rmu_node);
|
||||||
goto err_rmu;
|
goto err_rmu;
|
||||||
}
|
}
|
||||||
|
of_node_put(rmu_node);
|
||||||
rmu_regs_win = ioremap(rmu_regs.start, resource_size(&rmu_regs));
|
rmu_regs_win = ioremap(rmu_regs.start, resource_size(&rmu_regs));
|
||||||
if (!rmu_regs_win) {
|
if (!rmu_regs_win) {
|
||||||
dev_err(&dev->dev, "Unable to map rmu register window\n");
|
dev_err(&dev->dev, "Unable to map rmu register window\n");
|
||||||
|
|||||||
@@ -196,6 +196,7 @@ int icp_opal_init(void)
|
|||||||
|
|
||||||
printk("XICS: Using OPAL ICP fallbacks\n");
|
printk("XICS: Using OPAL ICP fallbacks\n");
|
||||||
|
|
||||||
|
of_node_put(np);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -67,6 +67,17 @@ static int xive_irq_bitmap_add(int base, int count)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void xive_irq_bitmap_remove_all(void)
|
||||||
|
{
|
||||||
|
struct xive_irq_bitmap *xibm, *tmp;
|
||||||
|
|
||||||
|
list_for_each_entry_safe(xibm, tmp, &xive_irq_bitmaps, list) {
|
||||||
|
list_del(&xibm->list);
|
||||||
|
kfree(xibm->bitmap);
|
||||||
|
kfree(xibm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int __xive_irq_bitmap_alloc(struct xive_irq_bitmap *xibm)
|
static int __xive_irq_bitmap_alloc(struct xive_irq_bitmap *xibm)
|
||||||
{
|
{
|
||||||
int irq;
|
int irq;
|
||||||
@@ -803,7 +814,7 @@ bool __init xive_spapr_init(void)
|
|||||||
u32 val;
|
u32 val;
|
||||||
u32 len;
|
u32 len;
|
||||||
const __be32 *reg;
|
const __be32 *reg;
|
||||||
int i;
|
int i, err;
|
||||||
|
|
||||||
if (xive_spapr_disabled())
|
if (xive_spapr_disabled())
|
||||||
return false;
|
return false;
|
||||||
@@ -819,32 +830,35 @@ bool __init xive_spapr_init(void)
|
|||||||
/* Resource 1 is the OS ring TIMA */
|
/* Resource 1 is the OS ring TIMA */
|
||||||
if (of_address_to_resource(np, 1, &r)) {
|
if (of_address_to_resource(np, 1, &r)) {
|
||||||
pr_err("Failed to get thread mgmnt area resource\n");
|
pr_err("Failed to get thread mgmnt area resource\n");
|
||||||
return false;
|
goto err_put;
|
||||||
}
|
}
|
||||||
tima = ioremap(r.start, resource_size(&r));
|
tima = ioremap(r.start, resource_size(&r));
|
||||||
if (!tima) {
|
if (!tima) {
|
||||||
pr_err("Failed to map thread mgmnt area\n");
|
pr_err("Failed to map thread mgmnt area\n");
|
||||||
return false;
|
goto err_put;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!xive_get_max_prio(&max_prio))
|
if (!xive_get_max_prio(&max_prio))
|
||||||
return false;
|
goto err_unmap;
|
||||||
|
|
||||||
/* Feed the IRQ number allocator with the ranges given in the DT */
|
/* Feed the IRQ number allocator with the ranges given in the DT */
|
||||||
reg = of_get_property(np, "ibm,xive-lisn-ranges", &len);
|
reg = of_get_property(np, "ibm,xive-lisn-ranges", &len);
|
||||||
if (!reg) {
|
if (!reg) {
|
||||||
pr_err("Failed to read 'ibm,xive-lisn-ranges' property\n");
|
pr_err("Failed to read 'ibm,xive-lisn-ranges' property\n");
|
||||||
return false;
|
goto err_unmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (len % (2 * sizeof(u32)) != 0) {
|
if (len % (2 * sizeof(u32)) != 0) {
|
||||||
pr_err("invalid 'ibm,xive-lisn-ranges' property\n");
|
pr_err("invalid 'ibm,xive-lisn-ranges' property\n");
|
||||||
return false;
|
goto err_unmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < len / (2 * sizeof(u32)); i++, reg += 2)
|
for (i = 0; i < len / (2 * sizeof(u32)); i++, reg += 2) {
|
||||||
xive_irq_bitmap_add(be32_to_cpu(reg[0]),
|
err = xive_irq_bitmap_add(be32_to_cpu(reg[0]),
|
||||||
be32_to_cpu(reg[1]));
|
be32_to_cpu(reg[1]));
|
||||||
|
if (err < 0)
|
||||||
|
goto err_mem_free;
|
||||||
|
}
|
||||||
|
|
||||||
/* Iterate the EQ sizes and pick one */
|
/* Iterate the EQ sizes and pick one */
|
||||||
of_property_for_each_u32(np, "ibm,xive-eq-sizes", prop, reg, val) {
|
of_property_for_each_u32(np, "ibm,xive-eq-sizes", prop, reg, val) {
|
||||||
@@ -855,10 +869,19 @@ bool __init xive_spapr_init(void)
|
|||||||
|
|
||||||
/* Initialize XIVE core with our backend */
|
/* Initialize XIVE core with our backend */
|
||||||
if (!xive_core_init(np, &xive_spapr_ops, tima, TM_QW1_OS, max_prio))
|
if (!xive_core_init(np, &xive_spapr_ops, tima, TM_QW1_OS, max_prio))
|
||||||
return false;
|
goto err_mem_free;
|
||||||
|
|
||||||
|
of_node_put(np);
|
||||||
pr_info("Using %dkB queues\n", 1 << (xive_queue_shift - 10));
|
pr_info("Using %dkB queues\n", 1 << (xive_queue_shift - 10));
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
err_mem_free:
|
||||||
|
xive_irq_bitmap_remove_all();
|
||||||
|
err_unmap:
|
||||||
|
iounmap(tima);
|
||||||
|
err_put:
|
||||||
|
of_node_put(np);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
machine_arch_initcall(pseries, xive_core_debug_init);
|
machine_arch_initcall(pseries, xive_core_debug_init);
|
||||||
|
|||||||
@@ -23,9 +23,9 @@
|
|||||||
888 :
|
888 :
|
||||||
\new_c
|
\new_c
|
||||||
889 :
|
889 :
|
||||||
.previous
|
|
||||||
.org . - (889b - 888b) + (887b - 886b)
|
.org . - (889b - 888b) + (887b - 886b)
|
||||||
.org . - (887b - 886b) + (889b - 888b)
|
.org . - (887b - 886b) + (889b - 888b)
|
||||||
|
.previous
|
||||||
.endif
|
.endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
@@ -60,9 +60,9 @@
|
|||||||
"888 :\n" \
|
"888 :\n" \
|
||||||
new_c "\n" \
|
new_c "\n" \
|
||||||
"889 :\n" \
|
"889 :\n" \
|
||||||
".previous\n" \
|
|
||||||
".org . - (887b - 886b) + (889b - 888b)\n" \
|
".org . - (887b - 886b) + (889b - 888b)\n" \
|
||||||
".org . - (889b - 888b) + (887b - 886b)\n" \
|
".org . - (889b - 888b) + (887b - 886b)\n" \
|
||||||
|
".previous\n" \
|
||||||
".endif\n"
|
".endif\n"
|
||||||
|
|
||||||
#define __ALTERNATIVE_CFG(old_c, new_c, vendor_id, errata_id, enable) \
|
#define __ALTERNATIVE_CFG(old_c, new_c, vendor_id, errata_id, enable) \
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
static inline bool arch_irq_work_has_interrupt(void)
|
static inline bool arch_irq_work_has_interrupt(void)
|
||||||
{
|
{
|
||||||
return true;
|
return IS_ENABLED(CONFIG_SMP);
|
||||||
}
|
}
|
||||||
extern void arch_irq_work_raise(void);
|
extern void arch_irq_work_raise(void);
|
||||||
#endif /* _ASM_RISCV_IRQ_WORK_H */
|
#endif /* _ASM_RISCV_IRQ_WORK_H */
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define __ARCH_WANT_SYS_CLONE
|
#define __ARCH_WANT_SYS_CLONE
|
||||||
#define __ARCH_WANT_MEMFD_SECRET
|
|
||||||
|
|
||||||
#include <uapi/asm/unistd.h>
|
#include <uapi/asm/unistd.h>
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
#endif /* __LP64__ */
|
#endif /* __LP64__ */
|
||||||
|
|
||||||
#define __ARCH_WANT_SYS_CLONE3
|
#define __ARCH_WANT_SYS_CLONE3
|
||||||
|
#define __ARCH_WANT_MEMFD_SECRET
|
||||||
|
|
||||||
#include <asm-generic/unistd.h>
|
#include <asm-generic/unistd.h>
|
||||||
|
|
||||||
|
|||||||
@@ -301,6 +301,7 @@ clear_bss_done:
|
|||||||
REG_S a0, (a2)
|
REG_S a0, (a2)
|
||||||
|
|
||||||
/* Initialize page tables and relocate to virtual addresses */
|
/* Initialize page tables and relocate to virtual addresses */
|
||||||
|
la tp, init_task
|
||||||
la sp, init_thread_union + THREAD_SIZE
|
la sp, init_thread_union + THREAD_SIZE
|
||||||
XIP_FIXUP_OFFSET sp
|
XIP_FIXUP_OFFSET sp
|
||||||
#ifdef CONFIG_BUILTIN_DTB
|
#ifdef CONFIG_BUILTIN_DTB
|
||||||
|
|||||||
@@ -199,7 +199,7 @@ static void __init init_resources(void)
|
|||||||
res = &mem_res[res_idx--];
|
res = &mem_res[res_idx--];
|
||||||
|
|
||||||
res->name = "Reserved";
|
res->name = "Reserved";
|
||||||
res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
|
res->flags = IORESOURCE_MEM | IORESOURCE_EXCLUSIVE;
|
||||||
res->start = __pfn_to_phys(memblock_region_reserved_base_pfn(region));
|
res->start = __pfn_to_phys(memblock_region_reserved_base_pfn(region));
|
||||||
res->end = __pfn_to_phys(memblock_region_reserved_end_pfn(region)) - 1;
|
res->end = __pfn_to_phys(memblock_region_reserved_end_pfn(region)) - 1;
|
||||||
|
|
||||||
@@ -224,7 +224,7 @@ static void __init init_resources(void)
|
|||||||
|
|
||||||
if (unlikely(memblock_is_nomap(region))) {
|
if (unlikely(memblock_is_nomap(region))) {
|
||||||
res->name = "Reserved";
|
res->name = "Reserved";
|
||||||
res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
|
res->flags = IORESOURCE_MEM | IORESOURCE_EXCLUSIVE;
|
||||||
} else {
|
} else {
|
||||||
res->name = "System RAM";
|
res->name = "System RAM";
|
||||||
res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
|
res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
|
||||||
|
|||||||
@@ -369,7 +369,7 @@ void cio_gp_dma_destroy(struct gen_pool *gp_dma, struct device *dma_dev);
|
|||||||
struct gen_pool *cio_gp_dma_create(struct device *dma_dev, int nr_pages);
|
struct gen_pool *cio_gp_dma_create(struct device *dma_dev, int nr_pages);
|
||||||
|
|
||||||
/* Function from drivers/s390/cio/chsc.c */
|
/* Function from drivers/s390/cio/chsc.c */
|
||||||
int chsc_sstpc(void *page, unsigned int op, u16 ctrl, u64 *clock_delta);
|
int chsc_sstpc(void *page, unsigned int op, u16 ctrl, long *clock_delta);
|
||||||
int chsc_sstpi(void *page, void *result, size_t size);
|
int chsc_sstpi(void *page, void *result, size_t size);
|
||||||
int chsc_stzi(void *page, void *result, size_t size);
|
int chsc_stzi(void *page, void *result, size_t size);
|
||||||
int chsc_sgib(u32 origin);
|
int chsc_sgib(u32 origin);
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
#ifndef _S390_KEXEC_H
|
#ifndef _S390_KEXEC_H
|
||||||
#define _S390_KEXEC_H
|
#define _S390_KEXEC_H
|
||||||
|
|
||||||
|
#include <linux/module.h>
|
||||||
|
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
@@ -83,4 +85,12 @@ struct kimage_arch {
|
|||||||
extern const struct kexec_file_ops s390_kexec_image_ops;
|
extern const struct kexec_file_ops s390_kexec_image_ops;
|
||||||
extern const struct kexec_file_ops s390_kexec_elf_ops;
|
extern const struct kexec_file_ops s390_kexec_elf_ops;
|
||||||
|
|
||||||
|
#ifdef CONFIG_KEXEC_FILE
|
||||||
|
struct purgatory_info;
|
||||||
|
int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
|
||||||
|
Elf_Shdr *section,
|
||||||
|
const Elf_Shdr *relsec,
|
||||||
|
const Elf_Shdr *symtab);
|
||||||
|
#define arch_kexec_apply_relocations_add arch_kexec_apply_relocations_add
|
||||||
|
#endif
|
||||||
#endif /*_S390_KEXEC_H */
|
#endif /*_S390_KEXEC_H */
|
||||||
|
|||||||
@@ -46,9 +46,16 @@ static inline bool test_preempt_need_resched(void)
|
|||||||
|
|
||||||
static inline void __preempt_count_add(int val)
|
static inline void __preempt_count_add(int val)
|
||||||
{
|
{
|
||||||
if (__builtin_constant_p(val) && (val >= -128) && (val <= 127))
|
/*
|
||||||
|
* With some obscure config options and CONFIG_PROFILE_ALL_BRANCHES
|
||||||
|
* enabled, gcc 12 fails to handle __builtin_constant_p().
|
||||||
|
*/
|
||||||
|
if (!IS_ENABLED(CONFIG_PROFILE_ALL_BRANCHES)) {
|
||||||
|
if (__builtin_constant_p(val) && (val >= -128) && (val <= 127)) {
|
||||||
__atomic_add_const(val, &S390_lowcore.preempt_count);
|
__atomic_add_const(val, &S390_lowcore.preempt_count);
|
||||||
else
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
__atomic_add(val, &S390_lowcore.preempt_count);
|
__atomic_add(val, &S390_lowcore.preempt_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ static struct kvm_s390_sie_block *sie_block(struct pt_regs *regs)
|
|||||||
if (!stack)
|
if (!stack)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return (struct kvm_s390_sie_block *) stack->empty1[0];
|
return (struct kvm_s390_sie_block *)stack->empty1[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_in_guest(struct pt_regs *regs)
|
static bool is_in_guest(struct pt_regs *regs)
|
||||||
|
|||||||
@@ -364,7 +364,7 @@ static inline int check_sync_clock(void)
|
|||||||
* Apply clock delta to the global data structures.
|
* Apply clock delta to the global data structures.
|
||||||
* This is called once on the CPU that performed the clock sync.
|
* This is called once on the CPU that performed the clock sync.
|
||||||
*/
|
*/
|
||||||
static void clock_sync_global(unsigned long delta)
|
static void clock_sync_global(long delta)
|
||||||
{
|
{
|
||||||
unsigned long now, adj;
|
unsigned long now, adj;
|
||||||
struct ptff_qto qto;
|
struct ptff_qto qto;
|
||||||
@@ -400,7 +400,7 @@ static void clock_sync_global(unsigned long delta)
|
|||||||
* Apply clock delta to the per-CPU data structures of this CPU.
|
* Apply clock delta to the per-CPU data structures of this CPU.
|
||||||
* This is called for each online CPU after the call to clock_sync_global.
|
* This is called for each online CPU after the call to clock_sync_global.
|
||||||
*/
|
*/
|
||||||
static void clock_sync_local(unsigned long delta)
|
static void clock_sync_local(long delta)
|
||||||
{
|
{
|
||||||
/* Add the delta to the clock comparator. */
|
/* Add the delta to the clock comparator. */
|
||||||
if (S390_lowcore.clock_comparator != clock_comparator_max) {
|
if (S390_lowcore.clock_comparator != clock_comparator_max) {
|
||||||
@@ -424,7 +424,7 @@ static void __init time_init_wq(void)
|
|||||||
struct clock_sync_data {
|
struct clock_sync_data {
|
||||||
atomic_t cpus;
|
atomic_t cpus;
|
||||||
int in_sync;
|
int in_sync;
|
||||||
unsigned long clock_delta;
|
long clock_delta;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -544,7 +544,7 @@ static int stpinfo_valid(void)
|
|||||||
static int stp_sync_clock(void *data)
|
static int stp_sync_clock(void *data)
|
||||||
{
|
{
|
||||||
struct clock_sync_data *sync = data;
|
struct clock_sync_data *sync = data;
|
||||||
u64 clock_delta, flags;
|
long clock_delta, flags;
|
||||||
static int first;
|
static int first;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
|||||||
@@ -780,5 +780,6 @@ static_assert(offsetof(compat_siginfo_t, si_upper) == 0x18);
|
|||||||
static_assert(offsetof(compat_siginfo_t, si_pkey) == 0x14);
|
static_assert(offsetof(compat_siginfo_t, si_pkey) == 0x14);
|
||||||
static_assert(offsetof(compat_siginfo_t, si_perf_data) == 0x10);
|
static_assert(offsetof(compat_siginfo_t, si_perf_data) == 0x10);
|
||||||
static_assert(offsetof(compat_siginfo_t, si_perf_type) == 0x14);
|
static_assert(offsetof(compat_siginfo_t, si_perf_type) == 0x14);
|
||||||
|
static_assert(offsetof(compat_siginfo_t, si_perf_flags) == 0x18);
|
||||||
static_assert(offsetof(compat_siginfo_t, si_band) == 0x0c);
|
static_assert(offsetof(compat_siginfo_t, si_band) == 0x0c);
|
||||||
static_assert(offsetof(compat_siginfo_t, si_fd) == 0x10);
|
static_assert(offsetof(compat_siginfo_t, si_fd) == 0x10);
|
||||||
|
|||||||
@@ -590,5 +590,6 @@ static_assert(offsetof(siginfo_t, si_upper) == 0x28);
|
|||||||
static_assert(offsetof(siginfo_t, si_pkey) == 0x20);
|
static_assert(offsetof(siginfo_t, si_pkey) == 0x20);
|
||||||
static_assert(offsetof(siginfo_t, si_perf_data) == 0x18);
|
static_assert(offsetof(siginfo_t, si_perf_data) == 0x18);
|
||||||
static_assert(offsetof(siginfo_t, si_perf_type) == 0x20);
|
static_assert(offsetof(siginfo_t, si_perf_type) == 0x20);
|
||||||
|
static_assert(offsetof(siginfo_t, si_perf_flags) == 0x24);
|
||||||
static_assert(offsetof(siginfo_t, si_band) == 0x10);
|
static_assert(offsetof(siginfo_t, si_band) == 0x10);
|
||||||
static_assert(offsetof(siginfo_t, si_fd) == 0x14);
|
static_assert(offsetof(siginfo_t, si_fd) == 0x14);
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ static int winch_tramp(int fd, struct tty_port *port, int *fd_out,
|
|||||||
unsigned long *stack_out)
|
unsigned long *stack_out)
|
||||||
{
|
{
|
||||||
struct winch_data data;
|
struct winch_data data;
|
||||||
int fds[2], n, err;
|
int fds[2], n, err, pid;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
err = os_pipe(fds, 1, 1);
|
err = os_pipe(fds, 1, 1);
|
||||||
@@ -238,8 +238,9 @@ static int winch_tramp(int fd, struct tty_port *port, int *fd_out,
|
|||||||
* problem with /dev/net/tun, which if held open by this
|
* problem with /dev/net/tun, which if held open by this
|
||||||
* thread, prevents the TUN/TAP device from being reused.
|
* thread, prevents the TUN/TAP device from being reused.
|
||||||
*/
|
*/
|
||||||
err = run_helper_thread(winch_thread, &data, CLONE_FILES, stack_out);
|
pid = run_helper_thread(winch_thread, &data, CLONE_FILES, stack_out);
|
||||||
if (err < 0) {
|
if (pid < 0) {
|
||||||
|
err = pid;
|
||||||
printk(UM_KERN_ERR "fork of winch_thread failed - errno = %d\n",
|
printk(UM_KERN_ERR "fork of winch_thread failed - errno = %d\n",
|
||||||
-err);
|
-err);
|
||||||
goto out_close;
|
goto out_close;
|
||||||
@@ -263,7 +264,7 @@ static int winch_tramp(int fd, struct tty_port *port, int *fd_out,
|
|||||||
goto out_close;
|
goto out_close;
|
||||||
}
|
}
|
||||||
|
|
||||||
return err;
|
return pid;
|
||||||
|
|
||||||
out_close:
|
out_close:
|
||||||
close(fds[1]);
|
close(fds[1]);
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ generic-y += bug.h
|
|||||||
generic-y += compat.h
|
generic-y += compat.h
|
||||||
generic-y += current.h
|
generic-y += current.h
|
||||||
generic-y += device.h
|
generic-y += device.h
|
||||||
|
generic-y += dma-mapping.h
|
||||||
generic-y += emergency-restart.h
|
generic-y += emergency-restart.h
|
||||||
generic-y += exec.h
|
generic-y += exec.h
|
||||||
generic-y += extable.h
|
generic-y += extable.h
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ static inline struct thread_info *current_thread_info(void)
|
|||||||
#define TIF_RESTORE_SIGMASK 7
|
#define TIF_RESTORE_SIGMASK 7
|
||||||
#define TIF_NOTIFY_RESUME 8
|
#define TIF_NOTIFY_RESUME 8
|
||||||
#define TIF_SECCOMP 9 /* secure computing */
|
#define TIF_SECCOMP 9 /* secure computing */
|
||||||
|
#define TIF_SINGLESTEP 10 /* single stepping userspace */
|
||||||
|
|
||||||
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
|
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
|
||||||
#define _TIF_SIGPENDING (1 << TIF_SIGPENDING)
|
#define _TIF_SIGPENDING (1 << TIF_SIGPENDING)
|
||||||
@@ -72,5 +73,6 @@ static inline struct thread_info *current_thread_info(void)
|
|||||||
#define _TIF_MEMDIE (1 << TIF_MEMDIE)
|
#define _TIF_MEMDIE (1 << TIF_MEMDIE)
|
||||||
#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
|
#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
|
||||||
#define _TIF_SECCOMP (1 << TIF_SECCOMP)
|
#define _TIF_SECCOMP (1 << TIF_SECCOMP)
|
||||||
|
#define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ void start_thread(struct pt_regs *regs, unsigned long eip, unsigned long esp)
|
|||||||
{
|
{
|
||||||
PT_REGS_IP(regs) = eip;
|
PT_REGS_IP(regs) = eip;
|
||||||
PT_REGS_SP(regs) = esp;
|
PT_REGS_SP(regs) = esp;
|
||||||
current->ptrace &= ~PT_DTRACE;
|
clear_thread_flag(TIF_SINGLESTEP);
|
||||||
#ifdef SUBARCH_EXECVE1
|
#ifdef SUBARCH_EXECVE1
|
||||||
SUBARCH_EXECVE1(regs->regs);
|
SUBARCH_EXECVE1(regs->regs);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -339,7 +339,7 @@ int singlestepping(void * t)
|
|||||||
{
|
{
|
||||||
struct task_struct *task = t ? t : current;
|
struct task_struct *task = t ? t : current;
|
||||||
|
|
||||||
if (!(task->ptrace & PT_DTRACE))
|
if (!test_thread_flag(TIF_SINGLESTEP))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (task->thread.singlestep_syscall)
|
if (task->thread.singlestep_syscall)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
void user_enable_single_step(struct task_struct *child)
|
void user_enable_single_step(struct task_struct *child)
|
||||||
{
|
{
|
||||||
child->ptrace |= PT_DTRACE;
|
set_tsk_thread_flag(child, TIF_SINGLESTEP);
|
||||||
child->thread.singlestep_syscall = 0;
|
child->thread.singlestep_syscall = 0;
|
||||||
|
|
||||||
#ifdef SUBARCH_SET_SINGLESTEPPING
|
#ifdef SUBARCH_SET_SINGLESTEPPING
|
||||||
@@ -22,7 +22,7 @@ void user_enable_single_step(struct task_struct *child)
|
|||||||
|
|
||||||
void user_disable_single_step(struct task_struct *child)
|
void user_disable_single_step(struct task_struct *child)
|
||||||
{
|
{
|
||||||
child->ptrace &= ~PT_DTRACE;
|
clear_tsk_thread_flag(child, TIF_SINGLESTEP);
|
||||||
child->thread.singlestep_syscall = 0;
|
child->thread.singlestep_syscall = 0;
|
||||||
|
|
||||||
#ifdef SUBARCH_SET_SINGLESTEPPING
|
#ifdef SUBARCH_SET_SINGLESTEPPING
|
||||||
@@ -121,7 +121,7 @@ static void send_sigtrap(struct uml_pt_regs *regs, int error_code)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XXX Check PT_DTRACE vs TIF_SINGLESTEP for singlestepping check and
|
* XXX Check TIF_SINGLESTEP for singlestepping check and
|
||||||
* PT_PTRACED vs TIF_SYSCALL_TRACE for syscall tracing check
|
* PT_PTRACED vs TIF_SYSCALL_TRACE for syscall tracing check
|
||||||
*/
|
*/
|
||||||
int syscall_trace_enter(struct pt_regs *regs)
|
int syscall_trace_enter(struct pt_regs *regs)
|
||||||
@@ -145,7 +145,7 @@ void syscall_trace_leave(struct pt_regs *regs)
|
|||||||
audit_syscall_exit(regs);
|
audit_syscall_exit(regs);
|
||||||
|
|
||||||
/* Fake a debug trap */
|
/* Fake a debug trap */
|
||||||
if (ptraced & PT_DTRACE)
|
if (test_thread_flag(TIF_SINGLESTEP))
|
||||||
send_sigtrap(®s->regs, 0);
|
send_sigtrap(®s->regs, 0);
|
||||||
|
|
||||||
if (!test_thread_flag(TIF_SYSCALL_TRACE))
|
if (!test_thread_flag(TIF_SYSCALL_TRACE))
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs)
|
|||||||
unsigned long sp;
|
unsigned long sp;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if ((current->ptrace & PT_DTRACE) && (current->ptrace & PT_PTRACED))
|
if (test_thread_flag(TIF_SINGLESTEP) && (current->ptrace & PT_PTRACED))
|
||||||
singlestep = 1;
|
singlestep = 1;
|
||||||
|
|
||||||
/* Did we come from a system call? */
|
/* Did we come from a system call? */
|
||||||
@@ -128,7 +128,7 @@ void do_signal(struct pt_regs *regs)
|
|||||||
* on the host. The tracing thread will check this flag and
|
* on the host. The tracing thread will check this flag and
|
||||||
* PTRACE_SYSCALL if necessary.
|
* PTRACE_SYSCALL if necessary.
|
||||||
*/
|
*/
|
||||||
if (current->ptrace & PT_DTRACE)
|
if (test_thread_flag(TIF_SINGLESTEP))
|
||||||
current->thread.singlestep_syscall =
|
current->thread.singlestep_syscall =
|
||||||
is_syscall(PT_REGS_IP(¤t->thread.regs));
|
is_syscall(PT_REGS_IP(¤t->thread.regs));
|
||||||
|
|
||||||
|
|||||||
@@ -1325,7 +1325,7 @@ config MICROCODE
|
|||||||
|
|
||||||
config MICROCODE_INTEL
|
config MICROCODE_INTEL
|
||||||
bool "Intel microcode loading support"
|
bool "Intel microcode loading support"
|
||||||
depends on MICROCODE
|
depends on CPU_SUP_INTEL && MICROCODE
|
||||||
default MICROCODE
|
default MICROCODE
|
||||||
help
|
help
|
||||||
This options enables microcode patch loading support for Intel
|
This options enables microcode patch loading support for Intel
|
||||||
@@ -1337,7 +1337,7 @@ config MICROCODE_INTEL
|
|||||||
|
|
||||||
config MICROCODE_AMD
|
config MICROCODE_AMD
|
||||||
bool "AMD microcode loading support"
|
bool "AMD microcode loading support"
|
||||||
depends on MICROCODE
|
depends on CPU_SUP_AMD && MICROCODE
|
||||||
help
|
help
|
||||||
If you select this option, microcode patch loading support for AMD
|
If you select this option, microcode patch loading support for AMD
|
||||||
processors will be enabled.
|
processors will be enabled.
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user