Linux 5.10.85
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.85 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/devicetree/bindings/net/ethernet-phy.yaml | 8 Documentation/kbuild/gcc-plugins.rst | 47 Documentation/locking/locktypes.rst | 9 MAINTAINERS | 1 Makefile | 2 arch/csky/kernel/traps.c | 4 arch/x86/Kconfig | 1 arch/x86/include/asm/kvm_host.h | 2 arch/x86/platform/efi/quirks.c | 3 block/ioprio.c | 3 drivers/android/binder.c | 21 drivers/ata/libata-core.c | 2 drivers/clk/imx/clk-imx8qxp-lpcg.c | 2 drivers/clk/imx/clk-imx8qxp.c | 2 drivers/clk/qcom/clk-regmap-mux.c | 2 drivers/clk/qcom/common.c | 12 drivers/clk/qcom/common.h | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 97 - drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 145 +- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 8 drivers/gpu/drm/amd/amdkfd/kfd_device.c | 15 drivers/gpu/drm/drm_syncobj.c | 11 drivers/hid/Kconfig | 10 drivers/hid/hid-asus.c | 6 drivers/hid/hid-bigbenff.c | 2 drivers/hid/hid-chicony.c | 8 drivers/hid/hid-corsair.c | 7 drivers/hid/hid-elan.c | 2 drivers/hid/hid-elo.c | 3 drivers/hid/hid-google-hammer.c | 2 drivers/hid/hid-holtek-kbd.c | 9 drivers/hid/hid-holtek-mouse.c | 9 drivers/hid/hid-ids.h | 2 drivers/hid/hid-lg.c | 10 drivers/hid/hid-logitech-dj.c | 2 drivers/hid/hid-prodikeys.c | 10 drivers/hid/hid-quirks.c | 1 drivers/hid/hid-roccat-arvo.c | 3 drivers/hid/hid-roccat-isku.c | 3 drivers/hid/hid-roccat-kone.c | 3 drivers/hid/hid-roccat-koneplus.c | 3 drivers/hid/hid-roccat-konepure.c | 3 drivers/hid/hid-roccat-kovaplus.c | 3 drivers/hid/hid-roccat-lua.c | 3 drivers/hid/hid-roccat-pyra.c | 3 drivers/hid/hid-roccat-ryos.c | 3 drivers/hid/hid-roccat-savu.c | 3 drivers/hid/hid-samsung.c | 3 drivers/hid/hid-u2fzero.c | 2 drivers/hid/hid-uclogic-core.c | 3 drivers/hid/hid-uclogic-params.c | 3 drivers/hid/wacom_sys.c | 19 drivers/iio/accel/kxcjk-1013.c | 5 drivers/iio/accel/kxsd9.c | 6 drivers/iio/accel/mma8452.c | 2 drivers/iio/adc/ad7768-1.c | 2 drivers/iio/adc/at91-sama5d2_adc.c | 3 drivers/iio/adc/axp20x_adc.c | 18 drivers/iio/adc/dln2-adc.c | 21 drivers/iio/adc/stm32-adc.c | 1 drivers/iio/gyro/adxrs290.c | 5 drivers/iio/gyro/itg3200_buffer.c | 2 drivers/iio/industrialio-trigger.c | 1 drivers/iio/light/ltr501.c | 2 drivers/iio/light/stk3310.c | 6 drivers/iio/trigger/stm32-timer-trigger.c | 2 drivers/infiniband/hw/hfi1/chip.c | 2 drivers/infiniband/hw/hfi1/driver.c | 2 drivers/infiniband/hw/hfi1/init.c | 40 drivers/infiniband/hw/hfi1/sdma.c | 2 drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 14 drivers/irqchip/irq-armada-370-xp.c | 16 drivers/irqchip/irq-aspeed-scu-ic.c | 4 drivers/irqchip/irq-gic-v3-its.c | 2 drivers/irqchip/irq-nvic.c | 2 drivers/md/md.c | 1 drivers/misc/fastrpc.c | 10 drivers/mmc/host/renesas_sdhi_core.c | 2 drivers/mtd/nand/raw/fsmc_nand.c | 36 drivers/net/bonding/bond_alb.c | 14 drivers/net/can/kvaser_pciefd.c | 8 drivers/net/can/m_can/m_can.c | 14 drivers/net/can/pch_can.c | 2 drivers/net/can/sja1000/ems_pcmcia.c | 7 drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c | 101 + drivers/net/ethernet/altera/altera_tse_main.c | 9 drivers/net/ethernet/freescale/fec.h | 3 drivers/net/ethernet/freescale/fec_main.c | 2 drivers/net/ethernet/intel/i40e/i40e_debugfs.c | 8 drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 75 - drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h | 2 drivers/net/ethernet/intel/iavf/iavf_ethtool.c | 43 drivers/net/ethernet/intel/iavf/iavf_main.c | 1 drivers/net/ethernet/intel/ice/ice_main.c | 3 drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 4 drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c | 4 drivers/net/ethernet/qlogic/qede/qede_fp.c | 7 drivers/net/ethernet/qlogic/qla3xxx.c | 19 drivers/net/usb/cdc_ncm.c | 2 drivers/net/vrf.c | 8 drivers/pci/controller/pci-aardvark.c | 9 drivers/scsi/pm8001/pm8001_init.c | 6 drivers/scsi/qla2xxx/qla_dbg.c | 3 drivers/scsi/scsi_debug.c | 2 drivers/usb/core/config.c | 6 drivers/usb/gadget/composite.c | 14 drivers/usb/gadget/function/uvc.h | 2 drivers/usb/gadget/function/uvc_v4l2.c | 49 drivers/usb/gadget/legacy/dbgp.c | 15 drivers/usb/gadget/legacy/inode.c | 16 drivers/usb/host/xhci-hub.c | 1 drivers/usb/host/xhci-ring.c | 1 drivers/usb/host/xhci.c | 26 fs/aio.c | 184 ++ fs/btrfs/extent_io.c | 6 fs/btrfs/root-tree.c | 3 fs/nfsd/nfs4recover.c | 1 fs/nfsd/nfs4state.c | 9 fs/nfsd/nfsctl.c | 14 fs/signalfd.c | 12 fs/tracefs/inode.c | 76 + include/linux/bpf.h | 1 include/linux/hid.h | 5 include/linux/pm_runtime.h | 2 include/linux/wait.h | 26 include/net/bond_alb.h | 2 include/net/netfilter/nf_conntrack.h | 6 include/uapi/asm-generic/poll.h | 2 kernel/bpf/verifier.c | 2 kernel/sched/wait.c | 7 mm/backing-dev.c | 7 net/core/devlink.c | 16 net/core/neighbour.c | 3 net/ipv4/udp.c | 2 net/ipv6/seg6_iptunnel.c | 8 net/netfilter/nf_conntrack_core.c | 6 net/netfilter/nf_conntrack_netlink.c | 2 net/netfilter/nf_flow_table_core.c | 4 net/netfilter/nft_set_pipapo_avx2.c | 2 net/nfc/netlink.c | 6 net/sched/sch_fq_pie.c | 1 scripts/dummy-tools/gcc | 10 scripts/gcc-plugin.sh | 19 scripts/gcc-plugins/Kconfig | 2 scripts/gcc-plugins/Makefile | 4 sound/core/control_compat.c | 3 sound/core/oss/pcm_oss.c | 37 sound/pci/hda/patch_realtek.c | 80 - sound/soc/codecs/rt5682.c | 10 sound/soc/codecs/wcd934x.c | 126 + sound/soc/codecs/wsa881x.c | 16 sound/soc/qcom/qdsp6/q6routing.c | 8 tools/build/Makefile.feature | 1 tools/build/feature/Makefile | 4 tools/build/feature/test-all.c | 5 tools/build/feature/test-libpython-version.c | 11 tools/perf/Makefile.config | 2 tools/perf/util/smt.c | 2 tools/testing/selftests/bpf/verifier/xdp_direct_packet_access.c | 632 +++++++++- tools/testing/selftests/net/fib_tests.sh | 59 tools/testing/selftests/netfilter/Makefile | 3 tools/testing/selftests/netfilter/conntrack_vrf.sh | 241 +++ 162 files changed, 2243 insertions(+), 684 deletions(-)
Alan Young (1):
ALSA: ctl: Fix copy of updated id with element read/write
Alexander Stein (1):
dt-bindings: net: Reintroduce PHY no lane swap binding
Alexander Sverdlin (1):
nfsd: Fix nsfd startup race (again)
Alyssa Ross (1):
iio: trigger: stm32-timer: fix MODULE_ALIAS
Andrea Mayer (1):
seg6: fix the iif in the IPv6 socket control block
Arnaldo Carvalho de Melo (1):
tools build: Remove needless libpython-version feature check that breaks test-all fast path
Bas Nieuwenhuizen (1):
drm/syncobj: Deal with signalled fences in drm_syncobj_find_fence.
Benjamin Tissoires (1):
HID: bigbenff: prevent null pointer dereference
Billy Tsai (1):
irqchip/aspeed-scu: Replace update_bits with write_bits.
Björn Töpel (1):
bpf, x86: Fix "no previous prototype" warning
Brian Silverman (1):
can: m_can: Disable and ignore ELO interrupt
Dan Carpenter (3):
can: sja1000: fix use after free in ems_pcmcia_add_card()
net: altera: set a couple error code in probe() net/qla3xxx: fix an error code in ql_adapter_up()
Davidlohr Bueso (1):
block: fix ioprio_get(IOPRIO_WHO_PGRP) vs setuid(2)
Dmitry Baryshkov (1):
clk: qcom: regmap-mux: fix parent clock lookup
Eric Biggers (5):
wait: add wake_up_pollfree()
binder: use wake_up_pollfree()
signalfd: use wake_up_pollfree()
aio: keep poll requests on waitqueue until completed
aio: fix use-after-free due to missing POLLFREE handling
Eric Dumazet (5):
bonding: make tx_rebalance_counter an atomic
netfilter: conntrack: annotate data-races around ct->timeout
devlink: fix netns refcount leak in devlink_nl_cmd_reload() net/sched: fq_pie: prevent dismantle issue
net, neigh: clear whole pneigh_entry at alloc time
Evgeny Boger (1):
iio: adc: axp20x_adc: fix charging current reporting on AXP22x
Fabrice Gasnier (1):
iio: adc: stm32: fix a current leak by resetting pcsel before disabling vdda
Florian Westphal (1):
selftests: netfilter: add a vrf+conntrack testcase
Greg Kroah-Hartman (9):
HID: add hid_is_usb() function to make it simpler for USB detection
HID: add USB_HID dependancy to hid-prodikeys
HID: add USB_HID dependancy to hid-chicony
HID: add USB_HID dependancy on some USB HID drivers
HID: wacom: fix problems when device is not a valid USB device
HID: check for valid USB device for many HID drivers
USB: gadget: detect too-big endpoint 0 requests
USB: gadget: zero allocate endpoint 0 buffers
Linux 5.10.85
Gwendal Grignou (1):
iio: at91-sama5d2: Fix incorrect sign extension
Hannes Reinecke (1):
libata: add horkage for ASMedia 1092
Hans de Goede (1):
HID: quirks: Add quirk for the Microsoft Surface 3 type-cover
Herve Codina (2):
mtd: rawnand: fsmc: Take instruction delay into account
mtd: rawnand: fsmc: Fix timing computation
Ian Rogers (1):
perf tools: Fix SMT detection fast read path
Igor Pylypiv (1):
scsi: pm80xx: Do not call scsi_remove_host() in pm8001_alloc()
J. Bruce Fields (1):
nfsd: fix use-after-free due to delegation race
James Zhu (3):
drm/amdkfd: separate kfd_iommu_resume from kfd_resume drm/amdgpu: add amdgpu_amdkfd_resume_iommu drm/amdgpu: move iommu_resume before ip init/resume
Jesse Brandeburg (1):
ice: ignore dropped packets during init
Jeya R (1):
misc: fastrpc: fix improper packet size calculation
Jianglei Nie (1):
nfp: Fix memory leak in nfp_cpp_area_cache_add()
Jianguo Wu (1):
udp: using datalen to cap max gso segments
Jimmy Assarsson (2):
can: kvaser_usb: get CAN clock frequency from device
can: kvaser_pciefd: kvaser_pciefd_rx_error_frame(): increase correct stats->{rx,tx}_errors counter
Joakim Zhang (1):
net: fec: only clear interrupt of handling queue in fec_enet_rx_queue()
Josef Bacik (1):
btrfs: clear extent buffer uptodate when we fail to write it
Kai-Heng Feng (1):
xhci: Remove CONFIG_USB_DEFAULT_PERSIST to prevent xHCI from runtime suspending
Kailang Yang (1):
ALSA: hda/realtek - Add headset Mic support for Lenovo ALC897 platform
Karen Sornek (1):
i40e: Fix failed opcode appearing if handling messages from VF
Kelly Devilliv (1):
csky: fix typo of fpu config macro
Kister Genesis Jimenez (1):
iio: gyro: adxrs290: fix data signedness
Krzysztof Kozlowski (1):
nfc: fix potential NULL pointer deref in nfc_genl_dump_ses_done
Lang Yu (1):
drm/amd/amdkfd: adjust dummy functions' placement
Lars-Peter Clausen (8):
iio: trigger: Fix reference counting
iio: stk3310: Don't return error code in interrupt handler
iio: mma8452: Fix trigger reference couting
iio: ltr501: Don't return error code in trigger handler
iio: kxsd9: Don't return error code in trigger handler
iio: itg3200: Call iio_trigger_notify_done() on error
iio: dln2: Check return value of devm_iio_trigger_register()
iio: ad7768-1: Call iio_trigger_notify_done() on error
Lee Jones (1):
net: cdc_ncm: Allow for dwNtbOutMaxSize to be unset or zero
Louis Amas (1):
net: mvpp2: fix XDP rx queues registering
Lukas Bulwahn (1):
MAINTAINERS: adjust GCC PLUGINS after gcc-plugin.sh removal
Manish Chopra (1):
qede: validate non LSO skb length
Manjong Lee (1):
mm: bdi: initialize bdi_min_ratio when bdi is unregistered
Marek Behún (1):
Revert "PCI: aardvark: Fix support for PCI_ROM_ADDRESS1 on emulated bridge"
Markus Hochholdinger (1):
md: fix update super 1.0 on rdev size change
Masahiro Yamada (3):
gcc-plugins: simplify GCC plugin-dev capability test
kbuild: simplify GCC_PLUGINS enablement in dummy-tools/gcc
doc: gcc-plugins: update gcc-plugins.rst
Mateusz Palczewski (1):
i40e: Fix pre-set max number of queues for VF
Mathias Nyman (1):
xhci: avoid race between disable slot command and host runtime suspend
Maxim Mikityanskiy (2):
bpf: Fix the off-by-two error in range markings
bpf: Add selftests to cover packet access corner cases
Michal Maloszewski (1):
iavf: Fix reporting when setting descriptor count
Mike Marciniszyn (4):
IB/hfi1: Insure use of smp_processor_id() is preempt disabled IB/hfi1: Fix early init panic
IB/hfi1: Fix leak of rcvhdrtail_dummy_kvaddr IB/hfi1: Correct guard on eager buffer deallocation
Miles Chen (1):
clk: imx: use module_platform_driver
Mitch Williams (1):
iavf: restore MSI state on reset
Nicolas Dichtel (1):
vrf: don't run conntrack on vrf with !dflt qdisc
Noralf Trønnes (1):
iio: dln2-adc: Fix lockdep complaint
Norbert Zulinski (1):
i40e: Fix NULL pointer dereference in i40e_dbg_dump_desc
Pali Rohár (2):
irqchip/armada-370-xp: Fix return value of armada_370_xp_msi_alloc() irqchip/armada-370-xp: Fix support for Multi-MSI interrupts
Pavel Hofman (2):
usb: core: config: fix validation of wMaxPacketValue entries
usb: core: config: using bit mask instead of individual bits
Peilin Ye (1):
selftests/fib_tests: Rework fib_rp_filter_test()
Qu Wenruo (1):
btrfs: replace the BUG_ON in btrfs_del_root_ref with proper error handling
Rafael J. Wysocki (1):
PM: runtime: Fix pm_runtime_active() kerneldoc comment
Rob Clark (1):
ASoC: rt5682: Fix crash due to out of scope stack vars
Robert Karszniewicz (1):
Documentation/Kbuild: Remove references to gcc-plugin.sh
Roman Bolshakov (1):
scsi: qla2xxx: Format log strings only if needed
Sebastian Andrzej Siewior (1):
Documentation/locking/locktypes: Update migrate_disable() bits.
Shin'ichiro Kawasaki (1):
scsi: scsi_debug: Fix buffer size of REPORT ZONES command
Srinivas Kandagatla (4):
ASoC: qdsp6: q6routing: Fix return value from msm_routing_put_audio_mixer
ASoC: codecs: wsa881x: fix return values from kcontrol put
ASoC: codecs: wcd934x: handle channel mappping list correctly
ASoC: codecs: wcd934x: return correct value from mixer put
Stefano Brivio (1):
nft_set_pipapo: Fix bucket load in AVX2 lookup routine for six 8-bit groups
Steven Rostedt (VMware) (2):
tracefs: Have new files inherit the ownership of their parent
tracefs: Set all files to the same group ownership as the mount option
Takashi Iwai (3):
ALSA: pcm: oss: Fix negative period/buffer sizes
ALSA: pcm: oss: Limit the period size to 16MB
ALSA: pcm: oss: Handle missing errors in snd_pcm_oss_change_params*()
Thomas Haemmerle (1):
usb: gadget: uvc: fix multiple opens
Tom Lendacky (1):
x86/sme: Explicitly map new EFI memmap table as encrypted
Valdis Kletnieks (1):
gcc-plugins: fix gcc 11 indigestion with plugins...
Vincent Mailhol (1):
can: pch_can: pch_can_rx_normal: fix use after free
Vitaly Kuznetsov (1):
KVM: x86: Wait for IPIs to be delivered when handling Hyper-V TLB flush hypercall
Vladimir Murzin (1):
irqchip: nvic: Fix offset for Interrupt Priority Offsets
Werner Sembach (1):
ALSA: hda/realtek: Fix quirk for TongFang PHxTxX1
Wolfram Sang (1):
mmc: renesas_sdhi: initialize variable properly when tuning
Wudi Wang (1):
irqchip/irq-gic-v3-its.c: Force synchronisation when issuing INVALL
Yang Yingliang (1):
iio: accel: kxcjk-1013: Fix possible memory leak in probe and remove
Yangyang Li (2):
RDMA/hns: Do not halt commands during reset until later RDMA/hns: Do not destroy QP resources in the hw resetting phase
Yifan Zhang (2):
drm/amdgpu: init iommu after amdkfd device init drm/amdkfd: fix boot failure when iommu is disabled in Picasso.
xiazhengqiao (1):
HID: google: add eel USB id
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/net/ethernet-phy.yaml +8 -0
@@ -91,6 +91,14 @@ properties: compensate for the board being designed with the lanes swapped. + enet-phy-lane-no-swap: + $ref: /schemas/types.yaml#/definitions/flag + description: + If set, indicates that PHY will disable swap of the + TX/RX lanes. This property allows the PHY to work correcly after + e.g. wrong bootstrap configuration caused by issues in PCB + layout design. + eee-broken-100tx: $ref: /schemas/types.yaml#definitions/flag description:
Documentation/kbuild/gcc-plugins.rst +21 -26
85 lines not on this page · raw message
Documentation/locking/locktypes.rst +3 -6
@@ -439,11 +439,9 @@ preemption. The following substitution works on both kernels:: spin_lock(&p->lock); p->count += this_cpu_read(var2); -On a non-PREEMPT_RT kernel migrate_disable() maps to preempt_disable() -which makes the above code fully equivalent. On a PREEMPT_RT kernel migrate_disable() ensures that the task is pinned on the current CPU which in turn guarantees that the per-CPU access to var1 and var2 are staying on -the same CPU. +the same CPU while the task remains preemptible. The migrate_disable() substitution is not valid for the following scenario::
@@ -456,9 +454,8 @@ scenario:: p = this_cpu_ptr(&var1); p->val = func2(); -While correct on a non-PREEMPT_RT kernel, this breaks on PREEMPT_RT because -here migrate_disable() does not protect against reentrancy from a -preempting task. A correct substitution for this case is:: +This breaks because migrate_disable() does not protect against reentrancy from +a preempting task. A correct substitution for this case is:: func() {
MAINTAINERS +0 -1
@@ -7310,7 +7310,6 @@ L: [email protected] S: Maintained F: Documentation/kbuild/gcc-plugins.rst F: scripts/Makefile.gcc-plugins -F: scripts/gcc-plugin.sh F: scripts/gcc-plugins/ GCOV BASED KERNEL PROFILING
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 84 +SUBLEVEL = 85 EXTRAVERSION = NAME = Dare mighty things
arch/csky/kernel/traps.c +2 -2
@@ -211,7 +211,7 @@ asmlinkage void do_trap_illinsn(struct pt_regs *regs) asmlinkage void do_trap_fpe(struct pt_regs *regs) { -#ifdef CONFIG_CPU_HAS_FP +#ifdef CONFIG_CPU_HAS_FPU return fpu_fpe (regs);#else do_trap_error(regs, SIGILL, ILL_ILLOPC, regs->pc,
@@ -221,7 +221,7 @@ asmlinkage void do_trap_fpe(struct pt_regs *regs) asmlinkage void do_trap_priv(struct pt_regs *regs) { -#ifdef CONFIG_CPU_HAS_FP +#ifdef CONFIG_CPU_HAS_FPU if (user_mode (regs) &&fpu_libc_helper (regs))return ;#endif
arch/x86/Kconfig +1 -0
@@ -1939,6 +1939,7 @@ config EFI depends on ACPI select UCS2_STRING select EFI_RUNTIME_WRAPPERS + select ARCH_USE_MEMREMAP_PROT help This enables the kernel to use EFI runtime services that are available (such as the EFI variable services).
arch/x86/include/asm/kvm_host.h +1 -1
@@ -85,7 +85,7 @@ KVM_ARCH_REQ_FLAGS(25, KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP)#define KVM_REQ_TLB_FLUSH_CURRENT KVM_ARCH_REQ(26)#define KVM_REQ_TLB_FLUSH_GUEST \ - KVM_ARCH_REQ_FLAGS(27, KVM_REQUEST_NO_WAKEUP) + KVM_ARCH_REQ_FLAGS(27, KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP)#define KVM_REQ_APF_READY KVM_ARCH_REQ(28)#define KVM_REQ_MSR_FILTER_CHANGED KVM_ARCH_REQ(29)
arch/x86/platform/efi/quirks.c +2 -1
@@ -277,7 +277,8 @@ void __init efi_arch_mem_reserve(phys_addr_t addr, u64 size)return ; } - new =early_memremap (data.phys_map, data.size); + new =early_memremap_prot (data.phys_map, data.size, +pgprot_val (pgprot_encrypted (FIXMAP_PAGE_NORMAL )));if (!new) {pr_err ("Failed to map new boot services memmap\n" );return ;
block/ioprio.c +3 -0
@@ -214,6 +214,7 @@ SYSCALL_DEFINE2(ioprio_get, int, which, int, who) pgrp =task_pgrp (current); else pgrp =find_vpid (who); +read_lock (&tasklist_lock); do_each_pid_thread(pgrp, PIDTYPE_PGID, p) { tmpio =get_task_ioprio (p);if (tmpio <0 )
@@ -223,6 +224,8 @@ SYSCALL_DEFINE2(ioprio_get, int, which, int, who)else ret =ioprio_best (ret, tmpio); }while_each_pid_thread (pgrp,PIDTYPE_PGID , p); +read_unlock (&tasklist_lock); +break ;case IOPRIO_WHO_USER : uid =make_kuid (current_user_ns (), who);
drivers/android/binder.c +9 -12
@@ -4784,23 +4784,20 @@ static int binder_thread_release(struct binder_proc *proc,__release (&t->lock);/* -* If this thread used poll, make sure we remove the waitqueue -* from any epoll data structures holding it with POLLFREE. -* waitqueue_active() is safe to use here because we're holding -* the inner lock. +* If this thread used poll, make sure we remove the waitqueue from any +* poll data structures holding it. */ -if ((thread->looper &BINDER_LOOPER_STATE_POLL ) && -waitqueue_active (&thread->wait)) { -wake_up_poll (&thread->wait,EPOLLHUP |POLLFREE ); - } +if (thread->looper &BINDER_LOOPER_STATE_POLL ) +wake_up_pollfree (&thread->wait);binder_inner_proc_unlock (thread->proc);/* -* This is needed to avoid races between wake_up_poll() above and -* and ep_remove_waitqueue() called for other reasons (eg the epoll file -* descriptor being closed); ep_remove_waitqueue() holds an RCU read -* lock, so we can be sure it's done after calling synchronize_rcu(). +* This is needed to avoid races between wake_up_pollfree() above and +* someone else removing the last entry from the queue for other reasons +* (e.g. ep_remove_wait_queue() being called due to an epoll file +* descriptor being closed). Such other users hold an RCU read lock, so +* we can be sure they're done after we call synchronize_rcu(). */ if (thread->looper &BINDER_LOOPER_STATE_POLL )synchronize_rcu ();
drivers/ata/libata-core.c +2 -0
@@ -3831,6 +3831,8 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { { "VRFDFC22048UCHC-TE*", NULL, ATA_HORKAGE_NODMA },/* Odd clown on sil3726/4726 PMPs */ { "Config Disk", NULL, ATA_HORKAGE_DISABLE }, +/* Similar story with ASMedia 1092 */ + { "ASMT109x- Config", NULL, ATA_HORKAGE_DISABLE },/* Weird ATAPI devices */ { "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 },
drivers/clk/imx/clk-imx8qxp-lpcg.c +1 -1
@@ -231,7 +231,7 @@ static struct platform_driver imx8qxp_lpcg_clk_driver = { .probe = imx8qxp_lpcg_clk_probe, }; -builtin_platform_driver (imx8qxp_lpcg_clk_driver); +module_platform_driver (imx8qxp_lpcg_clk_driver);MODULE_AUTHOR ("Aisheng Dong <[email protected]>" );MODULE_DESCRIPTION ("NXP i.MX8QXP LPCG clock driver" );
drivers/clk/imx/clk-imx8qxp.c +1 -1
@@ -151,7 +151,7 @@ static struct platform_driver imx8qxp_clk_driver = { }, .probe = imx8qxp_clk_probe, }; -builtin_platform_driver (imx8qxp_clk_driver); +module_platform_driver (imx8qxp_clk_driver);MODULE_AUTHOR ("Aisheng Dong <[email protected]>" );MODULE_DESCRIPTION ("NXP i.MX8QXP clock driver" );
drivers/clk/qcom/clk-regmap-mux.c +1 -1
@@ -28,7 +28,7 @@ static u8 mux_get_parent(struct clk_hw *hw) val &= mask;if (mux->parent_map) -return qcom_find_src_index (hw, mux->parent_map, val); +return qcom_find_cfg_index (hw, mux->parent_map, val);return val; }
drivers/clk/qcom/common.c +12 -0
@@ -69,6 +69,18 @@ int qcom_find_src_index(struct clk_hw *hw, const struct parent_map *map, u8 src) }EXPORT_SYMBOL_GPL (qcom_find_src_index); +int qcom_find_cfg_index (struct clk_hw *hw,const struct parent_map *map,u8 cfg) +{ +int i, num_parents =clk_hw_get_num_parents (hw); + +for (i =0 ; i < num_parents; i++) +if (cfg == map[i].cfg) +return i; + +return -ENOENT ; +} +EXPORT_SYMBOL_GPL (qcom_find_cfg_index); +struct regmap *qcom_cc_map (struct platform_device *pdev,const struct qcom_cc_desc *desc) {
drivers/clk/qcom/common.h +2 -0
@@ -49,6 +49,8 @@ extern void qcom_pll_set_fsm_mode(struct regmap *m, u32 reg, u8 bias_count, u8 lock_count);extern int qcom_find_src_index (struct clk_hw *hw,const struct parent_map *map,u8 src); +extern int qcom_find_cfg_index (struct clk_hw *hw,const struct parent_map *map, +u8 cfg);extern int qcom_cc_register_board_clk (struct device *dev,const char *path,const char *name,unsigned long rate);
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +10 -87
114 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h +126 -19
203 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +8 -0
@@ -2913,6 +2913,10 @@ static int amdgpu_device_ip_resume(struct amdgpu_device *adev) {int r; + r =amdgpu_amdkfd_resume_iommu (adev); +if (r) +return r; + r =amdgpu_device_ip_resume_phase1 (adev);if (r)return r;
@@ -4296,6 +4300,10 @@ static int amdgpu_do_asic_reset(struct amdgpu_hive_info *hive,if (!r) {dev_info (tmp_adev->dev,"GPU reset succeeded, trying to resume\n" ); + r =amdgpu_amdkfd_resume_iommu (tmp_adev); +if (r) + goto out; + r =amdgpu_device_ip_resume_phase1 (tmp_adev);if (r) goto out;
drivers/gpu/drm/amd/amdkfd/kfd_device.c +11 -4
@@ -751,6 +751,9 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd,kfd_cwsr_init (kfd); +if (kgd2kfd_resume_iommu (kfd)) + goto device_iommu_error; +if (kfd_resume (kfd)) goto kfd_resume_error;
@@ -896,17 +899,21 @@ int kgd2kfd_resume(struct kfd_dev *kfd, bool run_pm)return ret; } -static int kfd_resume (struct kfd_dev *kfd) +int kgd2kfd_resume_iommu (struct kfd_dev *kfd) {int err =0 ; err =kfd_iommu_resume (kfd); -if (err) { +if (err)dev_err (kfd_device,"Failed to resume IOMMU for device %x:%x\n" , kfd->pdev->vendor, kfd->pdev->device); -return err; - } +return err; +} + +static int kfd_resume (struct kfd_dev *kfd) +{ +int err =0 ; err = kfd->dqm->ops.start (kfd->dqm);if (err) {
drivers/gpu/drm/drm_syncobj.c +10 -1
@@ -391,8 +391,17 @@ int drm_syncobj_find_fence(struct drm_file *file_private,if (*fence) { ret =dma_fence_chain_find_seqno (fence, point); -if (!ret) +if (!ret) { +/* If the requested seqno is already signaled +* drm_syncobj_find_fence may return a NULL +* fence. To make sure the recipient gets +* signalled, use a new fence instead. +*/ +if (!*fence) + *fence =dma_fence_get_stub (); + goto out; + }dma_fence_put (*fence); }else { ret = -EINVAL ;
drivers/hid/Kconfig +5 -5
@@ -207,14 +207,14 @@ config HID_CHERRY config HID_CHICONY tristate "Chicony devices" - depends on HID + depends on USB_HID default !EXPERT help Support for Chicony Tactical pad and special keys on Chicony keyboards. config HID_CORSAIR tristate "Corsair devices" - depends on HID && USB && LEDS_CLASS + depends on USB_HID && LEDS_CLASS help Support for Corsair devices that are not fully compliant with the HID standard.
@@ -245,7 +245,7 @@ config HID_MACALLY config HID_PRODIKEYS tristate "Prodikeys PC-MIDI Keyboard support" - depends on HID && SND + depends on USB_HID && SND select SND_RAWMIDI help Support for Prodikeys PC-MIDI Keyboard device support.
@@ -541,7 +541,7 @@ config HID_LENOVO config HID_LOGITECH tristate "Logitech devices" - depends on HID + depends on USB_HID depends on LEDS_CLASS default !EXPERT help
@@ -889,7 +889,7 @@ config HID_SAITEK config HID_SAMSUNG tristate "Samsung InfraRed remote control or keyboards" - depends on HID + depends on USB_HID help Support for Samsung InfraRed remote control or keyboards.
drivers/hid/hid-asus.c +2 -4
@@ -918,8 +918,7 @@ static int asus_probe(struct hid_device *hdev, const struct hid_device_id *id)if (drvdata->quirks &QUIRK_IS_MULTITOUCH ) drvdata->tp = &asus_i2c_tp; -if ((drvdata->quirks &QUIRK_T100_KEYBOARD ) && -hid_is_using_ll_driver (hdev, &usb_hid_driver)) { +if ((drvdata->quirks &QUIRK_T100_KEYBOARD ) &&hid_is_usb (hdev)) {struct usb_interface *intf =to_usb_interface (hdev->dev.parent);if (intf->altsetting->desc.bInterfaceNumber ==T100_TPAD_INTF ) {
@@ -947,8 +946,7 @@ static int asus_probe(struct hid_device *hdev, const struct hid_device_id *id) drvdata->tp = &asus_t100chi_tp; } -if ((drvdata->quirks &QUIRK_MEDION_E1239T ) && -hid_is_using_ll_driver (hdev, &usb_hid_driver)) { +if ((drvdata->quirks &QUIRK_MEDION_E1239T ) &&hid_is_usb (hdev)) {struct usb_host_interface *alt =to_usb_interface (hdev->dev.parent)->altsetting;
drivers/hid/hid-bigbenff.c +1 -1
@@ -191,7 +191,7 @@ static void bigben_worker(struct work_struct *work) struct bigben_device, worker);struct hid_field *report_field = bigben->report->field[0 ]; -if (bigben->removed) +if (bigben->removed || !report_field)return ;if (bigben->work_led) {
drivers/hid/hid-chicony.c +6 -2
@@ -58,8 +58,12 @@ static int ch_input_mapping(struct hid_device *hdev, struct hid_input *hi,static __u8 *ch_switch12_report_fixup (struct hid_device *hdev,__u8 *rdesc,unsigned int *rsize) { -struct usb_interface *intf =to_usb_interface (hdev->dev.parent); - +struct usb_interface *intf; + +if (!hid_is_usb (hdev)) +return rdesc; + + intf =to_usb_interface (hdev->dev.parent);if (intf->cur_altsetting->desc.bInterfaceNumber ==1 ) {/* Change usage maximum and logical maximum from 0x7fff to * 0x2fff, so they don't exceed HID_MAX_USAGES */
drivers/hid/hid-corsair.c +6 -1
@@ -553,7 +553,12 @@ static int corsair_probe(struct hid_device *dev, const struct hid_device_id *id)int ret;unsigned long quirks = id->driver_data;struct corsair_drvdata *drvdata; -struct usb_interface *usbif =to_usb_interface (dev->dev.parent); +struct usb_interface *usbif; + +if (!hid_is_usb (dev)) +return -EINVAL ; + + usbif =to_usb_interface (dev->dev.parent); drvdata =devm_kzalloc (&dev->dev,sizeof (struct corsair_drvdata ),GFP_KERNEL );
drivers/hid/hid-elan.c +1 -1
@@ -50,7 +50,7 @@ struct elan_drvdata {static int is_not_elan_touchpad (struct hid_device *hdev) { -if (hdev->bus ==BUS_USB ) { +if (hid_is_usb (hdev)) {struct usb_interface *intf =to_usb_interface (hdev->dev.parent); return (intf->altsetting->desc.bInterfaceNumber !=
drivers/hid/hid-elo.c +3 -0
@@ -229,6 +229,9 @@ static int elo_probe(struct hid_device *hdev, const struct hid_device_id *id)struct elo_priv *priv;int ret; +if (!hid_is_usb (hdev)) +return -EINVAL ; + priv =kzalloc (sizeof (*priv),GFP_KERNEL );if (!priv)return -ENOMEM ;
drivers/hid/hid-google-hammer.c +2 -0
@@ -528,6 +528,8 @@ static void hammer_remove(struct hid_device *hdev)static const struct hid_device_id hammer_devices[] = { {HID_DEVICE (BUS_USB ,HID_GROUP_GENERIC ,USB_VENDOR_ID_GOOGLE ,USB_DEVICE_ID_GOOGLE_DON ) }, + {HID_DEVICE (BUS_USB ,HID_GROUP_GENERIC , +USB_VENDOR_ID_GOOGLE ,USB_DEVICE_ID_GOOGLE_EEL ) }, {HID_DEVICE (BUS_USB ,HID_GROUP_GENERIC ,USB_VENDOR_ID_GOOGLE ,USB_DEVICE_ID_GOOGLE_HAMMER ) }, { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
drivers/hid/hid-holtek-kbd.c +7 -2
@@ -140,12 +140,17 @@ static int holtek_kbd_input_event(struct input_dev *dev, unsigned int type,static int holtek_kbd_probe (struct hid_device *hdev,const struct hid_device_id *id) { -struct usb_interface *intf =to_usb_interface (hdev->dev.parent); -int ret =hid_parse (hdev); +struct usb_interface *intf; +int ret; + +if (!hid_is_usb (hdev)) +return -EINVAL ; + ret =hid_parse (hdev);if (!ret) ret =hid_hw_start (hdev,HID_CONNECT_DEFAULT ); + intf =to_usb_interface (hdev->dev.parent);if (!ret && intf->cur_altsetting->desc.bInterfaceNumber ==1 ) {struct hid_input *hidinput;list_for_each_entry (hidinput, &hdev->inputs, list) {
drivers/hid/hid-holtek-mouse.c +9 -0
@@ -62,6 +62,14 @@ static __u8 *holtek_mouse_report_fixup(struct hid_device *hdev, __u8 *rdesc,return rdesc; } +static int holtek_mouse_probe (struct hid_device *hdev, +const struct hid_device_id *id) +{ +if (!hid_is_usb (hdev)) +return -EINVAL ; +return 0 ; +} +static const struct hid_device_id holtek_mouse_devices[] = { {HID_USB_DEVICE (USB_VENDOR_ID_HOLTEK_ALT ,USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A067 ) },
@@ -83,6 +91,7 @@ static struct hid_driver holtek_mouse_driver = { .name = "holtek_mouse", .id_table = holtek_mouse_devices, .report_fixup = holtek_mouse_report_fixup, + .probe = holtek_mouse_probe, };module_hid_driver (holtek_mouse_driver);
drivers/hid/hid-ids.h +2 -0
@@ -488,6 +488,7 @@#define USB_DEVICE_ID_GOOGLE_MAGNEMITE 0x503d#define USB_DEVICE_ID_GOOGLE_MOONBALL 0x5044#define USB_DEVICE_ID_GOOGLE_DON 0x5050 +#define USB_DEVICE_ID_GOOGLE_EEL 0x5057#define USB_VENDOR_ID_GOTOP 0x08f2#define USB_DEVICE_ID_SUPER_Q2 0x007f
@@ -865,6 +866,7 @@#define USB_DEVICE_ID_MS_TOUCH_COVER_2 0x07a7#define USB_DEVICE_ID_MS_TYPE_COVER_2 0x07a9#define USB_DEVICE_ID_MS_POWER_COVER 0x07da +#define USB_DEVICE_ID_MS_SURFACE3_COVER 0x07de#define USB_DEVICE_ID_MS_XBOX_ONE_S_CONTROLLER 0x02fd#define USB_DEVICE_ID_MS_PIXART_MOUSE 0x00cb#define USB_DEVICE_ID_8BITDO_SN30_PRO_PLUS 0x02e0
drivers/hid/hid-lg.c +8 -2
@@ -769,12 +769,18 @@ static int lg_raw_event(struct hid_device *hdev, struct hid_report *report,static int lg_probe (struct hid_device *hdev,const struct hid_device_id *id) { -struct usb_interface *iface =to_usb_interface (hdev->dev.parent); -__u8 iface_num = iface->cur_altsetting->desc.bInterfaceNumber; +struct usb_interface *iface; +__u8 iface_num;unsigned int connect_mask =HID_CONNECT_DEFAULT ;struct lg_drv_data *drv_data;int ret; +if (!hid_is_usb (hdev)) +return -EINVAL ; + + iface =to_usb_interface (hdev->dev.parent); + iface_num = iface->cur_altsetting->desc.bInterfaceNumber; +/* G29 only work with the 1st interface */ if ((hdev->product ==USB_DEVICE_ID_LOGITECH_G29_WHEEL ) && (iface_num !=0 )) {
drivers/hid/hid-logitech-dj.c +1 -1
@@ -1693,7 +1693,7 @@ static int logi_dj_probe(struct hid_device *hdev,case recvr_type_27mhz: no_dj_interfaces =2 ;break ;case recvr_type_bluetooth: no_dj_interfaces =2 ;break ; } -if (hid_is_using_ll_driver (hdev, &usb_hid_driver)) { +if (hid_is_usb (hdev)) { intf =to_usb_interface (hdev->dev.parent);if (intf && intf->altsetting->desc.bInterfaceNumber >= no_dj_interfaces) {
drivers/hid/hid-prodikeys.c +8 -2
@@ -798,12 +798,18 @@ static int pk_raw_event(struct hid_device *hdev, struct hid_report *report,static int pk_probe (struct hid_device *hdev,const struct hid_device_id *id) {int ret; -struct usb_interface *intf =to_usb_interface (hdev->dev.parent); -unsigned short ifnum = intf->cur_altsetting->desc.bInterfaceNumber; +struct usb_interface *intf; +unsigned short ifnum;unsigned long quirks = id->driver_data;struct pk_device *pk;struct pcmidi_snd *pm =NULL ; +if (!hid_is_usb (hdev)) +return -EINVAL ; + + intf =to_usb_interface (hdev->dev.parent); + ifnum = intf->cur_altsetting->desc.bInterfaceNumber; + pk =kzalloc (sizeof (*pk),GFP_KERNEL );if (pk ==NULL ) {hid_err (hdev,"can't alloc descriptor\n" );
drivers/hid/hid-quirks.c +1 -0
@@ -124,6 +124,7 @@ static const struct hid_device_id hid_quirks[] = { { HID_USB_DEVICE(USB_VENDOR_ID_MCS, USB_DEVICE_ID_MCS_GAMEPADBLOCK), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PIXART_MOUSE), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER), HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_SURFACE3_COVER), HID_QUIRK_NO_INIT_REPORTS }, { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_SURFACE_PRO_2), HID_QUIRK_NO_INIT_REPORTS }, { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TOUCH_COVER_2), HID_QUIRK_NO_INIT_REPORTS }, { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_2), HID_QUIRK_NO_INIT_REPORTS },
drivers/hid/hid-roccat-arvo.c +3 -0
@@ -344,6 +344,9 @@ static int arvo_probe(struct hid_device *hdev, {int retval; +if (!hid_is_usb (hdev)) +return -EINVAL ; + retval =hid_parse (hdev);if (retval) {hid_err (hdev,"parse failed\n" );
drivers/hid/hid-roccat-isku.c +3 -0
@@ -324,6 +324,9 @@ static int isku_probe(struct hid_device *hdev, {int retval; +if (!hid_is_usb (hdev)) +return -EINVAL ; + retval =hid_parse (hdev);if (retval) {hid_err (hdev,"parse failed\n" );
drivers/hid/hid-roccat-kone.c +3 -0
@@ -749,6 +749,9 @@ static int kone_probe(struct hid_device *hdev, const struct hid_device_id *id) {int retval; +if (!hid_is_usb (hdev)) +return -EINVAL ; + retval =hid_parse (hdev);if (retval) {hid_err (hdev,"parse failed\n" );
drivers/hid/hid-roccat-koneplus.c +3 -0
@@ -431,6 +431,9 @@ static int koneplus_probe(struct hid_device *hdev, {int retval; +if (!hid_is_usb (hdev)) +return -EINVAL ; + retval =hid_parse (hdev);if (retval) {hid_err (hdev,"parse failed\n" );
drivers/hid/hid-roccat-konepure.c +3 -0
@@ -133,6 +133,9 @@ static int konepure_probe(struct hid_device *hdev, {int retval; +if (!hid_is_usb (hdev)) +return -EINVAL ; + retval =hid_parse (hdev);if (retval) {hid_err (hdev,"parse failed\n" );
drivers/hid/hid-roccat-kovaplus.c +3 -0
@@ -501,6 +501,9 @@ static int kovaplus_probe(struct hid_device *hdev, {int retval; +if (!hid_is_usb (hdev)) +return -EINVAL ; + retval =hid_parse (hdev);if (retval) {hid_err (hdev,"parse failed\n" );
drivers/hid/hid-roccat-lua.c +3 -0
@@ -160,6 +160,9 @@ static int lua_probe(struct hid_device *hdev, {int retval; +if (!hid_is_usb (hdev)) +return -EINVAL ; + retval =hid_parse (hdev);if (retval) {hid_err (hdev,"parse failed\n" );
drivers/hid/hid-roccat-pyra.c +3 -0
@@ -449,6 +449,9 @@ static int pyra_probe(struct hid_device *hdev, const struct hid_device_id *id) {int retval; +if (!hid_is_usb (hdev)) +return -EINVAL ; + retval =hid_parse (hdev);if (retval) {hid_err (hdev,"parse failed\n" );
drivers/hid/hid-roccat-ryos.c +3 -0
@@ -141,6 +141,9 @@ static int ryos_probe(struct hid_device *hdev, {int retval; +if (!hid_is_usb (hdev)) +return -EINVAL ; + retval =hid_parse (hdev);if (retval) {hid_err (hdev,"parse failed\n" );
drivers/hid/hid-roccat-savu.c +3 -0
@@ -113,6 +113,9 @@ static int savu_probe(struct hid_device *hdev, {int retval; +if (!hid_is_usb (hdev)) +return -EINVAL ; + retval =hid_parse (hdev);if (retval) {hid_err (hdev,"parse failed\n" );
drivers/hid/hid-samsung.c +3 -0
@@ -152,6 +152,9 @@ static int samsung_probe(struct hid_device *hdev,int ret;unsigned int cmask =HID_CONNECT_DEFAULT ; +if (!hid_is_usb (hdev)) +return -EINVAL ; + ret =hid_parse (hdev);if (ret) {hid_err (hdev,"parse failed\n" );
drivers/hid/hid-u2fzero.c +1 -1
@@ -290,7 +290,7 @@ static int u2fzero_probe(struct hid_device *hdev,unsigned int minor;int ret; -if (!hid_is_using_ll_driver (hdev, &usb_hid_driver)) +if (!hid_is_usb (hdev))return -EINVAL ; dev =devm_kzalloc (&hdev->dev,sizeof (*dev),GFP_KERNEL );
drivers/hid/hid-uclogic-core.c +3 -0
@@ -164,6 +164,9 @@ static int uclogic_probe(struct hid_device *hdev,struct uclogic_drvdata *drvdata =NULL ;bool params_initialized = false; +if (!hid_is_usb (hdev)) +return -EINVAL ; +/* * libinput requires the pad interface to be on a different node * than the pen, so use QUIRK_MULTI_INPUT for all tablets.
drivers/hid/hid-uclogic-params.c +1 -2
@@ -841,8 +841,7 @@ int uclogic_params_init(struct uclogic_params *params,struct uclogic_params p = {0 , };/* Check arguments */ -if (params ==NULL || hdev ==NULL || - !hid_is_using_ll_driver (hdev, &usb_hid_driver)) { +if (params ==NULL || hdev ==NULL || !hid_is_usb (hdev)) { rc = -EINVAL ; goto cleanup; }
drivers/hid/wacom_sys.c +13 -6
@@ -726,7 +726,7 @@ static void wacom_retrieve_hid_descriptor(struct hid_device *hdev,* Skip the query for this type and modify defaults based on * interface number. */ -if (features->type ==WIRELESS ) { +if (features->type ==WIRELESS && intf) {if (intf->cur_altsetting->desc.bInterfaceNumber ==0 ) features->device_type =WACOM_DEVICETYPE_WL_MONITOR ;else
@@ -2217,7 +2217,7 @@ static void wacom_update_name(struct wacom *wacom, const char *suffix)if ((features->type ==HID_GENERIC ) && !strcmp ("Wacom HID" , features->name)) {char *product_name = wacom->hdev->name; -if (hid_is_using_ll_driver (wacom->hdev, &usb_hid_driver)) { +if (hid_is_usb (wacom->hdev)) {struct usb_interface *intf =to_usb_interface (wacom->hdev->dev.parent);struct usb_device *dev =interface_to_usbdev (intf); product_name = dev->product;
@@ -2448,6 +2448,9 @@ static void wacom_wireless_work(struct work_struct *work)wacom_destroy_battery (wacom); +if (!usbdev) +return ; +/* Stylus interface */ hdev1 =usb_get_intfdata (usbdev->config->interface[1 ]); wacom1 =hid_get_drvdata (hdev1);
@@ -2727,8 +2730,6 @@ static void wacom_mode_change_work(struct work_struct *work)static int wacom_probe (struct hid_device *hdev,const struct hid_device_id *id) { -struct usb_interface *intf =to_usb_interface (hdev->dev.parent); -struct usb_device *dev =interface_to_usbdev (intf);struct wacom *wacom;struct wacom_wac *wacom_wac;struct wacom_features *features;
@@ -2763,8 +2764,14 @@ static int wacom_probe(struct hid_device *hdev, wacom_wac->hid_data.inputmode =-1 ; wacom_wac->mode_report =-1 ; - wacom->usbdev = dev; - wacom->intf = intf; +if (hid_is_usb (hdev)) { +struct usb_interface *intf =to_usb_interface (hdev->dev.parent); +struct usb_device *dev =interface_to_usbdev (intf); + + wacom->usbdev = dev; + wacom->intf = intf; + } +mutex_init (&wacom->lock);INIT_DELAYED_WORK (&wacom->init_work, wacom_init_work);INIT_WORK (&wacom->wireless_work, wacom_wireless_work);
drivers/iio/accel/kxcjk-1013.c +2 -3
@@ -1435,8 +1435,7 @@ static int kxcjk1013_probe(struct i2c_client *client,return 0 ; err_buffer_cleanup: -if (data->dready_trig) -iio_triggered_buffer_cleanup (indio_dev); +iio_triggered_buffer_cleanup (indio_dev); err_trigger_unregister:if (data->dready_trig)iio_trigger_unregister (data->dready_trig);
@@ -1459,8 +1458,8 @@ static int kxcjk1013_remove(struct i2c_client *client)pm_runtime_set_suspended (&client->dev);pm_runtime_put_noidle (&client->dev); +iio_triggered_buffer_cleanup (indio_dev);if (data->dready_trig) { -iio_triggered_buffer_cleanup (indio_dev);iio_trigger_unregister (data->dready_trig);iio_trigger_unregister (data->motion_trig); }
drivers/iio/accel/kxsd9.c +3 -3
@@ -224,14 +224,14 @@ static irqreturn_t kxsd9_trigger_handler(int irq, void *p) hw_values.chan, sizeof(hw_values.chan));if (ret) { -dev_err (st->dev, -"error reading data\n" ); -return ret; +dev_err (st->dev,"error reading data: %d\n" , ret); + goto out; }iio_push_to_buffers_with_timestamp (indio_dev, &hw_values,iio_get_time_ns (indio_dev)); +out:iio_trigger_notify_done (indio_dev->trig);return IRQ_HANDLED ;
drivers/iio/accel/mma8452.c +1 -1
@@ -1473,7 +1473,7 @@ static int mma8452_trigger_setup(struct iio_dev *indio_dev)if (ret)return ret; - indio_dev->trig = trig; + indio_dev->trig =iio_trigger_get (trig);return 0 ; }
drivers/iio/adc/ad7768-1.c +1 -1
@@ -470,8 +470,8 @@ static irqreturn_t ad7768_trigger_handler(int irq, void *p)iio_push_to_buffers_with_timestamp (indio_dev, &st->data.scan,iio_get_time_ns (indio_dev)); -iio_trigger_notify_done (indio_dev->trig); err_unlock: +iio_trigger_notify_done (indio_dev->trig);mutex_unlock (&st->lock);return IRQ_HANDLED ;
drivers/iio/adc/at91-sama5d2_adc.c +2 -1
@@ -1401,7 +1401,8 @@ static int at91_adc_read_info_raw(struct iio_dev *indio_dev, *val = st->conversion_value; ret =at91_adc_adjust_val_osr (st, val);if (chan->scan_type.sign =='s' ) - *val =sign_extend32 (*val,11 ); + *val =sign_extend32 (*val, + chan->scan_type.realbits -1 ); st->conversion_done = false; }
drivers/iio/adc/axp20x_adc.c +3 -15
@@ -251,19 +251,8 @@ static int axp22x_adc_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val) { struct axp20x_adc_iio *info = iio_priv(indio_dev); -int size; -/* -* N.B.: Unlike the Chinese datasheets tell, the charging current is -* stored on 12 bits, not 13 bits. Only discharging current is on 13 -* bits. -*/ -if (chan->type ==IIO_CURRENT && chan->channel ==AXP22X_BATT_DISCHRG_I ) - size =13 ; -else - size =12 ; - - *val =axp20x_read_variable_width (info->regmap, chan->address, size); + *val =axp20x_read_variable_width (info->regmap, chan->address,12 );if (*val <0 )return *val;
@@ -386,9 +375,8 @@ static int axp22x_adc_scale(struct iio_chan_spec const *chan, int *val,return IIO_VAL_INT_PLUS_MICRO ;case IIO_CURRENT : - *val =0 ; - *val2 =500000 ; -return IIO_VAL_INT_PLUS_MICRO ; + *val =1 ; +return IIO_VAL_INT ;case IIO_TEMP : *val =100 ;
drivers/iio/adc/dln2-adc.c +12 -9
@@ -248,7 +248,6 @@ static int dln2_adc_set_chan_period(struct dln2_adc *dln2,static int dln2_adc_read (struct dln2_adc *dln2,unsigned int channel) {int ret, i; -struct iio_dev *indio_dev =platform_get_drvdata (dln2->pdev);u16 conflict;__le16 value;int olen =sizeof (value);
@@ -257,13 +256,9 @@ static int dln2_adc_read(struct dln2_adc *dln2, unsigned int channel) .chan = channel, }; - ret =iio_device_claim_direct_mode (indio_dev); -if (ret <0 ) -return ret; - ret =dln2_adc_set_chan_enabled (dln2, channel, true);if (ret <0 ) - goto release_direct; +return ret; ret =dln2_adc_set_port_enabled (dln2, true, &conflict);if (ret <0 ) {
@@ -300,8 +295,6 @@ static int dln2_adc_read(struct dln2_adc *dln2, unsigned int channel)dln2_adc_set_port_enabled (dln2, false,NULL ); disable_chan:dln2_adc_set_chan_enabled (dln2, channel, false); -release_direct: -iio_device_release_direct_mode (indio_dev);return ret; }
@@ -337,10 +330,16 @@ static int dln2_adc_read_raw(struct iio_dev *indio_dev,switch (mask) {case IIO_CHAN_INFO_RAW : + ret =iio_device_claim_direct_mode (indio_dev); +if (ret <0 ) +return ret; +mutex_lock (&dln2->mutex); ret =dln2_adc_read (dln2, chan->channel);mutex_unlock (&dln2->mutex); +iio_device_release_direct_mode (indio_dev); +if (ret <0 )return ret;
@@ -655,7 +654,11 @@ static int dln2_adc_probe(struct platform_device *pdev)return -ENOMEM ; }iio_trigger_set_drvdata (dln2->trig, dln2); -devm_iio_trigger_register (dev, dln2->trig); + ret =devm_iio_trigger_register (dev, dln2->trig); +if (ret) { +dev_err (dev,"failed to register trigger: %d\n" , ret); +return ret; + }iio_trigger_set_immutable (indio_dev, dln2->trig); ret = devm_iio_triggered_buffer_setup(dev, indio_dev, NULL,
drivers/iio/adc/stm32-adc.c +1 -0
@@ -979,6 +979,7 @@ static void stm32h7_adc_unprepare(struct iio_dev *indio_dev) {struct stm32_adc *adc =iio_priv (indio_dev); +stm32_adc_writel (adc,STM32H7_ADC_PCSEL ,0 );stm32h7_adc_disable (indio_dev);stm32h7_adc_enter_pwr_down (adc); }
drivers/iio/gyro/adxrs290.c +3 -2
@@ -7,6 +7,7 @@*/ #include <linux/bitfield.h> +#include <linux/bitops.h> #include <linux/delay.h> #include <linux/device.h> #include <linux/kernel.h>
@@ -124,7 +125,7 @@ static int adxrs290_get_rate_data(struct iio_dev *indio_dev, const u8 cmd, int * goto err_unlock; } - *val = temp; + *val =sign_extend32 (temp,15 ); err_unlock:mutex_unlock (&st->lock);
@@ -146,7 +147,7 @@ static int adxrs290_get_temp_data(struct iio_dev *indio_dev, int *val) }/* extract lower 12 bits temperature reading */ - *val = temp &0x0FFF ; + *val =sign_extend32 (temp,11 ); err_unlock:mutex_unlock (&st->lock);
drivers/iio/gyro/itg3200_buffer.c +1 -1
@@ -61,9 +61,9 @@ static irqreturn_t itg3200_trigger_handler(int irq, void *p)iio_push_to_buffers_with_timestamp (indio_dev, &scan, pf->timestamp); +error_ret:iio_trigger_notify_done (indio_dev->trig); -error_ret:return IRQ_HANDLED ; }
drivers/iio/industrialio-trigger.c +0 -1
@@ -550,7 +550,6 @@ struct iio_trigger *viio_trigger_alloc(const char *fmt, va_list vargs)irq_modify_status (trig->subirq_base + i,IRQ_NOREQUEST |IRQ_NOAUTOEN ,IRQ_NOPROBE ); } -get_device (&trig->dev);return trig;
drivers/iio/light/ltr501.c +1 -1
@@ -1273,7 +1273,7 @@ static irqreturn_t ltr501_trigger_handler(int irq, void *p) ret =regmap_bulk_read (data->regmap,LTR501_ALS_DATA1 , als_buf,sizeof (als_buf));if (ret <0 ) -return ret; + goto done;if (test_bit (0 , indio_dev->active_scan_mask)) scan.channels[j++] =le16_to_cpu (als_buf[1 ]);if (test_bit (1 , indio_dev->active_scan_mask))
drivers/iio/light/stk3310.c +3 -3
@@ -546,9 +546,8 @@ static irqreturn_t stk3310_irq_event_handler(int irq, void *private)mutex_lock (&data->lock); ret =regmap_field_read (data->reg_flag_nf, &dir);if (ret <0 ) { -dev_err (&data->client->dev,"register read failed\n" ); -mutex_unlock (&data->lock); -return ret; +dev_err (&data->client->dev,"register read failed: %d\n" , ret); + goto out; } event = IIO_UNMOD_EVENT_CODE(IIO_PROXIMITY, 1, IIO_EV_TYPE_THRESH,
@@ -560,6 +559,7 @@ static irqreturn_t stk3310_irq_event_handler(int irq, void *private) ret =regmap_field_write (data->reg_flag_psint,0 );if (ret <0 )dev_err (&data->client->dev,"failed to reset interrupts\n" ); +out:mutex_unlock (&data->lock);return IRQ_HANDLED ;
drivers/iio/trigger/stm32-timer-trigger.c +1 -1
@@ -912,6 +912,6 @@ static struct platform_driver stm32_timer_trigger_driver = { };module_platform_driver (stm32_timer_trigger_driver); -MODULE_ALIAS ("platform: stm32-timer-trigger" ); +MODULE_ALIAS ("platform:stm32-timer-trigger" );MODULE_DESCRIPTION ("STMicroelectronics STM32 Timer Trigger driver" );MODULE_LICENSE ("GPL v2" );
drivers/infiniband/hw/hfi1/chip.c +2 -0
@@ -8456,6 +8456,8 @@ static void receive_interrupt_common(struct hfi1_ctxtdata *rcd)*/ static void __hfi1_rcd_eoi_intr (struct hfi1_ctxtdata *rcd) { +if (!rcd->rcvhdrq) +return ;clear_recv_intr (rcd);if (check_packet_present (rcd))force_recv_intr (rcd);
drivers/infiniband/hw/hfi1/driver.c +2 -0
@@ -1053,6 +1053,8 @@ int handle_receive_interrupt(struct hfi1_ctxtdata *rcd, int thread)struct hfi1_packet packet;int skip_pkt =0 ; +if (!rcd->rcvhdrq) +return RCV_PKT_OK ;/* Control context will always use the slow path interrupt handler */ needset = (rcd->ctxt ==HFI1_CTRL_CTXT ) ?0 :1 ;
drivers/infiniband/hw/hfi1/init.c +17 -23
@@ -154,7 +154,6 @@ static int hfi1_create_kctxt(struct hfi1_devdata *dd, rcd->fast_handler =get_dma_rtail_setting (rcd) ? handle_receive_interrupt_dma_rtail : handle_receive_interrupt_nodma_rtail; - rcd->slow_handler = handle_receive_interrupt;hfi1_set_seq_cnt (rcd,1 );
@@ -375,6 +374,8 @@ int hfi1_create_ctxtdata(struct hfi1_pportdata *ppd, int numa, rcd->numa_id = numa; rcd->rcv_array_groups = dd->rcv_entries.ngroups; rcd->rhf_rcv_function_map = normal_rhf_rcv_functions; + rcd->slow_handler = handle_receive_interrupt; + rcd->do_interrupt = rcd->slow_handler; rcd->msix_intr =CCE_NUM_MSIX_VECTORS ;mutex_init (&rcd->exp_mutex);
@@ -915,18 +916,6 @@ int hfi1_init(struct hfi1_devdata *dd, int reinit)if (ret) goto done; -/* allocate dummy tail memory for all receive contexts */ - dd->rcvhdrtail_dummy_kvaddr =dma_alloc_coherent (&dd->pcidev->dev, -sizeof (u64), - &dd->rcvhdrtail_dummy_dma, -GFP_KERNEL ); - -if (!dd->rcvhdrtail_dummy_kvaddr) { -dd_dev_err (dd,"cannot allocate dummy tail memory\n" ); - ret = -ENOMEM ; - goto done; - } -/* dd->rcd can be NULL if early initialization failed */ for (i =0 ; dd->rcd && i < dd->first_dyn_alloc_ctxt; ++i) {/*
@@ -939,8 +928,6 @@ int hfi1_init(struct hfi1_devdata *dd, int reinit)if (!rcd)continue ; - rcd->do_interrupt = &handle_receive_interrupt; - lastfail =hfi1_create_rcvhdrq (dd, rcd);if (!lastfail) lastfail =hfi1_setup_eagerbufs (rcd);
@@ -1161,7 +1148,7 @@ void hfi1_free_ctxtdata(struct hfi1_devdata *dd, struct hfi1_ctxtdata *rcd) rcd->egrbufs.rcvtids =NULL ;for (e =0 ; e < rcd->egrbufs.alloced; e++) { -if (rcd->egrbufs.buffers[e].dma) +if (rcd->egrbufs.buffers[e].addr) dma_free_coherent(&dd->pcidev->dev, rcd->egrbufs.buffers[e].len, rcd->egrbufs.buffers[e].addr,
@@ -1242,6 +1229,11 @@ void hfi1_free_devdata(struct hfi1_devdata *dd) dd->tx_opstats =NULL ;kfree (dd->comp_vect); dd->comp_vect =NULL ; +if (dd->rcvhdrtail_dummy_kvaddr) +dma_free_coherent (&dd->pcidev->dev,sizeof (u64), + (void *)dd->rcvhdrtail_dummy_kvaddr, + dd->rcvhdrtail_dummy_dma); + dd->rcvhdrtail_dummy_kvaddr =NULL ;sdma_clean (dd, dd->num_sdma);rvt_dealloc_device (&dd->verbs_dev.rdi); }
@@ -1339,6 +1331,15 @@ static struct hfi1_devdata *hfi1_alloc_devdata(struct pci_dev *pdev, goto bail; } +/* allocate dummy tail memory for all receive contexts */ + dd->rcvhdrtail_dummy_kvaddr = +dma_alloc_coherent (&dd->pcidev->dev,sizeof (u64), + &dd->rcvhdrtail_dummy_dma,GFP_KERNEL ); +if (!dd->rcvhdrtail_dummy_kvaddr) { + ret = -ENOMEM ; + goto bail; + } +atomic_set (&dd->ipoib_rsm_usr_num,0 );return dd;
@@ -1546,13 +1547,6 @@ static void cleanup_device_data(struct hfi1_devdata *dd)free_credit_return (dd); -if (dd->rcvhdrtail_dummy_kvaddr) { -dma_free_coherent (&dd->pcidev->dev,sizeof (u64), - (void *)dd->rcvhdrtail_dummy_kvaddr, - dd->rcvhdrtail_dummy_dma); - dd->rcvhdrtail_dummy_kvaddr =NULL ; - } -/* * Free any resources still in use (usually just kernel contexts) * at unload; we do for ctxtcnt, because that's what we allocate.
drivers/infiniband/hw/hfi1/sdma.c +1 -1
@@ -880,8 +880,8 @@ struct sdma_engine *sdma_select_user_engine(struct hfi1_devdata *dd,if (current->nr_cpus_allowed !=1 ) goto out; - cpu_id =smp_processor_id ();rcu_read_lock (); + cpu_id =smp_processor_id (); rht_node =rhashtable_lookup (dd->sdma_rht, &cpu_id, sdma_rht_params);
drivers/infiniband/hw/hns/hns_roce_hw_v2.c +11 -3
@@ -33,6 +33,7 @@#include <linux/acpi.h> #include <linux/etherdevice.h> #include <linux/interrupt.h> +#include <linux/iopoll.h> #include <linux/kernel.h> #include <linux/types.h> #include <net/addrconf.h>
@@ -964,9 +965,14 @@ static int hns_roce_v2_cmd_hw_resetting(struct hns_roce_dev *hr_dev,unsigned long instance_stage, unsigned long reset_stage) { +#define HW_RESET_TIMEOUT_US 1000000 +#define HW_RESET_SLEEP_US 1000 + struct hns_roce_v2_priv *priv = hr_dev->priv;struct hnae3_handle *handle = priv->handle;const struct hnae3_ae_ops *ops = handle->ae_algo->ops; +unsigned long val; +int ret;/* When hardware reset is detected, we should stop sending mailbox&cmq& * doorbell to hardware. If now in .init_instance() function, we should
@@ -978,7 +984,11 @@ static int hns_roce_v2_cmd_hw_resetting(struct hns_roce_dev *hr_dev,* again. */ hr_dev->dis_db = true; -if (!ops->get_hw_reset_stat (handle)) + + ret =read_poll_timeout (ops->ae_dev_reset_cnt, val, + val > hr_dev->reset_cnt,HW_RESET_SLEEP_US , +HW_RESET_TIMEOUT_US , false, handle); +if (!ret) hr_dev->is_reset = true; if (!hr_dev->is_reset || reset_stage == HNS_ROCE_STATE_RST_INIT ||
@@ -6342,10 +6352,8 @@ static int hns_roce_hw_v2_reset_notify_down(struct hnae3_handle *handle)if (!hr_dev)return 0 ; - hr_dev->is_reset = true; hr_dev->active = false; hr_dev->dis_db = true; - hr_dev->state =HNS_ROCE_DEVICE_STATE_RST_DOWN ;return 0 ;
drivers/irqchip/irq-armada-370-xp.c +6 -10
@@ -232,16 +232,12 @@ static int armada_370_xp_msi_alloc(struct irq_domain *domain, unsigned int virq,int hwirq, i;mutex_lock (&msi_used_lock); + hwirq =bitmap_find_free_region (msi_used,PCI_MSI_DOORBELL_NR , +order_base_2 (nr_irqs)); +mutex_unlock (&msi_used_lock); - hwirq =bitmap_find_next_zero_area (msi_used,PCI_MSI_DOORBELL_NR , -0 , nr_irqs,0 ); -if (hwirq >=PCI_MSI_DOORBELL_NR ) { -mutex_unlock (&msi_used_lock); +if (hwirq <0 )return -ENOSPC ; - } - -bitmap_set (msi_used, hwirq, nr_irqs); -mutex_unlock (&msi_used_lock);for (i =0 ; i < nr_irqs; i++) { irq_domain_set_info(domain, virq + i, hwirq + i,
@@ -250,7 +246,7 @@ static int armada_370_xp_msi_alloc(struct irq_domain *domain, unsigned int virq, NULL, NULL); } -return hwirq; +return 0 ; } static void armada_370_xp_msi_free(struct irq_domain *domain,
@@ -259,7 +255,7 @@ static void armada_370_xp_msi_free(struct irq_domain *domain,struct irq_data *d =irq_domain_get_irq_data (domain, virq);mutex_lock (&msi_used_lock); -bitmap_clear (msi_used, d->hwirq, nr_irqs); +bitmap_release_region (msi_used, d->hwirq,order_base_2 (nr_irqs));mutex_unlock (&msi_used_lock); }
drivers/irqchip/irq-aspeed-scu-ic.c +2 -2
@@ -78,8 +78,8 @@ static void aspeed_scu_ic_irq_handler(struct irq_desc *desc) bit - scu_ic->irq_shift);generic_handle_irq (irq); -regmap_update_bits (scu_ic->scu, scu_ic->reg, mask, -BIT (bit +ASPEED_SCU_IC_STATUS_SHIFT )); +regmap_write_bits (scu_ic->scu, scu_ic->reg, mask, +BIT (bit +ASPEED_SCU_IC_STATUS_SHIFT )); }chained_irq_exit (chip, desc);
drivers/irqchip/irq-gic-v3-its.c +1 -1
@@ -742,7 +742,7 @@ static struct its_collection *its_build_invall_cmd(struct its_node *its,its_fixup_cmd (cmd); -return NULL ; +return desc->its_invall_cmd.col; } static struct its_vpe *its_build_vinvall_cmd(struct its_node *its,
drivers/irqchip/irq-nvic.c +1 -1
@@ -26,7 +26,7 @@#define NVIC_ISER 0x000#define NVIC_ICER 0x080 -#define NVIC_IPR 0x300 +#define NVIC_IPR 0x400#define NVIC_MAX_BANKS 16/*
drivers/md/md.c +1 -0
@@ -2252,6 +2252,7 @@ super_1_rdev_size_change(struct md_rdev *rdev, sector_t num_sectors)if (!num_sectors || num_sectors > max_sectors) num_sectors = max_sectors; + rdev->sb_start = sb_start; } sb =page_address (rdev->sb_page); sb->data_size =cpu_to_le64 (num_sectors);
drivers/misc/fastrpc.c +6 -4
@@ -717,16 +717,18 @@ static int fastrpc_get_meta_size(struct fastrpc_invoke_ctx *ctx)static u64 fastrpc_get_payload_size (struct fastrpc_invoke_ctx *ctx,int metalen) {u64 size =0 ; -int i; +int oix; size =ALIGN (metalen,FASTRPC_ALIGN ); -for (i =0 ; i < ctx->nscalars; i++) { +for (oix =0 ; oix < ctx->nbufs; oix++) { +int i = ctx->olaps[oix].raix; +if (ctx->args[i].fd ==0 || ctx->args[i].fd ==-1 ) { -if (ctx->olaps[i].offset ==0 ) +if (ctx->olaps[oix].offset ==0 ) size =ALIGN (size,FASTRPC_ALIGN ); - size += (ctx->olaps[i].mend - ctx->olaps[i].mstart); + size += (ctx->olaps[oix].mend - ctx->olaps[oix].mstart); } }
drivers/mmc/host/renesas_sdhi_core.c +1 -1
@@ -660,7 +660,7 @@ static int renesas_sdhi_execute_tuning(struct mmc_host *mmc, u32 opcode)/* Issue CMD19 twice for each tap */ for (i =0 ; i <2 * priv->tap_num; i++) { -int cmd_error; +int cmd_error =0 ;/* Set sampling clock position */ sd_scc_write32 (host, priv,SH_MOBILE_SDHI_SCC_TAPSET , i % priv->tap_num);
drivers/mtd/nand/raw/fsmc_nand.c +28 -8
@@ -15,6 +15,7 @@#include <linux/clk.h> #include <linux/completion.h> +#include <linux/delay.h> #include <linux/dmaengine.h> #include <linux/dma-direction.h> #include <linux/dma-mapping.h>
@@ -93,6 +94,14 @@#define FSMC_BUSY_WAIT_TIMEOUT (1 * HZ) +/* +* According to SPEAr300 Reference Manual (RM0082) +* TOUDEL = 7ns (Output delay from the flip-flops to the board) +* TINDEL = 5ns (Input delay from the board to the flipflop) +*/ +#define TOUTDEL 7000 +#define TINDEL 5000 +struct fsmc_nand_timings {u8 tclr;u8 tar;
@@ -277,7 +286,7 @@ static int fsmc_calc_timings(struct fsmc_nand_data *host, {unsigned long hclk =clk_get_rate (host->clk);unsigned long hclkn =NSEC_PER_SEC / hclk; -u32 thiz, thold, twait, tset; +u32 thiz, thold, twait, tset, twait_min;if (sdrt->tRC_min <30000 )return -EOPNOTSUPP ;
@@ -309,13 +318,6 @@ static int fsmc_calc_timings(struct fsmc_nand_data *host,else if (tims->thold >FSMC_THOLD_MASK ) tims->thold =FSMC_THOLD_MASK ; - twait =max (sdrt->tRP_min, sdrt->tWP_min); - tims->twait =DIV_ROUND_UP (twait /1000 , hclkn) -1 ; -if (tims->twait ==0 ) - tims->twait =1 ; -else if (tims->twait >FSMC_TWAIT_MASK ) - tims->twait =FSMC_TWAIT_MASK ; - tset =max (sdrt->tCS_min - sdrt->tWP_min, sdrt->tCEA_max - sdrt->tREA_max); tims->tset =DIV_ROUND_UP (tset /1000 , hclkn) -1 ;
@@ -324,6 +326,21 @@ static int fsmc_calc_timings(struct fsmc_nand_data *host,else if (tims->tset >FSMC_TSET_MASK ) tims->tset =FSMC_TSET_MASK ; +/* +* According to SPEAr300 Reference Manual (RM0082) which gives more +* information related to FSMSC timings than the SPEAr600 one (RM0305), +* twait >= tCEA - (tset * TCLK) + TOUTDEL + TINDEL +*/ + twait_min = sdrt->tCEA_max - ((tims->tset +1 ) * hclkn *1000 ) + +TOUTDEL +TINDEL ; + twait =max3 (sdrt->tRP_min, sdrt->tWP_min, twait_min); + + tims->twait =DIV_ROUND_UP (twait /1000 , hclkn) -1 ; +if (tims->twait ==0 ) + tims->twait =1 ; +else if (tims->twait >FSMC_TWAIT_MASK ) + tims->twait =FSMC_TWAIT_MASK ; +return 0 ; }
@@ -653,6 +670,9 @@ static int fsmc_exec_op(struct nand_chip *chip, const struct nand_operation *op, instr->ctx.waitrdy.timeout_ms);break ; } + +if (instr->delay_ns) +ndelay (instr->delay_ns); }return ret;
drivers/net/bonding/bond_alb.c +8 -6
@@ -1531,14 +1531,14 @@ void bond_alb_monitor(struct work_struct *work)struct slave *slave;if (!bond_has_slaves (bond)) { - bond_info->tx_rebalance_counter =0 ; +atomic_set (&bond_info->tx_rebalance_counter,0 ); bond_info->lp_counter =0 ; goto re_arm; }rcu_read_lock (); - bond_info->tx_rebalance_counter++; +atomic_inc (&bond_info->tx_rebalance_counter); bond_info->lp_counter++;/* send learning packets */
@@ -1560,7 +1560,7 @@ void bond_alb_monitor(struct work_struct *work) }/* rebalance tx traffic */ -if (bond_info->tx_rebalance_counter >=BOND_TLB_REBALANCE_TICKS ) { +if (atomic_read (&bond_info->tx_rebalance_counter) >=BOND_TLB_REBALANCE_TICKS ) {bond_for_each_slave_rcu (bond, slave, iter) {tlb_clear_slave (bond, slave,1 );if (slave ==rcu_access_pointer (bond->curr_active_slave)) {
@@ -1570,7 +1570,7 @@ void bond_alb_monitor(struct work_struct *work) bond_info->unbalanced_load =0 ; } } - bond_info->tx_rebalance_counter =0 ; +atomic_set (&bond_info->tx_rebalance_counter,0 ); }if (bond_info->rlb_enabled) {
@@ -1640,7 +1640,8 @@ int bond_alb_init_slave(struct bonding *bond, struct slave *slave)tlb_init_slave (slave);/* order a rebalance ASAP */ - bond->alb_info.tx_rebalance_counter =BOND_TLB_REBALANCE_TICKS ; +atomic_set (&bond->alb_info.tx_rebalance_counter, +BOND_TLB_REBALANCE_TICKS );if (bond->alb_info.rlb_enabled) bond->alb_info.rlb_rebalance =1 ;
@@ -1677,7 +1678,8 @@ void bond_alb_handle_link_change(struct bonding *bond, struct slave *slave, charrlb_clear_slave (bond, slave); }else if (link ==BOND_LINK_UP ) {/* order a rebalance ASAP */ - bond_info->tx_rebalance_counter =BOND_TLB_REBALANCE_TICKS ; +atomic_set (&bond_info->tx_rebalance_counter, +BOND_TLB_REBALANCE_TICKS );if (bond->alb_info.rlb_enabled) { bond->alb_info.rlb_rebalance =1 ;/* If the updelay module parameter is smaller than the
drivers/net/can/kvaser_pciefd.c +7 -1
@@ -248,6 +248,9 @@ MODULE_DESCRIPTION("CAN driver for Kvaser CAN/PCIe devices");#define KVASER_PCIEFD_SPACK_EWLR BIT(23)#define KVASER_PCIEFD_SPACK_EPLR BIT(24) +/* Kvaser KCAN_EPACK second word */ +#define KVASER_PCIEFD_EPACK_DIR_TX BIT(0) +struct kvaser_pciefd ;struct kvaser_pciefd_can {
@@ -1285,7 +1288,10 @@ static int kvaser_pciefd_rx_error_frame(struct kvaser_pciefd_can *can, can->err_rep_cnt++; can->can.can_stats.bus_error++; - stats->rx_errors++; +if (p->header[1 ] &KVASER_PCIEFD_EPACK_DIR_TX ) + stats->tx_errors++; +else + stats->rx_errors++; can->bec.txerr = bec.txerr; can->bec.rxerr = bec.rxerr;
drivers/net/can/m_can/m_can.c +6 -8
@@ -207,15 +207,15 @@ enum m_can_reg {/* Interrupts for version 3.0.x */ #define IR_ERR_LEC_30X (IR_STE | IR_FOE | IR_ACKE | IR_BE | IR_CRCE) -#define IR_ERR_BUS_30X (IR_ERR_LEC_30X | IR_WDI | IR_ELO | IR_BEU | \ - IR_BEC | IR_TOO | IR_MRAF | IR_TSW | IR_TEFL | \ - IR_RF1L | IR_RF0L) +#define IR_ERR_BUS_30X (IR_ERR_LEC_30X | IR_WDI | IR_BEU | IR_BEC | \ + IR_TOO | IR_MRAF | IR_TSW | IR_TEFL | IR_RF1L | \ + IR_RF0L)#define IR_ERR_ALL_30X (IR_ERR_STATE | IR_ERR_BUS_30X)/* Interrupts for version >= 3.1.x */ #define IR_ERR_LEC_31X (IR_PED | IR_PEA) -#define IR_ERR_BUS_31X (IR_ERR_LEC_31X | IR_WDI | IR_ELO | IR_BEU | \ - IR_BEC | IR_TOO | IR_MRAF | IR_TSW | IR_TEFL | \ - IR_RF1L | IR_RF0L) +#define IR_ERR_BUS_31X (IR_ERR_LEC_31X | IR_WDI | IR_BEU | IR_BEC | \ + IR_TOO | IR_MRAF | IR_TSW | IR_TEFL | IR_RF1L | \ + IR_RF0L)#define IR_ERR_ALL_31X (IR_ERR_STATE | IR_ERR_BUS_31X)/* Interrupt Line Select (ILS) */
@@ -752,8 +752,6 @@ static void m_can_handle_other_err(struct net_device *dev, u32 irqstatus) {if (irqstatus &IR_WDI )netdev_err (dev,"Message RAM Watchdog event due to missing READY\n" ); -if (irqstatus &IR_ELO ) -netdev_err (dev,"Error Logging Overflow\n" );if (irqstatus &IR_BEU )netdev_err (dev,"Bit Error Uncorrected\n" );if (irqstatus &IR_BEC )
drivers/net/can/pch_can.c +1 -1
@@ -692,11 +692,11 @@ static int pch_can_rx_normal(struct net_device *ndev, u32 obj_num, int quota) cf->data[i +1 ] = data_reg >>8 ; } -netif_receive_skb (skb); rcv_pkts++; stats->rx_packets++; quota--; stats->rx_bytes += cf->can_dlc; +netif_receive_skb (skb);pch_fifo_thresh (priv, obj_num); obj_num++;
drivers/net/can/sja1000/ems_pcmcia.c +6 -1
@@ -235,7 +235,12 @@ static int ems_pcmcia_add_card(struct pcmcia_device *pdev, unsigned long base)free_sja1000dev (dev); } - err =request_irq (dev->irq, &ems_pcmcia_interrupt,IRQF_SHARED , +if (!card->channels) { + err = -ENODEV ; + goto failure_cleanup; + } + + err =request_irq (pdev->irq, &ems_pcmcia_interrupt,IRQF_SHARED ,DRV_NAME , card);if (!err)return 0 ;
drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c +73 -28
150 lines not on this page · raw message
drivers/net/ethernet/altera/altera_tse_main.c +6 -3
@@ -1431,16 +1431,19 @@ static int altera_tse_probe(struct platform_device *pdev) priv->rxdescmem_busaddr = dma_res->start; }else { + ret = -ENODEV ; goto err_free_netdev; } -if (!dma_set_mask (priv->device,DMA_BIT_MASK (priv->dmaops->dmamask))) +if (!dma_set_mask (priv->device,DMA_BIT_MASK (priv->dmaops->dmamask))) {dma_set_coherent_mask (priv->device,DMA_BIT_MASK (priv->dmaops->dmamask)); -else if (!dma_set_mask (priv->device,DMA_BIT_MASK (32 ))) + }else if (!dma_set_mask (priv->device,DMA_BIT_MASK (32 ))) {dma_set_coherent_mask (priv->device,DMA_BIT_MASK (32 )); -else + }else { + ret = -EIO ; goto err_free_netdev; + }/* MAC address space */ ret = request_and_map(pdev, "control_port", &control_port,
drivers/net/ethernet/freescale/fec.h +3 -0
@@ -373,6 +373,9 @@ struct bufdesc_ex {#define FEC_ENET_WAKEUP ((uint)0x00020000)/* Wakeup request */ #define FEC_ENET_TXF (FEC_ENET_TXF_0 | FEC_ENET_TXF_1 | FEC_ENET_TXF_2)#define FEC_ENET_RXF (FEC_ENET_RXF_0 | FEC_ENET_RXF_1 | FEC_ENET_RXF_2) +#define FEC_ENET_RXF_GET (X ) (((X) == 0) ? FEC_ENET_RXF_0 : \ + (((X) == 1) ? FEC_ENET_RXF_1 : \ + FEC_ENET_RXF_2))#define FEC_ENET_TS_AVAIL ((uint)0x00010000)#define FEC_ENET_TS_TIMER ((uint)0x00008000)
drivers/net/ethernet/freescale/fec_main.c +1 -1
@@ -1439,7 +1439,7 @@ fec_enet_rx_queue(struct net_device *ndev, int budget, u16 queue_id)break ; pkt_received++; -writel (FEC_ENET_RXF , fep->hwp +FEC_IEVENT ); +writel (FEC_ENET_RXF_GET (queue_id), fep->hwp +FEC_IEVENT );/* Check for errors. */ status ^=BD_ENET_RX_LAST ;
drivers/net/ethernet/intel/i40e/i40e_debugfs.c +8 -0
@@ -553,6 +553,14 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n,dev_info (&pf->pdev->dev,"vsi %d not found\n" , vsi_seid);return ; } +if (vsi->type !=I40E_VSI_MAIN && + vsi->type !=I40E_VSI_FDIR && + vsi->type !=I40E_VSI_VMDQ2 ) { +dev_info (&pf->pdev->dev, +"vsi %d type %d descriptor rings not available\n" , + vsi_seid, vsi->type); +return ; + }if (type ==RING_TYPE_XDP && !i40e_enabled_xdp_vsi (vsi)) {dev_info (&pf->pdev->dev,"XDP not enabled on VSI %d\n" , vsi_seid);return ;
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +48 -27
209 lines not on this page · raw message
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h +2 -0
@@ -18,6 +18,8 @@#define I40E_MAX_VF_PROMISC_FLAGS 3 +#define I40E_VF_STATE_WAIT_COUNT 20 +/* Various queue ctrls */ enum i40e_queue_ctrl {I40E_QUEUE_CTRL_UNKNOWN =0 ,
drivers/net/ethernet/intel/iavf/iavf_ethtool.c +32 -11
55 lines not on this page · raw message
drivers/net/ethernet/intel/iavf/iavf_main.c +1 -0
@@ -2139,6 +2139,7 @@ static void iavf_reset_task(struct work_struct *work) }pci_set_master (adapter->pdev); +pci_restore_msi_state (adapter->pdev);if (i ==IAVF_RESET_WAIT_COMPLETE_COUNT ) { dev_err(&adapter->pdev->dev, "Reset never finished (%x)\n",
drivers/net/ethernet/intel/ice/ice_main.c +3 -0
@@ -5267,6 +5267,9 @@ static int ice_up_complete(struct ice_vsi *vsi)netif_carrier_on (vsi->netdev); } +/* clear this now, and the first stats read will be used as baseline */ + vsi->stat_offsets_loaded = false; +ice_service_task_schedule (pf);return 0 ;
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +2 -2
@@ -2607,11 +2607,11 @@ static int mvpp2_rxq_init(struct mvpp2_port *port,mvpp2_rxq_status_update (port, rxq->id,0 , rxq->size);if (priv->percpu_pools) { - err =xdp_rxq_info_reg (&rxq->xdp_rxq_short, port->dev, rxq->id); + err =xdp_rxq_info_reg (&rxq->xdp_rxq_short, port->dev, rxq->logic_rxq);if (err <0 ) goto err_free_dma; - err =xdp_rxq_info_reg (&rxq->xdp_rxq_long, port->dev, rxq->id); + err =xdp_rxq_info_reg (&rxq->xdp_rxq_long, port->dev, rxq->logic_rxq);if (err <0 ) goto err_unregister_rxq_short;
drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cppcore.c +3 -1
@@ -803,8 +803,10 @@ int nfp_cpp_area_cache_add(struct nfp_cpp *cpp, size_t size)return -ENOMEM ; cache =kzalloc (sizeof (*cache),GFP_KERNEL ); -if (!cache) +if (!cache) { +nfp_cpp_area_free (area);return -ENOMEM ; + } cache->id =0 ; cache->addr =0 ;
drivers/net/ethernet/qlogic/qede/qede_fp.c +7 -0
@@ -1659,6 +1659,13 @@ netdev_tx_t qede_start_xmit(struct sk_buff *skb, struct net_device *ndev) data_split = true; } }else { +if (unlikely (skb->len >ETH_TX_MAX_NON_LSO_PKT_LEN )) { +DP_ERR (edev,"Unexpected non LSO skb length = 0x%x\n" , skb->len); +qede_free_failed_tx_pkt (txq, first_bd,0 , false); +qede_update_tx_producer (txq); +return NETDEV_TX_OK ; + } + val |= ((skb->len Ð_TX_DATA_1ST_BD_PKT_LEN_MASK ) <<ETH_TX_DATA_1ST_BD_PKT_LEN_SHIFT ); }
drivers/net/ethernet/qlogic/qla3xxx.c +9 -10
@@ -3494,20 +3494,19 @@ static int ql_adapter_up(struct ql3_adapter *qdev)spin_lock_irqsave (&qdev->hw_lock, hw_flags); - err =ql_wait_for_drvr_lock (qdev); -if (err) { - err =ql_adapter_initialize (qdev); -if (err) { -netdev_err (ndev,"Unable to initialize adapter\n" ); - goto err_init; - } -netdev_err (ndev,"Releasing driver lock\n" ); -ql_sem_unlock (qdev,QL_DRVR_SEM_MASK ); - }else { +if (!ql_wait_for_drvr_lock (qdev)) {netdev_err (ndev,"Could not acquire driver lock\n" ); + err = -ENODEV ; goto err_lock; } + err =ql_adapter_initialize (qdev); +if (err) { +netdev_err (ndev,"Unable to initialize adapter\n" ); + goto err_init; + } +ql_sem_unlock (qdev,QL_DRVR_SEM_MASK ); +spin_unlock_irqrestore (&qdev->hw_lock, hw_flags);set_bit (QL_ADAPTER_UP , &qdev->flags);
drivers/net/usb/cdc_ncm.c +2 -0
@@ -181,6 +181,8 @@ static u32 cdc_ncm_check_tx_max(struct usbnet *dev, u32 new_tx) min = ctx->max_datagram_size + ctx->max_ndp_size +sizeof (struct usb_cdc_ncm_nth32 ); max =min_t (u32,CDC_NCM_NTB_MAX_SIZE_TX ,le32_to_cpu (ctx->ncm_parm.dwNtbOutMaxSize)); +if (max ==0 ) + max =CDC_NCM_NTB_MAX_SIZE_TX ;/* dwNtbOutMaxSize not set */ /* some devices set dwNtbOutMaxSize too low for the above default */ min =min (min, max);
drivers/net/vrf.c +4 -4
@@ -771,8 +771,6 @@ static struct sk_buff *vrf_ip6_out_direct(struct net_device *vrf_dev, skb->dev = vrf_dev; -vrf_nf_set_untracked (skb); - err =nf_hook (NFPROTO_IPV6 ,NF_INET_LOCAL_OUT , net, sk, skb,NULL , vrf_dev, vrf_ip6_out_direct_finish);
@@ -793,6 +791,8 @@ static struct sk_buff *vrf_ip6_out(struct net_device *vrf_dev,if (rt6_need_strict (&ipv6_hdr (skb)->daddr))return skb; +vrf_nf_set_untracked (skb); +if (qdisc_tx_is_default (vrf_dev) ||IP6CB (skb)->flags &IP6SKB_XFRM_TRANSFORMED )return vrf_ip6_out_direct (vrf_dev, sk, skb);
@@ -1008,8 +1008,6 @@ static struct sk_buff *vrf_ip_out_direct(struct net_device *vrf_dev, skb->dev = vrf_dev; -vrf_nf_set_untracked (skb); - err =nf_hook (NFPROTO_IPV4 ,NF_INET_LOCAL_OUT , net, sk, skb,NULL , vrf_dev, vrf_ip_out_direct_finish);
@@ -1031,6 +1029,8 @@ static struct sk_buff *vrf_ip_out(struct net_device *vrf_dev, ipv4_is_lbcast(ip_hdr(skb)->daddr))return skb; +vrf_nf_set_untracked (skb); +if (qdisc_tx_is_default (vrf_dev) ||IPCB (skb)->flags &IPSKB_XFRM_TRANSFORMED )return vrf_ip_out_direct (vrf_dev, sk, skb);
drivers/pci/controller/pci-aardvark.c +0 -9
@@ -31,7 +31,6 @@#define PCIE_CORE_DEV_ID_REG 0x0#define PCIE_CORE_CMD_STATUS_REG 0x4#define PCIE_CORE_DEV_REV_REG 0x8 -#define PCIE_CORE_EXP_ROM_BAR_REG 0x30#define PCIE_CORE_PCIEXP_CAP 0xc0#define PCIE_CORE_ERR_CAPCTL_REG 0x118#define PCIE_CORE_ERR_CAPCTL_ECRC_CHK_TX BIT(5)
@@ -781,10 +780,6 @@ advk_pci_bridge_emul_base_conf_read(struct pci_bridge_emul *bridge, *value =advk_readl (pcie,PCIE_CORE_CMD_STATUS_REG );return PCI_BRIDGE_EMUL_HANDLED ; -case PCI_ROM_ADDRESS1 : - *value =advk_readl (pcie,PCIE_CORE_EXP_ROM_BAR_REG ); -return PCI_BRIDGE_EMUL_HANDLED ; -case PCI_INTERRUPT_LINE : {/* * From the whole 32bit register we support reading from HW only
@@ -817,10 +812,6 @@ advk_pci_bridge_emul_base_conf_write(struct pci_bridge_emul *bridge,advk_writel (pcie, new,PCIE_CORE_CMD_STATUS_REG );break ; -case PCI_ROM_ADDRESS1 : -advk_writel (pcie, new,PCIE_CORE_EXP_ROM_BAR_REG ); -break ; -case PCI_INTERRUPT_LINE :if (mask & (PCI_BRIDGE_CTL_BUS_RESET <<16 )) {u32 val =advk_readl (pcie,PCIE_CORE_CTRL1_REG );
drivers/scsi/pm8001/pm8001_init.c +2 -4
@@ -280,12 +280,12 @@ static int pm8001_alloc(struct pm8001_hba_info *pm8001_ha,if (rc) {pm8001_dbg (pm8001_ha,FAIL ,"pm8001_setup_irq failed [ret: %d]\n" , rc); - goto err_out_shost; + goto err_out; }/* Request Interrupt */ rc =pm8001_request_irq (pm8001_ha);if (rc) - goto err_out_shost; + goto err_out; count = pm8001_ha->max_q_num;/* Queues are chosen based on the number of cores/msix availability */
@@ -419,8 +419,6 @@ static int pm8001_alloc(struct pm8001_hba_info *pm8001_ha,pm8001_tag_init (pm8001_ha);return 0 ; -err_out_shost: -scsi_remove_host (pm8001_ha->shost); err_out_nodev:for (i =0 ; i < pm8001_ha->max_memcnt; i++) {if (pm8001_ha->memoryMap.region[i].virt_ptr !=NULL ) {
drivers/scsi/qla2xxx/qla_dbg.c +3 -0
@@ -2477,6 +2477,9 @@ ql_dbg(uint level, scsi_qla_host_t *vha, uint id, const char *fmt, ...)struct va_format vaf;char pbuf[64 ]; +if (!ql_mask_match (level) && !trace_ql_dbg_log_enabled ()) +return ; +va_start (va, fmt); vaf.fmt = fmt;
drivers/scsi/scsi_debug.c +1 -1
@@ -4313,7 +4313,7 @@ static int resp_report_zones(struct scsi_cmnd *scp, rep_max_zones =min ((alloc_len -64 ) >>ilog2 (RZONES_DESC_HD ), max_zones); - arr =kcalloc (RZONES_DESC_HD , alloc_len,GFP_ATOMIC ); + arr =kzalloc (alloc_len,GFP_ATOMIC );if (!arr) {mk_sense_buffer (scp,ILLEGAL_REQUEST ,INSUFF_RES_ASC ,INSUFF_RES_ASCQ );
drivers/usb/core/config.c +3 -3
@@ -406,7 +406,7 @@ static int usb_parse_endpoint(struct device *ddev, int cfgno,* the USB-2 spec requires such endpoints to have wMaxPacketSize = 0 * (see the end of section 5.6.3), so don't warn about them. */ - maxp =usb_endpoint_maxp (&endpoint->desc); + maxp =le16_to_cpu (endpoint->desc.wMaxPacketSize);if (maxp ==0 && !(usb_endpoint_xfer_isoc (d) && asnum ==0 )) {dev_warn (ddev,"config %d interface %d altsetting %d endpoint 0x%X has invalid wMaxPacketSize 0\n" , cfgno, inum, asnum, d->bEndpointAddress);
@@ -422,9 +422,9 @@ static int usb_parse_endpoint(struct device *ddev, int cfgno, maxpacket_maxes = full_speed_maxpacket_maxes;break ;case USB_SPEED_HIGH : -/* Bits 12..11 are allowed only for HS periodic endpoints */ +/* Multiple-transactions bits are allowed only for HS periodic endpoints */ if (usb_endpoint_xfer_int (d) ||usb_endpoint_xfer_isoc (d)) { - i = maxp & (BIT (12 ) |BIT (11 )); + i = maxp &USB_EP_MAXP_MULT_MASK ; maxp &= ~i; } fallthrough;
drivers/usb/gadget/composite.c +13 -1
@@ -1648,6 +1648,18 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)struct usb_function *f =NULL ;u8 endp; +if (w_length >USB_COMP_EP0_BUFSIZ ) { +if (ctrl->bRequestType ==USB_DIR_OUT ) { + goto done; + }else { +/* Cast away the const, we are going to overwrite on purpose. */ +__le16 *temp = (__le16 *)&ctrl->wLength; + + *temp =cpu_to_le16 (USB_COMP_EP0_BUFSIZ ); + w_length =USB_COMP_EP0_BUFSIZ ; + } + } +/* partial re-init of the response message; the function or the * gadget might need to intercept e.g. a control-OUT completion * when we delegate to it.
@@ -2161,7 +2173,7 @@ int composite_dev_prepare(struct usb_composite_driver *composite,if (!cdev->req)return -ENOMEM ; - cdev->req->buf =kmalloc (USB_COMP_EP0_BUFSIZ ,GFP_KERNEL ); + cdev->req->buf =kzalloc (USB_COMP_EP0_BUFSIZ ,GFP_KERNEL );if (!cdev->req->buf) goto fail;
drivers/usb/gadget/function/uvc.h +2 -0
@@ -117,6 +117,7 @@ struct uvc_device {enum uvc_state state;struct usb_function func;struct uvc_video video; +bool func_connected;/* Descriptors */ struct {
@@ -147,6 +148,7 @@ static inline struct uvc_device *to_uvc(struct usb_function *f)struct uvc_file_handle {struct v4l2_fh vfh;struct uvc_video *device; +bool is_uvc_app_handle; };#define to_uvc_file_handle (handle) \
drivers/usb/gadget/function/uvc_v4l2.c +42 -7
77 lines not on this page · raw message
drivers/usb/gadget/legacy/dbgp.c +14 -1
@@ -137,7 +137,7 @@ static int dbgp_enable_ep_req(struct usb_ep *ep) goto fail_1; } - req->buf =kmalloc (DBGP_REQ_LEN ,GFP_KERNEL ); + req->buf =kzalloc (DBGP_REQ_LEN ,GFP_KERNEL );if (!req->buf) { err = -ENOMEM ; stp =2 ;
@@ -345,6 +345,19 @@ static int dbgp_setup(struct usb_gadget *gadget,void *data =NULL ;u16 len =0 ; +if (length >DBGP_REQ_LEN ) { +if (ctrl->bRequestType ==USB_DIR_OUT ) { +return err; + }else { +/* Cast away the const, we are going to overwrite on purpose. */ +__le16 *temp = (__le16 *)&ctrl->wLength; + + *temp =cpu_to_le16 (DBGP_REQ_LEN ); + length =DBGP_REQ_LEN ; + } + } + +if (request ==USB_REQ_GET_DESCRIPTOR ) {switch (value>>8 ) {case USB_DT_DEVICE :
drivers/usb/gadget/legacy/inode.c +15 -1
@@ -110,6 +110,8 @@ enum ep0_state {/* enough for the whole queue: most events invalidate others */ #define N_EVENT 5 +#define RBUF_SIZE 256 +struct dev_data {spinlock_t lock;refcount_t count;
@@ -144,7 +146,7 @@ struct dev_data {struct dentry *dentry;/* except this scratch i/o buffer for ep0 */ -u8 rbuf [256 ]; +u8 rbuf[RBUF_SIZE ]; };static inline void get_dev (struct dev_data *data)
@@ -1333,6 +1335,18 @@ gadgetfs_setup (struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)u16 w_value =le16_to_cpu (ctrl->wValue);u16 w_length =le16_to_cpu (ctrl->wLength); +if (w_length >RBUF_SIZE ) { +if (ctrl->bRequestType ==USB_DIR_OUT ) { +return value; + }else { +/* Cast away the const, we are going to overwrite on purpose. */ +__le16 *temp = (__le16 *)&ctrl->wLength; + + *temp =cpu_to_le16 (RBUF_SIZE ); + w_length =RBUF_SIZE ; + } + } +spin_lock (&dev->lock); dev->setup_abort =0 ;if (dev->state ==STATE_DEV_UNCONNECTED ) {
drivers/usb/host/xhci-hub.c +1 -0
@@ -631,6 +631,7 @@ static int xhci_enter_test_mode(struct xhci_hcd *xhci,continue ; retval =xhci_disable_slot (xhci, i); +xhci_free_virt_device (xhci, i);if (retval)xhci_err (xhci,"Failed to disable slot %d, %d. Enter test mode anyway\n" , i, retval);
drivers/usb/host/xhci-ring.c +0 -1
@@ -1298,7 +1298,6 @@ static void xhci_handle_cmd_disable_slot(struct xhci_hcd *xhci, int slot_id)if (xhci->quirks &XHCI_EP_LIMIT_QUIRK )/* Delete default control endpoint resources */ xhci_free_device_endpoint_resources (xhci, virt_dev, true); -xhci_free_virt_device (xhci, slot_id); } static void xhci_handle_cmd_config_ep(struct xhci_hcd *xhci, int slot_id,
drivers/usb/host/xhci.c +15 -11
@@ -3893,7 +3893,6 @@ static void xhci_free_dev(struct usb_hcd *hcd, struct usb_device *udev)struct xhci_slot_ctx *slot_ctx;int i, ret; -#ifndef CONFIG_USB_DEFAULT_PERSIST /* * We called pm_runtime_get_noresume when the device was attached. * Decrement the counter here to allow controller to runtime suspend
@@ -3901,7 +3900,6 @@ static void xhci_free_dev(struct usb_hcd *hcd, struct usb_device *udev)*/ if (xhci->quirks &XHCI_RESET_ON_RESUME )pm_runtime_put_noidle (hcd->self.controller); -#endif ret =xhci_check_args (hcd, udev,NULL ,0 , true, __func__);/* If the host is halted due to driver unload, we still need to free the
@@ -3920,9 +3918,8 @@ static void xhci_free_dev(struct usb_hcd *hcd, struct usb_device *udev)del_timer_sync (&virt_dev->eps[i].stop_cmd_timer); } virt_dev->udev =NULL ; - ret =xhci_disable_slot (xhci, udev->slot_id); -if (ret) -xhci_free_virt_device (xhci, udev->slot_id); +xhci_disable_slot (xhci, udev->slot_id); +xhci_free_virt_device (xhci, udev->slot_id); }int xhci_disable_slot (struct xhci_hcd *xhci,u32 slot_id)
@@ -3932,7 +3929,7 @@ int xhci_disable_slot(struct xhci_hcd *xhci, u32 slot_id)u32 state;int ret =0 ; - command =xhci_alloc_command (xhci, false,GFP_KERNEL ); + command =xhci_alloc_command (xhci, true,GFP_KERNEL );if (!command)return -ENOMEM ;
@@ -3957,6 +3954,15 @@ int xhci_disable_slot(struct xhci_hcd *xhci, u32 slot_id) }xhci_ring_cmd_db (xhci);spin_unlock_irqrestore (&xhci->lock, flags); + +wait_for_completion (command->completion); + +if (command->status !=COMP_SUCCESS ) +xhci_warn (xhci,"Unsuccessful disable slot %u command, status %d\n" , + slot_id, command->status); + +xhci_free_command (xhci, command); +return ret; }
@@ -4053,23 +4059,20 @@ int xhci_alloc_dev(struct usb_hcd *hcd, struct usb_device *udev)xhci_debugfs_create_slot (xhci, slot_id); -#ifndef CONFIG_USB_DEFAULT_PERSIST /* * If resetting upon resume, we can't put the controller into runtime * suspend if there is a device attached. */ if (xhci->quirks &XHCI_RESET_ON_RESUME )pm_runtime_get_noresume (hcd->self.controller); -#endif /* Is this a LS or FS device under a HS hub? */ /* Hub or peripherial? */ return 1 ; disable_slot: - ret =xhci_disable_slot (xhci, udev->slot_id); -if (ret) -xhci_free_virt_device (xhci, udev->slot_id); +xhci_disable_slot (xhci, udev->slot_id); +xhci_free_virt_device (xhci, udev->slot_id);return 0 ; }
@@ -4199,6 +4202,7 @@ static int xhci_setup_device(struct usb_hcd *hcd, struct usb_device *udev,mutex_unlock (&xhci->mutex); ret =xhci_disable_slot (xhci, udev->slot_id); +xhci_free_virt_device (xhci, udev->slot_id);if (!ret)xhci_alloc_dev (hcd, udev);kfree (command->completion);
fs/aio.c +151 -33
271 lines not on this page · raw message
fs/btrfs/extent_io.c +6 -0
@@ -3769,6 +3769,12 @@ static void set_btree_ioerr(struct page *page)if (test_and_set_bit (EXTENT_BUFFER_WRITE_ERR , &eb->bflags))return ; +/* +* A read may stumble upon this buffer later, make sure that it gets an +* error and knows there was an error. +*/ +clear_bit (EXTENT_BUFFER_UPTODATE , &eb->bflags); +/* * If we error out, we should add back the dirty_metadata_bytes * to make it consistent.
fs/btrfs/root-tree.c +2 -1
@@ -336,7 +336,8 @@ int btrfs_del_root_ref(struct btrfs_trans_handle *trans, u64 root_id, key.offset = ref_id; again: ret =btrfs_search_slot (trans, tree_root, &key, path,-1 ,1 ); -BUG_ON (ret <0 ); +if (ret <0 ) + goto out;if (ret ==0 ) { leaf = path->nodes[0 ]; ref = btrfs_item_ptr(leaf, path->slots[0],
fs/nfsd/nfs4recover.c +1 -0
@@ -2156,6 +2156,7 @@ static struct notifier_block nfsd4_cld_block = {int register_cld_notifier (void )
Lines of this file are not shown. View the raw message.
fs/tracefs/inode.c +76 -0
76 lines not on this page · raw message
sound/pci/hda/patch_realtek.c +62 -18
80 lines not on this page · raw message
sound/soc/codecs/wcd934x.c +93 -33
126 lines not on this page · raw message
tools/build/feature/test-libpython-version.c deleted +0 -11
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/verifier/xdp_direct_packet_access.c +600 -32
632 lines not on this page · raw message
tools/testing/selftests/net/fib_tests.sh +49 -10
59 lines not on this page · raw message
tools/testing/selftests/netfilter/Makefile +2 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/netfilter/conntrack_vrf.sh new file +241 -0
241 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.