Linux 5.10.164
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.164 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/admin-guide/kernel-parameters.txt | 51 +- Documentation/sphinx/load_config.py | 6 Documentation/virt/kvm/api.rst | 60 ++ Makefile | 2 arch/arm64/include/asm/atomic_ll_sc.h | 114 ++--- arch/arm64/include/asm/atomic_lse.h | 16 arch/arm64/include/asm/kvm_emulate.h | 22 - arch/powerpc/include/asm/imc-pmu.h | 2 arch/powerpc/perf/imc-pmu.c | 136 +++--- arch/s390/include/asm/cpu_mf.h | 31 - arch/s390/include/asm/percpu.h | 2 arch/s390/kernel/machine_kexec_file.c | 5 arch/s390/kernel/perf_cpum_sf.c | 101 ++-- arch/x86/boot/bioscall.S | 4 arch/x86/kernel/cpu/resctrl/rdtgroup.c | 26 - arch/x86/kvm/cpuid.c | 32 - drivers/bus/mhi/core/pm.c | 3 drivers/clk/imx/clk-imx8mp.c | 23 - drivers/edac/edac_device.c | 17 drivers/edac/edac_module.h | 2 drivers/firmware/efi/efi.c | 9 drivers/gpu/drm/msm/adreno/adreno_gpu.h | 10 drivers/gpu/drm/msm/dp/dp_aux.c | 4 drivers/gpu/drm/virtio/virtgpu_ioctl.c | 10 drivers/iommu/amd/init.c | 89 +++- drivers/iommu/mtk_iommu_v1.c | 26 - drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c | 14 drivers/net/ethernet/marvell/octeontx2/af/cgx.c | 17 drivers/net/ethernet/marvell/octeontx2/af/cgx.h | 6 drivers/net/ethernet/marvell/octeontx2/af/rvu.c | 134 +++++- drivers/net/ethernet/marvell/octeontx2/af/rvu.h | 4 drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c | 15 drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c | 21 drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c | 2 drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c | 2 drivers/nfc/pn533/usb.c | 44 +- drivers/platform/x86/sony-laptop.c | 21 drivers/regulator/da9211-regulator.c | 11 drivers/tty/hvc/hvc_xen.c | 46 +- drivers/usb/host/xhci-mem.c | 4 drivers/usb/host/xhci-ring.c | 297 +++++++------- drivers/usb/host/xhci.h | 6 fs/cifs/link.c | 1 fs/ext4/super.c | 1 include/dt-bindings/clock/imx8mp-clock.h | 10 include/linux/tpm_eventlog.h | 4 io_uring/io-wq.c | 6 mm/memblock.c | 8 net/ipv6/raw.c | 4 net/netfilter/ipset/ip_set_bitmap_ip.c | 4 net/netfilter/nft_payload.c | 2 net/sched/act_mpls.c | 8 net/tipc/node.c | 12 net/xfrm/xfrm_user.c | 7 sound/pci/hda/patch_realtek.c | 23 + sound/soc/codecs/wm8904.c | 7 sound/soc/qcom/lpass-cpu.c | 5 tools/perf/util/auxtrace.c | 2 58 files changed, 1014 insertions(+), 537 deletions(-)
Aaron Thompson (1):
mm: Always release pages to the buddy allocator in memblock_free_late().
Adrian Hunter (1):
perf auxtrace: Fix address filter duplicate symbol selection
Alexander Egorenkov (1):
s390/kexec: fix ipl report address for kdump
Angela Czubak (1):
octeontx2-af: Fix LMAC config in cgx_lmac_rx_tx_enable
Ard Biesheuvel (1):
efi: tpm: Avoid READ_ONCE() for accessing the event log
Brian Norris (1):
ASoC: qcom: lpass-cpu: Fix fallback SD line index handling
Christophe JAILLET (1):
iommu/mediatek-v1: Fix an error handling path in mtk_iommu_v1_probe()
Eliav Farber (1):
EDAC/device: Fix period calculation in edac_device_reset_delay_period()
Emanuele Ghidoli (1):
ASoC: wm8904: fix wrong outputs volume after power reactivation
Ferry Toth (2):
usb: ulpi: defer ulpi_register on ulpi_read_id timeout Revert "usb: ulpi: defer ulpi_register on ulpi_read_id timeout"
Gavin Li (1):
net/mlx5e: Don't support encap rules with gbp option
Gavrilov Ilia (1):
netfilter: ipset: Fix overflow before widen in the bitmap_ip_create() function.
Greg Kroah-Hartman (1):
Linux 5.10.164
Hans de Goede (1):
platform/x86: sony-laptop: Don't turn off 0x153 keyboard backlight during probe
Heiko Carstens (2):
s390/cpum_sf: add READ_ONCE() semantics to compare and swap loops s390/percpu: add READ_ONCE() to arch_this_cpu_to_op_simple()
Herbert Xu (1):
ipv6: raw: Deduct extension header length in rawv6_push_pending_frames
Ido Schimmel (1):
net/sched: act_mpls: Fix warning during failed attribute validation
Jens Axboe (2):
io_uring/io-wq: free worker if task_work creation is canceled io_uring/io-wq: only free worker if it was allocated for creation
Johan Hovold (1):
efi: fix NULL-deref in init error path
Jonathan Corbet (1):
docs: Fix the docs build with Sphinx 6.0
Kajol Jain (1):
powerpc/imc-pmu: Fix use of mutex in IRQs disabled section
Kim Phillips (1):
iommu/amd: Fix ill-formed ivrs_ioapic, ivrs_hpet and ivrs_acpihid options
Konrad Dybcio (1):
drm/msm/adreno: Make adreno quirks not overwrite each other
Kuogee Hsieh (1):
drm/msm/dp: do not complete dp_aux_cmd_fifo_tx() if irq is not for aux transfer
Li Jun (2):
dt-bindings: clocks: imx8mp: Add ID for usb suspend clock
clk: imx: imx8mp: add shared clk gate for usb suspend clk
Lucas Stach (1):
clk: imx8mp: add clkout1/2 support
Luka Guzenko (1):
ALSA: hda/realtek: Enable mute/micmute LEDs on HP Spectre x360 13-aw0xxx
Marc Zyngier (1):
KVM: arm64: Fix S1PTW handling on RO memslots
Marek Vasut (1):
clk: imx8mp: Add DISP2 pixel clock
Mark Rutland (3):
arm64: atomics: format whitespace consistently
arm64: atomics: remove LL/SC trampolines
arm64: cmpxchg_double*: hazard against entire exchange variable
Mathias Nyman (8):
xhci: Avoid parsing transfer events several times
xhci: get isochronous ring directly from endpoint structure
xhci: adjust parameters passed to cleanup_halted_endpoint()
xhci: Add xhci_reset_halted_ep() helper function
xhci: move xhci_td_cleanup so it can be called by more functions
xhci: store TD status in the td struct instead of passing it along
xhci: move and rename xhci_cleanup_halted_endpoint()
xhci: Prevent infinite loop in transaction errors recovery for streams
Minsuk Kang (1):
nfc: pn533: Wait for out_urb's completion in pn533_usb_send_frame()
Nicolas Dichtel (1):
xfrm: fix rcu lock in xfrm_notify_userpolicy()
Pablo Neira Ayuso (1):
netfilter: nft_payload: incorrect arithmetics when fetching VLAN header bits
Paolo Bonzini (2):
Documentation: KVM: add API issues section
KVM: x86: Do not return host topology information from KVM_GET_SUPPORTED_CPUID
Peter Newman (1):
x86/resctrl: Fix task CLOSID/RMID update race
Peter Zijlstra (1):
x86/boot: Avoid using Intel mnemonics in AT&T syntax asm
Qiang Yu (1):
bus: mhi: host: Fix race between channel preparation and M0 event
Rahul Rameshbabu (1):
net/mlx5: Fix ptp max frequency adjustment range
Reinette Chatre (1):
x86/resctrl: Use task_curr() instead of task_struct->on_cpu to prevent unnecessary IPI
Ricardo Ribalda (1):
regulator: da9211: Use irq handler when ready
Rob Clark (1):
drm/virtio: Fix GEM handle creation UAF
Roger Pau Monne (1):
hvc/xen: lock console list traversal
Subbaraya Sundeep (2):
octeontx2-af: Update get/set resource count functions
octeontx2-af: Map NIX block from CGX connection
Suravee Suthikulpanit (1):
iommu/amd: Add PCI segment support for ivrs_[ioapic/hpet/acpihid] commands
Tung Nguyen (1):
tipc: fix unexpected link reset due to discovery messages
Volker Lendecke (1):
cifs: Fix uninitialized memory read for smb311 posix symlink create
Yang Yingliang (1):
ixgbe: fix pci device refcount leak
Ye Bin (1):
ext4: fix uninititialized value in 'ext4_evict_inode'
Yong Wu (1):
iommu/mediatek-v1: Add error handle for mtk_iommu_probe
Greg Kroah-Hartman
maintainerDocumentation/admin-guide/kernel-parameters.txt +42 -9
@@ -2103,24 +2103,57 @@ ivrs_ioapic [HW,X86-64] Provide an override to the IOAPIC-ID<->DEVICE-ID - mapping provided in the IVRS ACPI table. For - example, to map IOAPIC-ID decimal 10 to - PCI device 00:14.0 write the parameter as: + mapping provided in the IVRS ACPI table. + By default, PCI segment is 0, and can be omitted. + + For example, to map IOAPIC-ID decimal 10 to + PCI segment 0x1 and PCI device 00:14.0, + write the parameter as: + ivrs_ioapic=10@0001:00:14.0 + + Deprecated formats: + * To map IOAPIC-ID decimal 10 to PCI device 00:14.0 + write the parameter as: ivrs_ioapic[10]=00:14.0 + * To map IOAPIC-ID decimal 10 to PCI segment 0x1 and + PCI device 00:14.0 write the parameter as: + ivrs_ioapic[10]=0001:00:14.0 ivrs_hpet [HW,X86-64] Provide an override to the HPET-ID<->DEVICE-ID - mapping provided in the IVRS ACPI table. For - example, to map HPET-ID decimal 0 to - PCI device 00:14.0 write the parameter as: + mapping provided in the IVRS ACPI table. + By default, PCI segment is 0, and can be omitted. + + For example, to map HPET-ID decimal 10 to + PCI segment 0x1 and PCI device 00:14.0, + write the parameter as: + ivrs_hpet=10@0001:00:14.0 + + Deprecated formats: + * To map HPET-ID decimal 0 to PCI device 00:14.0 + write the parameter as: ivrs_hpet[0]=00:14.0 + * To map HPET-ID decimal 10 to PCI segment 0x1 and + PCI device 00:14.0 write the parameter as: + ivrs_ioapic[10]=0001:00:14.0 ivrs_acpihid [HW,X86-64] Provide an override to the ACPI-HID:UID<->DEVICE-ID - mapping provided in the IVRS ACPI table. For - example, to map UART-HID:UID AMD0020:0 to - PCI device 00:14.5 write the parameter as: + mapping provided in the IVRS ACPI table. + By default, PCI segment is 0, and can be omitted. + + For example, to map UART-HID:UID AMD0020:0 to + PCI segment 0x1 and PCI device ID 00:14.5, + write the parameter as: + ivrs_acpihid=AMD0020:0@0001:00:14.5 + + Deprecated formats: + * To map UART-HID:UID AMD0020:0 to PCI segment is 0, + PCI device ID 00:14.5, write the parameter as: ivrs_acpihid[00:14.5]=AMD0020:0 + * To map UART-HID:UID AMD0020:0 to PCI segment 0x1 and + PCI device ID 00:14.5, write the parameter as: + ivrs_acpihid[0001:00:14.5]=AMD0020:0 js= [HW,JOY] Analog joystick See Documentation/input/joydev/joystick.rst.
Documentation/sphinx/load_config.py +4 -2
@@ -3,7 +3,7 @@ import os import sys -from sphinx.util.pycompat import execfile_ +from sphinx.util.osutil import fs_encoding # ------------------------------------------------------------------------------ def loadConfig(namespace):
@@ -48,7 +48,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:
Documentation/virt/kvm/api.rst +60 -0
63 lines not on this page · raw message
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 163 +SUBLEVEL = 164 EXTRAVERSION = NAME = Dare mighty things
arch/arm64/include/asm/atomic_ll_sc.h +46 -68
191 lines not on this page · raw message
arch/arm64/include/asm/atomic_lse.h +8 -8
@@ -11,11 +11,11 @@#define __ASM_ATOMIC_LSE_H#define ATOMIC_OP (op, asm_op) \ -static inline void __lse_atomic_##op(int i, atomic_t *v) \ +static inline void __lse_atomic_##op(int i, atomic_t *v) \ { \ asm volatile( \ __LSE_PREAMBLE \ -" " #asm_op " %w[i], %[v]\n" \ + " " #asm_op " %w[i], %[v]\n" \ : [i] "+r" (i), [v] "+Q" (v->counter) \ : "r" (v)); \ }
@@ -32,7 +32,7 @@ static inline int __lse_atomic_fetch_##op##name(int i, atomic_t *v) \ { \ asm volatile( \ __LSE_PREAMBLE \ -" " #asm_op #mb " %w[i], %w[i], %[v]" \ + " " #asm_op #mb " %w[i], %w[i], %[v]" \ : [i] "+r" (i), [v] "+Q" (v->counter) \ : "r" (v) \ : cl); \
@@ -130,7 +130,7 @@ static inline int __lse_atomic_sub_return##name(int i, atomic_t *v) \" add %w[i], %w[i], %w[tmp]" \ : [i] "+&r" (i), [v] "+Q" (v->counter), [tmp] "=&r" (tmp) \: " r" (v) \ -: cl); \ +: cl); \ \ return i; \ }
@@ -168,7 +168,7 @@ static inline void __lse_atomic64_##op(s64 i, atomic64_t *v) \ { \ asmvolatile ( \ __LSE_PREAMBLE \ -" " #asm_op " %[i], %[v]\n" \ + " " #asm_op " %[i], %[v]\n" \ : [i]"+r" (i), [v]"+Q" (v->counter) \ :"r" (v)); \ }
@@ -185,7 +185,7 @@ static inline long __lse_atomic64_fetch_##op##name(s64 i, atomic64_t *v)\ { \ asm volatile( \ __LSE_PREAMBLE \ -" " #asm_op #mb " %[i], %[i], %[v]" \ + " " #asm_op #mb " %[i], %[i], %[v]" \ : [i] "+r" (i), [v] "+Q" (v->counter) \ : "r" (v) \ : cl); \
@@ -272,7 +272,7 @@ static inline void __lse_atomic64_sub(s64 i, atomic64_t *v) } #define ATOMIC64_OP_SUB_RETURN(name, mb, cl...) \ -static inline long __lse_atomic64_sub_return##name(s64 i, atomic64_t *v) \ +static inline long __lse_atomic64_sub_return##name(s64 i, atomic64_t *v)\ { \ unsigned long tmp; \ \
@@ -403,7 +403,7 @@ __lse__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) \ : cl); \
arch/arm64/include/asm/kvm_emulate.h +20 -2
@@ -382,8 +382,26 @@ static __always_inline int kvm_vcpu_sys_get_rt(struct kvm_vcpu *vcpu)static inline bool kvm_is_write_fault (struct kvm_vcpu *vcpu) { -if (kvm_vcpu_abt_iss1tw (vcpu)) -return true; +if (kvm_vcpu_abt_iss1tw (vcpu)) { +/* +* Only a permission fault on a S1PTW should be +* considered as a write. Otherwise, page tables baked +* in a read-only memslot will result in an exception +* being delivered in the guest. +* +* The drawback is that we end-up faulting twice if the +* guest is using any of HW AF/DB: a translation fault +* to map the page containing the PT (read only at +* first), then a permission fault to allow the flags +* to be set. +*/ +switch (kvm_vcpu_trap_get_fault_type (vcpu)) { +case ESR_ELx_FSC_PERM: +return true; +default : +return false; + } + }if (kvm_vcpu_trap_is_iabt (vcpu))return false;
arch/powerpc/include/asm/imc-pmu.h +1 -1
@@ -137,7 +137,7 @@ struct imc_pmu {* are inited. */ struct imc_pmu_ref { -struct mutex lock; +spinlock_t lock;unsigned int id;int refc; };
arch/powerpc/perf/imc-pmu.c +66 -70
474 lines not on this page · raw message
arch/s390/include/asm/cpu_mf.h +15 -16
@@ -128,19 +128,21 @@ struct hws_combined_entry {struct hws_diag_entry diag;/* Diagnostic-sampling data entry */ } __packed; -struct hws_trailer_entry { -union { -struct { -unsigned int f:1 ;/* 0 - Block Full Indicator */ -unsigned int a:1 ;/* 1 - Alert request control */ -unsigned int t:1 ;/* 2 - Timestamp format */ - unsigned int :29; /* 3 - 31: Reserved */ -unsigned int bsdes:16 ;/* 32-47: size of basic SDE */ -unsigned int dsdes:16 ;/* 48-63: size of diagnostic SDE */ - }; -unsigned long long flags;/* 0 - 63: All indicators */ +union hws_trailer_header { +struct { +unsigned int f:1 ;/* 0 - Block Full Indicator */ +unsigned int a:1 ;/* 1 - Alert request control */ +unsigned int t:1 ;/* 2 - Timestamp format */ + unsigned int :29; /* 3 - 31: Reserved */ +unsigned int bsdes:16 ;/* 32-47: size of basic SDE */ +unsigned int dsdes:16 ;/* 48-63: size of diagnostic SDE */ +unsigned long long overflow;/* 64 - Overflow Count */ }; -unsigned long long overflow;/* 64 - sample Overflow count */ +__uint128_t val; +}; + +struct hws_trailer_entry { +union hws_trailer_header header;/* 0 - 15 Flags + Overflow Count */ unsigned char timestamp[16 ];/* 16 - 31 timestamp */ unsigned long long reserved1;/* 32 -Reserved */ unsigned long long reserved2;/* */
@@ -287,14 +289,11 @@ static inline unsigned long sample_rate_to_freq(struct hws_qsi_info_block *qsi,return USEC_PER_SEC * qsi->cpu_speed / rate; } -#define SDB_TE_ALERT_REQ_MASK 0x4000000000000000UL -#define SDB_TE_BUFFER_FULL_MASK 0x8000000000000000UL -/* Return TOD timestamp contained in an trailer entry */ static inline unsigned long long trailer_timestamp (struct hws_trailer_entry *te) {/* TOD in STCKE format */ -if (te->t) +if (te->header.t)return *((unsigned long long *) &te->timestamp[1 ]);/* TOD in STCK format */
arch/s390/include/asm/percpu.h +1 -1
@@ -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); \
arch/s390/kernel/machine_kexec_file.c +3 -2
@@ -185,8 +185,6 @@ static int kexec_file_add_ipl_report(struct kimage *image, data->memsz =ALIGN (data->memsz,PAGE_SIZE ); buf.mem = data->memsz; -if (image->type ==KEXEC_TYPE_CRASH ) - buf.mem += crashk_res.start; ptr = (void *)ipl_cert_list_addr; end = ptr + ipl_cert_list_size;
@@ -223,6 +221,9 @@ static int kexec_file_add_ipl_report(struct kimage *image, data->kernel_buf + offsetof(struct lowcore , ipl_parmblock_ptr); *lc_ipl_parmblock_ptr = (__u32 )buf.mem; +if (image->type ==KEXEC_TYPE_CRASH ) + buf.mem += crashk_res.start; + ret =kexec_add_buffer (&buf); out:return ret;
arch/s390/kernel/perf_cpum_sf.c +62 -39
222 lines not on this page · raw message
arch/x86/boot/bioscall.S +2 -2
@@ -32,7 +32,7 @@ intcall: movw %dx, %si movw %sp, %di movw $11, %cx - rep; movsd + rep; movsl /* Pop full state from the stack */ popal
@@ -67,7 +67,7 @@ intcall: jz 4f movw %sp, %si movw $11, %cx - rep; movsd + rep; movsl 4: addw $44, %sp /* Restore state and return */
arch/x86/kernel/cpu/resctrl/rdtgroup.c +16 -10
@@ -577,8 +577,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
@@ -2313,19 +2315,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);
arch/x86/kvm/cpuid.c +16 -16
@@ -511,16 +511,22 @@ struct kvm_cpuid_array {int nent; }; +static struct kvm_cpuid_entry2 *get_next_cpuid (struct kvm_cpuid_array *array) +{ +if (array->nent >= array->maxnent) +return NULL ; + +return &array->entries[array->nent++]; +} +static struct kvm_cpuid_entry2 *do_host_cpuid (struct kvm_cpuid_array *array,u32 function,u32 index) { -struct kvm_cpuid_entry2 *entry; +struct kvm_cpuid_entry2 *entry =get_next_cpuid (array); -if (array->nent >= array->maxnent) +if (!entry)return NULL ; - entry = &array->entries[array->nent++]; - entry->function = function; entry->index = index; entry->flags =0 ;
@@ -698,22 +704,13 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function) entry->edx = edx.full;break ; } -/* -* Per Intel's SDM, the 0x1f is a superset of 0xb, -* thus they can be handled by common code. -*/ case 0x1f :case 0xb :/* -* Populate entries until the level type (ECX[15:8]) of the -* previous entry is zero. Note, CPUID EAX.{0x1f,0xb}.0 is -* the starting entry, filled by the primary do_host_cpuid(). +* No topology; a valid topology is indicated by the presence +* of subleaf 1. */ -for (i =1 ; entry->ecx &0xff00 ; ++i) { - entry =do_host_cpuid (array, function, i); -if (!entry) - goto out; - } + entry->eax = entry->ebx = entry->ecx =0 ;break ;case 0xd : entry->eax &= supported_xcr0;
@@ -866,6 +863,9 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function) entry->ebx = entry->ecx = entry->edx =0 ;break ;case 0x8000001e : +/* Do not return host topology information. */ + entry->eax = entry->ebx = entry->ecx =0 ; + entry->edx =0 ;/* reserved */ break ;/* Support memory encryption cpuid if host supports it */ case 0x8000001F :
drivers/bus/mhi/core/pm.c +2 -1
@@ -298,7 +298,8 @@ int mhi_pm_m0_transition(struct mhi_controller *mhi_cntrl)read_lock_irq (&mhi_chan->lock);/* Only ring DB if ring is not empty */ -if (tre_ring->base && tre_ring->wp != tre_ring->rp) +if (tre_ring->base && tre_ring->wp != tre_ring->rp && + mhi_chan->ch_state ==MHI_CH_STATE_ENABLED )mhi_ring_chan_db (mhi_cntrl, mhi_chan);read_unlock_irq (&mhi_chan->lock); }
drivers/clk/imx/clk-imx8mp.c +20 -3
@@ -17,6 +17,7 @@static u32 share_count_nand;static u32 share_count_media; +static u32 share_count_usb;static const char *const pll_ref_sels[] = {"osc_24m" ,"dummy" ,"dummy" ,"dummy" , };static const char *const audio_pll1_bypass_sels[] = {"audio_pll1" ,"audio_pll1_ref_sel" , };
@@ -362,7 +363,7 @@ static const char * const imx8mp_media_mipi_phy1_ref_sels[] = {"osc_24m", "sys_p"clk_ext2" ,"audio_pll2_out" , "video_pll1_out", }; -static const char *const imx8mp_media_disp1_pix_sels[] = {"osc_24m" ,"video_pll1_out" ,"audio_pll2_out" , +static const char *const imx8mp_media_disp_pix_sels[] = {"osc_24m" ,"video_pll1_out" ,"audio_pll2_out" ,"audio_pll1_out" ,"sys_pll1_800m" ,"sys_pll2_1000m" ,"sys_pll3_out" ,"clk_ext4" , };
@@ -411,6 +412,11 @@ static const char * const imx8mp_sai7_sels[] = {"osc_24m", "audio_pll1_out", "austatic const char *const imx8mp_dram_core_sels[] = {"dram_pll_out" ,"dram_alt_root" , }; +static const char *const imx8mp_clkout_sels[] = {"audio_pll1_out" ,"audio_pll2_out" ,"video_pll1_out" , +"dummy" ,"dummy" ,"gpu_pll_out" ,"vpu_pll_out" , +"arm_pll_out" ,"sys_pll1" ,"sys_pll2" ,"sys_pll3" , +"dummy" ,"dummy" ,"osc_24m" ,"dummy" ,"osc_32k" }; +static struct clk_hw **hws;static struct clk_hw_onecell_data *clk_hw_data;
@@ -532,6 +538,15 @@ static int imx8mp_clocks_probe(struct platform_device *pdev) hws[IMX8MP_SYS_PLL2_500M ] =imx_clk_hw_fixed_factor ("sys_pll2_500m" ,"sys_pll2_500m_cg" ,1 ,2 ); hws[IMX8MP_SYS_PLL2_1000M ] =imx_clk_hw_fixed_factor ("sys_pll2_1000m" ,"sys_pll2_out" ,1 ,1 ); + hws[IMX8MP_CLK_CLKOUT1_SEL ] =imx_clk_hw_mux2 ("clkout1_sel" , anatop_base +0x128 ,4 ,4 , + imx8mp_clkout_sels,ARRAY_SIZE (imx8mp_clkout_sels)); + hws[IMX8MP_CLK_CLKOUT1_DIV ] =imx_clk_hw_divider ("clkout1_div" ,"clkout1_sel" , anatop_base +0x128 ,0 ,4 ); + hws[IMX8MP_CLK_CLKOUT1 ] =imx_clk_hw_gate ("clkout1" ,"clkout1_div" , anatop_base +0x128 ,8 ); + hws[IMX8MP_CLK_CLKOUT2_SEL ] =imx_clk_hw_mux2 ("clkout2_sel" , anatop_base +0x128 ,20 ,4 , + imx8mp_clkout_sels,ARRAY_SIZE (imx8mp_clkout_sels)); + hws[IMX8MP_CLK_CLKOUT2_DIV ] =imx_clk_hw_divider ("clkout2_div" ,"clkout2_sel" , anatop_base +0x128 ,16 ,4 ); + hws[IMX8MP_CLK_CLKOUT2 ] =imx_clk_hw_gate ("clkout2" ,"clkout2_div" , anatop_base +0x128 ,24 ); + hws[IMX8MP_CLK_A53_DIV ] =imx8m_clk_hw_composite_core ("arm_a53_div" , imx8mp_a53_sels, ccm_base +0x8000 ); hws[IMX8MP_CLK_A53_SRC ] = hws[IMX8MP_CLK_A53_DIV ]; hws[IMX8MP_CLK_A53_CG ] = hws[IMX8MP_CLK_A53_DIV ];
@@ -566,6 +581,7 @@ static int imx8mp_clocks_probe(struct platform_device *pdev) hws[IMX8MP_CLK_AHB ] =imx8m_clk_hw_composite_bus_critical ("ahb_root" , imx8mp_ahb_sels, ccm_base +0x9000 ); hws[IMX8MP_CLK_AUDIO_AHB ] =imx8m_clk_hw_composite_bus ("audio_ahb" , imx8mp_audio_ahb_sels, ccm_base +0x9100 ); hws[IMX8MP_CLK_MIPI_DSI_ESC_RX ] =imx8m_clk_hw_composite_bus ("mipi_dsi_esc_rx" , imx8mp_mipi_dsi_esc_rx_sels, ccm_base +0x9200 ); + hws[IMX8MP_CLK_MEDIA_DISP2_PIX ] =imx8m_clk_hw_composite ("media_disp2_pix" , imx8mp_media_disp_pix_sels, ccm_base +0x9300 ); hws[IMX8MP_CLK_IPG_ROOT ] =imx_clk_hw_divider2 ("ipg_root" ,"ahb_root" , ccm_base +0x9080 ,0 ,1 ); hws[IMX8MP_CLK_IPG_AUDIO_ROOT ] =imx_clk_hw_divider2 ("ipg_audio_root" ,"audio_ahb" , ccm_base +0x9180 ,0 ,1 );
@@ -630,7 +646,7 @@ static int imx8mp_clocks_probe(struct platform_device *pdev) hws[IMX8MP_CLK_USDHC3 ] =imx8m_clk_hw_composite ("usdhc3" , imx8mp_usdhc3_sels, ccm_base +0xbc80 ); hws[IMX8MP_CLK_MEDIA_CAM1_PIX ] =imx8m_clk_hw_composite ("media_cam1_pix" , imx8mp_media_cam1_pix_sels, ccm_base +0xbd00 ); hws[IMX8MP_CLK_MEDIA_MIPI_PHY1_REF ] =imx8m_clk_hw_composite ("media_mipi_phy1_ref" , imx8mp_media_mipi_phy1_ref_sels, ccm_base +0xbd80 ); - hws[IMX8MP_CLK_MEDIA_DISP1_PIX ] =imx8m_clk_hw_composite ("media_disp1_pix" , imx8mp_media_disp1_pix_sels, ccm_base +0xbe00 ); + hws[IMX8MP_CLK_MEDIA_DISP1_PIX ] =imx8m_clk_hw_composite ("media_disp1_pix" , imx8mp_media_disp_pix_sels, ccm_base +0xbe00 ); hws[IMX8MP_CLK_MEDIA_CAM2_PIX ] =imx8m_clk_hw_composite ("media_cam2_pix" , imx8mp_media_cam2_pix_sels, ccm_base +0xbe80 ); hws[IMX8MP_CLK_MEDIA_LDB ] =imx8m_clk_hw_composite ("media_ldb" , imx8mp_media_ldb_sels, ccm_base +0xbf00 ); hws[IMX8MP_CLK_MEMREPAIR ] =imx8m_clk_hw_composite_critical ("mem_repair" , imx8mp_memrepair_sels, ccm_base +0xbf80 );
@@ -691,7 +707,8 @@ static int imx8mp_clocks_probe(struct platform_device *pdev) hws[IMX8MP_CLK_UART2_ROOT ] =imx_clk_hw_gate4 ("uart2_root_clk" ,"uart2" , ccm_base +0x44a0 ,0 ); hws[IMX8MP_CLK_UART3_ROOT ] =imx_clk_hw_gate4 ("uart3_root_clk" ,"uart3" , ccm_base +0x44b0 ,0 ); hws[IMX8MP_CLK_UART4_ROOT ] =imx_clk_hw_gate4 ("uart4_root_clk" ,"uart4" , ccm_base +0x44c0 ,0 ); - hws[IMX8MP_CLK_USB_ROOT ] =imx_clk_hw_gate4 ("usb_root_clk" ,"hsio_axi" , ccm_base +0x44d0 ,0 ); + hws[IMX8MP_CLK_USB_ROOT ] =imx_clk_hw_gate2_shared2 ("usb_root_clk" ,"hsio_axi" , ccm_base +0x44d0 ,0 , &share_count_usb); + hws[IMX8MP_CLK_USB_SUSP ] =imx_clk_hw_gate2_shared2 ("usb_suspend_clk" ,"osc_32k" , ccm_base +0x44d0 ,0 , &share_count_usb); hws[IMX8MP_CLK_USB_PHY_ROOT ] =imx_clk_hw_gate4 ("usb_phy_root_clk" ,"usb_phy_ref" , ccm_base +0x44f0 ,0 ); hws[IMX8MP_CLK_USDHC1_ROOT ] =imx_clk_hw_gate4 ("usdhc1_root_clk" ,"usdhc1" , ccm_base +0x4510 ,0 ); hws[IMX8MP_CLK_USDHC2_ROOT ] =imx_clk_hw_gate4 ("usdhc2_root_clk" ,"usdhc2" , ccm_base +0x4520 ,0 );
drivers/edac/edac_device.c +8 -9
@@ -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); - -if (value ==1000 ) - jiffs =round_jiffies_relative (value); - - edac_dev->poll_msec = value; - edac_dev->delay = jiffs; + edac_dev->poll_msec = msec; + edac_dev->delay =msecs_to_jiffies (msec); -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 )
drivers/edac/edac_module.h +1 -1
@@ -56,7 +56,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);
drivers/firmware/efi/efi.c +6 -3
@@ -385,8 +385,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; } if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE |
@@ -429,7 +429,10 @@ static int __init efisubsys_init(void)generic_ops_unregister (); err_put:kobject_put (efi_kobj); -destroy_workqueue (efi_rts_wq); +err_destroy_wq: +if (efi_rts_wq) +destroy_workqueue (efi_rts_wq); +return error; }
drivers/gpu/drm/msm/adreno/adreno_gpu.h +4 -6
@@ -28,11 +28,9 @@ enum { ADRENO_FW_MAX, }; -enum adreno_quirks { -ADRENO_QUIRK_TWO_PASS_USE_WFI =1 , -ADRENO_QUIRK_FAULT_DETECT_MASK =2 , -ADRENO_QUIRK_LMLOADKILL_DISABLE =3 , -}; +#define ADRENO_QUIRK_TWO_PASS_USE_WFI BIT(0) +#define ADRENO_QUIRK_FAULT_DETECT_MASK BIT(1) +#define ADRENO_QUIRK_LMLOADKILL_DISABLE BIT(2)struct adreno_rev {uint8_t core;
@@ -62,7 +60,7 @@ struct adreno_info {const char *name;const char *fw[ADRENO_FW_MAX ];uint32_t gmem; -enum adreno_quirks quirks; +u64 quirks;struct msm_gpu *(*init)(struct drm_device *dev);const char *zapfw;u32 inactive_period;
drivers/gpu/drm/msm/dp/dp_aux.c +4 -0
@@ -423,6 +423,10 @@ void dp_aux_isr(struct drm_dp_aux *dp_aux) aux->isr =dp_catalog_aux_get_irq (aux->catalog); +/* no interrupts pending, return immediately */ +if (!aux->isr) +return ; +if (!aux->cmd_busy)return ;
drivers/gpu/drm/virtio/virtgpu_ioctl.c +9 -1
@@ -279,10 +279,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 (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 (obj); +return 0 ; }
drivers/iommu/amd/init.c +64 -25
143 lines not on this page · raw message
drivers/iommu/mtk_iommu_v1.c +21 -5
@@ -618,18 +618,34 @@ static int mtk_iommu_probe(struct platform_device *pdev) ret =iommu_device_sysfs_add (&data->iommu, &pdev->dev,NULL ,dev_name (&pdev->dev));if (ret) -return ret; + goto out_clk_unprepare;iommu_device_set_ops (&data->iommu, &mtk_iommu_ops); ret =iommu_device_register (&data->iommu);if (ret) -return ret; + goto out_sysfs_remove; -if (!iommu_present (&platform_bus_type)) -bus_set_iommu (&platform_bus_type, &mtk_iommu_ops); +if (!iommu_present (&platform_bus_type)) { + ret =bus_set_iommu (&platform_bus_type, &mtk_iommu_ops); +if (ret) + goto out_dev_unreg; + } -return component_master_add_with_match (dev, &mtk_iommu_com_ops, match); + ret =component_master_add_with_match (dev, &mtk_iommu_com_ops, match); +if (ret) + goto out_bus_set_null; +return ret; + +out_bus_set_null: +bus_set_iommu (&platform_bus_type,NULL ); +out_dev_unreg: +iommu_device_unregister (&data->iommu); +out_sysfs_remove: +iommu_device_sysfs_remove (&data->iommu); +out_clk_unprepare: +clk_disable_unprepare (data->bclk); +return ret; }static int mtk_iommu_remove (struct platform_device *pdev)
drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c +9 -5
@@ -851,9 +851,11 @@ static struct pci_dev *ixgbe_get_first_secondary_devfn(unsigned int devfn) rp_pdev =pci_get_domain_bus_and_slot (0 ,0 , devfn);if (rp_pdev && rp_pdev->subordinate) { bus = rp_pdev->subordinate->number; +pci_dev_put (rp_pdev);return pci_get_domain_bus_and_slot (0 , bus,0 ); } +pci_dev_put (rp_pdev);return NULL ; }
@@ -870,6 +872,7 @@ static bool ixgbe_x550em_a_has_mii(struct ixgbe_hw *hw)struct ixgbe_adapter *adapter = hw->back;struct pci_dev *pdev = adapter->pdev;struct pci_dev *func0_pdev; +bool has_mii = false;/* For the C3000 family of SoCs (x550em_a) the internal ixgbe devices * are always downstream of root ports @ 0000:00:16.0 & 0000:00:17.0
@@ -880,15 +883,16 @@ static bool ixgbe_x550em_a_has_mii(struct ixgbe_hw *hw) func0_pdev =ixgbe_get_first_secondary_devfn (PCI_DEVFN (0x16 ,0 ));if (func0_pdev) {if (func0_pdev == pdev) -return true; -else -return false; + has_mii = true; + goto out; } func0_pdev =ixgbe_get_first_secondary_devfn (PCI_DEVFN (0x17 ,0 ));if (func0_pdev == pdev) -return true; + has_mii = true; -return false; +out: +pci_dev_put (func0_pdev); +return has_mii; }/**
drivers/net/ethernet/marvell/octeontx2/af/cgx.c +13 -4
@@ -145,6 +145,16 @@ int cgx_get_cgxid(void *cgxd)return cgx->cgx_id; } +u8 cgx_lmac_get_p2x (int cgx_id,int lmac_id) +{ +struct cgx *cgx_dev =cgx_get_pdata (cgx_id); +u64 cfg; + + cfg =cgx_read (cgx_dev, lmac_id,CGXX_CMRX_CFG ); + +return (cfg &CMR_P2X_SEL_MASK ) >>CMR_P2X_SEL_SHIFT ; +} +/* Ensure the required lock for event queue(where asynchronous events are * posted) is acquired before calling this API. Else an asynchronous event(with * latest link status) can reach the destination before this function returns
@@ -340,9 +350,9 @@ int cgx_lmac_rx_tx_enable(void *cgxd, int lmac_id, bool enable) cfg =cgx_read (cgx, lmac_id,CGXX_CMRX_CFG );if (enable) - cfg |=CMR_EN |DATA_PKT_RX_EN |DATA_PKT_TX_EN ; + cfg |=DATA_PKT_RX_EN |DATA_PKT_TX_EN ;else - cfg &= ~(CMR_EN |DATA_PKT_RX_EN |DATA_PKT_TX_EN ); + cfg &= ~(DATA_PKT_RX_EN |DATA_PKT_TX_EN );cgx_write (cgx, lmac_id,CGXX_CMRX_CFG , cfg);return 0 ; }
@@ -814,8 +824,7 @@ static int cgx_lmac_verify_fwi_version(struct cgx *cgx) minor_ver =FIELD_GET (RESP_MINOR_VER , resp);dev_dbg (dev,"Firmware command interface version = %d.%d\n" , major_ver, minor_ver); -if (major_ver !=CGX_FIRMWARE_MAJOR_VER || - minor_ver !=CGX_FIRMWARE_MINOR_VER ) +if (major_ver !=CGX_FIRMWARE_MAJOR_VER )return -EIO ;else return 0 ;
drivers/net/ethernet/marvell/octeontx2/af/cgx.h +5 -1
@@ -27,7 +27,10 @@/* Registers */ #define CGXX_CMRX_CFG 0x00 -#define CMR_EN BIT_ULL(55) +#define CMR_P2X_SEL_MASK GENMASK_ULL(61, 59) +#define CMR_P2X_SEL_SHIFT 59ULL +#define CMR_P2X_SEL_NIX0 1ULL +#define CMR_P2X_SEL_NIX1 2ULL#define DATA_PKT_TX_EN BIT_ULL(53)#define DATA_PKT_RX_EN BIT_ULL(54)#define CGX_LMAC_TYPE_SHIFT 40
@@ -142,5 +145,6 @@ int cgx_lmac_get_pause_frm(void *cgxd, int lmac_id,int cgx_lmac_set_pause_frm (void *cgxd,int lmac_id,u8 tx_pause,u8 rx_pause);void cgx_lmac_ptp_config (void *cgxd,int lmac_id,bool enable); +u8 cgx_lmac_get_p2x (int cgx_id,int lmac_id);#endif /* CGX_H */
drivers/net/ethernet/marvell/octeontx2/af/rvu.c +109 -25
244 lines not on this page · raw message
drivers/net/ethernet/marvell/octeontx2/af/rvu.h +4 -0
@@ -137,6 +137,7 @@ struct rvu_pfvf {u16 ssow;u16 cptlfs;u16 timlfs; +u16 cpt1_lfs;u8 cgx_lmac;/* Block LF's MSIX vector info */
@@ -182,6 +183,8 @@ struct rvu_pfvf {bool cgx_in_use;/* this PF/VF using CGX? */ int cgx_users;/* number of cgx users - used only by PFs */ + +u8 nix_blkaddr;/* BLKADDR_NIX0/1 assigned to this PF */ };struct nix_txsch {
@@ -420,6 +423,7 @@ void rvu_free_rsrc(struct rsrc_bmap *rsrc, int id);int rvu_rsrc_free_count (struct rsrc_bmap *rsrc);int rvu_alloc_rsrc_contig (struct rsrc_bmap *rsrc,int nrsrc);bool rvu_rsrc_check_contig (struct rsrc_bmap *rsrc,int nrsrc); +u16 rvu_get_rsrc_mapcount (struct rvu_pfvf *pfvf,int blkaddr);int rvu_get_pf (u16 pcifunc);struct rvu_pfvf *rvu_get_pfvf (struct rvu *rvu,int pcifunc);void rvu_get_pf_numvfs (struct rvu *rvu,int pf,int *numvfs,int *hwvf);
drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c +15 -0
@@ -74,6 +74,20 @@ void *rvu_cgx_pdata(u8 cgx_id, struct rvu *rvu)return rvu->cgx_idmap[cgx_id]; } +/* Based on P2X connectivity find mapped NIX block for a PF */ +static void rvu_map_cgx_nix_block (struct rvu *rvu,int pf, +int cgx_id,int lmac_id) +{ +struct rvu_pfvf *pfvf = &rvu->pf[pf]; +u8 p2x; + + p2x =cgx_lmac_get_p2x (cgx_id, lmac_id); +/* Firmware sets P2X_SELECT as either NIX0 or NIX1 */ + pfvf->nix_blkaddr =BLKADDR_NIX0 ; +if (p2x ==CMR_P2X_SEL_NIX1 ) + pfvf->nix_blkaddr =BLKADDR_NIX1 ; +} +static int rvu_map_cgx_lmac_pf (struct rvu *rvu) {struct npc_pkind *pkind = &rvu->hw->pkind;
@@ -117,6 +131,7 @@ static int rvu_map_cgx_lmac_pf(struct rvu *rvu) rvu->cgxlmac2pf_map[CGX_OFFSET (cgx) + lmac] =1 << pf; free_pkind =rvu_alloc_rsrc (&pkind->rsrc); pkind->pfchan_map[free_pkind] = ((pf) &0x3F ) <<16 ; +rvu_map_cgx_nix_block (rvu, pf, cgx, lmac); rvu->cgx_mapped_pfs++; } }
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c +16 -5
@@ -187,8 +187,8 @@ static bool is_valid_txschq(struct rvu *rvu, int blkaddr,static int nix_interface_init (struct rvu *rvu,u16 pcifunc,int type,int nixlf) {struct rvu_pfvf *pfvf =rvu_get_pfvf (rvu, pcifunc); +int pkind, pf, vf, lbkid;u8 cgx_id, lmac_id; -int pkind, pf, vf;int err; pf =rvu_get_pf (pcifunc);
@@ -221,13 +221,24 @@ static int nix_interface_init(struct rvu *rvu, u16 pcifunc, int type, int nixlf)case NIX_INTF_TYPE_LBK : vf = (pcifunc &RVU_PFVF_FUNC_MASK ) -1 ; +/* If NIX1 block is present on the silicon then NIXes are +* assigned alternatively for lbk interfaces. NIX0 should +* send packets on lbk link 1 channels and NIX1 should send +* on lbk link 0 channels for the communication between +* NIX0 and NIX1. +*/ + lbkid =0 ; +if (rvu->hw->lbk_links >1 ) + lbkid = vf &0x1 ?0 :1 ; +/* Note that AF's VFs work in pairs and talk over consecutive * loopback channels.Therefore if odd number of AF VFs are * enabled then the last VF remains with no pair. */ - pfvf->rx_chan_base =NIX_CHAN_LBK_CHX (0 , vf); - pfvf->tx_chan_base = vf &0x1 ?NIX_CHAN_LBK_CHX (0 , vf -1 ) : -NIX_CHAN_LBK_CHX (0 , vf +1 ); + pfvf->rx_chan_base =NIX_CHAN_LBK_CHX (lbkid, vf); + pfvf->tx_chan_base = vf &0x1 ? +NIX_CHAN_LBK_CHX (lbkid, vf -1 ) : +NIX_CHAN_LBK_CHX (lbkid, vf +1 ); pfvf->rx_chan_cnt =1 ; pfvf->tx_chan_cnt =1 ; rvu_npc_install_promisc_entry(rvu, pcifunc, nixlf,
@@ -3157,7 +3168,7 @@ int rvu_nix_init(struct rvu *rvu) hw->cgx = (cfg >>12 ) &0xF ; hw->lmac_per_cgx = (cfg >>8 ) &0xF ; hw->cgx_links = hw->cgx * hw->lmac_per_cgx; - hw->lbk_links =1 ; + hw->lbk_links = (cfg >>24 ) &0xF ; hw->sdp_links =1 ;/* Initialize admin queue */
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_vxlan.c +2 -0
@@ -88,6 +88,8 @@ static int mlx5e_gen_ip_tunnel_header_vxlan(char buf[],struct udphdr *udp = (struct udphdr *)(buf);struct vxlanhdr *vxh; +if (tun_key->tun_flags &TUNNEL_VXLAN_OPT ) +return -EOPNOTSUPP ; vxh = (struct vxlanhdr *)((char *)udp +sizeof (struct udphdr )); *ip_proto =IPPROTO_UDP ;
drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c +1 -1
@@ -440,7 +440,7 @@ static int mlx5_ptp_verify(struct ptp_clock_info *ptp, unsigned int pin,static const struct ptp_clock_info mlx5_ptp_clock_info = { .owner =THIS_MODULE , .name ="mlx5_ptp" , - .max_adj =100000000 , + .max_adj =50000000 , .n_alarm =0 , .n_ext_ts =0 , .n_per_out =0 ,
drivers/nfc/pn533/usb.c +41 -3
78 lines not on this page · raw message
drivers/platform/x86/sony-laptop.c +14 -7
@@ -1892,14 +1892,21 @@ static int sony_nc_kbd_backlight_setup(struct platform_device *pd,break ; } - ret =sony_call_snc_handle (handle, probe_base, &result); -if (ret) -return ret; +/* +* Only probe if there is a separate probe_base, otherwise the probe call +* is equivalent to __sony_nc_kbd_backlight_mode_set(0), resulting in +* the keyboard backlight being turned off. +*/ +if (probe_base) { + ret =sony_call_snc_handle (handle, probe_base, &result); +if (ret) +return ret; -if ((handle ==0x0137 && !(result &0x02 )) || - !(result &0x01 )) { -dprintk ("no backlight keyboard found\n" ); -return 0 ; +if ((handle ==0x0137 && !(result &0x02 )) || + !(result &0x01 )) { +dprintk ("no backlight keyboard found\n" ); +return 0 ; + } } kbdbl_ctl =kzalloc (sizeof (*kbdbl_ctl),GFP_KERNEL );
drivers/regulator/da9211-regulator.c +6 -5
@@ -498,6 +498,12 @@ static int da9211_i2c_probe(struct i2c_client *i2c) chip->chip_irq = i2c->irq; + ret =da9211_regulator_init (chip); +if (ret <0 ) { +dev_err (chip->dev,"Failed to initialize regulator: %d\n" , ret); +return ret; + } +if (chip->chip_irq !=0 ) { ret = devm_request_threaded_irq(chip->dev, chip->chip_irq, NULL, da9211_irq_handler,
@@ -512,11 +518,6 @@ static int da9211_i2c_probe(struct i2c_client *i2c)dev_warn (chip->dev,"No IRQ configured\n" ); } - ret =da9211_regulator_init (chip); - -if (ret <0 ) -dev_err (chip->dev,"Failed to initialize regulator: %d\n" , ret); -return ret; }
drivers/tty/hvc/hvc_xen.c +29 -17
127 lines not on this page · raw message
drivers/usb/host/xhci-mem.c +4 -0
@@ -1003,6 +1003,8 @@ int xhci_alloc_virt_device(struct xhci_hcd *xhci, int slot_id,if (!dev)return 0 ; + dev->slot_id = slot_id; +/* Allocate the (output) device context that will be used in the HC. */ dev->out_ctx =xhci_alloc_container_ctx (xhci,XHCI_CTX_TYPE_DEVICE , flags);if (!dev->out_ctx)
@@ -1021,6 +1023,8 @@ int xhci_alloc_virt_device(struct xhci_hcd *xhci, int slot_id,/* Initialize the cancellation list and watchdog timers for each ep */ for (i =0 ; i <31 ; i++) { + dev->eps[i].ep_index = i; + dev->eps[i].vdev = dev;xhci_init_endpoint_timer (xhci, &dev->eps[i]);INIT_LIST_HEAD (&dev->eps[i].cancelled_td_list);INIT_LIST_HEAD (&dev->eps[i].bw_endpoint_list);
drivers/usb/host/xhci-ring.c +151 -146
488 lines not on this page · raw message
drivers/usb/host/xhci.h +5 -1
@@ -924,6 +924,8 @@ struct xhci_bw_info {#define SS_BW_RESERVED 10struct xhci_virt_ep { +struct xhci_virt_device *vdev;/* parent */ +unsigned int ep_index;struct xhci_ring *ring;/* Related to endpoints that are configured to use stream IDs only */ struct xhci_stream_info *stream_info;
@@ -931,6 +933,7 @@ struct xhci_virt_ep {* have to restore the device state to the previous state */ struct xhci_ring *new_ring; +unsigned int err_count;unsigned int ep_state;#define SET_DEQ_PENDING (1 << 0)#define EP_HALTED (1 << 1)/* For stall handling */
@@ -1002,6 +1005,7 @@ struct xhci_interval_bw_table {#define EP_CTX_PER_DEV 31struct xhci_virt_device { +int slot_id;struct usb_device *udev;/* * Commands to the hardware are passed an "input context" that
@@ -1541,6 +1545,7 @@ struct xhci_segment {struct xhci_td {struct list_head td_list;struct list_head cancelled_td_list; +int status;struct urb *urb;struct xhci_segment *start_seg;union xhci_trb *first_trb;
@@ -1612,7 +1617,6 @@ struct xhci_ring {* if we own the TRB (if we are the consumer). See section 4.9.1. */ u32 cycle_state; -unsigned int err_count;unsigned int stream_id;unsigned int num_segs;unsigned int num_trbs_free;
fs/cifs/link.c +1 -0
@@ -471,6 +471,7 @@ smb3_create_mf_symlink(unsigned int xid, struct cifs_tcon *tcon, oparms.disposition =FILE_CREATE ; oparms.fid = &fid; oparms.reconnect = false; + oparms.mode =0644 ; rc =SMB2_open (xid, &oparms, utf16_path, &oplock,NULL ,NULL ,NULL ,NULL );
fs/ext4/super.c +1 -0
@@ -1279,6 +1279,7 @@ static struct inode *ext4_alloc_inode(struct super_block *sb)return NULL ;inode_set_iversion (&ei->vfs_inode,1 ); + ei->i_flags =0 ;spin_lock_init (&ei->i_raw_lock);INIT_LIST_HEAD (&ei->i_prealloc_list);atomic_set (&ei->i_prealloc_active,0 );
include/dt-bindings/clock/imx8mp-clock.h +9 -1
@@ -321,8 +321,16 @@#define IMX8MP_CLK_AUDIO_AXI 310#define IMX8MP_CLK_HSIO_AXI 311#define IMX8MP_CLK_MEDIA_ISP 312 +#define IMX8MP_CLK_MEDIA_DISP2_PIX 313 +#define IMX8MP_CLK_CLKOUT1_SEL 314 +#define IMX8MP_CLK_CLKOUT1_DIV 315 +#define IMX8MP_CLK_CLKOUT1 316 +#define IMX8MP_CLK_CLKOUT2_SEL 317 +#define IMX8MP_CLK_CLKOUT2_DIV 318 +#define IMX8MP_CLK_CLKOUT2 319 +#define IMX8MP_CLK_USB_SUSP 320 -#define IMX8MP_CLK_END 313 +#define IMX8MP_CLK_END 321#define IMX8MP_CLK_AUDIOMIX_SAI1_IPG 0#define IMX8MP_CLK_AUDIOMIX_SAI1_MCLK1 1
include/linux/tpm_eventlog.h +2 -2
@@ -198,8 +198,8 @@ static __always_inline int __calc_tpm2_event_size(struct tcg_pcr_event2_head *ev* The loop below will unmap these fields if the log is larger than * one page, so save them here for reference: */ - count =READ_ONCE (event->count); - event_type =READ_ONCE (event->event_type); + count = event->count; + event_type = event->event_type;/* Verify that it's the log header */ if (event_header->pcr_idx != 0 ||
io_uring/io-wq.c +6 -0
@@ -1217,6 +1217,12 @@ static void io_wq_cancel_tw_create(struct io_wq *wq) worker = container_of(cb, struct io_worker, create_work);io_worker_cancel_cb (worker); +/* +* Only the worker continuation helper has worker allocated and +* hence needs freeing. +*/ +if (cb->func == create_worker_cont) +kfree (worker); } }
mm/memblock.c +7 -1
@@ -1597,7 +1597,13 @@ void __init __memblock_free_late(phys_addr_t base, phys_addr_t size) end =PFN_DOWN (base + size);for (; cursor < end; cursor++) { -memblock_free_pages (pfn_to_page (cursor), cursor,0 ); +/* +* Reserved pages are always initialized by the end of +* memblock_free_all() (by memmap_init() and, if deferred +* initialization is enabled, memmap_init_reserved_pages()), so +* these pages can be released directly to the buddy allocator. +*/ +__free_pages_core (pfn_to_page (cursor),0 );totalram_pages_inc (); } }
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.