Merge 4.19.270 into android-4.19-stable
Changes in 4.19.270
mm/khugepaged: fix GUP-fast interaction by sending IPI
mm/khugepaged: invoke MMU notifiers in shmem/file collapse paths
block: unhash blkdev part inode when the part is deleted
nfp: fix use-after-free in area_cache_get()
ASoC: ops: Check bounds for second channel in snd_soc_put_volsw_sx()
pinctrl: meditatek: Startup with the IRQs disabled
can: sja1000: fix size of OCR_MODE_MASK define
can: mcba_usb: Fix termination command argument
ASoC: ops: Correct bounds check for second channel on SX controls
perf script python: Remove explicit shebang from tests/attr.c
udf: Discard preallocation before extending file with a hole
udf: Fix preallocation discarding at indirect extent boundary
udf: Do not bother looking for prealloc extents if i_lenExtents matches i_size
udf: Fix extending file within last block
usb: gadget: uvc: Prevent buffer overflow in setup handler
USB: serial: option: add Quectel EM05-G modem
USB: serial: cp210x: add Kamstrup RF sniffer PIDs
USB: serial: f81534: fix division by zero on line-speed change
igb: Initialize mailbox message for VF reset
Bluetooth: L2CAP: Fix u8 overflow
net: loopback: use NET_NAME_PREDICTABLE for name_assign_type
usb: musb: remove extra check in musb_gadget_vbus_draw
ARM: dts: qcom: apq8064: fix coresight compatible
drivers: soc: ti: knav_qmss_queue: Mark knav_acc_firmwares as static
arm: dts: spear600: Fix clcd interrupt
soc: ti: smartreflex: Fix PM disable depth imbalance in omap_sr_probe
perf: arm_dsu: Fix hotplug callback leak in dsu_pmu_init()
arm64: dts: mt2712e: Fix unit_address_vs_reg warning for oscillators
arm64: dts: mt2712e: Fix unit address for pinctrl node
arm64: dts: mt2712-evb: Fix vproc fixed regulators unit names
arm64: dts: mediatek: mt6797: Fix 26M oscillator unit name
ARM: dts: dove: Fix assigned-addresses for every PCIe Root Port
ARM: dts: armada-370: Fix assigned-addresses for every PCIe Root Port
ARM: dts: armada-xp: Fix assigned-addresses for every PCIe Root Port
ARM: dts: armada-375: Fix assigned-addresses for every PCIe Root Port
ARM: dts: armada-38x: Fix assigned-addresses for every PCIe Root Port
ARM: dts: armada-39x: Fix assigned-addresses for every PCIe Root Port
ARM: dts: turris-omnia: Add ethernet aliases
ARM: dts: turris-omnia: Add switch port 6 node
pstore/ram: Fix error return code in ramoops_probe()
ARM: mmp: fix timer_read delay
pstore: Avoid kcore oops by vmap()ing with VM_IOREMAP
tpm/tpm_crb: Fix error message in __crb_relinquish_locality()
cpuidle: dt: Return the correct numbers of parsed idle states
alpha: fix syscall entry in !AUDUT_SYSCALL case
fs: don't audit the capability check in simple_xattr_list()
selftests/ftrace: event_triggers: wait longer for test_event_enable
perf: Fix possible memleak in pmu_dev_alloc()
timerqueue: Use rb_entry_safe() in timerqueue_getnext()
proc: fixup uptime selftest
ocfs2: fix memory leak in ocfs2_stack_glue_init()
MIPS: vpe-mt: fix possible memory leak while module exiting
MIPS: vpe-cmp: fix possible memory leak while module exiting
PNP: fix name memory leak in pnp_alloc_dev()
perf/x86/intel/uncore: Fix reference count leak in hswep_has_limit_sbox()
irqchip: gic-pm: Use pm_runtime_resume_and_get() in gic_probe()
cpufreq: amd_freq_sensitivity: Add missing pci_dev_put()
libfs: add DEFINE_SIMPLE_ATTRIBUTE_SIGNED for signed value
lib/notifier-error-inject: fix error when writing -errno to debugfs file
debugfs: fix error when writing negative value to atomic_t debugfs file
rapidio: fix possible name leaks when rio_add_device() fails
rapidio: rio: fix possible name leak in rio_register_mport()
clocksource/drivers/sh_cmt: Make sure channel clock supply is enabled
ACPICA: Fix use-after-free in acpi_ut_copy_ipackage_to_ipackage()
uprobes/x86: Allow to probe a NOP instruction with 0x66 prefix
xen/events: only register debug interrupt for 2-level events
x86/xen: Fix memory leak in xen_smp_intr_init{_pv}()
x86/xen: Fix memory leak in xen_init_lock_cpu()
xen/privcmd: Fix a possible warning in privcmd_ioctl_mmap_resource()
PM: runtime: Improve path in rpm_idle() when no callback
PM: runtime: Do not call __rpm_callback() from rpm_idle()
platform/x86: mxm-wmi: fix memleak in mxm_wmi_call_mx[ds|mx]()
MIPS: BCM63xx: Add check for NULL for clk in clk_enable
fs: sysv: Fix sysv_nblocks() returns wrong value
rapidio: fix possible UAF when kfifo_alloc() fails
eventfd: change int to __u64 in eventfd_signal() ifndef CONFIG_EVENTFD
relay: fix type mismatch when allocating memory in relay_create_buf()
hfs: Fix OOB Write in hfs_asc2mac
rapidio: devices: fix missing put_device in mport_cdev_open
wifi: ath9k: hif_usb: fix memory leak of urbs in ath9k_hif_usb_dealloc_tx_urbs()
wifi: ath9k: hif_usb: Fix use-after-free in ath9k_hif_usb_reg_in_cb()
wifi: rtl8xxxu: Fix reading the vendor of combo chips
pata_ipx4xx_cf: Fix unsigned comparison with less than zero
media: i2c: ad5820: Fix error path
can: kvaser_usb: do not increase tx statistics when sending error message frames
can: kvaser_usb: kvaser_usb_leaf: Get capabilities from device
can: kvaser_usb: kvaser_usb_leaf: Rename {leaf,usbcan}_cmd_error_event to {leaf,usbcan}_cmd_can_error_event
can: kvaser_usb: kvaser_usb_leaf: Handle CMD_ERROR_EVENT
can: kvaser_usb_leaf: Set Warning state even without bus errors
can: kvaser_usb_leaf: Fix improved state not being reported
can: kvaser_usb_leaf: Fix wrong CAN state after stopping
can: kvaser_usb_leaf: Fix bogus restart events
can: kvaser_usb: Add struct kvaser_usb_busparams
can: kvaser_usb: Compare requested bittiming parameters with actual parameters in do_set_{,data}_bittiming
spi: Update reference to struct spi_controller
media: vivid: fix compose size exceed boundary
mtd: Fix device name leak when register device failed in add_mtd_device()
wifi: rsi: Fix handling of 802.3 EAPOL frames sent via control port
media: camss: Clean up received buffers on failed start of streaming
net, proc: Provide PROC_FS=n fallback for proc_create_net_single_write()
drm/radeon: Add the missed acpi_put_table() to fix memory leak
ASoC: pxa: fix null-pointer dereference in filter()
regulator: core: fix unbalanced of node refcount in regulator_dev_lookup()
ima: Fix misuse of dereference of pointer in template_desc_init_fields()
wifi: ath10k: Fix return value in ath10k_pci_init()
mtd: lpddr2_nvm: Fix possible null-ptr-deref
Input: elants_i2c - properly handle the reset GPIO when power is off
media: solo6x10: fix possible memory leak in solo_sysfs_init()
media: platform: exynos4-is: Fix error handling in fimc_md_init()
HID: hid-sensor-custom: set fixed size for custom attributes
ALSA: seq: fix undefined behavior in bit shift for SNDRV_SEQ_FILTER_USE_EVENT
clk: rockchip: Fix memory leak in rockchip_clk_register_pll()
bonding: Export skip slave logic to function
mtd: maps: pxa2xx-flash: fix memory leak in probe
drbd: remove call to memset before free device/resource/connection
media: imon: fix a race condition in send_packet()
pinctrl: pinconf-generic: add missing of_node_put()
media: dvb-core: Fix ignored return value in dvb_register_frontend()
media: dvb-usb: az6027: fix null-ptr-deref in az6027_i2c_xfer()
media: s5p-mfc: Add variant data for MFC v7 hardware for Exynos 3250 SoC
drm/tegra: Add missing clk_disable_unprepare() in tegra_dc_probe()
NFSv4.2: Fix a memory stomp in decode_attr_security_label
NFSv4: Fix a deadlock between nfs4_open_recover_helper() and delegreturn
ALSA: asihpi: fix missing pci_disable_device()
drm/radeon: Fix PCI device refcount leak in radeon_atrm_get_bios()
drm/amdgpu: Fix PCI device refcount leak in amdgpu_atrm_get_bios()
ASoC: pcm512x: Fix PM disable depth imbalance in pcm512x_probe
bonding: uninitialized variable in bond_miimon_inspect()
wifi: cfg80211: Fix not unregister reg_pdev when load_builtin_regdb_keys() fails
regulator: core: fix module refcount leak in set_supply()
media: saa7164: fix missing pci_disable_device()
ALSA: mts64: fix possible null-ptr-defer in snd_mts64_interrupt
SUNRPC: Fix missing release socket in rpc_sockname()
NFSv4.x: Fail client initialisation if state manager thread can't run
mmc: moxart: fix return value check of mmc_add_host()
mmc: mxcmmc: fix return value check of mmc_add_host()
mmc: rtsx_usb_sdmmc: fix return value check of mmc_add_host()
mmc: toshsd: fix return value check of mmc_add_host()
mmc: vub300: fix return value check of mmc_add_host()
mmc: wmt-sdmmc: fix return value check of mmc_add_host()
mmc: atmel-mci: fix return value check of mmc_add_host()
mmc: meson-gx: fix return value check of mmc_add_host()
mmc: via-sdmmc: fix return value check of mmc_add_host()
mmc: wbsd: fix return value check of mmc_add_host()
mmc: mmci: fix return value check of mmc_add_host()
media: c8sectpfe: Add of_node_put() when breaking out of loop
media: coda: Add check for dcoda_iram_alloc
media: coda: Add check for kmalloc
clk: samsung: Fix memory leak in _samsung_clk_register_pll()
wifi: rtl8xxxu: Add __packed to struct rtl8723bu_c2h
rtl8xxxu: add enumeration for channel bandwidth
wifi: brcmfmac: Fix error return code in brcmf_sdio_download_firmware()
blktrace: Fix output non-blktrace event when blk_classic option enabled
clk: socfpga: clk-pll: Remove unused variable 'rc'
clk: socfpga: use clk_hw_register for a5/c5
net: vmw_vsock: vmci: Check memcpy_from_msg()
net: defxx: Fix missing err handling in dfx_init()
drivers: net: qlcnic: Fix potential memory leak in qlcnic_sriov_init()
ethernet: s2io: don't call dev_kfree_skb() under spin_lock_irqsave()
net: farsync: Fix kmemleak when rmmods farsync
net/tunnel: wait until all sk_user_data reader finish before releasing the sock
net: apple: mace: don't call dev_kfree_skb() under spin_lock_irqsave()
net: apple: bmac: don't call dev_kfree_skb() under spin_lock_irqsave()
net: emaclite: don't call dev_kfree_skb() under spin_lock_irqsave()
net: ethernet: dnet: don't call dev_kfree_skb() under spin_lock_irqsave()
hamradio: don't call dev_kfree_skb() under spin_lock_irqsave()
net: amd: lance: don't call dev_kfree_skb() under spin_lock_irqsave()
net: amd-xgbe: Fix logic around active and passive cables
net: amd-xgbe: Check only the minimum speed for active/passive cables
net: lan9303: Fix read error execution path
ntb_netdev: Use dev_kfree_skb_any() in interrupt context
Bluetooth: btusb: don't call kfree_skb() under spin_lock_irqsave()
Bluetooth: hci_qca: don't call kfree_skb() under spin_lock_irqsave()
Bluetooth: hci_h5: don't call kfree_skb() under spin_lock_irqsave()
Bluetooth: hci_bcsp: don't call kfree_skb() under spin_lock_irqsave()
Bluetooth: hci_core: don't call kfree_skb() under spin_lock_irqsave()
Bluetooth: RFCOMM: don't call kfree_skb() under spin_lock_irqsave()
stmmac: fix potential division by 0
apparmor: fix a memleak in multi_transaction_new()
apparmor: fix lockdep warning when removing a namespace
apparmor: Fix abi check to include v8 abi
f2fs: fix normal discard process
RDMA/nldev: Return "-EAGAIN" if the cm_id isn't from expected port
scsi: scsi_debug: Fix a warning in resp_write_scat()
PCI: Check for alloc failure in pci_request_irq()
RDMA/hfi: Decrease PCI device reference count in error path
crypto: ccree - Make cc_debugfs_global_fini() available for module init function
RDMA/rxe: Fix NULL-ptr-deref in rxe_qp_do_cleanup() when socket create failed
scsi: hpsa: use local workqueues instead of system workqueues
scsi: hpsa: Fix possible memory leak in hpsa_init_one()
crypto: tcrypt - Fix multibuffer skcipher speed test mem leak
scsi: hpsa: Fix error handling in hpsa_add_sas_host()
scsi: hpsa: Fix possible memory leak in hpsa_add_sas_device()
scsi: fcoe: Fix possible name leak when device_register() fails
scsi: ipr: Fix WARNING in ipr_init()
scsi: fcoe: Fix transport not deattached when fcoe_if_init() fails
scsi: snic: Fix possible UAF in snic_tgt_create()
RDMA/hfi1: Fix error return code in parse_platform_config()
orangefs: Fix sysfs not cleanup when dev init failed
crypto: img-hash - Fix variable dereferenced before check 'hdev->req'
hwrng: amd - Fix PCI device refcount leak
hwrng: geode - Fix PCI device refcount leak
IB/IPoIB: Fix queue count inconsistency for PKEY child interfaces
drivers: dio: fix possible memory leak in dio_init()
serial: tegra: avoid reg access when clk disabled
serial: tegra: check for FIFO mode enabled status
serial: tegra: set maximum num of uart ports to 8
serial: tegra: add support to use 8 bytes trigger
serial: tegra: add support to adjust baud rate
serial: tegra: report clk rate errors
serial: tegra: Add PIO mode support
tty: serial: tegra: Activate RX DMA transfer by request
serial: tegra: Read DMA status before terminating
class: fix possible memory leak in __class_register()
vfio: platform: Do not pass return buffer to ACPI _RST method
uio: uio_dmem_genirq: Fix missing unlock in irq configuration
uio: uio_dmem_genirq: Fix deadlock between irq config and handling
usb: fotg210-udc: Fix ages old endianness issues
staging: vme_user: Fix possible UAF in tsi148_dma_list_add
usb: typec: Check for ops->exit instead of ops->enter in altmode_exit
serial: amba-pl011: avoid SBSA UART accessing DMACR register
serial: pl011: Do not clear RX FIFO & RX interrupt in unthrottle.
serial: pch: Fix PCI device refcount leak in pch_request_dma()
tty: serial: clean up stop-tx part in altera_uart_tx_chars()
tty: serial: altera_uart_{r,t}x_chars() need only uart_port
serial: altera_uart: fix locking in polling mode
serial: sunsab: Fix error handling in sunsab_init()
test_firmware: fix memory leak in test_firmware_init()
misc: tifm: fix possible memory leak in tifm_7xx1_switch_media()
misc: sgi-gru: fix use-after-free error in gru_set_context_option, gru_fault and gru_handle_user_call_os
cxl: fix possible null-ptr-deref in cxl_guest_init_afu|adapter()
cxl: fix possible null-ptr-deref in cxl_pci_init_afu|adapter()
usb: gadget: f_hid: optional SETUP/SET_REPORT mode
usb: gadget: f_hid: fix f_hidg lifetime vs cdev
usb: gadget: f_hid: fix refcount leak on error path
drivers: mcb: fix resource leak in mcb_probe()
mcb: mcb-parse: fix error handing in chameleon_parse_gdd()
chardev: fix error handling in cdev_device_add()
i2c: pxa-pci: fix missing pci_disable_device() on error in ce4100_i2c_probe
staging: rtl8192u: Fix use after free in ieee80211_rx()
staging: rtl8192e: Fix potential use-after-free in rtllib_rx_Monitor()
vme: Fix error not catched in fake_init()
i2c: ismt: Fix an out-of-bounds bug in ismt_access()
usb: storage: Add check for kcalloc
tracing/hist: Fix issue of losting command info in error_log
samples: vfio-mdev: Fix missing pci_disable_device() in mdpy_fb_probe()
fbdev: ssd1307fb: Drop optional dependency
fbdev: pm2fb: fix missing pci_disable_device()
fbdev: via: Fix error in via_core_init()
fbdev: vermilion: decrease reference count in error path
fbdev: uvesafb: Fixes an error handling path in uvesafb_probe()
HSI: omap_ssi_core: fix unbalanced pm_runtime_disable()
HSI: omap_ssi_core: fix possible memory leak in ssi_probe()
power: supply: fix residue sysfs file in error handle route of __power_supply_register()
perf symbol: correction while adjusting symbol
HSI: omap_ssi_core: Fix error handling in ssi_init()
include/uapi/linux/swab: Fix potentially missing __always_inline
rtc: snvs: Allow a time difference on clock register read
iommu/amd: Fix pci device refcount leak in ppr_notifier()
iommu/fsl_pamu: Fix resource leak in fsl_pamu_probe()
macintosh: fix possible memory leak in macio_add_one_device()
macintosh/macio-adb: check the return value of ioremap()
powerpc/52xx: Fix a resource leak in an error handling path
cxl: Fix refcount leak in cxl_calc_capp_routing
powerpc/xive: add missing iounmap() in error path in xive_spapr_populate_irq_data()
powerpc/perf: callchain validate kernel stack pointer bounds
powerpc/83xx/mpc832x_rdb: call platform_device_put() in error case in of_fsl_spi_probe()
powerpc/hv-gpci: Fix hv_gpci event list
selftests/powerpc: Fix resource leaks
rtc: st-lpc: Add missing clk_disable_unprepare in st_rtc_probe()
nfsd: under NFSv4.1, fix double svc_xprt_put on rpc_create failure
mISDN: hfcsusb: don't call dev_kfree_skb/kfree_skb() under spin_lock_irqsave()
mISDN: hfcpci: don't call dev_kfree_skb/kfree_skb() under spin_lock_irqsave()
mISDN: hfcmulti: don't call dev_kfree_skb/kfree_skb() under spin_lock_irqsave()
nfc: pn533: Clear nfc_target before being used
r6040: Fix kmemleak in probe and remove
rtc: mxc_v2: Add missing clk_disable_unprepare()
openvswitch: Fix flow lookup to use unmasked key
skbuff: Account for tail adjustment during pull operations
net_sched: reject TCF_EM_SIMPLE case for complex ematch module
rxrpc: Fix missing unlock in rxrpc_do_sendmsg()
myri10ge: Fix an error handling path in myri10ge_probe()
net: stream: purge sk_error_queue in sk_stream_kill_queues()
binfmt_misc: fix shift-out-of-bounds in check_special_flags
fs: jfs: fix shift-out-of-bounds in dbAllocAG
udf: Avoid double brelse() in udf_rename()
fs: jfs: fix shift-out-of-bounds in dbDiscardAG
ACPICA: Fix error code path in acpi_ds_call_control_method()
nilfs2: fix shift-out-of-bounds/overflow in nilfs_sb2_bad_offset()
acct: fix potential integer overflow in encode_comp_t()
hfs: fix OOB Read in __hfs_brec_find
wifi: ath9k: verify the expected usb_endpoints are present
wifi: ar5523: Fix use-after-free on ar5523_cmd() timed out
ASoC: codecs: rt298: Add quirk for KBL-R RVP platform
ipmi: fix memleak when unload ipmi driver
bpf: make sure skb->len != 0 when redirecting to a tunneling device
net: ethernet: ti: Fix return type of netcp_ndo_start_xmit()
hamradio: baycom_epp: Fix return type of baycom_send_packet()
wifi: brcmfmac: Fix potential shift-out-of-bounds in brcmf_fw_alloc_request()
igb: Do not free q_vector unless new one was allocated
drm/amdgpu: Fix type of second parameter in trans_msg() callback
s390/ctcm: Fix return type of ctc{mp,}m_tx()
s390/netiucv: Fix return type of netiucv_tx()
s390/lcs: Fix return type of lcs_start_xmit()
drm/sti: Use drm_mode_copy()
drivers/md/md-bitmap: check the return value of md_bitmap_get_counter()
md/raid1: stop mdx_raid1 thread when raid1 array run failed
mrp: introduce active flags to prevent UAF when applicant uninit
ppp: associate skb with a device at tx
media: dvb-frontends: fix leak of memory fw
media: dvbdev: adopts refcnt to avoid UAF
media: dvb-usb: fix memory leak in dvb_usb_adapter_init()
blk-mq: fix possible memleak when register 'hctx' failed
regulator: core: fix use_count leakage when handling boot-on
mmc: f-sdh30: Add quirks for broken timeout clock capability
media: si470x: Fix use-after-free in si470x_int_in_callback()
clk: st: Fix memory leak in st_of_quadfs_setup()
drm/fsl-dcu: Fix return type of fsl_dcu_drm_connector_mode_valid()
drm/sti: Fix return type of sti_{dvo,hda,hdmi}_connector_mode_valid()
orangefs: Fix kmemleak in orangefs_prepare_debugfs_help_string()
ASoC: mediatek: mt8173-rt5650-rt5514: fix refcount leak in mt8173_rt5650_rt5514_dev_probe()
ASoC: rockchip: pdm: Add missing clk_disable_unprepare() in rockchip_pdm_runtime_resume()
ASoC: wm8994: Fix potential deadlock
ASoC: rockchip: spdif: Add missing clk_disable_unprepare() in rk_spdif_runtime_resume()
ASoC: rt5670: Remove unbalanced pm_runtime_put()
pstore: Switch pmsg_lock to an rt_mutex to avoid priority inversion
pstore: Make sure CONFIG_PSTORE_PMSG selects CONFIG_RT_MUTEXES
usb: dwc3: core: defer probe on ulpi_read_id timeout
HID: wacom: Ensure bootloader PID is usable in hidraw mode
reiserfs: Add missing calls to reiserfs_security_free()
iio: adc: ad_sigma_delta: do not use internal iio_dev lock
gcov: add support for checksum field
media: dvbdev: fix build warning due to comments
media: dvbdev: fix refcnt bug
ata: ahci: Fix PCS quirk application for suspend
powerpc/rtas: avoid device tree lookups in rtas_os_term()
powerpc/rtas: avoid scheduling in rtas_os_term()
HID: plantronics: Additional PIDs for double volume key presses quirk
hfsplus: fix bug causing custom uid and gid being unable to be assigned with mount
ovl: Use ovl mounter's fsuid and fsgid in ovl_link()
ALSA: line6: correct midi status byte when receiving data from podxt
ALSA: line6: fix stack overflow in line6_midi_transmit
pnode: terminate at peers of source
md: fix a crash in mempool_free
mmc: vub300: fix warning - do not call blocking ops when !TASK_RUNNING
tpm: tpm_crb: Add the missed acpi_put_table() to fix memory leak
tpm: tpm_tis: Add the missed acpi_put_table() to fix memory leak
SUNRPC: Don't leak netobj memory when gss_read_proxy_verf() fails
media: stv0288: use explicitly signed char
soc: qcom: Select REMAP_MMIO for LLCC driver
ktest.pl minconfig: Unset configs instead of just removing them
ARM: ux500: do not directly dereference __iomem
selftests: Use optional USERCFLAGS and USERLDFLAGS
binfmt: Move install_exec_creds after setup_new_exec to match binfmt_elf
binfmt: Fix error return code in load_elf_fdpic_binary()
dm cache: Fix ABBA deadlock between shrink_slab and dm_cache_metadata_abort
dm thin: Use last transaction's pmd->root when commit failed
dm thin: Fix UAF in run_timer_softirq()
dm cache: Fix UAF in destroy()
dm cache: set needs_check flag after aborting metadata
x86/microcode/intel: Do not retry microcode reloading on the APs
tracing: Fix infinite loop in tracing_read_pipe on overflowed print_trace_line
ARM: 9256/1: NWFPE: avoid compiler-generated __aeabi_uldivmod
media: dvb-core: Fix double free in dvb_register_device()
media: dvb-core: Fix UAF due to refcount races at releasing
cifs: fix confusing debug message
md/bitmap: Fix bitmap chunk size overflow issues
ipmi: fix long wait in unload when IPMI disconnect
ima: Fix a potential NULL pointer access in ima_restore_measurement_list
ipmi: fix use after free in _ipmi_destroy_user()
PCI: Fix pci_device_is_present() for VFs by checking PF
PCI/sysfs: Fix double free in error path
crypto: n2 - add missing hash statesize
iommu/amd: Fix ivrs_acpihid cmdline parsing code
parisc: led: Fix potential null-ptr-deref in start_task()
device_cgroup: Roll back to original exceptions after copy failure
drm/connector: send hotplug uevent on connector cleanup
drm/vmwgfx: Validate the box size for the snooped cursor
ext4: add inode table check in __ext4_get_inode_loc to aovid possible infinite loop
ext4: fix undefined behavior in bit shift for ext4_check_flag_values
ext4: add helper to check quota inums
ext4: fix bug_on in __es_tree_search caused by bad boot loader inode
ext4: init quota for 'old.inode' in 'ext4_rename'
ext4: fix corruption when online resizing a 1K bigalloc fs
ext4: fix error code return to user-space in ext4_get_branch()
ext4: avoid BUG_ON when creating xattrs
ext4: fix inode leak in ext4_xattr_inode_create() on an error path
ext4: initialize quota before expanding inode in setproject ioctl
ext4: avoid unaccounted block allocation when expanding inode
ext4: allocate extended attribute value in vmalloc area
btrfs: send: avoid unnecessary backref lookups when finding clone source
btrfs: replace strncpy() with strscpy()
media: s5p-mfc: Fix to handle reference queue during finishing
media: s5p-mfc: Clear workbit to handle error condition
media: s5p-mfc: Fix in register read and write for H264
dm thin: resume even if in FAIL mode
perf probe: Use dwarf_attr_integrate as generic DWARF attr accessor
perf probe: Fix to get the DW_AT_decl_file and DW_AT_call_file as unsinged data
ravb: Fix "failed to switch device to config mode" message during unbind
driver core: Set deferred_probe_timeout to a longer default if CONFIG_MODULES is set
ext4: goto right label 'failed_mount3a'
ext4: correct inconsistent error msg in nojournal mode
ext4: use kmemdup() to replace kmalloc + memcpy
mbcache: don't reclaim used entries
mbcache: add functions to delete entry if unused
ext4: remove EA inode entry from mbcache on inode eviction
ext4: unindent codeblock in ext4_xattr_block_set()
ext4: fix race when reusing xattr blocks
mbcache: automatically delete entries from cache on freeing
ext4: fix deadlock due to mbcache entry corruption
SUNRPC: ensure the matching upcall is in-flight upon downcall
bpf: pull before calling skb_postpull_rcsum()
qlcnic: prevent ->dcb use-after-free on qlcnic_dcb_enable() failure
nfc: Fix potential resource leaks
net: amd-xgbe: add missed tasklet_kill
net: phy: xgmiitorgmii: Fix refcount leak in xgmiitorgmii_probe
RDMA/mlx5: Fix validation of max_rd_atomic caps for DC
net: sched: atm: dont intepret cls results when asked to drop
usb: rndis_host: Secure rndis_query check against int overflow
caif: fix memory leak in cfctrl_linkup_request()
udf: Fix extension of the last extent in the file
ASoC: Intel: bytcr_rt5640: Add quirk for the Advantech MICA-071 tablet
x86/bugs: Flush IBP in ib_prctl_set()
nfsd: fix handling of readdir in v4root vs. mount upcall timeout
riscv: uaccess: fix type of 0 variable on error in get_user()
ext4: don't allow journal inode to have encrypt flag
hfs/hfsplus: use WARN_ON for sanity check
hfs/hfsplus: avoid WARN_ON() for sanity check, use proper error handling
mbcache: Avoid nesting of cache->c_list_lock under bit locks
parisc: Align parisc MADV_XXX constants with all other architectures
driver core: Fix bus_type.match() error handling in __driver_attach()
net: sched: disallow noqueue for qdisc classes
docs: Fix the docs build with Sphinx 6.0
perf auxtrace: Fix address filter duplicate symbol selection
s390/percpu: add READ_ONCE() to arch_this_cpu_to_op_simple()
net/ulp: prevent ULP without clone op from entering the LISTEN status
ALSA: pcm: Move rwsem lock inside snd_ctl_elem_read to prevent UAF
cifs: Fix uninitialized memory read for smb311 posix symlink create
platform/x86: sony-laptop: Don't turn off 0x153 keyboard backlight during probe
ipv6: raw: Deduct extension header length in rawv6_push_pending_frames
wifi: wilc1000: sdio: fix module autoloading
ALSA: hda/hdmi: fix failures at PCM open on Intel ICL and later
ktest: Add support for meta characters in GRUB_MENU
ktest: introduce _get_grub_index
ktest: cleanup get_grub_index
ktest: introduce grub2bls REBOOT_TYPE option
ktest.pl: Fix incorrect reboot for grub2bls
kest.pl: Fix grub2 menu handling for rebooting
usb: ulpi: defer ulpi_register on ulpi_read_id timeout
quota: Factor out setup of quota inode
ext4: fix bug_on in __es_tree_search caused by bad quota inode
ext4: lost matching-pair of trace in ext4_truncate
ext4: fix use-after-free in ext4_orphan_cleanup
ext4: fix uninititialized value in 'ext4_evict_inode'
ext4: generalize extents status tree search functions
ext4: add new pending reservation mechanism
ext4: fix reserved cluster accounting at delayed write time
ext4: fix delayed allocation bug in ext4_clu_mapped for bigalloc + inline
netfilter: ipset: Fix overflow before widen in the bitmap_ip_create() function.
x86/boot: Avoid using Intel mnemonics in AT&T syntax asm
EDAC/device: Fix period calculation in edac_device_reset_delay_period()
regulator: da9211: Use irq handler when ready
hvc/xen: lock console list traversal
nfc: pn533: Wait for out_urb's completion in pn533_usb_send_frame()
net/mlx5: Rename ptp clock info
net/mlx5: Fix ptp max frequency adjustment range
iommu/mediatek-v1: Add error handle for mtk_iommu_probe
iommu/mediatek-v1: Fix an error handling path in mtk_iommu_v1_probe()
x86/resctrl: Use task_curr() instead of task_struct->on_cpu to prevent unnecessary IPI
x86/resctrl: Fix task CLOSID/RMID update race
drm/virtio: Fix GEM handle creation UAF
arm64: cmpxchg_double*: hazard against entire exchange variable
efi: fix NULL-deref in init error path
Revert "usb: ulpi: defer ulpi_register on ulpi_read_id timeout"
tty: serial: tegra: Handle RX transfer in PIO mode if DMA wasn't started
serial: tegra: Only print FIFO error message when an error occurs
serial: tegra: Change lower tolerance baud rate limit for tegra20 and tegra30
Linux 4.19.270
Change-Id: Ieb5e7f318a7e06effcc51e5f93751ec02dbb50c4
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
@@ -25,8 +25,8 @@ hardware, which may be as simple as a set of GPIO pins or as complex as
|
||||
a pair of FIFOs connected to dual DMA engines on the other side of the
|
||||
SPI shift register (maximizing throughput). Such drivers bridge between
|
||||
whatever bus they sit on (often the platform bus) and SPI, and expose
|
||||
the SPI side of their device as a :c:type:`struct spi_master
|
||||
<spi_master>`. SPI devices are children of that master,
|
||||
the SPI side of their device as a :c:type:`struct spi_controller
|
||||
<spi_controller>`. SPI devices are children of that master,
|
||||
represented as a :c:type:`struct spi_device <spi_device>` and
|
||||
manufactured from :c:type:`struct spi_board_info
|
||||
<spi_board_info>` descriptors which are usually provided by
|
||||
|
||||
@@ -71,8 +71,8 @@ configuration of fault-injection capabilities.
|
||||
|
||||
- /sys/kernel/debug/fail*/times:
|
||||
|
||||
specifies how many times failures may happen at most.
|
||||
A value of -1 means "no limit".
|
||||
specifies how many times failures may happen at most. A value of -1
|
||||
means "no limit".
|
||||
|
||||
- /sys/kernel/debug/fail*/space:
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
import os
|
||||
import sys
|
||||
from sphinx.util.pycompat import execfile_
|
||||
from sphinx.util.osutil import fs_encoding
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
def loadConfig(namespace):
|
||||
@@ -25,7 +25,9 @@ def loadConfig(namespace):
|
||||
sys.stdout.write("load additional sphinx-config: %s\n" % config_file)
|
||||
config = namespace.copy()
|
||||
config['__file__'] = config_file
|
||||
execfile_(config_file, config)
|
||||
with open(config_file, 'rb') as f:
|
||||
code = compile(f.read(), fs_encoding, 'exec')
|
||||
exec(code, config)
|
||||
del config['__file__']
|
||||
namespace.update(config)
|
||||
else:
|
||||
|
||||
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 19
|
||||
SUBLEVEL = 269
|
||||
SUBLEVEL = 270
|
||||
EXTRAVERSION =
|
||||
NAME = "People's Front"
|
||||
|
||||
|
||||
@@ -469,8 +469,10 @@ entSys:
|
||||
#ifdef CONFIG_AUDITSYSCALL
|
||||
lda $6, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
|
||||
and $3, $6, $3
|
||||
#endif
|
||||
bne $3, strace
|
||||
#else
|
||||
blbs $3, strace /* check for SYSCALL_TRACE in disguise */
|
||||
#endif
|
||||
beq $4, 1f
|
||||
ldq $27, 0($5)
|
||||
1: jsr $26, ($27), alpha_ni_syscall
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
|
||||
pcie2: pcie@2,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82002800 0 0x80000 0 0x2000>;
|
||||
assigned-addresses = <0x82001000 0 0x80000 0 0x2000>;
|
||||
reg = <0x1000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
|
||||
@@ -584,7 +584,7 @@
|
||||
|
||||
pcie1: pcie@2,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x44000 0 0x2000>;
|
||||
assigned-addresses = <0x82001000 0 0x44000 0 0x2000>;
|
||||
reg = <0x1000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
/* x1 port */
|
||||
pcie@2,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x40000 0 0x2000>;
|
||||
assigned-addresses = <0x82001000 0 0x40000 0 0x2000>;
|
||||
reg = <0x1000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
@@ -98,7 +98,7 @@
|
||||
/* x1 port */
|
||||
pcie@3,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x44000 0 0x2000>;
|
||||
assigned-addresses = <0x82001800 0 0x44000 0 0x2000>;
|
||||
reg = <0x1800 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
|
||||
@@ -22,6 +22,12 @@
|
||||
stdout-path = &uart0;
|
||||
};
|
||||
|
||||
aliases {
|
||||
ethernet0 = ð0;
|
||||
ethernet1 = ð1;
|
||||
ethernet2 = ð2;
|
||||
};
|
||||
|
||||
memory {
|
||||
device_type = "memory";
|
||||
reg = <0x00000000 0x40000000>; /* 1024 MB */
|
||||
@@ -291,7 +297,17 @@
|
||||
};
|
||||
};
|
||||
|
||||
/* port 6 is connected to eth0 */
|
||||
ports@6 {
|
||||
reg = <6>;
|
||||
label = "cpu";
|
||||
ethernet = <ð0>;
|
||||
phy-mode = "rgmii-id";
|
||||
|
||||
fixed-link {
|
||||
speed = <1000>;
|
||||
full-duplex;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
/* x1 port */
|
||||
pcie2: pcie@2,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x40000 0 0x2000>;
|
||||
assigned-addresses = <0x82001000 0 0x40000 0 0x2000>;
|
||||
reg = <0x1000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
@@ -103,7 +103,7 @@
|
||||
/* x1 port */
|
||||
pcie3: pcie@3,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x44000 0 0x2000>;
|
||||
assigned-addresses = <0x82001800 0 0x44000 0 0x2000>;
|
||||
reg = <0x1800 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
@@ -125,7 +125,7 @@
|
||||
*/
|
||||
pcie4: pcie@4,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x48000 0 0x2000>;
|
||||
assigned-addresses = <0x82002000 0 0x48000 0 0x2000>;
|
||||
reg = <0x2000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
|
||||
@@ -456,7 +456,7 @@
|
||||
/* x1 port */
|
||||
pcie@2,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x40000 0 0x2000>;
|
||||
assigned-addresses = <0x82001000 0 0x40000 0 0x2000>;
|
||||
reg = <0x1000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
@@ -475,7 +475,7 @@
|
||||
/* x1 port */
|
||||
pcie@3,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x44000 0 0x2000>;
|
||||
assigned-addresses = <0x82001800 0 0x44000 0 0x2000>;
|
||||
reg = <0x1800 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
@@ -497,7 +497,7 @@
|
||||
*/
|
||||
pcie@4,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x48000 0 0x2000>;
|
||||
assigned-addresses = <0x82002000 0 0x48000 0 0x2000>;
|
||||
reg = <0x2000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
pcie2: pcie@2,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x44000 0 0x2000>;
|
||||
assigned-addresses = <0x82001000 0 0x44000 0 0x2000>;
|
||||
reg = <0x1000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
@@ -115,7 +115,7 @@
|
||||
|
||||
pcie3: pcie@3,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x48000 0 0x2000>;
|
||||
assigned-addresses = <0x82001800 0 0x48000 0 0x2000>;
|
||||
reg = <0x1800 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
@@ -133,7 +133,7 @@
|
||||
|
||||
pcie4: pcie@4,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x4c000 0 0x2000>;
|
||||
assigned-addresses = <0x82002000 0 0x4c000 0 0x2000>;
|
||||
reg = <0x2000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
@@ -151,7 +151,7 @@
|
||||
|
||||
pcie5: pcie@5,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x80000 0 0x2000>;
|
||||
assigned-addresses = <0x82002800 0 0x80000 0 0x2000>;
|
||||
reg = <0x2800 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
|
||||
pcie2: pcie@2,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x44000 0 0x2000>;
|
||||
assigned-addresses = <0x82001000 0 0x44000 0 0x2000>;
|
||||
reg = <0x1000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
@@ -130,7 +130,7 @@
|
||||
|
||||
pcie3: pcie@3,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x48000 0 0x2000>;
|
||||
assigned-addresses = <0x82001800 0 0x48000 0 0x2000>;
|
||||
reg = <0x1800 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
@@ -148,7 +148,7 @@
|
||||
|
||||
pcie4: pcie@4,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x4c000 0 0x2000>;
|
||||
assigned-addresses = <0x82002000 0 0x4c000 0 0x2000>;
|
||||
reg = <0x2000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
@@ -166,7 +166,7 @@
|
||||
|
||||
pcie5: pcie@5,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x80000 0 0x2000>;
|
||||
assigned-addresses = <0x82002800 0 0x80000 0 0x2000>;
|
||||
reg = <0x2800 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
@@ -184,7 +184,7 @@
|
||||
|
||||
pcie6: pcie@6,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x84000 0 0x2000>;
|
||||
assigned-addresses = <0x82003000 0 0x84000 0 0x2000>;
|
||||
reg = <0x3000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
@@ -202,7 +202,7 @@
|
||||
|
||||
pcie7: pcie@7,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x88000 0 0x2000>;
|
||||
assigned-addresses = <0x82003800 0 0x88000 0 0x2000>;
|
||||
reg = <0x3800 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
@@ -220,7 +220,7 @@
|
||||
|
||||
pcie8: pcie@8,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x8c000 0 0x2000>;
|
||||
assigned-addresses = <0x82004000 0 0x8c000 0 0x2000>;
|
||||
reg = <0x4000 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
@@ -238,7 +238,7 @@
|
||||
|
||||
pcie9: pcie@9,0 {
|
||||
device_type = "pci";
|
||||
assigned-addresses = <0x82000800 0 0x42000 0 0x2000>;
|
||||
assigned-addresses = <0x82004800 0 0x42000 0 0x2000>;
|
||||
reg = <0x4800 0 0 0 0>;
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
|
||||
@@ -129,7 +129,7 @@
|
||||
pcie1: pcie@2 {
|
||||
device_type = "pci";
|
||||
status = "disabled";
|
||||
assigned-addresses = <0x82002800 0 0x80000 0 0x2000>;
|
||||
assigned-addresses = <0x82001000 0 0x80000 0 0x2000>;
|
||||
reg = <0x1000 0 0 0 0>;
|
||||
clocks = <&gate_clk 5>;
|
||||
marvell,pcie-port = <1>;
|
||||
|
||||
@@ -1604,7 +1604,7 @@
|
||||
};
|
||||
|
||||
etb@1a01000 {
|
||||
compatible = "coresight-etb10", "arm,primecell";
|
||||
compatible = "arm,coresight-etb10", "arm,primecell";
|
||||
reg = <0x1a01000 0x1000>;
|
||||
|
||||
clocks = <&rpmcc RPM_QDSS_CLK>;
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
compatible = "arm,pl110", "arm,primecell";
|
||||
reg = <0xfc200000 0x1000>;
|
||||
interrupt-parent = <&vic1>;
|
||||
interrupts = <12>;
|
||||
interrupts = <13>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
||||
@@ -52,18 +52,21 @@
|
||||
static void __iomem *mmp_timer_base = TIMERS_VIRT_BASE;
|
||||
|
||||
/*
|
||||
* FIXME: the timer needs some delay to stablize the counter capture
|
||||
* Read the timer through the CVWR register. Delay is required after requesting
|
||||
* a read. The CR register cannot be directly read due to metastability issues
|
||||
* documented in the PXA168 software manual.
|
||||
*/
|
||||
static inline uint32_t timer_read(void)
|
||||
{
|
||||
int delay = 100;
|
||||
uint32_t val;
|
||||
int delay = 3;
|
||||
|
||||
__raw_writel(1, mmp_timer_base + TMR_CVWR(1));
|
||||
|
||||
while (delay--)
|
||||
cpu_relax();
|
||||
val = __raw_readl(mmp_timer_base + TMR_CVWR(1));
|
||||
|
||||
return __raw_readl(mmp_timer_base + TMR_CVWR(1));
|
||||
return val;
|
||||
}
|
||||
|
||||
static u64 notrace mmp_read_sched_clock(void)
|
||||
|
||||
@@ -11,3 +11,9 @@ nwfpe-y += fpa11.o fpa11_cpdo.o fpa11_cpdt.o \
|
||||
entry.o
|
||||
|
||||
nwfpe-$(CONFIG_FPE_NWFPE_XP) += extended_cpdo.o
|
||||
|
||||
# Try really hard to avoid generating calls to __aeabi_uldivmod() from
|
||||
# float64_rem() due to loop elision.
|
||||
ifdef CONFIG_CC_IS_CLANG
|
||||
CFLAGS_softfloat.o += -mllvm -replexitval=never
|
||||
endif
|
||||
|
||||
@@ -25,14 +25,14 @@
|
||||
stdout-path = "serial0:921600n8";
|
||||
};
|
||||
|
||||
cpus_fixed_vproc0: fixedregulator@0 {
|
||||
cpus_fixed_vproc0: regulator-vproc-buck0 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vproc_buck0";
|
||||
regulator-min-microvolt = <1000000>;
|
||||
regulator-max-microvolt = <1000000>;
|
||||
};
|
||||
|
||||
cpus_fixed_vproc1: fixedregulator@1 {
|
||||
cpus_fixed_vproc1: regulator-vproc-buck1 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vproc_buck1";
|
||||
regulator-min-microvolt = <1000000>;
|
||||
|
||||
@@ -158,70 +158,70 @@
|
||||
#clock-cells = <0>;
|
||||
};
|
||||
|
||||
clk26m: oscillator@0 {
|
||||
clk26m: oscillator-26m {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <26000000>;
|
||||
clock-output-names = "clk26m";
|
||||
};
|
||||
|
||||
clk32k: oscillator@1 {
|
||||
clk32k: oscillator-32k {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <32768>;
|
||||
clock-output-names = "clk32k";
|
||||
};
|
||||
|
||||
clkfpc: oscillator@2 {
|
||||
clkfpc: oscillator-50m {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <50000000>;
|
||||
clock-output-names = "clkfpc";
|
||||
};
|
||||
|
||||
clkaud_ext_i_0: oscillator@3 {
|
||||
clkaud_ext_i_0: oscillator-aud0 {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <6500000>;
|
||||
clock-output-names = "clkaud_ext_i_0";
|
||||
};
|
||||
|
||||
clkaud_ext_i_1: oscillator@4 {
|
||||
clkaud_ext_i_1: oscillator-aud1 {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <196608000>;
|
||||
clock-output-names = "clkaud_ext_i_1";
|
||||
};
|
||||
|
||||
clkaud_ext_i_2: oscillator@5 {
|
||||
clkaud_ext_i_2: oscillator-aud2 {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <180633600>;
|
||||
clock-output-names = "clkaud_ext_i_2";
|
||||
};
|
||||
|
||||
clki2si0_mck_i: oscillator@6 {
|
||||
clki2si0_mck_i: oscillator-i2s0 {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <30000000>;
|
||||
clock-output-names = "clki2si0_mck_i";
|
||||
};
|
||||
|
||||
clki2si1_mck_i: oscillator@7 {
|
||||
clki2si1_mck_i: oscillator-i2s1 {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <30000000>;
|
||||
clock-output-names = "clki2si1_mck_i";
|
||||
};
|
||||
|
||||
clki2si2_mck_i: oscillator@8 {
|
||||
clki2si2_mck_i: oscillator-i2s2 {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <30000000>;
|
||||
clock-output-names = "clki2si2_mck_i";
|
||||
};
|
||||
|
||||
clktdmin_mclk_i: oscillator@9 {
|
||||
clktdmin_mclk_i: oscillator-mclk {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <30000000>;
|
||||
@@ -264,7 +264,7 @@
|
||||
reg = <0 0x10005000 0 0x1000>;
|
||||
};
|
||||
|
||||
pio: pinctrl@10005000 {
|
||||
pio: pinctrl@1000b000 {
|
||||
compatible = "mediatek,mt2712-pinctrl";
|
||||
reg = <0 0x1000b000 0 0x1000>;
|
||||
mediatek,pctl-regmap = <&syscfg_pctl_a>;
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
clk26m: oscillator@0 {
|
||||
clk26m: oscillator-26m {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <26000000>;
|
||||
|
||||
@@ -319,7 +319,7 @@ __LL_SC_PREFIX(__cmpxchg_double##name(unsigned long old1, \
|
||||
" cbnz %w0, 1b\n" \
|
||||
" " #mb "\n" \
|
||||
"2:" \
|
||||
: "=&r" (tmp), "=&r" (ret), "+Q" (*(unsigned long *)ptr) \
|
||||
: "=&r" (tmp), "=&r" (ret), "+Q" (*(__uint128_t *)ptr) \
|
||||
: "r" (old1), "r" (old2), "r" (new1), "r" (new2) \
|
||||
: cl); \
|
||||
\
|
||||
|
||||
@@ -555,7 +555,7 @@ static inline long __cmpxchg_double##name(unsigned long old1, \
|
||||
" eor %[old2], %[old2], %[oldval2]\n" \
|
||||
" orr %[old1], %[old1], %[old2]") \
|
||||
: [old1] "+&r" (x0), [old2] "+&r" (x1), \
|
||||
[v] "+Q" (*(unsigned long *)ptr) \
|
||||
[v] "+Q" (*(__uint128_t *)ptr) \
|
||||
: [new1] "r" (x2), [new2] "r" (x3), [ptr] "r" (x4), \
|
||||
[oldval1] "r" (oldval1), [oldval2] "r" (oldval2) \
|
||||
: __LL_SC_CLOBBERS, ##cl); \
|
||||
|
||||
@@ -361,6 +361,8 @@ static struct clk clk_periph = {
|
||||
*/
|
||||
int clk_enable(struct clk *clk)
|
||||
{
|
||||
if (!clk)
|
||||
return 0;
|
||||
mutex_lock(&clocks_mutex);
|
||||
clk_enable_unlocked(clk);
|
||||
mutex_unlock(&clocks_mutex);
|
||||
|
||||
@@ -75,7 +75,6 @@ ATTRIBUTE_GROUPS(vpe);
|
||||
|
||||
static void vpe_device_release(struct device *cd)
|
||||
{
|
||||
kfree(cd);
|
||||
}
|
||||
|
||||
static struct class vpe_class = {
|
||||
@@ -157,6 +156,7 @@ int __init vpe_module_init(void)
|
||||
device_del(&vpe_device);
|
||||
|
||||
out_class:
|
||||
put_device(&vpe_device);
|
||||
class_unregister(&vpe_class);
|
||||
|
||||
out_chrdev:
|
||||
@@ -169,7 +169,7 @@ void __exit vpe_module_exit(void)
|
||||
{
|
||||
struct vpe *v, *n;
|
||||
|
||||
device_del(&vpe_device);
|
||||
device_unregister(&vpe_device);
|
||||
class_unregister(&vpe_class);
|
||||
unregister_chrdev(major, VPE_MODULE_NAME);
|
||||
|
||||
|
||||
@@ -313,7 +313,6 @@ ATTRIBUTE_GROUPS(vpe);
|
||||
|
||||
static void vpe_device_release(struct device *cd)
|
||||
{
|
||||
kfree(cd);
|
||||
}
|
||||
|
||||
static struct class vpe_class = {
|
||||
@@ -497,6 +496,7 @@ int __init vpe_module_init(void)
|
||||
device_del(&vpe_device);
|
||||
|
||||
out_class:
|
||||
put_device(&vpe_device);
|
||||
class_unregister(&vpe_class);
|
||||
|
||||
out_chrdev:
|
||||
@@ -509,7 +509,7 @@ void __exit vpe_module_exit(void)
|
||||
{
|
||||
struct vpe *v, *n;
|
||||
|
||||
device_del(&vpe_device);
|
||||
device_unregister(&vpe_device);
|
||||
class_unregister(&vpe_class);
|
||||
unregister_chrdev(major, VPE_MODULE_NAME);
|
||||
|
||||
|
||||
@@ -50,25 +50,24 @@
|
||||
#define MADV_DONTFORK 10 /* don't inherit across fork */
|
||||
#define MADV_DOFORK 11 /* do inherit across fork */
|
||||
|
||||
#define MADV_MERGEABLE 65 /* KSM may merge identical pages */
|
||||
#define MADV_UNMERGEABLE 66 /* KSM may not merge identical pages */
|
||||
#define MADV_MERGEABLE 12 /* KSM may merge identical pages */
|
||||
#define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages */
|
||||
|
||||
#define MADV_HUGEPAGE 67 /* Worth backing with hugepages */
|
||||
#define MADV_NOHUGEPAGE 68 /* Not worth backing with hugepages */
|
||||
#define MADV_HUGEPAGE 14 /* Worth backing with hugepages */
|
||||
#define MADV_NOHUGEPAGE 15 /* Not worth backing with hugepages */
|
||||
|
||||
#define MADV_DONTDUMP 69 /* Explicity exclude from the core dump,
|
||||
#define MADV_DONTDUMP 16 /* Explicity exclude from the core dump,
|
||||
overrides the coredump filter bits */
|
||||
#define MADV_DODUMP 70 /* Clear the MADV_NODUMP flag */
|
||||
#define MADV_DODUMP 17 /* Clear the MADV_NODUMP flag */
|
||||
|
||||
#define MADV_WIPEONFORK 71 /* Zero memory on fork, child only */
|
||||
#define MADV_KEEPONFORK 72 /* Undo MADV_WIPEONFORK */
|
||||
#define MADV_WIPEONFORK 18 /* Zero memory on fork, child only */
|
||||
#define MADV_KEEPONFORK 19 /* Undo MADV_WIPEONFORK */
|
||||
|
||||
#define MADV_HWPOISON 100 /* poison a page for testing */
|
||||
#define MADV_SOFT_OFFLINE 101 /* soft offline page for testing */
|
||||
|
||||
/* compatibility flags */
|
||||
#define MAP_FILE 0
|
||||
#define MAP_VARIABLE 0
|
||||
|
||||
#define PKEY_DISABLE_ACCESS 0x1
|
||||
#define PKEY_DISABLE_WRITE 0x2
|
||||
|
||||
@@ -386,3 +386,30 @@ long parisc_personality(unsigned long personality)
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
/*
|
||||
* madvise() wrapper
|
||||
*
|
||||
* Up to kernel v6.1 parisc has different values than all other
|
||||
* platforms for the MADV_xxx flags listed below.
|
||||
* To keep binary compatibility with existing userspace programs
|
||||
* translate the former values to the new values.
|
||||
*
|
||||
* XXX: Remove this wrapper in year 2025 (or later)
|
||||
*/
|
||||
|
||||
asmlinkage notrace long parisc_madvise(unsigned long start, size_t len_in, int behavior)
|
||||
{
|
||||
switch (behavior) {
|
||||
case 65: behavior = MADV_MERGEABLE; break;
|
||||
case 66: behavior = MADV_UNMERGEABLE; break;
|
||||
case 67: behavior = MADV_HUGEPAGE; break;
|
||||
case 68: behavior = MADV_NOHUGEPAGE; break;
|
||||
case 69: behavior = MADV_DONTDUMP; break;
|
||||
case 70: behavior = MADV_DODUMP; break;
|
||||
case 71: behavior = MADV_WIPEONFORK; break;
|
||||
case 72: behavior = MADV_KEEPONFORK; break;
|
||||
}
|
||||
|
||||
return sys_madvise(start, len_in, behavior);
|
||||
}
|
||||
|
||||
@@ -195,7 +195,7 @@
|
||||
ENTRY_COMP(sysinfo)
|
||||
ENTRY_SAME(shutdown)
|
||||
ENTRY_SAME(fsync)
|
||||
ENTRY_SAME(madvise)
|
||||
ENTRY_OURS(madvise)
|
||||
ENTRY_SAME(clone_wrapper) /* 120 */
|
||||
ENTRY_SAME(setdomainname)
|
||||
ENTRY_COMP(sendfile)
|
||||
|
||||
@@ -717,6 +717,7 @@ void __noreturn rtas_halt(void)
|
||||
|
||||
/* Must be in the RMO region, so we place it here */
|
||||
static char rtas_os_term_buf[2048];
|
||||
static s32 ibm_os_term_token = RTAS_UNKNOWN_SERVICE;
|
||||
|
||||
void rtas_os_term(char *str)
|
||||
{
|
||||
@@ -728,16 +729,20 @@ void rtas_os_term(char *str)
|
||||
* this property may terminate the partition which we want to avoid
|
||||
* since it interferes with panic_timeout.
|
||||
*/
|
||||
if (RTAS_UNKNOWN_SERVICE == rtas_token("ibm,os-term") ||
|
||||
RTAS_UNKNOWN_SERVICE == rtas_token("ibm,extended-os-term"))
|
||||
if (ibm_os_term_token == RTAS_UNKNOWN_SERVICE)
|
||||
return;
|
||||
|
||||
snprintf(rtas_os_term_buf, 2048, "OS panic: %s", str);
|
||||
|
||||
/*
|
||||
* Keep calling as long as RTAS returns a "try again" status,
|
||||
* but don't use rtas_busy_delay(), which potentially
|
||||
* schedules.
|
||||
*/
|
||||
do {
|
||||
status = rtas_call(rtas_token("ibm,os-term"), 1, 1, NULL,
|
||||
status = rtas_call(ibm_os_term_token, 1, 1, NULL,
|
||||
__pa(rtas_os_term_buf));
|
||||
} while (rtas_busy_delay(status));
|
||||
} while (rtas_busy_delay_time(status));
|
||||
|
||||
if (status != 0)
|
||||
printk(KERN_EMERG "ibm,os-term call failed %d\n", status);
|
||||
@@ -1332,6 +1337,13 @@ void __init rtas_initialize(void)
|
||||
no_entry = of_property_read_u32(rtas.dev, "linux,rtas-entry", &entry);
|
||||
rtas.entry = no_entry ? rtas.base : entry;
|
||||
|
||||
/*
|
||||
* Discover these now to avoid device tree lookups in the
|
||||
* panic path.
|
||||
*/
|
||||
if (of_property_read_bool(rtas.dev, "ibm,extended-os-term"))
|
||||
ibm_os_term_token = rtas_token("ibm,os-term");
|
||||
|
||||
/* If RTAS was found, allocate the RMO buffer for it and look for
|
||||
* the stop-self token if any
|
||||
*/
|
||||
|
||||
@@ -68,6 +68,7 @@ perf_callchain_kernel(struct perf_callchain_entry_ctx *entry, struct pt_regs *re
|
||||
next_sp = fp[0];
|
||||
|
||||
if (next_sp == sp + STACK_INT_FRAME_SIZE &&
|
||||
validate_sp(sp, current, STACK_INT_FRAME_SIZE) &&
|
||||
fp[STACK_FRAME_MARKER] == STACK_FRAME_REGS_MARKER) {
|
||||
/*
|
||||
* This looks like an interrupt frame for an
|
||||
|
||||
@@ -79,6 +79,7 @@ REQUEST(__field(0, 8, partition_id)
|
||||
)
|
||||
#include I(REQUEST_END)
|
||||
|
||||
#ifdef ENABLE_EVENTS_COUNTERINFO_V6
|
||||
/*
|
||||
* Not available for counter_info_version >= 0x8, use
|
||||
* run_instruction_cycles_by_partition(0x100) instead.
|
||||
@@ -92,6 +93,7 @@ REQUEST(__field(0, 8, partition_id)
|
||||
__count(0x10, 8, cycles)
|
||||
)
|
||||
#include I(REQUEST_END)
|
||||
#endif
|
||||
|
||||
#define REQUEST_NAME system_performance_capabilities
|
||||
#define REQUEST_NUM 0x40
|
||||
@@ -103,6 +105,7 @@ REQUEST(__field(0, 1, perf_collect_privileged)
|
||||
)
|
||||
#include I(REQUEST_END)
|
||||
|
||||
#ifdef ENABLE_EVENTS_COUNTERINFO_V6
|
||||
#define REQUEST_NAME processor_bus_utilization_abc_links
|
||||
#define REQUEST_NUM 0x50
|
||||
#define REQUEST_IDX_KIND "hw_chip_id=?"
|
||||
@@ -194,6 +197,7 @@ REQUEST(__field(0, 4, phys_processor_idx)
|
||||
__count(0x28, 8, instructions_completed)
|
||||
)
|
||||
#include I(REQUEST_END)
|
||||
#endif
|
||||
|
||||
/* Processor_core_power_mode (0x95) skipped, no counters */
|
||||
/* Affinity_domain_information_by_virtual_processor (0xA0) skipped,
|
||||
|
||||
@@ -74,7 +74,7 @@ static struct attribute_group format_group = {
|
||||
|
||||
static struct attribute_group event_group = {
|
||||
.name = "events",
|
||||
.attrs = hv_gpci_event_attrs,
|
||||
/* .attrs is set in init */
|
||||
};
|
||||
|
||||
#define HV_CAPS_ATTR(_name, _format) \
|
||||
@@ -292,6 +292,7 @@ static int hv_gpci_init(void)
|
||||
int r;
|
||||
unsigned long hret;
|
||||
struct hv_perf_caps caps;
|
||||
struct hv_gpci_request_buffer *arg;
|
||||
|
||||
hv_gpci_assert_offsets_correct();
|
||||
|
||||
@@ -310,6 +311,36 @@ static int hv_gpci_init(void)
|
||||
/* sampling not supported */
|
||||
h_gpci_pmu.capabilities |= PERF_PMU_CAP_NO_INTERRUPT;
|
||||
|
||||
arg = (void *)get_cpu_var(hv_gpci_reqb);
|
||||
memset(arg, 0, HGPCI_REQ_BUFFER_SIZE);
|
||||
|
||||
/*
|
||||
* hcall H_GET_PERF_COUNTER_INFO populates the output
|
||||
* counter_info_version value based on the system hypervisor.
|
||||
* Pass the counter request 0x10 corresponds to request type
|
||||
* 'Dispatch_timebase_by_processor', to get the supported
|
||||
* counter_info_version.
|
||||
*/
|
||||
arg->params.counter_request = cpu_to_be32(0x10);
|
||||
|
||||
r = plpar_hcall_norets(H_GET_PERF_COUNTER_INFO,
|
||||
virt_to_phys(arg), HGPCI_REQ_BUFFER_SIZE);
|
||||
if (r) {
|
||||
pr_devel("hcall failed, can't get supported counter_info_version: 0x%x\n", r);
|
||||
arg->params.counter_info_version_out = 0x8;
|
||||
}
|
||||
|
||||
/*
|
||||
* Use counter_info_version_out value to assign
|
||||
* required hv-gpci event list.
|
||||
*/
|
||||
if (arg->params.counter_info_version_out >= 0x8)
|
||||
event_group.attrs = hv_gpci_event_attrs;
|
||||
else
|
||||
event_group.attrs = hv_gpci_event_attrs_v6;
|
||||
|
||||
put_cpu_var(hv_gpci_reqb);
|
||||
|
||||
r = perf_pmu_register(&h_gpci_pmu, h_gpci_pmu.name, -1);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
@@ -53,6 +53,7 @@ enum {
|
||||
#define REQUEST_FILE "../hv-gpci-requests.h"
|
||||
#define NAME_LOWER hv_gpci
|
||||
#define NAME_UPPER HV_GPCI
|
||||
#define ENABLE_EVENTS_COUNTERINFO_V6
|
||||
#include "req-gen/perf.h"
|
||||
#undef REQUEST_FILE
|
||||
#undef NAME_LOWER
|
||||
|
||||
@@ -139,6 +139,26 @@ PMU_EVENT_ATTR_STRING( \
|
||||
#define REQUEST_(r_name, r_value, r_idx_1, r_fields) \
|
||||
r_fields
|
||||
|
||||
/* Generate event list for platforms with counter_info_version 0x6 or below */
|
||||
static __maybe_unused struct attribute *hv_gpci_event_attrs_v6[] = {
|
||||
#include REQUEST_FILE
|
||||
NULL
|
||||
};
|
||||
|
||||
/*
|
||||
* Based on getPerfCountInfo v1.018 documentation, some of the hv-gpci
|
||||
* events were deprecated for platform firmware that supports
|
||||
* counter_info_version 0x8 or above.
|
||||
* Those deprecated events are still part of platform firmware that
|
||||
* support counter_info_version 0x6 and below. As per the getPerfCountInfo
|
||||
* v1.018 documentation there is no counter_info_version 0x7.
|
||||
* Undefining macro ENABLE_EVENTS_COUNTERINFO_V6, to disable the addition of
|
||||
* deprecated events in "hv_gpci_event_attrs" attribute group, for platforms
|
||||
* that supports counter_info_version 0x8 or above.
|
||||
*/
|
||||
#undef ENABLE_EVENTS_COUNTERINFO_V6
|
||||
|
||||
/* Generate event list for platforms with counter_info_version 0x8 or above*/
|
||||
static __maybe_unused struct attribute *hv_gpci_event_attrs[] = {
|
||||
#include REQUEST_FILE
|
||||
NULL
|
||||
|
||||
@@ -531,6 +531,7 @@ static int mpc52xx_lpbfifo_probe(struct platform_device *op)
|
||||
err_bcom_rx_irq:
|
||||
bcom_gen_bd_rx_release(lpbfifo.bcom_rx_task);
|
||||
err_bcom_rx:
|
||||
free_irq(lpbfifo.irq, &lpbfifo);
|
||||
err_irq:
|
||||
iounmap(lpbfifo.regs);
|
||||
lpbfifo.regs = NULL;
|
||||
|
||||
@@ -111,7 +111,7 @@ static int __init of_fsl_spi_probe(char *type, char *compatible, u32 sysclk,
|
||||
|
||||
goto next;
|
||||
unreg:
|
||||
platform_device_del(pdev);
|
||||
platform_device_put(pdev);
|
||||
err:
|
||||
pr_err("%pOF: registration failed\n", np);
|
||||
next:
|
||||
|
||||
@@ -389,6 +389,7 @@ static int xive_spapr_populate_irq_data(u32 hw_irq, struct xive_irq_data *data)
|
||||
|
||||
data->trig_mmio = ioremap(data->trig_page, 1u << data->esb_shift);
|
||||
if (!data->trig_mmio) {
|
||||
iounmap(data->eoi_mmio);
|
||||
pr_err("Failed to map trigger page for irq 0x%x\n", hw_irq);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
@@ -260,7 +260,7 @@ do { \
|
||||
might_fault(); \
|
||||
access_ok(VERIFY_READ, __p, sizeof(*__p)) ? \
|
||||
__get_user((x), __p) : \
|
||||
((x) = 0, -EFAULT); \
|
||||
((x) = (__force __typeof__(x))0, -EFAULT); \
|
||||
})
|
||||
|
||||
#define __put_user_asm(insn, x, ptr, err) \
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
pcp_op_T__ *ptr__; \
|
||||
preempt_disable_notrace(); \
|
||||
ptr__ = raw_cpu_ptr(&(pcp)); \
|
||||
prev__ = *ptr__; \
|
||||
prev__ = READ_ONCE(*ptr__); \
|
||||
do { \
|
||||
old__ = prev__; \
|
||||
new__ = old__ op (val); \
|
||||
|
||||
@@ -35,7 +35,7 @@ intcall:
|
||||
movw %dx, %si
|
||||
movw %sp, %di
|
||||
movw $11, %cx
|
||||
rep; movsd
|
||||
rep; movsl
|
||||
|
||||
/* Pop full state from the stack */
|
||||
popal
|
||||
@@ -70,7 +70,7 @@ intcall:
|
||||
jz 4f
|
||||
movw %sp, %si
|
||||
movw $11, %cx
|
||||
rep; movsd
|
||||
rep; movsl
|
||||
4: addw $44, %sp
|
||||
|
||||
/* Restore state and return */
|
||||
|
||||
@@ -2699,6 +2699,7 @@ static bool hswep_has_limit_sbox(unsigned int device)
|
||||
return false;
|
||||
|
||||
pci_read_config_dword(dev, HSWEP_PCU_CAPID4_OFFET, &capid4);
|
||||
pci_dev_put(dev);
|
||||
if (!hswep_get_chop(capid4))
|
||||
return true;
|
||||
|
||||
|
||||
@@ -298,6 +298,7 @@ static int load_aout_binary(struct linux_binprm *bprm)
|
||||
set_personality_ia32(false);
|
||||
|
||||
setup_new_exec(bprm);
|
||||
install_exec_creds(bprm);
|
||||
|
||||
regs->cs = __USER32_CS;
|
||||
regs->r8 = regs->r9 = regs->r10 = regs->r11 = regs->r12 =
|
||||
@@ -314,8 +315,6 @@ static int load_aout_binary(struct linux_binprm *bprm)
|
||||
if (retval < 0)
|
||||
return retval;
|
||||
|
||||
install_exec_creds(bprm);
|
||||
|
||||
if (N_MAGIC(ex) == OMAGIC) {
|
||||
unsigned long text_addr, map_size;
|
||||
|
||||
|
||||
@@ -1778,6 +1778,8 @@ static int ib_prctl_set(struct task_struct *task, unsigned long ctrl)
|
||||
if (ctrl == PR_SPEC_FORCE_DISABLE)
|
||||
task_set_spec_ib_force_disable(task);
|
||||
task_update_spec_tif(task);
|
||||
if (task == current)
|
||||
indirect_branch_prediction_barrier();
|
||||
break;
|
||||
default:
|
||||
return -ERANGE;
|
||||
|
||||
@@ -585,8 +585,10 @@ static int __rdtgroup_move_task(struct task_struct *tsk,
|
||||
/*
|
||||
* Ensure the task's closid and rmid are written before determining if
|
||||
* the task is current that will decide if it will be interrupted.
|
||||
* This pairs with the full barrier between the rq->curr update and
|
||||
* resctrl_sched_in() during context switch.
|
||||
*/
|
||||
barrier();
|
||||
smp_mb();
|
||||
|
||||
/*
|
||||
* By now, the task's closid and rmid are set. If the task is current
|
||||
@@ -2140,19 +2142,23 @@ static void rdt_move_group_tasks(struct rdtgroup *from, struct rdtgroup *to,
|
||||
t->closid = to->closid;
|
||||
t->rmid = to->mon.rmid;
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
/*
|
||||
* This is safe on x86 w/o barriers as the ordering
|
||||
* of writing to task_cpu() and t->on_cpu is
|
||||
* reverse to the reading here. The detection is
|
||||
* inaccurate as tasks might move or schedule
|
||||
* before the smp function call takes place. In
|
||||
* such a case the function call is pointless, but
|
||||
* Order the closid/rmid stores above before the loads
|
||||
* in task_curr(). This pairs with the full barrier
|
||||
* between the rq->curr update and resctrl_sched_in()
|
||||
* during context switch.
|
||||
*/
|
||||
smp_mb();
|
||||
|
||||
/*
|
||||
* If the task is on a CPU, set the CPU in the mask.
|
||||
* The detection is inaccurate as tasks might move or
|
||||
* schedule before the smp function call takes place.
|
||||
* In such a case the function call is pointless, but
|
||||
* there is no other side effect.
|
||||
*/
|
||||
if (mask && t->on_cpu)
|
||||
if (IS_ENABLED(CONFIG_SMP) && mask && task_curr(t))
|
||||
cpumask_set_cpu(task_cpu(t), mask);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
read_unlock(&tasklist_lock);
|
||||
|
||||
@@ -662,7 +662,6 @@ void load_ucode_intel_ap(void)
|
||||
else
|
||||
iup = &intel_ucode_patch;
|
||||
|
||||
reget:
|
||||
if (!*iup) {
|
||||
patch = __load_ucode_intel(&uci);
|
||||
if (!patch)
|
||||
@@ -673,12 +672,7 @@ void load_ucode_intel_ap(void)
|
||||
|
||||
uci.mc = *iup;
|
||||
|
||||
if (apply_microcode_early(&uci, true)) {
|
||||
/* Mixed-silicon system? Try to refetch the proper patch: */
|
||||
*iup = NULL;
|
||||
|
||||
goto reget;
|
||||
}
|
||||
apply_microcode_early(&uci, true);
|
||||
}
|
||||
|
||||
static struct microcode_intel *find_patch(struct ucode_cpu_info *uci)
|
||||
|
||||
@@ -735,8 +735,9 @@ static int branch_setup_xol_ops(struct arch_uprobe *auprobe, struct insn *insn)
|
||||
switch (opc1) {
|
||||
case 0xeb: /* jmp 8 */
|
||||
case 0xe9: /* jmp 32 */
|
||||
case 0x90: /* prefix* + nop; same as jmp with .offs = 0 */
|
||||
break;
|
||||
case 0x90: /* prefix* + nop; same as jmp with .offs = 0 */
|
||||
goto setup;
|
||||
|
||||
case 0xe8: /* call relative */
|
||||
branch_clear_offset(auprobe, insn);
|
||||
@@ -765,6 +766,7 @@ static int branch_setup_xol_ops(struct arch_uprobe *auprobe, struct insn *insn)
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
|
||||
setup:
|
||||
auprobe->branch.opc1 = opc1;
|
||||
auprobe->branch.ilen = insn->length;
|
||||
auprobe->branch.offs = insn->immediate.value;
|
||||
|
||||
@@ -32,30 +32,30 @@ static irqreturn_t xen_reschedule_interrupt(int irq, void *dev_id)
|
||||
|
||||
void xen_smp_intr_free(unsigned int cpu)
|
||||
{
|
||||
kfree(per_cpu(xen_resched_irq, cpu).name);
|
||||
per_cpu(xen_resched_irq, cpu).name = NULL;
|
||||
if (per_cpu(xen_resched_irq, cpu).irq >= 0) {
|
||||
unbind_from_irqhandler(per_cpu(xen_resched_irq, cpu).irq, NULL);
|
||||
per_cpu(xen_resched_irq, cpu).irq = -1;
|
||||
kfree(per_cpu(xen_resched_irq, cpu).name);
|
||||
per_cpu(xen_resched_irq, cpu).name = NULL;
|
||||
}
|
||||
kfree(per_cpu(xen_callfunc_irq, cpu).name);
|
||||
per_cpu(xen_callfunc_irq, cpu).name = NULL;
|
||||
if (per_cpu(xen_callfunc_irq, cpu).irq >= 0) {
|
||||
unbind_from_irqhandler(per_cpu(xen_callfunc_irq, cpu).irq, NULL);
|
||||
per_cpu(xen_callfunc_irq, cpu).irq = -1;
|
||||
kfree(per_cpu(xen_callfunc_irq, cpu).name);
|
||||
per_cpu(xen_callfunc_irq, cpu).name = NULL;
|
||||
}
|
||||
kfree(per_cpu(xen_debug_irq, cpu).name);
|
||||
per_cpu(xen_debug_irq, cpu).name = NULL;
|
||||
if (per_cpu(xen_debug_irq, cpu).irq >= 0) {
|
||||
unbind_from_irqhandler(per_cpu(xen_debug_irq, cpu).irq, NULL);
|
||||
per_cpu(xen_debug_irq, cpu).irq = -1;
|
||||
kfree(per_cpu(xen_debug_irq, cpu).name);
|
||||
per_cpu(xen_debug_irq, cpu).name = NULL;
|
||||
}
|
||||
kfree(per_cpu(xen_callfuncsingle_irq, cpu).name);
|
||||
per_cpu(xen_callfuncsingle_irq, cpu).name = NULL;
|
||||
if (per_cpu(xen_callfuncsingle_irq, cpu).irq >= 0) {
|
||||
unbind_from_irqhandler(per_cpu(xen_callfuncsingle_irq, cpu).irq,
|
||||
NULL);
|
||||
per_cpu(xen_callfuncsingle_irq, cpu).irq = -1;
|
||||
kfree(per_cpu(xen_callfuncsingle_irq, cpu).name);
|
||||
per_cpu(xen_callfuncsingle_irq, cpu).name = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,6 +65,7 @@ int xen_smp_intr_init(unsigned int cpu)
|
||||
char *resched_name, *callfunc_name, *debug_name;
|
||||
|
||||
resched_name = kasprintf(GFP_KERNEL, "resched%d", cpu);
|
||||
per_cpu(xen_resched_irq, cpu).name = resched_name;
|
||||
rc = bind_ipi_to_irqhandler(XEN_RESCHEDULE_VECTOR,
|
||||
cpu,
|
||||
xen_reschedule_interrupt,
|
||||
@@ -74,9 +75,9 @@ int xen_smp_intr_init(unsigned int cpu)
|
||||
if (rc < 0)
|
||||
goto fail;
|
||||
per_cpu(xen_resched_irq, cpu).irq = rc;
|
||||
per_cpu(xen_resched_irq, cpu).name = resched_name;
|
||||
|
||||
callfunc_name = kasprintf(GFP_KERNEL, "callfunc%d", cpu);
|
||||
per_cpu(xen_callfunc_irq, cpu).name = callfunc_name;
|
||||
rc = bind_ipi_to_irqhandler(XEN_CALL_FUNCTION_VECTOR,
|
||||
cpu,
|
||||
xen_call_function_interrupt,
|
||||
@@ -86,18 +87,21 @@ int xen_smp_intr_init(unsigned int cpu)
|
||||
if (rc < 0)
|
||||
goto fail;
|
||||
per_cpu(xen_callfunc_irq, cpu).irq = rc;
|
||||
per_cpu(xen_callfunc_irq, cpu).name = callfunc_name;
|
||||
|
||||
if (!xen_fifo_events) {
|
||||
debug_name = kasprintf(GFP_KERNEL, "debug%d", cpu);
|
||||
rc = bind_virq_to_irqhandler(VIRQ_DEBUG, cpu, xen_debug_interrupt,
|
||||
per_cpu(xen_debug_irq, cpu).name = debug_name;
|
||||
rc = bind_virq_to_irqhandler(VIRQ_DEBUG, cpu,
|
||||
xen_debug_interrupt,
|
||||
IRQF_PERCPU | IRQF_NOBALANCING,
|
||||
debug_name, NULL);
|
||||
if (rc < 0)
|
||||
goto fail;
|
||||
per_cpu(xen_debug_irq, cpu).irq = rc;
|
||||
per_cpu(xen_debug_irq, cpu).name = debug_name;
|
||||
}
|
||||
|
||||
callfunc_name = kasprintf(GFP_KERNEL, "callfuncsingle%d", cpu);
|
||||
per_cpu(xen_callfuncsingle_irq, cpu).name = callfunc_name;
|
||||
rc = bind_ipi_to_irqhandler(XEN_CALL_FUNCTION_SINGLE_VECTOR,
|
||||
cpu,
|
||||
xen_call_function_single_interrupt,
|
||||
@@ -107,7 +111,6 @@ int xen_smp_intr_init(unsigned int cpu)
|
||||
if (rc < 0)
|
||||
goto fail;
|
||||
per_cpu(xen_callfuncsingle_irq, cpu).irq = rc;
|
||||
per_cpu(xen_callfuncsingle_irq, cpu).name = callfunc_name;
|
||||
|
||||
return 0;
|
||||
|
||||
|
||||
@@ -94,18 +94,18 @@ asmlinkage __visible void cpu_bringup_and_idle(void)
|
||||
|
||||
void xen_smp_intr_free_pv(unsigned int cpu)
|
||||
{
|
||||
kfree(per_cpu(xen_irq_work, cpu).name);
|
||||
per_cpu(xen_irq_work, cpu).name = NULL;
|
||||
if (per_cpu(xen_irq_work, cpu).irq >= 0) {
|
||||
unbind_from_irqhandler(per_cpu(xen_irq_work, cpu).irq, NULL);
|
||||
per_cpu(xen_irq_work, cpu).irq = -1;
|
||||
kfree(per_cpu(xen_irq_work, cpu).name);
|
||||
per_cpu(xen_irq_work, cpu).name = NULL;
|
||||
}
|
||||
|
||||
kfree(per_cpu(xen_pmu_irq, cpu).name);
|
||||
per_cpu(xen_pmu_irq, cpu).name = NULL;
|
||||
if (per_cpu(xen_pmu_irq, cpu).irq >= 0) {
|
||||
unbind_from_irqhandler(per_cpu(xen_pmu_irq, cpu).irq, NULL);
|
||||
per_cpu(xen_pmu_irq, cpu).irq = -1;
|
||||
kfree(per_cpu(xen_pmu_irq, cpu).name);
|
||||
per_cpu(xen_pmu_irq, cpu).name = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,6 +115,7 @@ int xen_smp_intr_init_pv(unsigned int cpu)
|
||||
char *callfunc_name, *pmu_name;
|
||||
|
||||
callfunc_name = kasprintf(GFP_KERNEL, "irqwork%d", cpu);
|
||||
per_cpu(xen_irq_work, cpu).name = callfunc_name;
|
||||
rc = bind_ipi_to_irqhandler(XEN_IRQ_WORK_VECTOR,
|
||||
cpu,
|
||||
xen_irq_work_interrupt,
|
||||
@@ -124,10 +125,10 @@ int xen_smp_intr_init_pv(unsigned int cpu)
|
||||
if (rc < 0)
|
||||
goto fail;
|
||||
per_cpu(xen_irq_work, cpu).irq = rc;
|
||||
per_cpu(xen_irq_work, cpu).name = callfunc_name;
|
||||
|
||||
if (is_xen_pmu) {
|
||||
pmu_name = kasprintf(GFP_KERNEL, "pmu%d", cpu);
|
||||
per_cpu(xen_pmu_irq, cpu).name = pmu_name;
|
||||
rc = bind_virq_to_irqhandler(VIRQ_XENPMU, cpu,
|
||||
xen_pmu_irq_handler,
|
||||
IRQF_PERCPU|IRQF_NOBALANCING,
|
||||
@@ -135,7 +136,6 @@ int xen_smp_intr_init_pv(unsigned int cpu)
|
||||
if (rc < 0)
|
||||
goto fail;
|
||||
per_cpu(xen_pmu_irq, cpu).irq = rc;
|
||||
per_cpu(xen_pmu_irq, cpu).name = pmu_name;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -83,6 +83,7 @@ void xen_init_lock_cpu(int cpu)
|
||||
cpu, per_cpu(lock_kicker_irq, cpu));
|
||||
|
||||
name = kasprintf(GFP_KERNEL, "spinlock%d", cpu);
|
||||
per_cpu(irq_name, cpu) = name;
|
||||
irq = bind_ipi_to_irqhandler(XEN_SPIN_UNLOCK_VECTOR,
|
||||
cpu,
|
||||
dummy_handler,
|
||||
@@ -93,7 +94,6 @@ void xen_init_lock_cpu(int cpu)
|
||||
if (irq >= 0) {
|
||||
disable_irq(irq); /* make sure it's never delivered */
|
||||
per_cpu(lock_kicker_irq, cpu) = irq;
|
||||
per_cpu(irq_name, cpu) = name;
|
||||
}
|
||||
|
||||
printk("cpu %d spinlock event irq %d\n", cpu, irq);
|
||||
@@ -106,6 +106,8 @@ void xen_uninit_lock_cpu(int cpu)
|
||||
if (!xen_pvspin)
|
||||
return;
|
||||
|
||||
kfree(per_cpu(irq_name, cpu));
|
||||
per_cpu(irq_name, cpu) = NULL;
|
||||
/*
|
||||
* When booting the kernel with 'mitigations=auto,nosmt', the secondary
|
||||
* CPUs are not activated, and lock_kicker_irq is not initialized.
|
||||
@@ -116,8 +118,6 @@ void xen_uninit_lock_cpu(int cpu)
|
||||
|
||||
unbind_from_irqhandler(irq, NULL);
|
||||
per_cpu(lock_kicker_irq, cpu) = -1;
|
||||
kfree(per_cpu(irq_name, cpu));
|
||||
per_cpu(irq_name, cpu) = NULL;
|
||||
}
|
||||
|
||||
PV_CALLEE_SAVE_REGS_THUNK(xen_vcpu_stolen);
|
||||
|
||||
@@ -30,6 +30,8 @@ extern struct start_info *xen_start_info;
|
||||
extern struct shared_info xen_dummy_shared_info;
|
||||
extern struct shared_info *HYPERVISOR_shared_info;
|
||||
|
||||
extern bool xen_fifo_events;
|
||||
|
||||
void xen_setup_mfn_list_list(void);
|
||||
void xen_build_mfn_list_list(void);
|
||||
void xen_setup_machphys_mapping(void);
|
||||
|
||||
@@ -241,7 +241,7 @@ static int blk_mq_register_hctx(struct blk_mq_hw_ctx *hctx)
|
||||
{
|
||||
struct request_queue *q = hctx->queue;
|
||||
struct blk_mq_ctx *ctx;
|
||||
int i, ret;
|
||||
int i, j, ret;
|
||||
|
||||
if (!hctx->nr_ctx)
|
||||
return 0;
|
||||
@@ -253,9 +253,16 @@ static int blk_mq_register_hctx(struct blk_mq_hw_ctx *hctx)
|
||||
hctx_for_each_ctx(hctx, ctx, i) {
|
||||
ret = kobject_add(&ctx->kobj, &hctx->kobj, "cpu%u", ctx->cpu);
|
||||
if (ret)
|
||||
break;
|
||||
goto out;
|
||||
}
|
||||
|
||||
return 0;
|
||||
out:
|
||||
hctx_for_each_ctx(hctx, ctx, j) {
|
||||
if (j < i)
|
||||
kobject_del(&ctx->kobj);
|
||||
}
|
||||
kobject_del(&hctx->kobj);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -276,6 +276,7 @@ void delete_partition(struct gendisk *disk, int partno)
|
||||
struct disk_part_tbl *ptbl =
|
||||
rcu_dereference_protected(disk->part_tbl, 1);
|
||||
struct hd_struct *part;
|
||||
struct block_device *bdev;
|
||||
|
||||
if (partno >= ptbl->len)
|
||||
return;
|
||||
@@ -296,6 +297,12 @@ void delete_partition(struct gendisk *disk, int partno)
|
||||
* "in-use" until we really free the gendisk.
|
||||
*/
|
||||
blk_invalidate_devt(part_devt(part));
|
||||
|
||||
bdev = bdget(part_devt(part));
|
||||
if (bdev) {
|
||||
remove_inode_hash(bdev->bd_inode);
|
||||
bdput(bdev);
|
||||
}
|
||||
hd_struct_kill(part);
|
||||
}
|
||||
|
||||
|
||||
@@ -1285,15 +1285,6 @@ static void test_mb_skcipher_speed(const char *algo, int enc, int secs,
|
||||
goto out_free_tfm;
|
||||
}
|
||||
|
||||
|
||||
for (i = 0; i < num_mb; ++i)
|
||||
if (testmgr_alloc_buf(data[i].xbuf)) {
|
||||
while (i--)
|
||||
testmgr_free_buf(data[i].xbuf);
|
||||
goto out_free_tfm;
|
||||
}
|
||||
|
||||
|
||||
for (i = 0; i < num_mb; ++i) {
|
||||
data[i].req = skcipher_request_alloc(tfm, GFP_KERNEL);
|
||||
if (!data[i].req) {
|
||||
|
||||
@@ -517,7 +517,7 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
|
||||
info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info));
|
||||
if (!info) {
|
||||
status = AE_NO_MEMORY;
|
||||
goto cleanup;
|
||||
goto pop_walk_state;
|
||||
}
|
||||
|
||||
info->parameters = &this_walk_state->operands[0];
|
||||
@@ -529,7 +529,7 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
|
||||
|
||||
ACPI_FREE(info);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
goto cleanup;
|
||||
goto pop_walk_state;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -561,6 +561,12 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
|
||||
|
||||
return_ACPI_STATUS(status);
|
||||
|
||||
pop_walk_state:
|
||||
|
||||
/* On error, pop the walk state to be deleted from thread */
|
||||
|
||||
acpi_ds_pop_walk_state(thread);
|
||||
|
||||
cleanup:
|
||||
|
||||
/* On error, we must terminate the method properly */
|
||||
|
||||
@@ -916,13 +916,6 @@ acpi_ut_copy_ipackage_to_ipackage(union acpi_operand_object *source_obj,
|
||||
status = acpi_ut_walk_package_tree(source_obj, dest_obj,
|
||||
acpi_ut_copy_ielement_to_ielement,
|
||||
walk_state);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
|
||||
/* On failure, delete the destination package object */
|
||||
|
||||
acpi_ut_remove_reference(dest_obj);
|
||||
}
|
||||
|
||||
return_ACPI_STATUS(status);
|
||||
}
|
||||
|
||||
|
||||
@@ -97,6 +97,7 @@ enum board_ids {
|
||||
static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
|
||||
static void ahci_remove_one(struct pci_dev *dev);
|
||||
static void ahci_shutdown_one(struct pci_dev *dev);
|
||||
static void ahci_intel_pcs_quirk(struct pci_dev *pdev, struct ahci_host_priv *hpriv);
|
||||
static int ahci_vt8251_hardreset(struct ata_link *link, unsigned int *class,
|
||||
unsigned long deadline);
|
||||
static int ahci_avn_hardreset(struct ata_link *link, unsigned int *class,
|
||||
@@ -655,6 +656,25 @@ static void ahci_pci_save_initial_config(struct pci_dev *pdev,
|
||||
ahci_save_initial_config(&pdev->dev, hpriv);
|
||||
}
|
||||
|
||||
static int ahci_pci_reset_controller(struct ata_host *host)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(host->dev);
|
||||
struct ahci_host_priv *hpriv = host->private_data;
|
||||
int rc;
|
||||
|
||||
rc = ahci_reset_controller(host);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
/*
|
||||
* If platform firmware failed to enable ports, try to enable
|
||||
* them here.
|
||||
*/
|
||||
ahci_intel_pcs_quirk(pdev, hpriv);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ahci_pci_init_controller(struct ata_host *host)
|
||||
{
|
||||
struct ahci_host_priv *hpriv = host->private_data;
|
||||
@@ -857,7 +877,7 @@ static int ahci_pci_device_runtime_resume(struct device *dev)
|
||||
struct ata_host *host = pci_get_drvdata(pdev);
|
||||
int rc;
|
||||
|
||||
rc = ahci_reset_controller(host);
|
||||
rc = ahci_pci_reset_controller(host);
|
||||
if (rc)
|
||||
return rc;
|
||||
ahci_pci_init_controller(host);
|
||||
@@ -892,7 +912,7 @@ static int ahci_pci_device_resume(struct device *dev)
|
||||
ahci_mcp89_apple_enable(pdev);
|
||||
|
||||
if (pdev->dev.power.power_state.event == PM_EVENT_SUSPEND) {
|
||||
rc = ahci_reset_controller(host);
|
||||
rc = ahci_pci_reset_controller(host);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
@@ -1769,12 +1789,6 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
/* save initial config */
|
||||
ahci_pci_save_initial_config(pdev, hpriv);
|
||||
|
||||
/*
|
||||
* If platform firmware failed to enable ports, try to enable
|
||||
* them here.
|
||||
*/
|
||||
ahci_intel_pcs_quirk(pdev, hpriv);
|
||||
|
||||
/* prepare host */
|
||||
if (hpriv->cap & HOST_CAP_NCQ) {
|
||||
pi.flags |= ATA_FLAG_NCQ;
|
||||
@@ -1884,7 +1898,7 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
rc = ahci_reset_controller(host);
|
||||
rc = ahci_pci_reset_controller(host);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
|
||||
@@ -139,12 +139,12 @@ static void ixp4xx_setup_port(struct ata_port *ap,
|
||||
|
||||
static int ixp4xx_pata_probe(struct platform_device *pdev)
|
||||
{
|
||||
unsigned int irq;
|
||||
struct resource *cs0, *cs1;
|
||||
struct ata_host *host;
|
||||
struct ata_port *ap;
|
||||
struct ixp4xx_pata_data *data = dev_get_platdata(&pdev->dev);
|
||||
int ret;
|
||||
int irq;
|
||||
|
||||
cs0 = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
cs1 = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
|
||||
@@ -185,6 +185,11 @@ int __class_register(struct class *cls, struct lock_class_key *key)
|
||||
}
|
||||
error = class_add_groups(class_get(cls), cls->class_groups);
|
||||
class_put(cls);
|
||||
if (error) {
|
||||
kobject_del(&cp->subsys.kobj);
|
||||
kfree_const(cp->subsys.kobj.name);
|
||||
kfree(cp);
|
||||
}
|
||||
return error;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__class_register);
|
||||
|
||||
@@ -220,7 +220,16 @@ static int deferred_devs_show(struct seq_file *s, void *data)
|
||||
}
|
||||
DEFINE_SHOW_ATTRIBUTE(deferred_devs);
|
||||
|
||||
#ifdef CONFIG_MODULES
|
||||
/*
|
||||
* In the case of modules, set the default probe timeout to
|
||||
* 30 seconds to give userland some time to load needed modules
|
||||
*/
|
||||
static int deferred_probe_timeout = 30;
|
||||
#else
|
||||
/* In the case of !modules, no probe timeout needed */
|
||||
static int deferred_probe_timeout = -1;
|
||||
#endif
|
||||
static int __init deferred_probe_timeout_setup(char *str)
|
||||
{
|
||||
deferred_probe_timeout = simple_strtol(str, NULL, 10);
|
||||
@@ -902,8 +911,12 @@ static int __driver_attach(struct device *dev, void *data)
|
||||
*/
|
||||
return 0;
|
||||
} else if (ret < 0) {
|
||||
dev_dbg(dev, "Bus failed to match device: %d", ret);
|
||||
return ret;
|
||||
dev_dbg(dev, "Bus failed to match device: %d\n", ret);
|
||||
/*
|
||||
* Driver could not match with device, but may match with
|
||||
* another device on the bus.
|
||||
*/
|
||||
return 0;
|
||||
} /* ret > 0 means positive match */
|
||||
|
||||
if (dev->parent && dev->bus->need_parent_lock)
|
||||
|
||||
@@ -403,7 +403,10 @@ static int rpm_idle(struct device *dev, int rpmflags)
|
||||
/* Pending requests need to be canceled. */
|
||||
dev->power.request = RPM_REQ_NONE;
|
||||
|
||||
if (dev->power.no_callbacks)
|
||||
callback = RPM_GET_CALLBACK(dev, runtime_idle);
|
||||
|
||||
/* If no callback assume success. */
|
||||
if (!callback || dev->power.no_callbacks)
|
||||
goto out;
|
||||
|
||||
/* Carry out an asynchronous or a synchronous idle notification. */
|
||||
@@ -419,10 +422,17 @@ static int rpm_idle(struct device *dev, int rpmflags)
|
||||
|
||||
dev->power.idle_notification = true;
|
||||
|
||||
callback = RPM_GET_CALLBACK(dev, runtime_idle);
|
||||
if (dev->power.irq_safe)
|
||||
spin_unlock(&dev->power.lock);
|
||||
else
|
||||
spin_unlock_irq(&dev->power.lock);
|
||||
|
||||
if (callback)
|
||||
retval = __rpm_callback(callback, dev);
|
||||
retval = callback(dev);
|
||||
|
||||
if (dev->power.irq_safe)
|
||||
spin_lock(&dev->power.lock);
|
||||
else
|
||||
spin_lock_irq(&dev->power.lock);
|
||||
|
||||
dev->power.idle_notification = false;
|
||||
wake_up_all(&dev->power.wait_queue);
|
||||
|
||||
@@ -2258,7 +2258,6 @@ void drbd_destroy_device(struct kref *kref)
|
||||
kref_put(&peer_device->connection->kref, drbd_destroy_connection);
|
||||
kfree(peer_device);
|
||||
}
|
||||
memset(device, 0xfd, sizeof(*device));
|
||||
kfree(device);
|
||||
kref_put(&resource->kref, drbd_destroy_resource);
|
||||
}
|
||||
@@ -2351,7 +2350,6 @@ void drbd_destroy_resource(struct kref *kref)
|
||||
idr_destroy(&resource->devices);
|
||||
free_cpumask_var(resource->cpu_mask);
|
||||
kfree(resource->name);
|
||||
memset(resource, 0xf2, sizeof(*resource));
|
||||
kfree(resource);
|
||||
}
|
||||
|
||||
@@ -2748,7 +2746,6 @@ void drbd_destroy_connection(struct kref *kref)
|
||||
drbd_free_socket(&connection->data);
|
||||
kfree(connection->int_dig_in);
|
||||
kfree(connection->int_dig_vv);
|
||||
memset(connection, 0xfc, sizeof(*connection));
|
||||
kfree(connection);
|
||||
kref_put(&resource->kref, drbd_destroy_resource);
|
||||
}
|
||||
|
||||
@@ -501,13 +501,13 @@ static inline void btusb_free_frags(struct btusb_data *data)
|
||||
|
||||
spin_lock_irqsave(&data->rxlock, flags);
|
||||
|
||||
kfree_skb(data->evt_skb);
|
||||
dev_kfree_skb_irq(data->evt_skb);
|
||||
data->evt_skb = NULL;
|
||||
|
||||
kfree_skb(data->acl_skb);
|
||||
dev_kfree_skb_irq(data->acl_skb);
|
||||
data->acl_skb = NULL;
|
||||
|
||||
kfree_skb(data->sco_skb);
|
||||
dev_kfree_skb_irq(data->sco_skb);
|
||||
data->sco_skb = NULL;
|
||||
|
||||
spin_unlock_irqrestore(&data->rxlock, flags);
|
||||
|
||||
@@ -393,7 +393,7 @@ static void bcsp_pkt_cull(struct bcsp_struct *bcsp)
|
||||
i++;
|
||||
|
||||
__skb_unlink(skb, &bcsp->unack);
|
||||
kfree_skb(skb);
|
||||
dev_kfree_skb_irq(skb);
|
||||
}
|
||||
|
||||
if (skb_queue_empty(&bcsp->unack))
|
||||
|
||||
@@ -311,7 +311,7 @@ static void h5_pkt_cull(struct h5 *h5)
|
||||
break;
|
||||
|
||||
__skb_unlink(skb, &h5->unack);
|
||||
kfree_skb(skb);
|
||||
dev_kfree_skb_irq(skb);
|
||||
}
|
||||
|
||||
if (skb_queue_empty(&h5->unack))
|
||||
|
||||
@@ -810,7 +810,7 @@ static int qca_enqueue(struct hci_uart *hu, struct sk_buff *skb)
|
||||
default:
|
||||
BT_ERR("Illegal tx state: %d (losing packet)",
|
||||
qca->tx_ibs_state);
|
||||
kfree_skb(skb);
|
||||
dev_kfree_skb_irq(skb);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -143,15 +143,19 @@ static int __init mod_init(void)
|
||||
found:
|
||||
err = pci_read_config_dword(pdev, 0x58, &pmbase);
|
||||
if (err)
|
||||
return err;
|
||||
goto put_dev;
|
||||
|
||||
pmbase &= 0x0000FF00;
|
||||
if (pmbase == 0)
|
||||
return -EIO;
|
||||
if (pmbase == 0) {
|
||||
err = -EIO;
|
||||
goto put_dev;
|
||||
}
|
||||
|
||||
priv = kzalloc(sizeof(*priv), GFP_KERNEL);
|
||||
if (!priv)
|
||||
return -ENOMEM;
|
||||
if (!priv) {
|
||||
err = -ENOMEM;
|
||||
goto put_dev;
|
||||
}
|
||||
|
||||
if (!request_region(pmbase + PMBASE_OFFSET, PMBASE_SIZE, DRV_NAME)) {
|
||||
dev_err(&pdev->dev, DRV_NAME " region 0x%x already in use!\n",
|
||||
@@ -185,6 +189,8 @@ static int __init mod_init(void)
|
||||
release_region(pmbase + PMBASE_OFFSET, PMBASE_SIZE);
|
||||
out:
|
||||
kfree(priv);
|
||||
put_dev:
|
||||
pci_dev_put(pdev);
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -200,6 +206,8 @@ static void __exit mod_exit(void)
|
||||
|
||||
release_region(priv->pmbase + PMBASE_OFFSET, PMBASE_SIZE);
|
||||
|
||||
pci_dev_put(priv->pcidev);
|
||||
|
||||
kfree(priv);
|
||||
}
|
||||
|
||||
|
||||
@@ -51,6 +51,10 @@ static const struct pci_device_id pci_tbl[] = {
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, pci_tbl);
|
||||
|
||||
struct amd_geode_priv {
|
||||
struct pci_dev *pcidev;
|
||||
void __iomem *membase;
|
||||
};
|
||||
|
||||
static int geode_rng_data_read(struct hwrng *rng, u32 *data)
|
||||
{
|
||||
@@ -90,6 +94,7 @@ static int __init mod_init(void)
|
||||
const struct pci_device_id *ent;
|
||||
void __iomem *mem;
|
||||
unsigned long rng_base;
|
||||
struct amd_geode_priv *priv;
|
||||
|
||||
for_each_pci_dev(pdev) {
|
||||
ent = pci_match_id(pci_tbl, pdev);
|
||||
@@ -97,17 +102,26 @@ static int __init mod_init(void)
|
||||
goto found;
|
||||
}
|
||||
/* Device not found. */
|
||||
goto out;
|
||||
return err;
|
||||
|
||||
found:
|
||||
priv = kzalloc(sizeof(*priv), GFP_KERNEL);
|
||||
if (!priv) {
|
||||
err = -ENOMEM;
|
||||
goto put_dev;
|
||||
}
|
||||
|
||||
rng_base = pci_resource_start(pdev, 0);
|
||||
if (rng_base == 0)
|
||||
goto out;
|
||||
goto free_priv;
|
||||
err = -ENOMEM;
|
||||
mem = ioremap(rng_base, 0x58);
|
||||
if (!mem)
|
||||
goto out;
|
||||
geode_rng.priv = (unsigned long)mem;
|
||||
goto free_priv;
|
||||
|
||||
geode_rng.priv = (unsigned long)priv;
|
||||
priv->membase = mem;
|
||||
priv->pcidev = pdev;
|
||||
|
||||
pr_info("AMD Geode RNG detected\n");
|
||||
err = hwrng_register(&geode_rng);
|
||||
@@ -116,20 +130,26 @@ static int __init mod_init(void)
|
||||
err);
|
||||
goto err_unmap;
|
||||
}
|
||||
out:
|
||||
return err;
|
||||
|
||||
err_unmap:
|
||||
iounmap(mem);
|
||||
goto out;
|
||||
free_priv:
|
||||
kfree(priv);
|
||||
put_dev:
|
||||
pci_dev_put(pdev);
|
||||
return err;
|
||||
}
|
||||
|
||||
static void __exit mod_exit(void)
|
||||
{
|
||||
void __iomem *mem = (void __iomem *)geode_rng.priv;
|
||||
struct amd_geode_priv *priv;
|
||||
|
||||
priv = (struct amd_geode_priv *)geode_rng.priv;
|
||||
hwrng_unregister(&geode_rng);
|
||||
iounmap(mem);
|
||||
iounmap(priv->membase);
|
||||
pci_dev_put(priv->pcidev);
|
||||
kfree(priv);
|
||||
}
|
||||
|
||||
module_init(mod_init);
|
||||
|
||||
@@ -1219,6 +1219,7 @@ static void _ipmi_destroy_user(struct ipmi_user *user)
|
||||
unsigned long flags;
|
||||
struct cmd_rcvr *rcvr;
|
||||
struct cmd_rcvr *rcvrs = NULL;
|
||||
struct module *owner;
|
||||
|
||||
if (!acquire_ipmi_user(user, &i)) {
|
||||
/*
|
||||
@@ -1278,8 +1279,9 @@ static void _ipmi_destroy_user(struct ipmi_user *user)
|
||||
kfree(rcvr);
|
||||
}
|
||||
|
||||
owner = intf->owner;
|
||||
kref_put(&intf->refcount, intf_free);
|
||||
module_put(intf->owner);
|
||||
module_put(owner);
|
||||
}
|
||||
|
||||
int ipmi_destroy_user(struct ipmi_user *user)
|
||||
@@ -3461,12 +3463,16 @@ static void deliver_smi_err_response(struct ipmi_smi *intf,
|
||||
struct ipmi_smi_msg *msg,
|
||||
unsigned char err)
|
||||
{
|
||||
int rv;
|
||||
msg->rsp[0] = msg->data[0] | 4;
|
||||
msg->rsp[1] = msg->data[1];
|
||||
msg->rsp[2] = err;
|
||||
msg->rsp_size = 3;
|
||||
/* It's an error, so it will never requeue, no need to check return. */
|
||||
handle_one_recv_msg(intf, msg);
|
||||
|
||||
/* This will never requeue, but it may ask us to free the message. */
|
||||
rv = handle_one_recv_msg(intf, msg);
|
||||
if (rv == 0)
|
||||
ipmi_free_smi_msg(msg);
|
||||
}
|
||||
|
||||
static void cleanup_smi_msgs(struct ipmi_smi *intf)
|
||||
|
||||
@@ -2187,6 +2187,20 @@ static int __init init_ipmi_si(void)
|
||||
}
|
||||
module_init(init_ipmi_si);
|
||||
|
||||
static void wait_msg_processed(struct smi_info *smi_info)
|
||||
{
|
||||
unsigned long jiffies_now;
|
||||
long time_diff;
|
||||
|
||||
while (smi_info->curr_msg || (smi_info->si_state != SI_NORMAL)) {
|
||||
jiffies_now = jiffies;
|
||||
time_diff = (((long)jiffies_now - (long)smi_info->last_timeout_jiffies)
|
||||
* SI_USEC_PER_JIFFY);
|
||||
smi_event_handler(smi_info, time_diff);
|
||||
schedule_timeout_uninterruptible(1);
|
||||
}
|
||||
}
|
||||
|
||||
static void shutdown_smi(void *send_info)
|
||||
{
|
||||
struct smi_info *smi_info = send_info;
|
||||
@@ -2221,16 +2235,13 @@ static void shutdown_smi(void *send_info)
|
||||
* in the BMC. Note that timers and CPU interrupts are off,
|
||||
* so no need for locks.
|
||||
*/
|
||||
while (smi_info->curr_msg || (smi_info->si_state != SI_NORMAL)) {
|
||||
poll(smi_info);
|
||||
schedule_timeout_uninterruptible(1);
|
||||
}
|
||||
wait_msg_processed(smi_info);
|
||||
|
||||
if (smi_info->handlers)
|
||||
disable_si_irq(smi_info);
|
||||
while (smi_info->curr_msg || (smi_info->si_state != SI_NORMAL)) {
|
||||
poll(smi_info);
|
||||
schedule_timeout_uninterruptible(1);
|
||||
}
|
||||
|
||||
wait_msg_processed(smi_info);
|
||||
|
||||
if (smi_info->handlers)
|
||||
smi_info->handlers->cleanup(smi_info->si_sm);
|
||||
|
||||
|
||||
@@ -256,7 +256,7 @@ static int __crb_relinquish_locality(struct device *dev,
|
||||
iowrite32(CRB_LOC_CTRL_RELINQUISH, &priv->regs_h->loc_ctrl);
|
||||
if (!crb_wait_for_reg_32(&priv->regs_h->loc_state, mask, value,
|
||||
TPM2_TIMEOUT_C)) {
|
||||
dev_warn(dev, "TPM_LOC_STATE_x.requestAccess timed out\n");
|
||||
dev_warn(dev, "TPM_LOC_STATE_x.Relinquish timed out\n");
|
||||
return -ETIME;
|
||||
}
|
||||
|
||||
@@ -680,12 +680,16 @@ static int crb_acpi_add(struct acpi_device *device)
|
||||
|
||||
/* Should the FIFO driver handle this? */
|
||||
sm = buf->start_method;
|
||||
if (sm == ACPI_TPM2_MEMORY_MAPPED)
|
||||
return -ENODEV;
|
||||
if (sm == ACPI_TPM2_MEMORY_MAPPED) {
|
||||
rc = -ENODEV;
|
||||
goto out;
|
||||
}
|
||||
|
||||
priv = devm_kzalloc(dev, sizeof(struct crb_priv), GFP_KERNEL);
|
||||
if (!priv)
|
||||
return -ENOMEM;
|
||||
if (!priv) {
|
||||
rc = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (sm == ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC) {
|
||||
if (buf->header.length < (sizeof(*buf) + sizeof(*crb_smc))) {
|
||||
@@ -693,7 +697,8 @@ static int crb_acpi_add(struct acpi_device *device)
|
||||
FW_BUG "TPM2 ACPI table has wrong size %u for start method type %d\n",
|
||||
buf->header.length,
|
||||
ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC);
|
||||
return -EINVAL;
|
||||
rc = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
crb_smc = ACPI_ADD_PTR(struct tpm2_crb_smc, buf, sizeof(*buf));
|
||||
priv->smc_func_id = crb_smc->smc_func_id;
|
||||
@@ -704,17 +709,23 @@ static int crb_acpi_add(struct acpi_device *device)
|
||||
|
||||
rc = crb_map_io(device, priv, buf);
|
||||
if (rc)
|
||||
return rc;
|
||||
goto out;
|
||||
|
||||
chip = tpmm_chip_alloc(dev, &tpm_crb);
|
||||
if (IS_ERR(chip))
|
||||
return PTR_ERR(chip);
|
||||
if (IS_ERR(chip)) {
|
||||
rc = PTR_ERR(chip);
|
||||
goto out;
|
||||
}
|
||||
|
||||
dev_set_drvdata(&chip->dev, priv);
|
||||
chip->acpi_dev_handle = device->handle;
|
||||
chip->flags = TPM_CHIP_FLAG_TPM2;
|
||||
|
||||
return tpm_chip_register(chip);
|
||||
rc = tpm_chip_register(chip);
|
||||
|
||||
out:
|
||||
acpi_put_table((struct acpi_table_header *)buf);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int crb_acpi_remove(struct acpi_device *device)
|
||||
|
||||
@@ -129,6 +129,7 @@ static int check_acpi_tpm2(struct device *dev)
|
||||
const struct acpi_device_id *aid = acpi_match_device(tpm_acpi_tbl, dev);
|
||||
struct acpi_table_tpm2 *tbl;
|
||||
acpi_status st;
|
||||
int ret = 0;
|
||||
|
||||
if (!aid || aid->driver_data != DEVICE_IS_TPM2)
|
||||
return 0;
|
||||
@@ -136,8 +137,7 @@ static int check_acpi_tpm2(struct device *dev)
|
||||
/* If the ACPI TPM2 signature is matched then a global ACPI_SIG_TPM2
|
||||
* table is mandatory
|
||||
*/
|
||||
st =
|
||||
acpi_get_table(ACPI_SIG_TPM2, 1, (struct acpi_table_header **)&tbl);
|
||||
st = acpi_get_table(ACPI_SIG_TPM2, 1, (struct acpi_table_header **)&tbl);
|
||||
if (ACPI_FAILURE(st) || tbl->header.length < sizeof(*tbl)) {
|
||||
dev_err(dev, FW_BUG "failed to get TPM2 ACPI table\n");
|
||||
return -EINVAL;
|
||||
@@ -145,9 +145,10 @@ static int check_acpi_tpm2(struct device *dev)
|
||||
|
||||
/* The tpm2_crb driver handles this device */
|
||||
if (tbl->start_method != ACPI_TPM2_MEMORY_MAPPED)
|
||||
return -ENODEV;
|
||||
ret = -ENODEV;
|
||||
|
||||
return 0;
|
||||
acpi_put_table((struct acpi_table_header *)tbl);
|
||||
return ret;
|
||||
}
|
||||
#else
|
||||
static int check_acpi_tpm2(struct device *dev)
|
||||
|
||||
@@ -972,6 +972,7 @@ struct clk *rockchip_clk_register_pll(struct rockchip_clk_provider *ctx,
|
||||
return mux_clk;
|
||||
|
||||
err_pll:
|
||||
kfree(pll->rate_table);
|
||||
clk_unregister(mux_clk);
|
||||
mux_clk = pll_clk;
|
||||
err_mux:
|
||||
|
||||
@@ -1392,6 +1392,7 @@ static void __init _samsung_clk_register_pll(struct samsung_clk_provider *ctx,
|
||||
if (ret) {
|
||||
pr_err("%s: failed to register pll clock %s : %d\n",
|
||||
__func__, pll_clk->name, ret);
|
||||
kfree(pll->rate_table);
|
||||
kfree(pll);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -183,12 +183,13 @@ static void __init __socfpga_gate_init(struct device_node *node,
|
||||
u32 div_reg[3];
|
||||
u32 clk_phase[2];
|
||||
u32 fixed_div;
|
||||
struct clk *clk;
|
||||
struct clk_hw *hw_clk;
|
||||
struct socfpga_gate_clk *socfpga_clk;
|
||||
const char *clk_name = node->name;
|
||||
const char *parent_name[SOCFPGA_MAX_PARENTS];
|
||||
struct clk_init_data init = {};
|
||||
int rc;
|
||||
int err;
|
||||
|
||||
socfpga_clk = kzalloc(sizeof(*socfpga_clk), GFP_KERNEL);
|
||||
if (WARN_ON(!socfpga_clk))
|
||||
@@ -237,12 +238,14 @@ static void __init __socfpga_gate_init(struct device_node *node,
|
||||
init.parent_names = parent_name;
|
||||
socfpga_clk->hw.hw.init = &init;
|
||||
|
||||
clk = clk_register(NULL, &socfpga_clk->hw.hw);
|
||||
if (WARN_ON(IS_ERR(clk))) {
|
||||
hw_clk = &socfpga_clk->hw.hw;
|
||||
|
||||
err = clk_hw_register(NULL, hw_clk);
|
||||
if (err) {
|
||||
kfree(socfpga_clk);
|
||||
return;
|
||||
}
|
||||
rc = of_clk_add_provider(node, of_clk_src_simple_get, clk);
|
||||
rc = of_clk_add_provider(node, of_clk_src_simple_get, hw_clk);
|
||||
if (WARN_ON(rc))
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -61,7 +61,7 @@ static __init void __socfpga_periph_init(struct device_node *node,
|
||||
const struct clk_ops *ops)
|
||||
{
|
||||
u32 reg;
|
||||
struct clk *clk;
|
||||
struct clk_hw *hw_clk;
|
||||
struct socfpga_periph_clk *periph_clk;
|
||||
const char *clk_name = node->name;
|
||||
const char *parent_name[SOCFPGA_MAX_PARENTS];
|
||||
@@ -104,13 +104,13 @@ static __init void __socfpga_periph_init(struct device_node *node,
|
||||
init.parent_names = parent_name;
|
||||
|
||||
periph_clk->hw.hw.init = &init;
|
||||
hw_clk = &periph_clk->hw.hw;
|
||||
|
||||
clk = clk_register(NULL, &periph_clk->hw.hw);
|
||||
if (WARN_ON(IS_ERR(clk))) {
|
||||
if (clk_hw_register(NULL, hw_clk)) {
|
||||
kfree(periph_clk);
|
||||
return;
|
||||
}
|
||||
rc = of_clk_add_provider(node, of_clk_src_simple_get, clk);
|
||||
rc = of_clk_add_provider(node, of_clk_src_simple_get, hw_clk);
|
||||
}
|
||||
|
||||
void __init socfpga_periph_init(struct device_node *node)
|
||||
|
||||
@@ -80,17 +80,18 @@ static struct clk_ops clk_pll_ops = {
|
||||
.get_parent = clk_pll_get_parent,
|
||||
};
|
||||
|
||||
static __init struct clk *__socfpga_pll_init(struct device_node *node,
|
||||
static __init struct clk_hw *__socfpga_pll_init(struct device_node *node,
|
||||
const struct clk_ops *ops)
|
||||
{
|
||||
u32 reg;
|
||||
struct clk *clk;
|
||||
struct clk_hw *hw_clk;
|
||||
struct socfpga_pll *pll_clk;
|
||||
const char *clk_name = node->name;
|
||||
const char *parent_name[SOCFPGA_MAX_PARENTS];
|
||||
struct clk_init_data init = {};
|
||||
struct device_node *clkmgr_np;
|
||||
int rc;
|
||||
int err;
|
||||
|
||||
of_property_read_u32(node, "reg", ®);
|
||||
|
||||
@@ -118,13 +119,15 @@ static __init struct clk *__socfpga_pll_init(struct device_node *node,
|
||||
clk_pll_ops.enable = clk_gate_ops.enable;
|
||||
clk_pll_ops.disable = clk_gate_ops.disable;
|
||||
|
||||
clk = clk_register(NULL, &pll_clk->hw.hw);
|
||||
if (WARN_ON(IS_ERR(clk))) {
|
||||
hw_clk = &pll_clk->hw.hw;
|
||||
|
||||
err = clk_hw_register(NULL, hw_clk);
|
||||
if (err) {
|
||||
kfree(pll_clk);
|
||||
return NULL;
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
rc = of_clk_add_provider(node, of_clk_src_simple_get, clk);
|
||||
return clk;
|
||||
rc = of_clk_add_provider(node, of_clk_src_simple_get, hw_clk);
|
||||
return hw_clk;
|
||||
}
|
||||
|
||||
void __init socfpga_pll_init(struct device_node *node)
|
||||
|
||||
@@ -948,9 +948,10 @@ static void __init st_of_quadfs_setup(struct device_node *np,
|
||||
|
||||
clk = st_clk_register_quadfs_pll(pll_name, clk_parent_name, data,
|
||||
reg, lock);
|
||||
if (IS_ERR(clk))
|
||||
if (IS_ERR(clk)) {
|
||||
kfree(lock);
|
||||
goto err_exit;
|
||||
else
|
||||
} else
|
||||
pr_debug("%s: parent %s rate %u\n",
|
||||
__clk_get_name(clk),
|
||||
__clk_get_name(clk_get_parent(clk)),
|
||||
|
||||
@@ -239,6 +239,8 @@ static const struct sh_cmt_info sh_cmt_info[] = {
|
||||
#define CMCNT 1 /* channel register */
|
||||
#define CMCOR 2 /* channel register */
|
||||
|
||||
#define CMCLKE 0x1000 /* CLK Enable Register (R-Car Gen2) */
|
||||
|
||||
static inline u32 sh_cmt_read_cmstr(struct sh_cmt_channel *ch)
|
||||
{
|
||||
if (ch->iostart)
|
||||
@@ -856,6 +858,7 @@ static int sh_cmt_setup_channel(struct sh_cmt_channel *ch, unsigned int index,
|
||||
unsigned int hwidx, bool clockevent,
|
||||
bool clocksource, struct sh_cmt_device *cmt)
|
||||
{
|
||||
u32 value;
|
||||
int ret;
|
||||
|
||||
/* Skip unused channels. */
|
||||
@@ -885,6 +888,11 @@ static int sh_cmt_setup_channel(struct sh_cmt_channel *ch, unsigned int index,
|
||||
ch->iostart = cmt->mapbase + ch->hwidx * 0x100;
|
||||
ch->ioctrl = ch->iostart + 0x10;
|
||||
ch->timer_bit = 0;
|
||||
|
||||
/* Enable the clock supply to the channel */
|
||||
value = ioread32(cmt->mapbase + CMCLKE);
|
||||
value |= BIT(hwidx);
|
||||
iowrite32(value, cmt->mapbase + CMCLKE);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -991,12 +999,10 @@ static int sh_cmt_setup(struct sh_cmt_device *cmt, struct platform_device *pdev)
|
||||
else
|
||||
cmt->rate = clk_get_rate(cmt->clk) / 8;
|
||||
|
||||
clk_disable(cmt->clk);
|
||||
|
||||
/* Map the memory resource(s). */
|
||||
ret = sh_cmt_map_memory(cmt);
|
||||
if (ret < 0)
|
||||
goto err_clk_unprepare;
|
||||
goto err_clk_disable;
|
||||
|
||||
/* Allocate and setup the channels. */
|
||||
cmt->num_channels = hweight8(cmt->hw_channels);
|
||||
@@ -1024,6 +1030,8 @@ static int sh_cmt_setup(struct sh_cmt_device *cmt, struct platform_device *pdev)
|
||||
mask &= ~(1 << hwidx);
|
||||
}
|
||||
|
||||
clk_disable(cmt->clk);
|
||||
|
||||
platform_set_drvdata(pdev, cmt);
|
||||
|
||||
return 0;
|
||||
@@ -1031,6 +1039,8 @@ static int sh_cmt_setup(struct sh_cmt_device *cmt, struct platform_device *pdev)
|
||||
err_unmap:
|
||||
kfree(cmt->channels);
|
||||
iounmap(cmt->mapbase);
|
||||
err_clk_disable:
|
||||
clk_disable(cmt->clk);
|
||||
err_clk_unprepare:
|
||||
clk_unprepare(cmt->clk);
|
||||
err_clk_put:
|
||||
|
||||
@@ -122,6 +122,8 @@ static int __init amd_freq_sensitivity_init(void)
|
||||
if (!pcidev) {
|
||||
if (!static_cpu_has(X86_FEATURE_PROC_FEEDBACK))
|
||||
return -ENODEV;
|
||||
} else {
|
||||
pci_dev_put(pcidev);
|
||||
}
|
||||
|
||||
if (rdmsrl_safe(MSR_AMD64_FREQ_SENSITIVITY_ACTUAL, &val))
|
||||
|
||||
@@ -224,6 +224,6 @@ int dt_init_idle_driver(struct cpuidle_driver *drv,
|
||||
* also be 0 on platforms with missing DT idle states or legacy DT
|
||||
* configuration predating the DT idle states bindings.
|
||||
*/
|
||||
return i;
|
||||
return state_idx - start_idx;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dt_init_idle_driver);
|
||||
|
||||
@@ -46,7 +46,7 @@ int __init cc_debugfs_global_init(void)
|
||||
return !cc_debugfs_dir;
|
||||
}
|
||||
|
||||
void __exit cc_debugfs_global_fini(void)
|
||||
void cc_debugfs_global_fini(void)
|
||||
{
|
||||
debugfs_remove(cc_debugfs_dir);
|
||||
}
|
||||
|
||||
@@ -359,12 +359,16 @@ static int img_hash_dma_init(struct img_hash_dev *hdev)
|
||||
static void img_hash_dma_task(unsigned long d)
|
||||
{
|
||||
struct img_hash_dev *hdev = (struct img_hash_dev *)d;
|
||||
struct img_hash_request_ctx *ctx = ahash_request_ctx(hdev->req);
|
||||
struct img_hash_request_ctx *ctx;
|
||||
u8 *addr;
|
||||
size_t nbytes, bleft, wsend, len, tbc;
|
||||
struct scatterlist tsg;
|
||||
|
||||
if (!hdev->req || !ctx->sg)
|
||||
if (!hdev->req)
|
||||
return;
|
||||
|
||||
ctx = ahash_request_ctx(hdev->req);
|
||||
if (!ctx->sg)
|
||||
return;
|
||||
|
||||
addr = sg_virt(ctx->sg);
|
||||
|
||||
@@ -1286,6 +1286,7 @@ struct n2_hash_tmpl {
|
||||
const u32 *hash_init;
|
||||
u8 hw_op_hashsz;
|
||||
u8 digest_size;
|
||||
u8 statesize;
|
||||
u8 block_size;
|
||||
u8 auth_type;
|
||||
u8 hmac_type;
|
||||
@@ -1317,6 +1318,7 @@ static const struct n2_hash_tmpl hash_tmpls[] = {
|
||||
.hmac_type = AUTH_TYPE_HMAC_MD5,
|
||||
.hw_op_hashsz = MD5_DIGEST_SIZE,
|
||||
.digest_size = MD5_DIGEST_SIZE,
|
||||
.statesize = sizeof(struct md5_state),
|
||||
.block_size = MD5_HMAC_BLOCK_SIZE },
|
||||
{ .name = "sha1",
|
||||
.hash_zero = sha1_zero_message_hash,
|
||||
@@ -1325,6 +1327,7 @@ static const struct n2_hash_tmpl hash_tmpls[] = {
|
||||
.hmac_type = AUTH_TYPE_HMAC_SHA1,
|
||||
.hw_op_hashsz = SHA1_DIGEST_SIZE,
|
||||
.digest_size = SHA1_DIGEST_SIZE,
|
||||
.statesize = sizeof(struct sha1_state),
|
||||
.block_size = SHA1_BLOCK_SIZE },
|
||||
{ .name = "sha256",
|
||||
.hash_zero = sha256_zero_message_hash,
|
||||
@@ -1333,6 +1336,7 @@ static const struct n2_hash_tmpl hash_tmpls[] = {
|
||||
.hmac_type = AUTH_TYPE_HMAC_SHA256,
|
||||
.hw_op_hashsz = SHA256_DIGEST_SIZE,
|
||||
.digest_size = SHA256_DIGEST_SIZE,
|
||||
.statesize = sizeof(struct sha256_state),
|
||||
.block_size = SHA256_BLOCK_SIZE },
|
||||
{ .name = "sha224",
|
||||
.hash_zero = sha224_zero_message_hash,
|
||||
@@ -1341,6 +1345,7 @@ static const struct n2_hash_tmpl hash_tmpls[] = {
|
||||
.hmac_type = AUTH_TYPE_RESERVED,
|
||||
.hw_op_hashsz = SHA256_DIGEST_SIZE,
|
||||
.digest_size = SHA224_DIGEST_SIZE,
|
||||
.statesize = sizeof(struct sha256_state),
|
||||
.block_size = SHA224_BLOCK_SIZE },
|
||||
};
|
||||
#define NUM_HASH_TMPLS ARRAY_SIZE(hash_tmpls)
|
||||
@@ -1482,6 +1487,7 @@ static int __n2_register_one_ahash(const struct n2_hash_tmpl *tmpl)
|
||||
|
||||
halg = &ahash->halg;
|
||||
halg->digestsize = tmpl->digest_size;
|
||||
halg->statesize = tmpl->statesize;
|
||||
|
||||
base = &halg->base;
|
||||
snprintf(base->cra_name, CRYPTO_MAX_ALG_NAME, "%s", tmpl->name);
|
||||
|
||||
@@ -110,6 +110,12 @@ static char dio_no_name[] = { 0 };
|
||||
|
||||
#endif /* CONFIG_DIO_CONSTANTS */
|
||||
|
||||
static void dio_dev_release(struct device *dev)
|
||||
{
|
||||
struct dio_dev *ddev = container_of(dev, typeof(struct dio_dev), dev);
|
||||
kfree(ddev);
|
||||
}
|
||||
|
||||
int __init dio_find(int deviceid)
|
||||
{
|
||||
/* Called to find a DIO device before the full bus scan has run.
|
||||
@@ -222,6 +228,7 @@ static int __init dio_init(void)
|
||||
dev->bus = &dio_bus;
|
||||
dev->dev.parent = &dio_bus.dev;
|
||||
dev->dev.bus = &dio_bus_type;
|
||||
dev->dev.release = dio_dev_release;
|
||||
dev->scode = scode;
|
||||
dev->resource.start = pa;
|
||||
dev->resource.end = pa + DIO_SIZE(scode, va);
|
||||
@@ -249,6 +256,7 @@ static int __init dio_init(void)
|
||||
if (error) {
|
||||
pr_err("DIO: Error registering device %s\n",
|
||||
dev->name);
|
||||
put_device(&dev->dev);
|
||||
continue;
|
||||
}
|
||||
error = dio_create_sysfs_dev_files(dev);
|
||||
|
||||
@@ -424,17 +424,16 @@ static void edac_device_workq_teardown(struct edac_device_ctl_info *edac_dev)
|
||||
* Then restart the workq on the new delay
|
||||
*/
|
||||
void edac_device_reset_delay_period(struct edac_device_ctl_info *edac_dev,
|
||||
unsigned long value)
|
||||
unsigned long msec)
|
||||
{
|
||||
unsigned long jiffs = msecs_to_jiffies(value);
|
||||
edac_dev->poll_msec = msec;
|
||||
edac_dev->delay = msecs_to_jiffies(msec);
|
||||
|
||||
if (value == 1000)
|
||||
jiffs = round_jiffies_relative(value);
|
||||
|
||||
edac_dev->poll_msec = value;
|
||||
edac_dev->delay = jiffs;
|
||||
|
||||
edac_mod_work(&edac_dev->work, jiffs);
|
||||
/* See comment in edac_device_workq_setup() above */
|
||||
if (edac_dev->poll_msec == 1000)
|
||||
edac_mod_work(&edac_dev->work, round_jiffies_relative(edac_dev->delay));
|
||||
else
|
||||
edac_mod_work(&edac_dev->work, edac_dev->delay);
|
||||
}
|
||||
|
||||
int edac_device_alloc_index(void)
|
||||
|
||||
@@ -57,7 +57,7 @@ bool edac_stop_work(struct delayed_work *work);
|
||||
bool edac_mod_work(struct delayed_work *work, unsigned long delay);
|
||||
|
||||
extern void edac_device_reset_delay_period(struct edac_device_ctl_info
|
||||
*edac_dev, unsigned long value);
|
||||
*edac_dev, unsigned long msec);
|
||||
extern void edac_mc_reset_delay_period(unsigned long value);
|
||||
|
||||
extern void *edac_align_ptr(void **p, unsigned size, int n_elems);
|
||||
|
||||
@@ -359,8 +359,8 @@ static int __init efisubsys_init(void)
|
||||
efi_kobj = kobject_create_and_add("efi", firmware_kobj);
|
||||
if (!efi_kobj) {
|
||||
pr_err("efi: Firmware registration failed.\n");
|
||||
destroy_workqueue(efi_rts_wq);
|
||||
return -ENOMEM;
|
||||
error = -ENOMEM;
|
||||
goto err_destroy_wq;
|
||||
}
|
||||
|
||||
error = generic_ops_register();
|
||||
@@ -396,7 +396,10 @@ static int __init efisubsys_init(void)
|
||||
generic_ops_unregister();
|
||||
err_put:
|
||||
kobject_put(efi_kobj);
|
||||
err_destroy_wq:
|
||||
if (efi_rts_wq)
|
||||
destroy_workqueue(efi_rts_wq);
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
@@ -312,6 +312,7 @@ static bool amdgpu_atrm_get_bios(struct amdgpu_device *adev)
|
||||
|
||||
if (!found)
|
||||
return false;
|
||||
pci_dev_put(pdev);
|
||||
|
||||
adev->bios = kmalloc(size, GFP_KERNEL);
|
||||
if (!adev->bios) {
|
||||
|
||||
@@ -48,6 +48,8 @@ struct amdgpu_vf_error_buffer {
|
||||
uint64_t data[AMDGPU_VF_ERROR_ENTRY_SIZE];
|
||||
};
|
||||
|
||||
enum idh_request;
|
||||
|
||||
/**
|
||||
* struct amdgpu_virt_ops - amdgpu device virt operations
|
||||
*/
|
||||
@@ -56,7 +58,8 @@ struct amdgpu_virt_ops {
|
||||
int (*rel_full_gpu)(struct amdgpu_device *adev, bool init);
|
||||
int (*reset_gpu)(struct amdgpu_device *adev);
|
||||
int (*wait_reset)(struct amdgpu_device *adev);
|
||||
void (*trans_msg)(struct amdgpu_device *adev, u32 req, u32 data1, u32 data2, u32 data3);
|
||||
void (*trans_msg)(struct amdgpu_device *adev, enum idh_request req,
|
||||
u32 data1, u32 data2, u32 data3);
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -428,6 +428,9 @@ void drm_connector_cleanup(struct drm_connector *connector)
|
||||
mutex_destroy(&connector->mutex);
|
||||
|
||||
memset(connector, 0, sizeof(*connector));
|
||||
|
||||
if (dev->registered)
|
||||
drm_sysfs_hotplug_event(dev);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_connector_cleanup);
|
||||
|
||||
|
||||
@@ -83,7 +83,8 @@ static int fsl_dcu_drm_connector_get_modes(struct drm_connector *connector)
|
||||
return num_modes;
|
||||
}
|
||||
|
||||
static int fsl_dcu_drm_connector_mode_valid(struct drm_connector *connector,
|
||||
static enum drm_mode_status
|
||||
fsl_dcu_drm_connector_mode_valid(struct drm_connector *connector,
|
||||
struct drm_display_mode *mode)
|
||||
{
|
||||
if (mode->hdisplay & 0xf)
|
||||
|
||||
@@ -223,6 +223,7 @@ static bool radeon_atrm_get_bios(struct radeon_device *rdev)
|
||||
|
||||
if (!found)
|
||||
return false;
|
||||
pci_dev_put(pdev);
|
||||
|
||||
rdev->bios = kmalloc(size, GFP_KERNEL);
|
||||
if (!rdev->bios) {
|
||||
@@ -608,13 +609,14 @@ static bool radeon_acpi_vfct_bios(struct radeon_device *rdev)
|
||||
acpi_size tbl_size;
|
||||
UEFI_ACPI_VFCT *vfct;
|
||||
unsigned offset;
|
||||
bool r = false;
|
||||
|
||||
if (!ACPI_SUCCESS(acpi_get_table("VFCT", 1, &hdr)))
|
||||
return false;
|
||||
tbl_size = hdr->length;
|
||||
if (tbl_size < sizeof(UEFI_ACPI_VFCT)) {
|
||||
DRM_ERROR("ACPI VFCT table present but broken (too short #1)\n");
|
||||
return false;
|
||||
goto out;
|
||||
}
|
||||
|
||||
vfct = (UEFI_ACPI_VFCT *)hdr;
|
||||
@@ -627,13 +629,13 @@ static bool radeon_acpi_vfct_bios(struct radeon_device *rdev)
|
||||
offset += sizeof(VFCT_IMAGE_HEADER);
|
||||
if (offset > tbl_size) {
|
||||
DRM_ERROR("ACPI VFCT image header truncated\n");
|
||||
return false;
|
||||
goto out;
|
||||
}
|
||||
|
||||
offset += vhdr->ImageLength;
|
||||
if (offset > tbl_size) {
|
||||
DRM_ERROR("ACPI VFCT image truncated\n");
|
||||
return false;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (vhdr->ImageLength &&
|
||||
@@ -645,15 +647,18 @@ static bool radeon_acpi_vfct_bios(struct radeon_device *rdev)
|
||||
rdev->bios = kmemdup(&vbios->VbiosContent,
|
||||
vhdr->ImageLength,
|
||||
GFP_KERNEL);
|
||||
if (rdev->bios)
|
||||
r = true;
|
||||
|
||||
if (!rdev->bios)
|
||||
return false;
|
||||
return true;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
DRM_ERROR("ACPI VFCT table present but broken (too short #2)\n");
|
||||
return false;
|
||||
|
||||
out:
|
||||
acpi_put_table(hdr);
|
||||
return r;
|
||||
}
|
||||
#else
|
||||
static inline bool radeon_acpi_vfct_bios(struct radeon_device *rdev)
|
||||
|
||||
@@ -288,7 +288,7 @@ static void sti_dvo_set_mode(struct drm_bridge *bridge,
|
||||
|
||||
DRM_DEBUG_DRIVER("\n");
|
||||
|
||||
memcpy(&dvo->mode, mode, sizeof(struct drm_display_mode));
|
||||
drm_mode_copy(&dvo->mode, mode);
|
||||
|
||||
/* According to the path used (main or aux), the dvo clocks should
|
||||
* have a different parent clock. */
|
||||
@@ -346,7 +346,8 @@ static int sti_dvo_connector_get_modes(struct drm_connector *connector)
|
||||
|
||||
#define CLK_TOLERANCE_HZ 50
|
||||
|
||||
static int sti_dvo_connector_mode_valid(struct drm_connector *connector,
|
||||
static enum drm_mode_status
|
||||
sti_dvo_connector_mode_valid(struct drm_connector *connector,
|
||||
struct drm_display_mode *mode)
|
||||
{
|
||||
int target = mode->clock * 1000;
|
||||
|
||||
@@ -518,7 +518,7 @@ static void sti_hda_set_mode(struct drm_bridge *bridge,
|
||||
|
||||
DRM_DEBUG_DRIVER("\n");
|
||||
|
||||
memcpy(&hda->mode, mode, sizeof(struct drm_display_mode));
|
||||
drm_mode_copy(&hda->mode, mode);
|
||||
|
||||
if (!hda_get_mode_idx(hda->mode, &mode_idx)) {
|
||||
DRM_ERROR("Undefined mode\n");
|
||||
@@ -596,7 +596,8 @@ static int sti_hda_connector_get_modes(struct drm_connector *connector)
|
||||
|
||||
#define CLK_TOLERANCE_HZ 50
|
||||
|
||||
static int sti_hda_connector_mode_valid(struct drm_connector *connector,
|
||||
static enum drm_mode_status
|
||||
sti_hda_connector_mode_valid(struct drm_connector *connector,
|
||||
struct drm_display_mode *mode)
|
||||
{
|
||||
int target = mode->clock * 1000;
|
||||
|
||||
@@ -926,7 +926,7 @@ static void sti_hdmi_set_mode(struct drm_bridge *bridge,
|
||||
DRM_DEBUG_DRIVER("\n");
|
||||
|
||||
/* Copy the drm display mode in the connector local structure */
|
||||
memcpy(&hdmi->mode, mode, sizeof(struct drm_display_mode));
|
||||
drm_mode_copy(&hdmi->mode, mode);
|
||||
|
||||
/* Update clock framerate according to the selected mode */
|
||||
ret = clk_set_rate(hdmi->clk_pix, mode->clock * 1000);
|
||||
@@ -989,7 +989,8 @@ static int sti_hdmi_connector_get_modes(struct drm_connector *connector)
|
||||
|
||||
#define CLK_TOLERANCE_HZ 50
|
||||
|
||||
static int sti_hdmi_connector_mode_valid(struct drm_connector *connector,
|
||||
static enum drm_mode_status
|
||||
sti_hdmi_connector_mode_valid(struct drm_connector *connector,
|
||||
struct drm_display_mode *mode)
|
||||
{
|
||||
int target = mode->clock * 1000;
|
||||
|
||||
@@ -2376,8 +2376,10 @@ static int tegra_dc_probe(struct platform_device *pdev)
|
||||
usleep_range(2000, 4000);
|
||||
|
||||
err = reset_control_assert(dc->rst);
|
||||
if (err < 0)
|
||||
if (err < 0) {
|
||||
clk_disable_unprepare(dc->clk);
|
||||
return err;
|
||||
}
|
||||
|
||||
usleep_range(2000, 4000);
|
||||
|
||||
|
||||
@@ -325,10 +325,18 @@ static int virtio_gpu_resource_create_ioctl(struct drm_device *dev, void *data,
|
||||
drm_gem_object_release(obj);
|
||||
return ret;
|
||||
}
|
||||
drm_gem_object_put_unlocked(obj);
|
||||
|
||||
rc->res_handle = qobj->hw_res_handle; /* similiar to a VM address */
|
||||
rc->bo_handle = handle;
|
||||
|
||||
/*
|
||||
* The handle owns the reference now. But we must drop our
|
||||
* remaining reference *after* we no longer need to dereference
|
||||
* the obj. Otherwise userspace could guess the handle and
|
||||
* race closing it from another thread.
|
||||
*/
|
||||
drm_gem_object_put_unlocked(obj);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -179,7 +179,8 @@ void vmw_kms_cursor_snoop(struct vmw_surface *srf,
|
||||
if (cmd->dma.guest.ptr.offset % PAGE_SIZE ||
|
||||
box->x != 0 || box->y != 0 || box->z != 0 ||
|
||||
box->srcx != 0 || box->srcy != 0 || box->srcz != 0 ||
|
||||
box->d != 1 || box_count != 1) {
|
||||
box->d != 1 || box_count != 1 ||
|
||||
box->w > 64 || box->h > 64) {
|
||||
/* TODO handle none page aligned offsets */
|
||||
/* TODO handle more dst & src != 0 */
|
||||
/* TODO handle more then one copy */
|
||||
|
||||
@@ -911,7 +911,10 @@
|
||||
#define USB_DEVICE_ID_ORTEK_IHOME_IMAC_A210S 0x8003
|
||||
|
||||
#define USB_VENDOR_ID_PLANTRONICS 0x047f
|
||||
#define USB_DEVICE_ID_PLANTRONICS_BLACKWIRE_3210_SERIES 0xc055
|
||||
#define USB_DEVICE_ID_PLANTRONICS_BLACKWIRE_3220_SERIES 0xc056
|
||||
#define USB_DEVICE_ID_PLANTRONICS_BLACKWIRE_3215_SERIES 0xc057
|
||||
#define USB_DEVICE_ID_PLANTRONICS_BLACKWIRE_3225_SERIES 0xc058
|
||||
|
||||
#define USB_VENDOR_ID_PANASONIC 0x04da
|
||||
#define USB_DEVICE_ID_PANABOARD_UBT780 0x1044
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user