Linux 5.4.121
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.121 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.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/sphinx/parse-headers.pl | 2 Documentation/target/tcm_mod_builder.py | 2 Documentation/trace/postprocess/decode_msr.py | 2 Documentation/trace/postprocess/trace-pagealloc-postprocess.pl | 2 Documentation/trace/postprocess/trace-vmscan-postprocess.pl | 2 Makefile | 2 arch/arm/include/asm/kvm_host.h | 1 arch/arm/kernel/asm-offsets.c | 3 arch/arm/kernel/smccc-call.S | 11 + arch/arm/kernel/suspend.c | 19 ++ arch/arm64/include/asm/kvm_host.h | 1 arch/arm64/kvm/debug.c | 88 ++++++---- arch/ia64/scripts/unwcheck.py | 2 arch/riscv/include/asm/ftrace.h | 14 + arch/riscv/kernel/mcount.S | 10 - arch/um/Kconfig.debug | 1 arch/um/kernel/Makefile | 1 arch/um/kernel/dyn.lds.S | 6 arch/um/kernel/gmon_syms.c | 16 - arch/um/kernel/uml.lds.S | 6 arch/x86/lib/msr-smp.c | 4 drivers/dma/dw-edma/dw-edma-core.c | 11 - drivers/gpio/gpiolib-acpi.c | 14 + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 51 +++++ drivers/input/touchscreen/elants_i2c.c | 44 ++++- drivers/input/touchscreen/silead.c | 44 ++++- drivers/isdn/capi/kcapi.c | 4 drivers/misc/kgdbts.c | 26 +- drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c | 2 drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c | 7 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 14 - drivers/net/virtio_net.c | 10 - drivers/pci/controller/pci-thunder-ecam.c | 2 drivers/pci/controller/pci-thunder-pem.c | 13 - drivers/pci/hotplug/acpiphp_glue.c | 1 drivers/pci/pci.h | 6 drivers/pinctrl/pinctrl-ingenic.c | 3 drivers/scsi/lpfc/lpfc_sli.c | 11 + drivers/target/target_core_user.c | 4 drivers/usb/host/sl811-hcd.c | 9 - fs/block_dev.c | 20 +- fs/ceph/caps.c | 1 fs/ceph/inode.c | 1 include/linux/virtio_net.h | 14 + lib/stackdepot.c | 6 net/bridge/br_netlink.c | 5 net/ipv6/ip6_gre.c | 7 net/ipv6/ip6_tunnel.c | 3 net/ipv6/ip6_vti.c | 1 net/ipv6/sit.c | 5 net/xdp/xsk_queue.h | 7 scripts/bloat-o-meter | 2 scripts/config | 2 scripts/diffconfig | 2 scripts/get_abi.pl | 2 scripts/recordmcount.pl | 2 scripts/show_delta | 2 scripts/sphinx-pre-install | 2 scripts/split-man.pl | 2 scripts/tracing/draw_functrace.py | 2 sound/pci/hda/hda_generic.c | 16 + tools/perf/python/tracepoint.py | 2 tools/perf/python/twatch.py | 2 tools/power/x86/intel_pstate_tracer/intel_pstate_tracer.py | 2 tools/testing/ktest/compare-ktest-sample.pl | 2 tools/testing/selftests/bpf/test_offload.py | 2 tools/testing/selftests/kselftest/prefix.pl | 2 tools/testing/selftests/tc-testing/tdc_batch.py | 2 tools/testing/selftests/tc-testing/tdc_multibatch.py | 2 virt/kvm/arm/arm.c | 2 70 files changed, 415 insertions(+), 178 deletions(-)
Alexandru Elisei (1):
KVM: arm64: Initialize VCPU mdcr_el2 before loading it
Andy Shevchenko (1):
scripts: switch explicitly to Python 3
Arnd Bergmann (5):
x86/msr: Fix wr/rdmsr_safe_regs_on_cpu() prototypes
kgdb: fix gcc-11 warning on indentation
usb: sl811-hcd: improve misleading indentation
isdn: capi: fix mismatched prototypes
PCI: thunder: Fix compile testing
Bodo Stroesser (1):
scsi: target: tcmu: Return from tcmu_handle_completions() if cmd_id not found
Eric Dumazet (5):
virtio_net: Do not pull payload in skb->head
ip6_gre: proper dev_{hold|put} in ndo_[un]init methods
sit: proper dev_{hold|put} in ndo_[un]init methods
ip6_tunnel: sit: proper dev_{hold|put} in ndo_[un]init methods
ipv6: remove extra dev_hold() for fallback tunnels
Feilong Lin (1):
ACPI / hotplug / PCI: Fix reference count leak in enable_slot()
Finn Behrens (1):
tweewide: Fix most Shebang lines
Greg Kroah-Hartman (1):
Linux 5.4.121
Gustavo Pimentel (1):
dmaengine: dw-edma: Fix crash on loading/unloading driver
Hans de Goede (3):
Input: elants_i2c - do not bind to i2c-hid compatible ACPI instantiated devices
Input: silead - add workaround for x86 BIOS-es which bring the chip up in a stuck state
gpiolib: acpi: Add quirk to ignore EC wakeups on Dell Venue 10 Pro 5055
Hui Wang (1):
ALSA: hda: generic: change the DAC ctl name for LO+SPK or LO+HP
James Smart (1):
scsi: lpfc: Fix illegal memory access on Abort IOCBs
Jeff Layton (1):
ceph: fix fscache invalidation
Johannes Berg (2):
um: Mark all kernel symbols as local
um: Disable CONFIG_GCOV with MODULES
Josh Poimboeuf (1):
pinctrl: ingenic: Improve unreachable code generation
Kaixu Xia (1):
cxgb4: Fix the -Wmisleading-indentation warning
Magnus Karlsson (1):
xsk: Simplify detection of empty and full rings
Manivannan Sadhasivam (1):
ARM: 9075/1: kernel: Fix interrupted SMC calls
Nathan Chancellor (2):
scripts/recordmcount.pl: Fix RISC-V regex for clang
riscv: Workaround mcount name prior to clang-13
Rodrigo Siqueira (1):
drm/amd/display: Fix two cursor duplication when using overlay
Yannick Vignon (1):
net: stmmac: Do not enable RX FIFO overflow interrupts
Zhang Zhengming (1):
bridge: Fix possible races between assigning rx_handler_data and setting IFF_BRIDGE_PORT bit
Zqiang (1):
lib: stackdepot: turn depot_lock spinlock to raw_spinlock
louis.wang (1):
ARM: 9066/1: ftrace: pause/unpause function graph tracer in cpu_suspend()
yangerkun (1):
block: reexpand iov_iter after read/write
Greg Kroah-Hartman
maintainerDocumentation/sphinx/parse-headers.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl use strict; use Text::Tabs; use Getopt::Long;
Documentation/target/tcm_mod_builder.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # The TCM v4 multi-protocol fabric module generation script for drivers/target/$NEW_MOD # # Copyright (c) 2010 Rising Tide Systems
Documentation/trace/postprocess/decode_msr.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # add symbolic names to read_msr / write_msr in trace # decode_msr msr-index.h < trace import sys
Documentation/trace/postprocess/trace-pagealloc-postprocess.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # This is a POC (proof of concept or piece of crap, take your pick) for reading the # text representation of trace output related to page allocation. It makes an attempt # to extract some high-level information on what is going on. The accuracy of the parser
Documentation/trace/postprocess/trace-vmscan-postprocess.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # This is a POC for reading the text representation of trace output related to # page reclaim. It makes an attempt to extract some high-level information on # what is going on. The accuracy of the parser may vary
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 120 +SUBLEVEL = 121 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arm/include/asm/kvm_host.h +1 -0
@@ -335,6 +335,7 @@ static inline void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu) {}static inline void kvm_arch_vcpu_block_finish (struct kvm_vcpu *vcpu) {}static inline void kvm_arm_init_debug (void ) {} +static inline void kvm_arm_vcpu_init_debug (struct kvm_vcpu *vcpu) {}static inline void kvm_arm_setup_debug (struct kvm_vcpu *vcpu) {}static inline void kvm_arm_clear_debug (struct kvm_vcpu *vcpu) {}static inline void kvm_arm_reset_debug_ptr (struct kvm_vcpu *vcpu) {}
arch/arm/kernel/asm-offsets.c +3 -0
@@ -27,6 +27,7 @@#include <asm/vdso_datapage.h> #include <asm/hardware/cache-l2x0.h> #include <linux/kbuild.h> +#include <linux/arm-smccc.h> #include "signal.h" /*
@@ -160,6 +161,8 @@ int main(void)DEFINE (SLEEP_SAVE_SP_PHYS , offsetof(struct sleep_save_sp , save_ptr_stash_phys));DEFINE (SLEEP_SAVE_SP_VIRT , offsetof(struct sleep_save_sp , save_ptr_stash));#endif +DEFINE (ARM_SMCCC_QUIRK_ID_OFFS , offsetof(struct arm_smccc_quirk , id)); +DEFINE (ARM_SMCCC_QUIRK_STATE_OFFS , offsetof(struct arm_smccc_quirk , state));BLANK ();DEFINE (DMA_BIDIRECTIONAL ,DMA_BIDIRECTIONAL );DEFINE (DMA_TO_DEVICE ,DMA_TO_DEVICE );
arch/arm/kernel/smccc-call.S +10 -1
@@ -3,7 +3,9 @@ * Copyright (c) 2015, Linaro Limited */ #include <linux/linkage.h> +#include <linux/arm-smccc.h> +#include <asm/asm-offsets.h> #include <asm/opcodes-sec.h> #include <asm/opcodes-virt.h> #include <asm/unwind.h>
@@ -27,7 +29,14 @@ UNWIND( .fnstart) UNWIND( .save {r4-r7}) ldm r12, {r4-r7} \instr - pop {r4-r7} + ldr r4, [sp, #36] + cmp r4, #0 + beq 1f // No quirk structure + ldr r5, [r4, #ARM_SMCCC_QUIRK_ID_OFFS] + cmp r5, #ARM_SMCCC_QUIRK_QCOM_A6 + bne 1f // No quirk present + str r6, [r4, #ARM_SMCCC_QUIRK_STATE_OFFS] +1: pop {r4-r7} ldr r12, [sp, #(4 * 4)] stm r12, {r0-r3} bx lr
arch/arm/kernel/suspend.c +18 -1
@@ -1,4 +1,5 @@// SPDX-License-Identifier: GPL-2.0 +#include <linux/ftrace.h> #include <linux/init.h> #include <linux/slab.h> #include <linux/mm_types.h>
@@ -26,6 +27,13 @@ int cpu_suspend(unsigned long arg, int (*fn)(unsigned long))if (!idmap_pgd)return -EINVAL ; +/* +* Function graph tracer state gets incosistent when the kernel +* calls functions that never return (aka suspend finishers) hence +* disable graph tracing during their execution. +*/ +pause_graph_tracing (); +/* * Provide a temporary page table with an identity mapping for * the MMU-enable code, required for resuming. On successful
@@ -33,6 +41,9 @@ int cpu_suspend(unsigned long arg, int (*fn)(unsigned long))* back to the correct page tables. */ ret =__cpu_suspend (arg, fn, __mpidr); + +unpause_graph_tracing (); +if (ret ==0 ) {cpu_switch_mm (mm->pgd, mm);local_flush_bp_all ();
@@ -46,7 +57,13 @@ int cpu_suspend(unsigned long arg, int (*fn)(unsigned long))int cpu_suspend (unsigned long arg,int (*fn)(unsigned long )) {u32 __mpidr =cpu_logical_map (smp_processor_id ()); -return __cpu_suspend (arg, fn, __mpidr); +int ret; + +pause_graph_tracing (); + ret =__cpu_suspend (arg, fn, __mpidr); +unpause_graph_tracing (); + +return ret; }#define idmap_pgd NULL#endif
arch/arm64/include/asm/kvm_host.h +1 -0
@@ -552,6 +552,7 @@ static inline void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu) {}static inline void kvm_arch_vcpu_block_finish (struct kvm_vcpu *vcpu) {}void kvm_arm_init_debug (void ); +void kvm_arm_vcpu_init_debug (struct kvm_vcpu *vcpu);void kvm_arm_setup_debug (struct kvm_vcpu *vcpu);void kvm_arm_clear_debug (struct kvm_vcpu *vcpu);void kvm_arm_reset_debug_ptr (struct kvm_vcpu *vcpu);
arch/arm64/kvm/debug.c +60 -28
131 lines not on this page · raw message
arch/ia64/scripts/unwcheck.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # SPDX-License-Identifier: GPL-2.0 # # Usage: unwcheck.py FILE
arch/riscv/include/asm/ftrace.h +12 -2
@@ -10,9 +10,19 @@#endif #define HAVE_FUNCTION_GRAPH_RET_ADDR_PTR +/* +* Clang prior to 13 had "mcount" instead of "_mcount": +* https://reviews.llvm.org/D98881 +*/ +#if defined(CONFIG_CC_IS_GCC ) ||CONFIG_CLANG_VERSION >=130000 +#define MCOUNT_NAME _mcount +#else +#define MCOUNT_NAME mcount +#endif +#define ARCH_SUPPORTS_FTRACE_OPS 1#ifndef __ASSEMBLY__ -void _mcount (void ); +void MCOUNT_NAME (void );static inline unsigned long ftrace_call_adjust (unsigned long addr) {return addr;
@@ -33,7 +43,7 @@ struct dyn_arch_ftrace {* both auipc and jalr at the same time. */ -#define MCOUNT_ADDR ((unsigned long)_mcount) +#define MCOUNT_ADDR ((unsigned long)MCOUNT_NAME)#define JALR_SIGN_MASK (0x00000800)#define JALR_OFFSET_MASK (0x00000fff)#define AUIPC_OFFSET_MASK (0xfffff000)
arch/riscv/kernel/mcount.S +5 -5
@@ -47,8 +47,8 @@ ENTRY(ftrace_stub) #ifdef CONFIG_DYNAMIC_FTRACE - .global _mcount - .set _mcount, ftrace_stub + .global MCOUNT_NAME + .set MCOUNT_NAME, ftrace_stub #endif ret ENDPROC(ftrace_stub)
@@ -78,7 +78,7 @@ ENDPROC(return_to_handler) #endif #ifndef CONFIG_DYNAMIC_FTRACE -ENTRY(_mcount) +ENTRY(MCOUNT_NAME) la t4, ftrace_stub #ifdef CONFIG_FUNCTION_GRAPH_TRACER la t0, ftrace_graph_return
@@ -124,6 +124,6 @@ do_trace: jalr t5 RESTORE_ABI_STATE ret -ENDPROC(_mcount) +ENDPROC(MCOUNT_NAME) #endif -EXPORT_SYMBOL(_mcount) +EXPORT_SYMBOL(MCOUNT_NAME)
arch/um/Kconfig.debug +1 -0
@@ -17,6 +17,7 @@ config GCOV bool "Enable gcov support" depends on DEBUG_INFO depends on !KCOV + depends on !MODULES help This option allows developers to retrieve coverage data from a UML session.
arch/um/kernel/Makefile +0 -1
@@ -21,7 +21,6 @@ obj-y = config.o exec.o exitcode.o irq.o ksyms.o mem.o \ obj-$(CONFIG_BLK_DEV_INITRD) += initrd.o obj-$(CONFIG_GPROF) += gprof_syms.o -obj-$(CONFIG_GCOV) += gmon_syms.o obj-$(CONFIG_EARLY_PRINTK) += early_printk.o obj-$(CONFIG_STACKTRACE) += stacktrace.o
arch/um/kernel/dyn.lds.S +6 -0
@@ -6,6 +6,12 @@ OUTPUT_ARCH(ELF_ARCH) ENTRY(_start) jiffies = jiffies_64; +VERSION { + { + local: *; + }; +} + SECTIONS { PROVIDE (__executable_start = START);
arch/um/kernel/gmon_syms.c deleted +0 -16
@@ -1,16 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* -* Copyright (C) 2001 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) -*/ - -#include <linux/module.h> - -extern void __bb_init_func (void *) __attribute__((weak)); -EXPORT_SYMBOL (__bb_init_func); - -extern void __gcov_init (void *) __attribute__((weak)); -EXPORT_SYMBOL (__gcov_init); -extern void __gcov_merge_add (void *,unsigned int ) __attribute__((weak)); -EXPORT_SYMBOL (__gcov_merge_add); -extern void __gcov_exit (void ) __attribute__((weak)); -EXPORT_SYMBOL (__gcov_exit);
arch/um/kernel/uml.lds.S +6 -0
@@ -7,6 +7,12 @@ OUTPUT_ARCH(ELF_ARCH) ENTRY(_start) jiffies = jiffies_64; +VERSION { + { + local: *; + }; +} + SECTIONS { /* This must contain the right address - not quite the default ELF one.*/
arch/x86/lib/msr-smp.c +2 -2
@@ -253,7 +253,7 @@ static void __wrmsr_safe_regs_on_cpu(void *info) rv->err =wrmsr_safe_regs (rv->regs); } -int rdmsr_safe_regs_on_cpu (unsigned int cpu,u32 *regs) +int rdmsr_safe_regs_on_cpu (unsigned int cpu,u32 regs[8 ]) {int err;struct msr_regs_info rv;
@@ -266,7 +266,7 @@ int rdmsr_safe_regs_on_cpu(unsigned int cpu, u32 *regs) }EXPORT_SYMBOL (rdmsr_safe_regs_on_cpu); -int wrmsr_safe_regs_on_cpu (unsigned int cpu,u32 *regs) +int wrmsr_safe_regs_on_cpu (unsigned int cpu,u32 regs[8 ]) {int err;struct msr_regs_info rv;
drivers/dma/dw-edma/dw-edma-core.c +5 -6
@@ -910,22 +910,21 @@ int dw_edma_remove(struct dw_edma_chip *chip)/* Power management */ pm_runtime_disable (dev); +/* Deregister eDMA device */ +dma_async_device_unregister (&dw->wr_edma);list_for_each_entry_safe (chan, _chan, &dw->wr_edma.channels, vc.chan.device_node) { -list_del (&chan->vc.chan.device_node);tasklet_kill (&chan->vc.task); +list_del (&chan->vc.chan.device_node); } +dma_async_device_unregister (&dw->rd_edma);list_for_each_entry_safe (chan, _chan, &dw->rd_edma.channels, vc.chan.device_node) { -list_del (&chan->vc.chan.device_node);tasklet_kill (&chan->vc.task); +list_del (&chan->vc.chan.device_node); } -/* Deregister eDMA device */ -dma_async_device_unregister (&dw->wr_edma); -dma_async_device_unregister (&dw->rd_edma); -/* Turn debugfs off */ dw_edma_v0_core_debugfs_off ();
drivers/gpio/gpiolib-acpi.c +14 -0
@@ -1394,6 +1394,20 @@ static const struct dmi_system_id gpiolib_acpi_quirks[] = { .no_edge_events_on_boot = true, }, }, + { +/* +* The Dell Venue 10 Pro 5055, with Bay Trail SoC + TI PMIC uses an +* external embedded-controller connected via I2C + an ACPI GPIO +* event handler on INT33FFC:02 pin 12, causing spurious wakeups. +*/ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"Dell Inc." ), + DMI_MATCH(DMI_PRODUCT_NAME, "Venue 10 Pro 5055"), + }, + .driver_data = &(struct acpi_gpiolib_dmi_quirk ) { + .ignore_wake ="INT33FC:02@12" , + }, + }, {/* * HP X2 10 models with Cherry Trail SoC + TI PMIC use an
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +51 -0
63 lines not on this page · raw message
drivers/input/touchscreen/elants_i2c.c +42 -2
63 lines not on this page · raw message
drivers/input/touchscreen/silead.c +40 -4
68 lines not on this page · raw message
drivers/isdn/capi/kcapi.c +2 -2
@@ -846,7 +846,7 @@ EXPORT_SYMBOL(capi20_put_message);* Return value: CAPI result code */ -u16 capi20_get_manufacturer (u32 contr,u8 *buf) +u16 capi20_get_manufacturer (u32 contr,u8 buf[CAPI_MANUFACTURER_LEN ]) {struct capi_ctr *ctr;u16 ret;
@@ -916,7 +916,7 @@ EXPORT_SYMBOL(capi20_get_version);* Return value: CAPI result code */ -u16 capi20_get_serial (u32 contr,u8 *serial) +u16 capi20_get_serial (u32 contr,u8 serial[CAPI_SERIAL_LEN ]) {struct capi_ctr *ctr;u16 ret;
drivers/misc/kgdbts.c +13 -13
@@ -95,19 +95,19 @@#include <asm/sections.h> -#define v1printk(a...) do { \ - if (verbose) \ - printk(KERN_INFO a); \ - } while (0) -#define v2printk(a...) do { \ - if (verbose > 1) \ - printk(KERN_INFO a); \ - touch_nmi_watchdog(); \ - } while (0) -#define eprintk(a...) do { \ - printk(KERN_ERR a); \ - WARN_ON(1); \ - } while (0) +#define v1printk(a...) do { \ + if (verbose) \ + printk(KERN_INFO a); \ +} while (0) +#define v2printk(a...) do { \ + if (verbose > 1) \ + printk(KERN_INFO a); \ + touch_nmi_watchdog(); \ +} while (0) +#define eprintk(a...) do { \ + printk(KERN_ERR a); \ + WARN_ON(1); \ +} while (0)#define MAX_CONFIG_LEN 40static struct kgdb_io kgdbts_io_ops;
drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c +1 -1
@@ -2690,7 +2690,7 @@ do { \seq_printf (seq,"%-12s" , s); \for (i =0 ; i < n; ++i) \seq_printf (seq," %16" fmt_spec, v); \ -seq_putc (seq,'\n' ); \ +seq_putc (seq,'\n' ); \ } while (0)#define S (s, v) S3("s", s, v)#define T3 (fmt_spec, s, v) S3(fmt_spec, s, tx[i].v)
drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c +1 -6
@@ -211,7 +211,7 @@ static void dwmac4_dma_rx_chan_op_mode(void __iomem *ioaddr, int mode, u32 channel, int fifosz, u8 qmode) { unsigned int rqs = fifosz / 256 - 1; -u32 mtl_rx_op, mtl_rx_int; +u32 mtl_rx_op; mtl_rx_op =readl (ioaddr +MTL_CHAN_RX_OP_MODE (channel));
@@ -282,11 +282,6 @@ static void dwmac4_dma_rx_chan_op_mode(void __iomem *ioaddr, int mode, }writel (mtl_rx_op, ioaddr +MTL_CHAN_RX_OP_MODE (channel)); - -/* Enable MTL RX overflow */ - mtl_rx_int =readl (ioaddr +MTL_CHAN_INT_CTRL (channel)); -writel (mtl_rx_int |MTL_RX_OVERFLOW_INT_EN , - ioaddr +MTL_CHAN_INT_CTRL (channel)); } static void dwmac4_dma_tx_chan_op_mode(void __iomem *ioaddr, int mode,
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +2 -12
@@ -3855,7 +3855,6 @@ static irqreturn_t stmmac_interrupt(int irq, void *dev_id)/* To handle GMAC own interrupts */ if ((priv->plat->has_gmac) || xmac) {int status =stmmac_host_irq_status (priv, priv->hw, &priv->xstats); -int mtl_status;if (unlikely (status)) {/* For LPI we need to save the tx status */
@@ -3866,17 +3865,8 @@ static irqreturn_t stmmac_interrupt(int irq, void *dev_id) }for (queue =0 ; queue < queues_count; queue++) { -struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; - - mtl_status =stmmac_host_mtl_irq_status (priv, priv->hw, - queue); -if (mtl_status != -EINVAL ) - status |= mtl_status; - -if (status &CORE_IRQ_MTL_RX_OVERFLOW ) -stmmac_set_rx_tail_ptr (priv, priv->ioaddr, - rx_q->rx_tail_addr, - queue); + status =stmmac_host_mtl_irq_status (priv, priv->hw, + queue); }/* PCS link status */
drivers/net/virtio_net.c +7 -3
@@ -406,9 +406,13 @@ static struct sk_buff *page_to_skb(struct virtnet_info *vi, offset += hdr_padded_len; p += hdr_padded_len; - copy = len; -if (copy >skb_tailroom (skb)) - copy =skb_tailroom (skb); +/* Copy all frame if it fits skb->head, otherwise +* we let virtio_net_hdr_to_skb() and GRO pull headers as needed. +*/ +if (len <=skb_tailroom (skb)) + copy = len; +else + copy =ETH_HLEN + metasize;skb_put_data (skb, p, copy);if (metasize) {
drivers/pci/controller/pci-thunder-ecam.c +1 -1
@@ -116,7 +116,7 @@ static int thunder_ecam_p2_config_read(struct pci_bus *bus, unsigned int devfn,* the config space access window. Since we are working with * the high-order 32 bits, shift everything down by 32 bits. */ - node_bits = (cfg->res.start >>32 ) & (1 <<12 ); + node_bits =upper_32_bits (cfg->res.start) & (1 <<12 ); v |= node_bits;set_val (v, where, size, val);
drivers/pci/controller/pci-thunder-pem.c +7 -6
@@ -11,6 +11,7 @@#include <linux/pci-acpi.h> #include <linux/pci-ecam.h> #include <linux/platform_device.h> +#include <linux/io-64-nonatomic-lo-hi.h> #include "../pci.h" #if defined(CONFIG_PCI_HOST_THUNDER_PEM ) || (defined(CONFIG_ACPI ) && defined(CONFIG_PCI_QUIRKS ))
@@ -314,9 +315,9 @@ static int thunder_pem_init(struct device *dev, struct pci_config_window *cfg,* structure here for the BAR. */ bar4_start = res_pem->start +0xf00000 ; - pem_pci->ea_entry[0 ] = (u32 )bar4_start |2 ; - pem_pci->ea_entry[1 ] = (u32)(res_pem->end - bar4_start) & ~3u ; - pem_pci->ea_entry[2 ] = (u32)(bar4_start >>32 ); + pem_pci->ea_entry[0 ] =lower_32_bits (bar4_start) |2 ; + pem_pci->ea_entry[1 ] =lower_32_bits (res_pem->end - bar4_start) & ~3u ; + pem_pci->ea_entry[2 ] =upper_32_bits (bar4_start); cfg->priv = pem_pci;return 0 ;
@@ -324,9 +325,9 @@ static int thunder_pem_init(struct device *dev, struct pci_config_window *cfg,#if defined(CONFIG_ACPI ) && defined(CONFIG_PCI_QUIRKS ) -#define PEM_RES_BASE 0x87e0c0000000UL -#define PEM_NODE_MASK GENMASK(45, 44) -#define PEM_INDX_MASK GENMASK(26, 24) +#define PEM_RES_BASE 0x87e0c0000000ULL +#define PEM_NODE_MASK GENMASK_ULL(45, 44) +#define PEM_INDX_MASK GENMASK_ULL(26, 24)#define PEM_MIN_DOM_IN_NODE 4#define PEM_MAX_DOM_IN_NODE 10
drivers/pci/hotplug/acpiphp_glue.c +1 -0
@@ -540,6 +540,7 @@ static void enable_slot(struct acpiphp_slot *slot, bool bridge) slot->flags &= ~SLOT_ENABLED ;continue ; } +pci_dev_put (dev); } }
drivers/pci/pci.h +6 -0
@@ -588,6 +588,12 @@ static inline int pci_dev_specific_reset(struct pci_dev *dev, int probe)#if defined(CONFIG_PCI_QUIRKS ) && defined(CONFIG_ARM64 )int acpi_get_rc_resources (struct device *dev,const char *hid,u16 segment,struct resource *res); +#else +static inline int acpi_get_rc_resources (struct device *dev,const char *hid, +u16 segment,struct resource *res) +{ +return -ENODEV ; +}#endif u32 pci_rebar_get_possible_sizes (struct pci_dev *pdev,int bar);
drivers/pinctrl/pinctrl-ingenic.c +2 -1
@@ -1846,7 +1846,8 @@ static int ingenic_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,break ;default : -unreachable (); +/* unreachable */ +break ; } }
drivers/scsi/lpfc/lpfc_sli.c +9 -2
@@ -11337,13 +11337,20 @@ lpfc_sli_validate_fcp_iocb(struct lpfc_iocbq *iocbq, struct lpfc_vport *vport, lpfc_ctx_cmd ctx_cmd) {struct lpfc_io_buf *lpfc_cmd; +IOCB_t *icmd =NULL ;int rc =1 ;if (iocbq->vport != vport)return rc; -if (!(iocbq->iocb_flag &LPFC_IO_FCP ) || - !(iocbq->iocb_flag &LPFC_IO_ON_TXCMPLQ )) +if (!(iocbq->iocb_flag &LPFC_IO_FCP ) || + !(iocbq->iocb_flag &LPFC_IO_ON_TXCMPLQ ) || + iocbq->iocb_flag &LPFC_DRIVER_ABORTED ) +return rc; + + icmd = &iocbq->iocb; +if (icmd->ulpCommand ==CMD_ABORT_XRI_CN || + icmd->ulpCommand ==CMD_CLOSE_XRI_CN )return rc; lpfc_cmd = container_of(iocbq, struct lpfc_io_buf, cur_iocbq);
drivers/target/target_core_user.c +2 -2
@@ -1205,7 +1205,7 @@ static void tcmu_set_next_deadline(struct list_head *queue,del_timer (timer); } -static unsigned int tcmu_handle_completions (struct tcmu_dev *udev) +static bool tcmu_handle_completions (struct tcmu_dev *udev) {struct tcmu_mailbox *mb;struct tcmu_cmd *cmd;
@@ -1245,7 +1245,7 @@ static unsigned int tcmu_handle_completions(struct tcmu_dev *udev)pr_err ("cmd_id %u not found, ring is broken\n" , entry->hdr.cmd_id);set_bit (TCMU_DEV_BIT_BROKEN , &udev->flags); -break ; +return false; }tcmu_handle_completion (cmd, entry);
drivers/usb/host/sl811-hcd.c +4 -5
@@ -1287,11 +1287,10 @@ sl811h_hub_control( goto error;put_unaligned_le32 (sl811->port1, buf); -#ifndef VERBOSE - if (*(u16*)(buf+2)) /* only if wPortChange is interesting */ -#endif -dev_dbg (hcd->self.controller,"GetPortStatus %08x\n" , - sl811->port1); +if (__is_defined (VERBOSE ) || + *(u16 *)(buf+2 ))/* only if wPortChange is interesting */ +dev_dbg (hcd->self.controller,"GetPortStatus %08x\n" , + sl811->port1);break ;case SetPortFeature:if (wIndex !=1 || wLength !=0 )
fs/block_dev.c +17 -3
@@ -1987,6 +1987,7 @@ ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from)struct inode *bd_inode =bdev_file_inode (file);loff_t size =i_size_read (bd_inode);struct blk_plug plug; +size_t shorted =0 ;ssize_t ret;if (bdev_read_only (I_BDEV (bd_inode)))
@@ -2005,12 +2006,17 @@ ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from)if ((iocb->ki_flags & (IOCB_NOWAIT |IOCB_DIRECT )) ==IOCB_NOWAIT )return -EOPNOTSUPP ; -iov_iter_truncate (from, size - iocb->ki_pos); + size -= iocb->ki_pos; +if (iov_iter_count (from) > size) { + shorted =iov_iter_count (from) - size; +iov_iter_truncate (from, size); + }blk_start_plug (&plug); ret =__generic_file_write_iter (iocb, from);if (ret >0 ) ret =generic_write_sync (iocb, ret); +iov_iter_reexpand (from,iov_iter_count (from) + shorted);blk_finish_plug (&plug);return ret; }
@@ -2022,13 +2028,21 @@ ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to)struct inode *bd_inode =bdev_file_inode (file);loff_t size =i_size_read (bd_inode);loff_t pos = iocb->ki_pos; +size_t shorted =0 ; +ssize_t ret;if (pos >= size)return 0 ; size -= pos; -iov_iter_truncate (to, size); -return generic_file_read_iter (iocb, to); +if (iov_iter_count (to) > size) { + shorted =iov_iter_count (to) - size; +iov_iter_truncate (to, size); + } + + ret =generic_file_read_iter (iocb, to); +iov_iter_reexpand (to,iov_iter_count (to) + shorted); +return ret; }EXPORT_SYMBOL_GPL (blkdev_read_iter);
fs/ceph/caps.c +1 -0
@@ -1780,6 +1780,7 @@ static int try_nonblocking_invalidate(struct inode *inode)u32 invalidating_gen = ci->i_rdcache_gen;spin_unlock (&ci->i_ceph_lock); +ceph_fscache_invalidate (inode);invalidate_mapping_pages (&inode->i_data,0 ,-1 );spin_lock (&ci->i_ceph_lock);
fs/ceph/inode.c +1 -0
@@ -1875,6 +1875,7 @@ static void ceph_do_invalidate_pages(struct inode *inode) orig_gen = ci->i_rdcache_gen;spin_unlock (&ci->i_ceph_lock); +ceph_fscache_invalidate (inode);if (invalidate_inode_pages2 (inode->i_mapping) <0 ) {pr_err ("invalidate_pages %p fails\n" , inode); }
include/linux/virtio_net.h +9 -5
@@ -65,14 +65,18 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb,skb_reset_mac_header (skb);if (hdr->flags &VIRTIO_NET_HDR_F_NEEDS_CSUM ) { -u16 start =__virtio16_to_cpu (little_endian, hdr->csum_start); -u16 off =__virtio16_to_cpu (little_endian, hdr->csum_offset); +u32 start =__virtio16_to_cpu (little_endian, hdr->csum_start); +u32 off =__virtio16_to_cpu (little_endian, hdr->csum_offset); +u32 needed = start +max_t (u32, thlen, off +sizeof (__sum16)); + +if (!pskb_may_pull (skb, needed)) +return -EINVAL ;if (!skb_partial_csum_set (skb, start, off))return -EINVAL ; p_off =skb_transport_offset (skb) + thlen; -if (p_off >skb_headlen (skb)) +if (!pskb_may_pull (skb, p_off))return -EINVAL ; }else {/* gso packets without NEEDS_CSUM do not set transport_offset.
@@ -102,14 +106,14 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb, } p_off = keys.control.thoff + thlen; -if (p_off >skb_headlen (skb) || +if (!pskb_may_pull (skb, p_off) || keys.basic.ip_proto != ip_proto)return -EINVAL ;skb_set_transport_header (skb, keys.control.thoff); }else if (gso_type) { p_off = thlen; -if (p_off >skb_headlen (skb)) +if (!pskb_may_pull (skb, p_off))return -EINVAL ; } }
lib/stackdepot.c +3 -3
@@ -69,7 +69,7 @@ static void *stack_slabs[STACK_ALLOC_MAX_SLABS];static int depot_index;static int next_slab_inited;static size_t depot_offset; -static DEFINE_SPINLOCK (depot_lock); +static DEFINE_RAW_SPINLOCK (depot_lock);static bool init_stack_slab (void **prealloc) {
@@ -269,7 +269,7 @@ depot_stack_handle_t stack_depot_save(unsigned long *entries, prealloc =page_address (page); } -spin_lock_irqsave (&depot_lock, flags); +raw_spin_lock_irqsave (&depot_lock, flags); found =find_stack (*bucket, entries, nr_entries, hash);if (!found) {
@@ -293,7 +293,7 @@ depot_stack_handle_t stack_depot_save(unsigned long *entries,WARN_ON (!init_stack_slab (&prealloc)); } -spin_unlock_irqrestore (&depot_lock, flags); +raw_spin_unlock_irqrestore (&depot_lock, flags); exit:if (prealloc) {/* Nobody used this memory, ok to free it. */
net/bridge/br_netlink.c +3 -2
@@ -99,8 +99,9 @@ static size_t br_get_link_af_size_filtered(const struct net_device *dev,rcu_read_lock ();if (netif_is_bridge_port (dev)) { - p =br_port_get_rcu (dev); - vg =nbp_vlan_group_rcu (p); + p =br_port_get_check_rcu (dev); +if (p) + vg =nbp_vlan_group_rcu (p); }else if (dev->priv_flags &IFF_EBRIDGE ) { br =netdev_priv (dev); vg =br_vlan_group_rcu (br);
net/ipv6/ip6_gre.c +2 -5
@@ -387,7 +387,6 @@ static struct ip6_tnl *ip6gre_tunnel_locate(struct net *net,if (!(nt->parms.o_flags &TUNNEL_SEQ )) dev->features |=NETIF_F_LLTX ; -dev_hold (dev);ip6gre_tunnel_link (ign, nt);return nt;
@@ -1483,6 +1482,7 @@ static int ip6gre_tunnel_init_common(struct net_device *dev) }ip6gre_tnl_init_features (dev); +dev_hold (dev);return 0 ; cleanup_dst_cache_init:
@@ -1525,8 +1525,6 @@ static void ip6gre_fb_tunnel_init(struct net_device *dev)strcpy (tunnel->parms.name, dev->name); tunnel->hlen =sizeof (struct ipv6hdr ) +4 ; - -dev_hold (dev); }static struct inet6_protocol ip6gre_protocol__read_mostly = {
@@ -1876,6 +1874,7 @@ static int ip6erspan_tap_init(struct net_device *dev) dev->priv_flags |=IFF_LIVE_ADDR_CHANGE ;ip6erspan_tnl_link_config (tunnel,1 ); +dev_hold (dev);return 0 ; cleanup_dst_cache_init:
@@ -1975,8 +1974,6 @@ static int ip6gre_newlink_common(struct net *src_net, struct net_device *dev,if (tb[IFLA_MTU ])ip6_tnl_change_mtu (dev,nla_get_u32 (tb[IFLA_MTU ])); -dev_hold (dev); - out:return err; }
net/ipv6/ip6_tunnel.c +1 -2
@@ -267,7 +267,6 @@ static int ip6_tnl_create2(struct net_device *dev)strcpy (t->parms.name, dev->name); -dev_hold (dev);ip6_tnl_link (ip6n, t);return 0 ;
@@ -1861,6 +1860,7 @@ ip6_tnl_dev_init_gen(struct net_device *dev) dev->min_mtu =ETH_MIN_MTU ; dev->max_mtu =IP6_MAX_MTU - dev->hard_header_len; +dev_hold (dev);return 0 ; destroy_dst:
@@ -1904,7 +1904,6 @@ static int __net_init ip6_fb_tnl_dev_init(struct net_device *dev)struct ip6_tnl_net *ip6n =net_generic (net, ip6_tnl_net_id); t->parms.proto =IPPROTO_IPV6 ; -dev_hold (dev);rcu_assign_pointer (ip6n->tnls_wc[0 ], t);return 0 ;
net/ipv6/ip6_vti.c +0 -1
@@ -952,7 +952,6 @@ static int __net_init vti6_fb_tnl_dev_init(struct net_device *dev)struct vti6_net *ip6n =net_generic (net, vti6_net_id); t->parms.proto =IPPROTO_IPV6 ; -dev_hold (dev);rcu_assign_pointer (ip6n->tnls_wc[0 ], t);return 0 ;
net/ipv6/sit.c +1 -4
@@ -211,8 +211,6 @@ static int ipip6_tunnel_create(struct net_device *dev)ipip6_tunnel_clone_6rd (dev, sitn); -dev_hold (dev); -ipip6_tunnel_link (sitn, t);return 0 ;
@@ -1408,7 +1406,7 @@ static int ipip6_tunnel_init(struct net_device *dev) dev->tstats =NULL ;return err; } - +dev_hold (dev);return 0 ; }
@@ -1424,7 +1422,6 @@ static void __net_init ipip6_fb_tunnel_init(struct net_device *dev) iph->ihl =5 ; iph->ttl =64 ; -dev_hold (dev);rcu_assign_pointer (sitn->tunnels_wc[0 ], tunnel); }
net/xdp/xsk_queue.h +5 -2
@@ -363,12 +363,15 @@ static inline void xskq_produce_flush_desc(struct xsk_queue *q)static inline bool xskq_full_desc (struct xsk_queue *q) { -return xskq_nb_avail (q, q->nentries) == q->nentries; +/* No barriers needed since data is not accessed */ +return READ_ONCE (q->ring->producer) -READ_ONCE (q->ring->consumer) == + q->nentries; }static inline bool xskq_empty_desc (struct xsk_queue *q) { -return xskq_nb_free (q, q->prod_tail, q->nentries) == q->nentries; +/* No barriers needed since data is not accessed */ +return READ_ONCE (q->ring->consumer) ==READ_ONCE (q->ring->producer); }void xskq_set_umem (struct xsk_queue *q,u64 size,u64 chunk_mask);
scripts/bloat-o-meter +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # # Copyright 2004 Matt Mackall <[email protected]> #
scripts/config +1 -1
@@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # SPDX-License-Identifier: GPL-2.0 # Manipulate options in a .config file from the command line
scripts/diffconfig +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # SPDX-License-Identifier: GPL-2.0 # # diffconfig - a tool to compare .config files.
scripts/get_abi.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # SPDX-License-Identifier: GPL-2.0 use strict;
scripts/recordmcount.pl +1 -1
@@ -395,7 +395,7 @@ if ($arch eq "x86_64") { $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s_mcount\$"; } elsif ($arch eq "riscv") { $function_regex = "^([0-9a-fA-F]+)\\s+<([^.0-9][0-9a-zA-Z_\\.]+)>:"; - $mcount_regex = "^\\s*([0-9a-fA-F]+):\\sR_RISCV_CALL\\s_mcount\$"; + $mcount_regex = "^\\s*([0-9a-fA-F]+):\\sR_RISCV_CALL(_PLT)?\\s_?mcount\$"; $type = ".quad"; $alignment = 2; } elsif ($arch eq "nds32") {
scripts/show_delta +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # SPDX-License-Identifier: GPL-2.0-only # # show_deltas: Read list of printk messages instrumented with
scripts/sphinx-pre-install +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # SPDX-License-Identifier: GPL-2.0-or-later use strict;
scripts/split-man.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # SPDX-License-Identifier: GPL-2.0 # # Author: Mauro Carvalho Chehab <[email protected]>
scripts/tracing/draw_functrace.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # SPDX-License-Identifier: GPL-2.0-only """
sound/pci/hda/hda_generic.c +11 -5
@@ -1202,11 +1202,17 @@ static const char *get_line_out_pfx(struct hda_codec *codec, int ch, *index = ch;return "Headphone" ;case AUTO_PIN_LINE_OUT : -/* This deals with the case where we have two DACs and -* one LO, one HP and one Speaker */ -if (!ch && cfg->speaker_outs && cfg->hp_outs) { -bool hp_lo_shared = !path_has_mixer (codec, spec->hp_paths[0 ], ctl_type); -bool spk_lo_shared = !path_has_mixer (codec, spec->speaker_paths[0 ], ctl_type); +/* This deals with the case where one HP or one Speaker or +* one HP + one Speaker need to share the DAC with LO +*/ +if (!ch) { +bool hp_lo_shared = false, spk_lo_shared = false; + +if (cfg->speaker_outs) + spk_lo_shared = !path_has_mixer (codec, + spec->speaker_paths[0 ], ctl_type); +if (cfg->hp_outs) + hp_lo_shared = !path_has_mixer (codec, spec->hp_paths[0 ], ctl_type);if (hp_lo_shared && spk_lo_shared)return spec->vmaster_mute.hook ?"PCM" :"Master" ;if (hp_lo_shared)
tools/perf/python/tracepoint.py +1 -1
@@ -1,4 +1,4 @@ -#! /usr/bin/python +#! /usr/bin/env python # SPDX-License-Identifier: GPL-2.0 # -*- python -*- # -*- coding: utf-8 -*-
tools/perf/python/twatch.py +1 -1
@@ -1,4 +1,4 @@ -#! /usr/bin/python +#! /usr/bin/env python # SPDX-License-Identifier: GPL-2.0-only # -*- python -*- # -*- coding: utf-8 -*-
tools/power/x86/intel_pstate_tracer/intel_pstate_tracer.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # SPDX-License-Identifier: GPL-2.0-only # -*- coding: utf-8 -*- #
tools/testing/ktest/compare-ktest-sample.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # SPDX-License-Identifier: GPL-2.0 open (IN,"ktest.pl");
tools/testing/selftests/bpf/test_offload.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python3 +#!/usr/bin/env python3 # Copyright (C) 2017 Netronome Systems, Inc. # Copyright (c) 2019 Mellanox Technologies. All rights reserved
tools/testing/selftests/kselftest/prefix.pl +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # SPDX-License-Identifier: GPL-2.0 # Prefix all lines with "# ", unbuffered. Command being piped in may need # to have unbuffering forced with "stdbuf -i0 -o0 -e0 $cmd".
tools/testing/selftests/tc-testing/tdc_batch.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python3 +#!/usr/bin/env python3 """ tdc_batch.py - a script to generate TC batch file
tools/testing/selftests/tc-testing/tdc_multibatch.py +1 -1
@@ -1,4 +1,4 @@ -#!/usr/bin/python3 +#!/usr/bin/env python3 # SPDX-License-Identifier: GPL-2.0 """ tdc_multibatch.py - a thin wrapper over tdc_batch.py to generate multiple batch
virt/kvm/arm/arm.c +2 -0
@@ -579,6 +579,8 @@ static int kvm_vcpu_first_run_init(struct kvm_vcpu *vcpu) vcpu->arch.has_run_once = true; +kvm_arm_vcpu_init_debug (vcpu); +if (likely (irqchip_in_kernel (kvm))) {/* * Map the VGIC hardware resources before running a vcpu the