* [PATCH 01/24] KVM: arm64: Move virt/kvm/arm to arch/arm64
From: Marc Zyngier @ 2020-05-29 16:00 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Alexandru Elisei, Andrew Scull, Ard Biesheuvel, Christoffer Dall,
David Brazdil, Fuad Tabba, James Morse, Jiang Yi, Keqian Zhu,
Mark Rutland, Suzuki K Poulose, Will Deacon, Zenghui Yu,
Julien Thierry, linux-arm-kernel, kvm, kvmarm
In-Reply-To: <20200529160121.899083-1-maz@kernel.org>
Now that the 32bit KVM/arm host is a distant memory, let's move the
whole of the KVM/arm64 code into the arm64 tree.
As they said in the song: Welcome Home (Sanitarium).
Signed-off-by: Marc Zyngier <maz@kernel.org>
Acked-by: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20200513104034.74741-1-maz@kernel.org
---
MAINTAINERS | 1 -
arch/arm64/kvm/Makefile | 44 ++--
{virt/kvm/arm => arch/arm64/kvm}/aarch32.c | 0
{virt/kvm/arm => arch/arm64/kvm}/arch_timer.c | 0
{virt/kvm/arm => arch/arm64/kvm}/arm.c | 2 +-
arch/arm64/kvm/handle_exit.c | 2 +-
arch/arm64/kvm/hyp/Makefile | 9 +-
.../kvm/arm => arch/arm64/kvm}/hyp/aarch32.c | 0
.../kvm/arm => arch/arm64/kvm}/hyp/timer-sr.c | 0
.../arm => arch/arm64/kvm}/hyp/vgic-v3-sr.c | 4 -
{virt/kvm/arm => arch/arm64/kvm}/hypercalls.c | 0
{virt/kvm/arm => arch/arm64/kvm}/mmio.c | 0
{virt/kvm/arm => arch/arm64/kvm}/mmu.c | 0
{virt/kvm/arm => arch/arm64/kvm}/perf.c | 0
.../arm/pmu.c => arch/arm64/kvm/pmu-emul.c | 0
{virt/kvm/arm => arch/arm64/kvm}/psci.c | 0
{virt/kvm/arm => arch/arm64/kvm}/pvtime.c | 0
arch/arm64/kvm/trace.h | 216 +-----------------
.../arm/trace.h => arch/arm64/kvm/trace_arm.h | 11 +-
arch/arm64/kvm/trace_handle_exit.h | 215 +++++++++++++++++
arch/arm64/kvm/vgic-sys-reg-v3.c | 2 +-
{virt/kvm/arm => arch/arm64/kvm}/vgic/trace.h | 2 +-
.../arm => arch/arm64/kvm}/vgic/vgic-debug.c | 0
.../arm => arch/arm64/kvm}/vgic/vgic-init.c | 0
.../arm => arch/arm64/kvm}/vgic/vgic-irqfd.c | 0
.../arm => arch/arm64/kvm}/vgic/vgic-its.c | 0
.../arm64/kvm}/vgic/vgic-kvm-device.c | 0
.../arm64/kvm}/vgic/vgic-mmio-v2.c | 0
.../arm64/kvm}/vgic/vgic-mmio-v3.c | 0
.../arm => arch/arm64/kvm}/vgic/vgic-mmio.c | 0
.../arm => arch/arm64/kvm}/vgic/vgic-mmio.h | 0
.../kvm/arm => arch/arm64/kvm}/vgic/vgic-v2.c | 0
.../kvm/arm => arch/arm64/kvm}/vgic/vgic-v3.c | 2 -
.../kvm/arm => arch/arm64/kvm}/vgic/vgic-v4.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic.h | 0
36 files changed, 253 insertions(+), 257 deletions(-)
rename {virt/kvm/arm => arch/arm64/kvm}/aarch32.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/arch_timer.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/arm.c (99%)
rename {virt/kvm/arm => arch/arm64/kvm}/hyp/aarch32.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/hyp/timer-sr.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/hyp/vgic-v3-sr.c (99%)
rename {virt/kvm/arm => arch/arm64/kvm}/hypercalls.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/mmio.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/mmu.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/perf.c (100%)
rename virt/kvm/arm/pmu.c => arch/arm64/kvm/pmu-emul.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/psci.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/pvtime.c (100%)
rename virt/kvm/arm/trace.h => arch/arm64/kvm/trace_arm.h (97%)
create mode 100644 arch/arm64/kvm/trace_handle_exit.h
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/trace.h (93%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-debug.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-init.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-irqfd.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-its.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-kvm-device.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio-v2.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio-v3.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio.h (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v2.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v3.c (99%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v4.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic.h (100%)
diff --git a/MAINTAINERS b/MAINTAINERS
index 091ec22c1a23..6c5b928989ed 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -9295,7 +9295,6 @@ F: arch/arm64/include/asm/kvm*
F: arch/arm64/include/uapi/asm/kvm*
F: arch/arm64/kvm/
F: include/kvm/arm_*
-F: virt/kvm/arm/
KERNEL VIRTUAL MACHINE FOR MIPS (KVM/mips)
L: linux-mips@vger.kernel.org
diff --git a/arch/arm64/kvm/Makefile b/arch/arm64/kvm/Makefile
index 5ffbdc39e780..7a3768538343 100644
--- a/arch/arm64/kvm/Makefile
+++ b/arch/arm64/kvm/Makefile
@@ -3,37 +3,37 @@
# Makefile for Kernel-based Virtual Machine module
#
-ccflags-y += -I $(srctree)/$(src) -I $(srctree)/virt/kvm/arm/vgic
+ccflags-y += -I $(srctree)/$(src)
KVM=../../../virt/kvm
obj-$(CONFIG_KVM_ARM_HOST) += kvm.o
obj-$(CONFIG_KVM_ARM_HOST) += hyp/
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/kvm_main.o $(KVM)/coalesced_mmio.o $(KVM)/eventfd.o $(KVM)/vfio.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/arm.o $(KVM)/arm/mmu.o $(KVM)/arm/mmio.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/psci.o $(KVM)/arm/perf.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hypercalls.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/pvtime.o
+kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/kvm_main.o $(KVM)/coalesced_mmio.o
+kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/eventfd.o $(KVM)/vfio.o $(KVM)/irqchip.o
+kvm-$(CONFIG_KVM_ARM_HOST) += arm.o mmu.o mmio.o
+kvm-$(CONFIG_KVM_ARM_HOST) += psci.o perf.o
+kvm-$(CONFIG_KVM_ARM_HOST) += hypercalls.o
+kvm-$(CONFIG_KVM_ARM_HOST) += pvtime.o
kvm-$(CONFIG_KVM_ARM_HOST) += inject_fault.o regmap.o va_layout.o
kvm-$(CONFIG_KVM_ARM_HOST) += hyp.o hyp-init.o handle_exit.o
kvm-$(CONFIG_KVM_ARM_HOST) += guest.o debug.o reset.o sys_regs.o sys_regs_generic_v8.o
kvm-$(CONFIG_KVM_ARM_HOST) += vgic-sys-reg-v3.o fpsimd.o pmu.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/aarch32.o
+kvm-$(CONFIG_KVM_ARM_HOST) += aarch32.o
+kvm-$(CONFIG_KVM_ARM_HOST) += arch_timer.o
+kvm-$(CONFIG_KVM_ARM_PMU) += pmu-emul.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-init.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-irqfd.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-v2.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-v3.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-v4.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-mmio.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-mmio-v2.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-mmio-v3.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-kvm-device.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-its.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/vgic/vgic-debug.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/irqchip.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/arch_timer.o
-kvm-$(CONFIG_KVM_ARM_PMU) += $(KVM)/arm/pmu.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-init.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-irqfd.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-v2.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-v3.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-v4.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-mmio.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-mmio-v2.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-mmio-v3.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-kvm-device.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-its.o
+kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-debug.o
diff --git a/virt/kvm/arm/aarch32.c b/arch/arm64/kvm/aarch32.c
similarity index 100%
rename from virt/kvm/arm/aarch32.c
rename to arch/arm64/kvm/aarch32.c
diff --git a/virt/kvm/arm/arch_timer.c b/arch/arm64/kvm/arch_timer.c
similarity index 100%
rename from virt/kvm/arm/arch_timer.c
rename to arch/arm64/kvm/arch_timer.c
diff --git a/virt/kvm/arm/arm.c b/arch/arm64/kvm/arm.c
similarity index 99%
rename from virt/kvm/arm/arm.c
rename to arch/arm64/kvm/arm.c
index 48d0ec44ad77..c958bb37b769 100644
--- a/virt/kvm/arm/arm.c
+++ b/arch/arm64/kvm/arm.c
@@ -22,7 +22,7 @@
#include <trace/events/kvm.h>
#define CREATE_TRACE_POINTS
-#include "trace.h"
+#include "trace_arm.h"
#include <linux/uaccess.h>
#include <asm/ptrace.h>
diff --git a/arch/arm64/kvm/handle_exit.c b/arch/arm64/kvm/handle_exit.c
index aacfc55de44c..eb194696ef62 100644
--- a/arch/arm64/kvm/handle_exit.c
+++ b/arch/arm64/kvm/handle_exit.c
@@ -23,7 +23,7 @@
#include <kvm/arm_hypercalls.h>
#define CREATE_TRACE_POINTS
-#include "trace.h"
+#include "trace_handle_exit.h"
typedef int (*exit_handle_fn)(struct kvm_vcpu *, struct kvm_run *);
diff --git a/arch/arm64/kvm/hyp/Makefile b/arch/arm64/kvm/hyp/Makefile
index ea710f674cb6..dc18274a6826 100644
--- a/arch/arm64/kvm/hyp/Makefile
+++ b/arch/arm64/kvm/hyp/Makefile
@@ -6,12 +6,9 @@
ccflags-y += -fno-stack-protector -DDISABLE_BRANCH_PROFILING \
$(DISABLE_STACKLEAK_PLUGIN)
-KVM=../../../../virt/kvm
-
-obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/vgic-v3-sr.o
-obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/timer-sr.o
-obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/aarch32.o
-
+obj-$(CONFIG_KVM_ARM_HOST) += vgic-v3-sr.o
+obj-$(CONFIG_KVM_ARM_HOST) += timer-sr.o
+obj-$(CONFIG_KVM_ARM_HOST) += aarch32.o
obj-$(CONFIG_KVM_ARM_HOST) += vgic-v2-cpuif-proxy.o
obj-$(CONFIG_KVM_ARM_HOST) += sysreg-sr.o
obj-$(CONFIG_KVM_ARM_HOST) += debug-sr.o
diff --git a/virt/kvm/arm/hyp/aarch32.c b/arch/arm64/kvm/hyp/aarch32.c
similarity index 100%
rename from virt/kvm/arm/hyp/aarch32.c
rename to arch/arm64/kvm/hyp/aarch32.c
diff --git a/virt/kvm/arm/hyp/timer-sr.c b/arch/arm64/kvm/hyp/timer-sr.c
similarity index 100%
rename from virt/kvm/arm/hyp/timer-sr.c
rename to arch/arm64/kvm/hyp/timer-sr.c
diff --git a/virt/kvm/arm/hyp/vgic-v3-sr.c b/arch/arm64/kvm/hyp/vgic-v3-sr.c
similarity index 99%
rename from virt/kvm/arm/hyp/vgic-v3-sr.c
rename to arch/arm64/kvm/hyp/vgic-v3-sr.c
index ccf1fde9836c..49fedf6710f9 100644
--- a/virt/kvm/arm/hyp/vgic-v3-sr.c
+++ b/arch/arm64/kvm/hyp/vgic-v3-sr.c
@@ -431,8 +431,6 @@ void __hyp_text __vgic_v3_write_vmcr(u32 vmcr)
write_gicreg(vmcr, ICH_VMCR_EL2);
}
-#ifdef CONFIG_ARM64
-
static int __hyp_text __vgic_v3_bpr_min(void)
{
/* See Pseudocode for VPriorityGroup */
@@ -1126,5 +1124,3 @@ int __hyp_text __vgic_v3_perform_cpuif_access(struct kvm_vcpu *vcpu)
return 1;
}
-
-#endif
diff --git a/virt/kvm/arm/hypercalls.c b/arch/arm64/kvm/hypercalls.c
similarity index 100%
rename from virt/kvm/arm/hypercalls.c
rename to arch/arm64/kvm/hypercalls.c
diff --git a/virt/kvm/arm/mmio.c b/arch/arm64/kvm/mmio.c
similarity index 100%
rename from virt/kvm/arm/mmio.c
rename to arch/arm64/kvm/mmio.c
diff --git a/virt/kvm/arm/mmu.c b/arch/arm64/kvm/mmu.c
similarity index 100%
rename from virt/kvm/arm/mmu.c
rename to arch/arm64/kvm/mmu.c
diff --git a/virt/kvm/arm/perf.c b/arch/arm64/kvm/perf.c
similarity index 100%
rename from virt/kvm/arm/perf.c
rename to arch/arm64/kvm/perf.c
diff --git a/virt/kvm/arm/pmu.c b/arch/arm64/kvm/pmu-emul.c
similarity index 100%
rename from virt/kvm/arm/pmu.c
rename to arch/arm64/kvm/pmu-emul.c
diff --git a/virt/kvm/arm/psci.c b/arch/arm64/kvm/psci.c
similarity index 100%
rename from virt/kvm/arm/psci.c
rename to arch/arm64/kvm/psci.c
diff --git a/virt/kvm/arm/pvtime.c b/arch/arm64/kvm/pvtime.c
similarity index 100%
rename from virt/kvm/arm/pvtime.c
rename to arch/arm64/kvm/pvtime.c
diff --git a/arch/arm64/kvm/trace.h b/arch/arm64/kvm/trace.h
index eab91ad0effb..86f9ea47be29 100644
--- a/arch/arm64/kvm/trace.h
+++ b/arch/arm64/kvm/trace.h
@@ -1,216 +1,8 @@
/* SPDX-License-Identifier: GPL-2.0 */
-#if !defined(_TRACE_ARM64_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
+#ifndef _TRACE_ARM64_KVM_H
#define _TRACE_ARM64_KVM_H
-#include <linux/tracepoint.h>
-#include "sys_regs.h"
+#include "trace_arm.h"
+#include "trace_handle_exit.h"
-#undef TRACE_SYSTEM
-#define TRACE_SYSTEM kvm
-
-TRACE_EVENT(kvm_wfx_arm64,
- TP_PROTO(unsigned long vcpu_pc, bool is_wfe),
- TP_ARGS(vcpu_pc, is_wfe),
-
- TP_STRUCT__entry(
- __field(unsigned long, vcpu_pc)
- __field(bool, is_wfe)
- ),
-
- TP_fast_assign(
- __entry->vcpu_pc = vcpu_pc;
- __entry->is_wfe = is_wfe;
- ),
-
- TP_printk("guest executed wf%c at: 0x%08lx",
- __entry->is_wfe ? 'e' : 'i', __entry->vcpu_pc)
-);
-
-TRACE_EVENT(kvm_hvc_arm64,
- TP_PROTO(unsigned long vcpu_pc, unsigned long r0, unsigned long imm),
- TP_ARGS(vcpu_pc, r0, imm),
-
- TP_STRUCT__entry(
- __field(unsigned long, vcpu_pc)
- __field(unsigned long, r0)
- __field(unsigned long, imm)
- ),
-
- TP_fast_assign(
- __entry->vcpu_pc = vcpu_pc;
- __entry->r0 = r0;
- __entry->imm = imm;
- ),
-
- TP_printk("HVC at 0x%08lx (r0: 0x%08lx, imm: 0x%lx)",
- __entry->vcpu_pc, __entry->r0, __entry->imm)
-);
-
-TRACE_EVENT(kvm_arm_setup_debug,
- TP_PROTO(struct kvm_vcpu *vcpu, __u32 guest_debug),
- TP_ARGS(vcpu, guest_debug),
-
- TP_STRUCT__entry(
- __field(struct kvm_vcpu *, vcpu)
- __field(__u32, guest_debug)
- ),
-
- TP_fast_assign(
- __entry->vcpu = vcpu;
- __entry->guest_debug = guest_debug;
- ),
-
- TP_printk("vcpu: %p, flags: 0x%08x", __entry->vcpu, __entry->guest_debug)
-);
-
-TRACE_EVENT(kvm_arm_clear_debug,
- TP_PROTO(__u32 guest_debug),
- TP_ARGS(guest_debug),
-
- TP_STRUCT__entry(
- __field(__u32, guest_debug)
- ),
-
- TP_fast_assign(
- __entry->guest_debug = guest_debug;
- ),
-
- TP_printk("flags: 0x%08x", __entry->guest_debug)
-);
-
-TRACE_EVENT(kvm_arm_set_dreg32,
- TP_PROTO(const char *name, __u32 value),
- TP_ARGS(name, value),
-
- TP_STRUCT__entry(
- __field(const char *, name)
- __field(__u32, value)
- ),
-
- TP_fast_assign(
- __entry->name = name;
- __entry->value = value;
- ),
-
- TP_printk("%s: 0x%08x", __entry->name, __entry->value)
-);
-
-TRACE_DEFINE_SIZEOF(__u64);
-
-TRACE_EVENT(kvm_arm_set_regset,
- TP_PROTO(const char *type, int len, __u64 *control, __u64 *value),
- TP_ARGS(type, len, control, value),
- TP_STRUCT__entry(
- __field(const char *, name)
- __field(int, len)
- __array(u64, ctrls, 16)
- __array(u64, values, 16)
- ),
- TP_fast_assign(
- __entry->name = type;
- __entry->len = len;
- memcpy(__entry->ctrls, control, len << 3);
- memcpy(__entry->values, value, len << 3);
- ),
- TP_printk("%d %s CTRL:%s VALUE:%s", __entry->len, __entry->name,
- __print_array(__entry->ctrls, __entry->len, sizeof(__u64)),
- __print_array(__entry->values, __entry->len, sizeof(__u64)))
-);
-
-TRACE_EVENT(trap_reg,
- TP_PROTO(const char *fn, int reg, bool is_write, u64 write_value),
- TP_ARGS(fn, reg, is_write, write_value),
-
- TP_STRUCT__entry(
- __field(const char *, fn)
- __field(int, reg)
- __field(bool, is_write)
- __field(u64, write_value)
- ),
-
- TP_fast_assign(
- __entry->fn = fn;
- __entry->reg = reg;
- __entry->is_write = is_write;
- __entry->write_value = write_value;
- ),
-
- TP_printk("%s %s reg %d (0x%08llx)", __entry->fn, __entry->is_write?"write to":"read from", __entry->reg, __entry->write_value)
-);
-
-TRACE_EVENT(kvm_handle_sys_reg,
- TP_PROTO(unsigned long hsr),
- TP_ARGS(hsr),
-
- TP_STRUCT__entry(
- __field(unsigned long, hsr)
- ),
-
- TP_fast_assign(
- __entry->hsr = hsr;
- ),
-
- TP_printk("HSR 0x%08lx", __entry->hsr)
-);
-
-TRACE_EVENT(kvm_sys_access,
- TP_PROTO(unsigned long vcpu_pc, struct sys_reg_params *params, const struct sys_reg_desc *reg),
- TP_ARGS(vcpu_pc, params, reg),
-
- TP_STRUCT__entry(
- __field(unsigned long, vcpu_pc)
- __field(bool, is_write)
- __field(const char *, name)
- __field(u8, Op0)
- __field(u8, Op1)
- __field(u8, CRn)
- __field(u8, CRm)
- __field(u8, Op2)
- ),
-
- TP_fast_assign(
- __entry->vcpu_pc = vcpu_pc;
- __entry->is_write = params->is_write;
- __entry->name = reg->name;
- __entry->Op0 = reg->Op0;
- __entry->Op0 = reg->Op0;
- __entry->Op1 = reg->Op1;
- __entry->CRn = reg->CRn;
- __entry->CRm = reg->CRm;
- __entry->Op2 = reg->Op2;
- ),
-
- TP_printk("PC: %lx %s (%d,%d,%d,%d,%d) %s",
- __entry->vcpu_pc, __entry->name ?: "UNKN",
- __entry->Op0, __entry->Op1, __entry->CRn,
- __entry->CRm, __entry->Op2,
- __entry->is_write ? "write" : "read")
-);
-
-TRACE_EVENT(kvm_set_guest_debug,
- TP_PROTO(struct kvm_vcpu *vcpu, __u32 guest_debug),
- TP_ARGS(vcpu, guest_debug),
-
- TP_STRUCT__entry(
- __field(struct kvm_vcpu *, vcpu)
- __field(__u32, guest_debug)
- ),
-
- TP_fast_assign(
- __entry->vcpu = vcpu;
- __entry->guest_debug = guest_debug;
- ),
-
- TP_printk("vcpu: %p, flags: 0x%08x", __entry->vcpu, __entry->guest_debug)
-);
-
-
-#endif /* _TRACE_ARM64_KVM_H */
-
-#undef TRACE_INCLUDE_PATH
-#define TRACE_INCLUDE_PATH .
-#undef TRACE_INCLUDE_FILE
-#define TRACE_INCLUDE_FILE trace
-
-/* This part must be outside protection */
-#include <trace/define_trace.h>
+#endif /* _TRACE_ARM64_KVM_H */
diff --git a/virt/kvm/arm/trace.h b/arch/arm64/kvm/trace_arm.h
similarity index 97%
rename from virt/kvm/arm/trace.h
rename to arch/arm64/kvm/trace_arm.h
index cc94ccc68821..4c71270cc097 100644
--- a/virt/kvm/arm/trace.h
+++ b/arch/arm64/kvm/trace_arm.h
@@ -1,10 +1,9 @@
/* SPDX-License-Identifier: GPL-2.0 */
-#if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
-#define _TRACE_KVM_H
+#if !defined(_TRACE_ARM_ARM64_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_ARM_ARM64_KVM_H
#include <kvm/arm_arch_timer.h>
#include <linux/tracepoint.h>
-#include <asm/kvm_arm.h>
#undef TRACE_SYSTEM
#define TRACE_SYSTEM kvm
@@ -368,12 +367,12 @@ TRACE_EVENT(kvm_timer_emulate,
__entry->timer_idx, __entry->should_fire)
);
-#endif /* _TRACE_KVM_H */
+#endif /* _TRACE_ARM_ARM64_KVM_H */
#undef TRACE_INCLUDE_PATH
-#define TRACE_INCLUDE_PATH ../../virt/kvm/arm
+#define TRACE_INCLUDE_PATH .
#undef TRACE_INCLUDE_FILE
-#define TRACE_INCLUDE_FILE trace
+#define TRACE_INCLUDE_FILE trace_arm
/* This part must be outside protection */
#include <trace/define_trace.h>
diff --git a/arch/arm64/kvm/trace_handle_exit.h b/arch/arm64/kvm/trace_handle_exit.h
new file mode 100644
index 000000000000..2c56d1e0f5bd
--- /dev/null
+++ b/arch/arm64/kvm/trace_handle_exit.h
@@ -0,0 +1,215 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#if !defined(_TRACE_HANDLE_EXIT_ARM64_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HANDLE_EXIT_ARM64_KVM_H
+
+#include <linux/tracepoint.h>
+#include "sys_regs.h"
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM kvm
+
+TRACE_EVENT(kvm_wfx_arm64,
+ TP_PROTO(unsigned long vcpu_pc, bool is_wfe),
+ TP_ARGS(vcpu_pc, is_wfe),
+
+ TP_STRUCT__entry(
+ __field(unsigned long, vcpu_pc)
+ __field(bool, is_wfe)
+ ),
+
+ TP_fast_assign(
+ __entry->vcpu_pc = vcpu_pc;
+ __entry->is_wfe = is_wfe;
+ ),
+
+ TP_printk("guest executed wf%c at: 0x%08lx",
+ __entry->is_wfe ? 'e' : 'i', __entry->vcpu_pc)
+);
+
+TRACE_EVENT(kvm_hvc_arm64,
+ TP_PROTO(unsigned long vcpu_pc, unsigned long r0, unsigned long imm),
+ TP_ARGS(vcpu_pc, r0, imm),
+
+ TP_STRUCT__entry(
+ __field(unsigned long, vcpu_pc)
+ __field(unsigned long, r0)
+ __field(unsigned long, imm)
+ ),
+
+ TP_fast_assign(
+ __entry->vcpu_pc = vcpu_pc;
+ __entry->r0 = r0;
+ __entry->imm = imm;
+ ),
+
+ TP_printk("HVC at 0x%08lx (r0: 0x%08lx, imm: 0x%lx)",
+ __entry->vcpu_pc, __entry->r0, __entry->imm)
+);
+
+TRACE_EVENT(kvm_arm_setup_debug,
+ TP_PROTO(struct kvm_vcpu *vcpu, __u32 guest_debug),
+ TP_ARGS(vcpu, guest_debug),
+
+ TP_STRUCT__entry(
+ __field(struct kvm_vcpu *, vcpu)
+ __field(__u32, guest_debug)
+ ),
+
+ TP_fast_assign(
+ __entry->vcpu = vcpu;
+ __entry->guest_debug = guest_debug;
+ ),
+
+ TP_printk("vcpu: %p, flags: 0x%08x", __entry->vcpu, __entry->guest_debug)
+);
+
+TRACE_EVENT(kvm_arm_clear_debug,
+ TP_PROTO(__u32 guest_debug),
+ TP_ARGS(guest_debug),
+
+ TP_STRUCT__entry(
+ __field(__u32, guest_debug)
+ ),
+
+ TP_fast_assign(
+ __entry->guest_debug = guest_debug;
+ ),
+
+ TP_printk("flags: 0x%08x", __entry->guest_debug)
+);
+
+TRACE_EVENT(kvm_arm_set_dreg32,
+ TP_PROTO(const char *name, __u32 value),
+ TP_ARGS(name, value),
+
+ TP_STRUCT__entry(
+ __field(const char *, name)
+ __field(__u32, value)
+ ),
+
+ TP_fast_assign(
+ __entry->name = name;
+ __entry->value = value;
+ ),
+
+ TP_printk("%s: 0x%08x", __entry->name, __entry->value)
+);
+
+TRACE_DEFINE_SIZEOF(__u64);
+
+TRACE_EVENT(kvm_arm_set_regset,
+ TP_PROTO(const char *type, int len, __u64 *control, __u64 *value),
+ TP_ARGS(type, len, control, value),
+ TP_STRUCT__entry(
+ __field(const char *, name)
+ __field(int, len)
+ __array(u64, ctrls, 16)
+ __array(u64, values, 16)
+ ),
+ TP_fast_assign(
+ __entry->name = type;
+ __entry->len = len;
+ memcpy(__entry->ctrls, control, len << 3);
+ memcpy(__entry->values, value, len << 3);
+ ),
+ TP_printk("%d %s CTRL:%s VALUE:%s", __entry->len, __entry->name,
+ __print_array(__entry->ctrls, __entry->len, sizeof(__u64)),
+ __print_array(__entry->values, __entry->len, sizeof(__u64)))
+);
+
+TRACE_EVENT(trap_reg,
+ TP_PROTO(const char *fn, int reg, bool is_write, u64 write_value),
+ TP_ARGS(fn, reg, is_write, write_value),
+
+ TP_STRUCT__entry(
+ __field(const char *, fn)
+ __field(int, reg)
+ __field(bool, is_write)
+ __field(u64, write_value)
+ ),
+
+ TP_fast_assign(
+ __entry->fn = fn;
+ __entry->reg = reg;
+ __entry->is_write = is_write;
+ __entry->write_value = write_value;
+ ),
+
+ TP_printk("%s %s reg %d (0x%08llx)", __entry->fn, __entry->is_write?"write to":"read from", __entry->reg, __entry->write_value)
+);
+
+TRACE_EVENT(kvm_handle_sys_reg,
+ TP_PROTO(unsigned long hsr),
+ TP_ARGS(hsr),
+
+ TP_STRUCT__entry(
+ __field(unsigned long, hsr)
+ ),
+
+ TP_fast_assign(
+ __entry->hsr = hsr;
+ ),
+
+ TP_printk("HSR 0x%08lx", __entry->hsr)
+);
+
+TRACE_EVENT(kvm_sys_access,
+ TP_PROTO(unsigned long vcpu_pc, struct sys_reg_params *params, const struct sys_reg_desc *reg),
+ TP_ARGS(vcpu_pc, params, reg),
+
+ TP_STRUCT__entry(
+ __field(unsigned long, vcpu_pc)
+ __field(bool, is_write)
+ __field(const char *, name)
+ __field(u8, Op0)
+ __field(u8, Op1)
+ __field(u8, CRn)
+ __field(u8, CRm)
+ __field(u8, Op2)
+ ),
+
+ TP_fast_assign(
+ __entry->vcpu_pc = vcpu_pc;
+ __entry->is_write = params->is_write;
+ __entry->name = reg->name;
+ __entry->Op0 = reg->Op0;
+ __entry->Op0 = reg->Op0;
+ __entry->Op1 = reg->Op1;
+ __entry->CRn = reg->CRn;
+ __entry->CRm = reg->CRm;
+ __entry->Op2 = reg->Op2;
+ ),
+
+ TP_printk("PC: %lx %s (%d,%d,%d,%d,%d) %s",
+ __entry->vcpu_pc, __entry->name ?: "UNKN",
+ __entry->Op0, __entry->Op1, __entry->CRn,
+ __entry->CRm, __entry->Op2,
+ __entry->is_write ? "write" : "read")
+);
+
+TRACE_EVENT(kvm_set_guest_debug,
+ TP_PROTO(struct kvm_vcpu *vcpu, __u32 guest_debug),
+ TP_ARGS(vcpu, guest_debug),
+
+ TP_STRUCT__entry(
+ __field(struct kvm_vcpu *, vcpu)
+ __field(__u32, guest_debug)
+ ),
+
+ TP_fast_assign(
+ __entry->vcpu = vcpu;
+ __entry->guest_debug = guest_debug;
+ ),
+
+ TP_printk("vcpu: %p, flags: 0x%08x", __entry->vcpu, __entry->guest_debug)
+);
+
+#endif /* _TRACE_HANDLE_EXIT_ARM64_KVM_H */
+
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH .
+#undef TRACE_INCLUDE_FILE
+#define TRACE_INCLUDE_FILE trace_handle_exit
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/arch/arm64/kvm/vgic-sys-reg-v3.c b/arch/arm64/kvm/vgic-sys-reg-v3.c
index e7d1ea92095d..2f92bdcb1188 100644
--- a/arch/arm64/kvm/vgic-sys-reg-v3.c
+++ b/arch/arm64/kvm/vgic-sys-reg-v3.c
@@ -7,7 +7,7 @@
#include <linux/kvm.h>
#include <linux/kvm_host.h>
#include <asm/kvm_emulate.h>
-#include "vgic.h"
+#include "vgic/vgic.h"
#include "sys_regs.h"
static bool access_gic_ctlr(struct kvm_vcpu *vcpu, struct sys_reg_params *p,
diff --git a/virt/kvm/arm/vgic/trace.h b/arch/arm64/kvm/vgic/trace.h
similarity index 93%
rename from virt/kvm/arm/vgic/trace.h
rename to arch/arm64/kvm/vgic/trace.h
index 4fd4f6db181b..83c64401a7fc 100644
--- a/virt/kvm/arm/vgic/trace.h
+++ b/arch/arm64/kvm/vgic/trace.h
@@ -30,7 +30,7 @@ TRACE_EVENT(vgic_update_irq_pending,
#endif /* _TRACE_VGIC_H */
#undef TRACE_INCLUDE_PATH
-#define TRACE_INCLUDE_PATH ../../virt/kvm/arm/vgic
+#define TRACE_INCLUDE_PATH ../../arch/arm64/kvm/vgic
#undef TRACE_INCLUDE_FILE
#define TRACE_INCLUDE_FILE trace
diff --git a/virt/kvm/arm/vgic/vgic-debug.c b/arch/arm64/kvm/vgic/vgic-debug.c
similarity index 100%
rename from virt/kvm/arm/vgic/vgic-debug.c
rename to arch/arm64/kvm/vgic/vgic-debug.c
diff --git a/virt/kvm/arm/vgic/vgic-init.c b/arch/arm64/kvm/vgic/vgic-init.c
similarity index 100%
rename from virt/kvm/arm/vgic/vgic-init.c
rename to arch/arm64/kvm/vgic/vgic-init.c
diff --git a/virt/kvm/arm/vgic/vgic-irqfd.c b/arch/arm64/kvm/vgic/vgic-irqfd.c
similarity index 100%
rename from virt/kvm/arm/vgic/vgic-irqfd.c
rename to arch/arm64/kvm/vgic/vgic-irqfd.c
diff --git a/virt/kvm/arm/vgic/vgic-its.c b/arch/arm64/kvm/vgic/vgic-its.c
similarity index 100%
rename from virt/kvm/arm/vgic/vgic-its.c
rename to arch/arm64/kvm/vgic/vgic-its.c
diff --git a/virt/kvm/arm/vgic/vgic-kvm-device.c b/arch/arm64/kvm/vgic/vgic-kvm-device.c
similarity index 100%
rename from virt/kvm/arm/vgic/vgic-kvm-device.c
rename to arch/arm64/kvm/vgic/vgic-kvm-device.c
diff --git a/virt/kvm/arm/vgic/vgic-mmio-v2.c b/arch/arm64/kvm/vgic/vgic-mmio-v2.c
similarity index 100%
rename from virt/kvm/arm/vgic/vgic-mmio-v2.c
rename to arch/arm64/kvm/vgic/vgic-mmio-v2.c
diff --git a/virt/kvm/arm/vgic/vgic-mmio-v3.c b/arch/arm64/kvm/vgic/vgic-mmio-v3.c
similarity index 100%
rename from virt/kvm/arm/vgic/vgic-mmio-v3.c
rename to arch/arm64/kvm/vgic/vgic-mmio-v3.c
diff --git a/virt/kvm/arm/vgic/vgic-mmio.c b/arch/arm64/kvm/vgic/vgic-mmio.c
similarity index 100%
rename from virt/kvm/arm/vgic/vgic-mmio.c
rename to arch/arm64/kvm/vgic/vgic-mmio.c
diff --git a/virt/kvm/arm/vgic/vgic-mmio.h b/arch/arm64/kvm/vgic/vgic-mmio.h
similarity index 100%
rename from virt/kvm/arm/vgic/vgic-mmio.h
rename to arch/arm64/kvm/vgic/vgic-mmio.h
diff --git a/virt/kvm/arm/vgic/vgic-v2.c b/arch/arm64/kvm/vgic/vgic-v2.c
similarity index 100%
rename from virt/kvm/arm/vgic/vgic-v2.c
rename to arch/arm64/kvm/vgic/vgic-v2.c
diff --git a/virt/kvm/arm/vgic/vgic-v3.c b/arch/arm64/kvm/vgic/vgic-v3.c
similarity index 99%
rename from virt/kvm/arm/vgic/vgic-v3.c
rename to arch/arm64/kvm/vgic/vgic-v3.c
index 2c9fc13e2c59..5bc2ab58954b 100644
--- a/virt/kvm/arm/vgic/vgic-v3.c
+++ b/arch/arm64/kvm/vgic/vgic-v3.c
@@ -630,12 +630,10 @@ int vgic_v3_probe(const struct gic_kvm_info *info)
if (kvm_vgic_global_state.vcpu_base == 0)
kvm_info("disabling GICv2 emulation\n");
-#ifdef CONFIG_ARM64
if (cpus_have_const_cap(ARM64_WORKAROUND_CAVIUM_30115)) {
group0_trap = true;
group1_trap = true;
}
-#endif
if (group0_trap || group1_trap || common_trap) {
kvm_info("GICv3 sysreg trapping enabled ([%s%s%s], reduced performance)\n",
diff --git a/virt/kvm/arm/vgic/vgic-v4.c b/arch/arm64/kvm/vgic/vgic-v4.c
similarity index 100%
rename from virt/kvm/arm/vgic/vgic-v4.c
rename to arch/arm64/kvm/vgic/vgic-v4.c
diff --git a/virt/kvm/arm/vgic/vgic.c b/arch/arm64/kvm/vgic/vgic.c
similarity index 100%
rename from virt/kvm/arm/vgic/vgic.c
rename to arch/arm64/kvm/vgic/vgic.c
diff --git a/virt/kvm/arm/vgic/vgic.h b/arch/arm64/kvm/vgic/vgic.h
similarity index 100%
rename from virt/kvm/arm/vgic/vgic.h
rename to arch/arm64/kvm/vgic/vgic.h
--
2.26.2
^ permalink raw reply related
* [GIT PULL] KVM/arm64 updates for Linux 5.8
From: Marc Zyngier @ 2020-05-29 16:00 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Mark Rutland, kvmarm, kvm, Will Deacon, Suzuki K Poulose,
Keqian Zhu, Christoffer Dall, Jiang Yi, James Morse, Andrew Scull,
Zenghui Yu, Julien Thierry, David Brazdil, Alexandru Elisei,
Ard Biesheuvel, Fuad Tabba, linux-arm-kernel
Hi Paolo,
Here's the (rather small) pull request for the 5.8 updates to
KVM/arm64. This mostly contains a bunch of cleanups now that can be
done now that we are free of the 32bit legacy, and a number of
refactoring patches that prepare for the eventual landing of the
dreaded nested virt patches.
Two things though:
- there is another bunch of patches that I have routed via the arm64
tree as they would otherwise very badly conflict if taken via the
KVM tree
- Depending on how things go during the first week, I may have another
small set of patches that I'm holding back for now as they also
conflict very badly with Mike Rapoport's P4D patches.
Please pull,
M.
The following changes since commit 2ef96a5bb12be62ef75b5828c0aab838ebb29cb8:
Linux 5.7-rc5 (2020-05-10 15:16:58 -0700)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm.git tags/kvmarm-5.8
for you to fetch changes up to 8f7f4fe756bd5cfef73cf8234445081385bdbf7d:
KVM: arm64: Drop obsolete comment about sys_reg ordering (2020-05-28 13:16:57 +0100)
----------------------------------------------------------------
KVM/arm64 updates for Linux 5.8:
- Move the arch-specific code into arch/arm64/kvm
- Start the post-32bit cleanup
- Cherry-pick a few non-invasive pre-NV patches
----------------------------------------------------------------
Andrew Scull (1):
KVM: arm64: Remove obsolete kvm_virt_to_phys abstraction
Christoffer Dall (1):
KVM: arm64: vgic-v3: Take cpu_if pointer directly instead of vcpu
David Brazdil (2):
KVM: arm64: Clean up cpu_init_hyp_mode()
KVM: arm64: Fix incorrect comment on kvm_get_hyp_vector()
Fuad Tabba (2):
KVM: arm64: Clean up kvm makefiles
KVM: Fix spelling in code comments
Jiang Yi (1):
KVM: arm/arm64: Release kvm->mmu_lock in loop to prevent starvation
Keqian Zhu (1):
KVM: arm64: Support enabling dirty log gradually in small chunks
Marc Zyngier (10):
KVM: arm64: Move virt/kvm/arm to arch/arm64
KVM: arm64: Simplify __kvm_timer_set_cntvoff implementation
KVM: arm64: Use cpus_have_final_cap for has_vhe()
KVM: arm64: Make KVM_CAP_MAX_VCPUS compatible with the selected GIC version
KVM: arm64: Refactor vcpu_{read,write}_sys_reg
KVM: arm64: Add missing reset handlers for PMU emulation
KVM: arm64: Move sysreg reset check to boot time
KVM: arm64: Don't use empty structures as CPU reset state
KVM: arm64: Parametrize exception entry with a target EL
KVM: arm64: Drop obsolete comment about sys_reg ordering
Suzuki K Poulose (2):
KVM: arm64: Clean up the checking for huge mapping
KVM: arm64: Unify handling THP backed host memory
Will Deacon (3):
KVM: arm64: Kill off CONFIG_KVM_ARM_HOST
KVM: arm64: Update help text
KVM: arm64: Change CONFIG_KVM to a menuconfig entry
Zenghui Yu (1):
KVM: arm64: Sidestep stage2_unmap_vm() on vcpu reset when S2FWB is supported
Documentation/virt/kvm/api.rst | 2 +-
MAINTAINERS | 1 -
arch/arm64/include/asm/kvm_asm.h | 4 +-
arch/arm64/include/asm/kvm_host.h | 44 +----
arch/arm64/include/asm/kvm_hyp.h | 12 +-
arch/arm64/include/asm/kvm_mmu.h | 4 +-
arch/arm64/include/asm/ptrace.h | 1 +
arch/arm64/include/asm/virt.h | 2 +-
arch/arm64/kernel/asm-offsets.c | 2 +-
arch/arm64/kernel/cpu_errata.c | 2 +-
arch/arm64/kernel/smp.c | 2 +-
arch/arm64/kvm/Kconfig | 22 +--
arch/arm64/kvm/Makefile | 46 ++---
{virt/kvm/arm => arch/arm64/kvm}/aarch32.c | 0
{virt/kvm/arm => arch/arm64/kvm}/arch_timer.c | 12 +-
{virt/kvm/arm => arch/arm64/kvm}/arm.c | 60 ++++--
arch/arm64/kvm/guest.c | 4 +-
arch/arm64/kvm/handle_exit.c | 2 +-
arch/arm64/kvm/hyp/Makefile | 16 +-
{virt/kvm/arm => arch/arm64/kvm}/hyp/aarch32.c | 0
arch/arm64/kvm/hyp/switch.c | 8 +-
{virt/kvm/arm => arch/arm64/kvm}/hyp/timer-sr.c | 3 +-
{virt/kvm/arm => arch/arm64/kvm}/hyp/vgic-v3-sr.c | 39 ++--
{virt/kvm/arm => arch/arm64/kvm}/hypercalls.c | 0
arch/arm64/kvm/inject_fault.c | 75 +++----
{virt/kvm/arm => arch/arm64/kvm}/mmio.c | 2 +-
{virt/kvm/arm => arch/arm64/kvm}/mmu.c | 148 ++++++++------
{virt/kvm/arm => arch/arm64/kvm}/perf.c | 0
virt/kvm/arm/pmu.c => arch/arm64/kvm/pmu-emul.c | 0
{virt/kvm/arm => arch/arm64/kvm}/psci.c | 6 +-
{virt/kvm/arm => arch/arm64/kvm}/pvtime.c | 0
arch/arm64/kvm/reset.c | 27 ++-
arch/arm64/kvm/sys_regs.c | 212 ++++++++++----------
arch/arm64/kvm/trace.h | 216 +--------------------
virt/kvm/arm/trace.h => arch/arm64/kvm/trace_arm.h | 11 +-
arch/arm64/kvm/trace_handle_exit.h | 215 ++++++++++++++++++++
arch/arm64/kvm/vgic-sys-reg-v3.c | 2 +-
{virt/kvm/arm => arch/arm64/kvm}/vgic/trace.h | 2 +-
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-debug.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-init.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-irqfd.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-its.c | 0
.../arm => arch/arm64/kvm}/vgic/vgic-kvm-device.c | 0
.../kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio-v2.c | 0
.../kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio-v3.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio.h | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v2.c | 10 +-
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v3.c | 18 +-
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v4.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic.c | 25 ++-
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic.h | 0
include/kvm/arm_vgic.h | 5 +-
virt/kvm/coalesced_mmio.c | 2 +-
virt/kvm/eventfd.c | 2 +-
virt/kvm/kvm_main.c | 2 +-
56 files changed, 629 insertions(+), 639 deletions(-)
rename {virt/kvm/arm => arch/arm64/kvm}/aarch32.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/arch_timer.c (98%)
rename {virt/kvm/arm => arch/arm64/kvm}/arm.c (95%)
rename {virt/kvm/arm => arch/arm64/kvm}/hyp/aarch32.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/hyp/timer-sr.c (89%)
rename {virt/kvm/arm => arch/arm64/kvm}/hyp/vgic-v3-sr.c (95%)
rename {virt/kvm/arm => arch/arm64/kvm}/hypercalls.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/mmio.c (98%)
rename {virt/kvm/arm => arch/arm64/kvm}/mmu.c (96%)
rename {virt/kvm/arm => arch/arm64/kvm}/perf.c (100%)
rename virt/kvm/arm/pmu.c => arch/arm64/kvm/pmu-emul.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/psci.c (98%)
rename {virt/kvm/arm => arch/arm64/kvm}/pvtime.c (100%)
rename virt/kvm/arm/trace.h => arch/arm64/kvm/trace_arm.h (97%)
create mode 100644 arch/arm64/kvm/trace_handle_exit.h
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/trace.h (93%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-debug.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-init.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-irqfd.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-its.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-kvm-device.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio-v2.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio-v3.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio.h (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v2.c (98%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v3.c (97%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v4.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic.c (97%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic.h (100%)
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* [PATCH 03/24] KVM: arm64: Update help text
From: Marc Zyngier @ 2020-05-29 16:01 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Alexandru Elisei, Andrew Scull, Ard Biesheuvel, Christoffer Dall,
David Brazdil, Fuad Tabba, James Morse, Jiang Yi, Keqian Zhu,
Mark Rutland, Suzuki K Poulose, Will Deacon, Zenghui Yu,
Julien Thierry, linux-arm-kernel, kvm, kvmarm
In-Reply-To: <20200529160121.899083-1-maz@kernel.org>
From: Will Deacon <will@kernel.org>
arm64 KVM supports 16k pages since 02e0b7600f83
("arm64: kvm: Add support for 16K pages"), so update the Kconfig help
text accordingly.
Signed-off-by: Will Deacon <will@kernel.org>
Signed-off-by: Fuad Tabba <tabba@google.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20200505154520.194120-3-tabba@google.com
---
arch/arm64/kvm/Kconfig | 2 --
1 file changed, 2 deletions(-)
diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig
index ce724e526689..d2cf4f099454 100644
--- a/arch/arm64/kvm/Kconfig
+++ b/arch/arm64/kvm/Kconfig
@@ -44,8 +44,6 @@ config KVM
select TASK_DELAY_ACCT
---help---
Support hosting virtualized guest machines.
- We don't support KVM with 16K page tables yet, due to the multiple
- levels of fake page tables.
If unsure, say N.
--
2.26.2
^ permalink raw reply related
* [GIT PULL] KVM/arm64 updates for Linux 5.8
From: Marc Zyngier @ 2020-05-29 16:00 UTC (permalink / raw)
To: Paolo Bonzini
Cc: kvmarm, kvm, Will Deacon, Jiang Yi, Ard Biesheuvel,
linux-arm-kernel
Hi Paolo,
Here's the (rather small) pull request for the 5.8 updates to
KVM/arm64. This mostly contains a bunch of cleanups now that can be
done now that we are free of the 32bit legacy, and a number of
refactoring patches that prepare for the eventual landing of the
dreaded nested virt patches.
Two things though:
- there is another bunch of patches that I have routed via the arm64
tree as they would otherwise very badly conflict if taken via the
KVM tree
- Depending on how things go during the first week, I may have another
small set of patches that I'm holding back for now as they also
conflict very badly with Mike Rapoport's P4D patches.
Please pull,
M.
The following changes since commit 2ef96a5bb12be62ef75b5828c0aab838ebb29cb8:
Linux 5.7-rc5 (2020-05-10 15:16:58 -0700)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm.git tags/kvmarm-5.8
for you to fetch changes up to 8f7f4fe756bd5cfef73cf8234445081385bdbf7d:
KVM: arm64: Drop obsolete comment about sys_reg ordering (2020-05-28 13:16:57 +0100)
----------------------------------------------------------------
KVM/arm64 updates for Linux 5.8:
- Move the arch-specific code into arch/arm64/kvm
- Start the post-32bit cleanup
- Cherry-pick a few non-invasive pre-NV patches
----------------------------------------------------------------
Andrew Scull (1):
KVM: arm64: Remove obsolete kvm_virt_to_phys abstraction
Christoffer Dall (1):
KVM: arm64: vgic-v3: Take cpu_if pointer directly instead of vcpu
David Brazdil (2):
KVM: arm64: Clean up cpu_init_hyp_mode()
KVM: arm64: Fix incorrect comment on kvm_get_hyp_vector()
Fuad Tabba (2):
KVM: arm64: Clean up kvm makefiles
KVM: Fix spelling in code comments
Jiang Yi (1):
KVM: arm/arm64: Release kvm->mmu_lock in loop to prevent starvation
Keqian Zhu (1):
KVM: arm64: Support enabling dirty log gradually in small chunks
Marc Zyngier (10):
KVM: arm64: Move virt/kvm/arm to arch/arm64
KVM: arm64: Simplify __kvm_timer_set_cntvoff implementation
KVM: arm64: Use cpus_have_final_cap for has_vhe()
KVM: arm64: Make KVM_CAP_MAX_VCPUS compatible with the selected GIC version
KVM: arm64: Refactor vcpu_{read,write}_sys_reg
KVM: arm64: Add missing reset handlers for PMU emulation
KVM: arm64: Move sysreg reset check to boot time
KVM: arm64: Don't use empty structures as CPU reset state
KVM: arm64: Parametrize exception entry with a target EL
KVM: arm64: Drop obsolete comment about sys_reg ordering
Suzuki K Poulose (2):
KVM: arm64: Clean up the checking for huge mapping
KVM: arm64: Unify handling THP backed host memory
Will Deacon (3):
KVM: arm64: Kill off CONFIG_KVM_ARM_HOST
KVM: arm64: Update help text
KVM: arm64: Change CONFIG_KVM to a menuconfig entry
Zenghui Yu (1):
KVM: arm64: Sidestep stage2_unmap_vm() on vcpu reset when S2FWB is supported
Documentation/virt/kvm/api.rst | 2 +-
MAINTAINERS | 1 -
arch/arm64/include/asm/kvm_asm.h | 4 +-
arch/arm64/include/asm/kvm_host.h | 44 +----
arch/arm64/include/asm/kvm_hyp.h | 12 +-
arch/arm64/include/asm/kvm_mmu.h | 4 +-
arch/arm64/include/asm/ptrace.h | 1 +
arch/arm64/include/asm/virt.h | 2 +-
arch/arm64/kernel/asm-offsets.c | 2 +-
arch/arm64/kernel/cpu_errata.c | 2 +-
arch/arm64/kernel/smp.c | 2 +-
arch/arm64/kvm/Kconfig | 22 +--
arch/arm64/kvm/Makefile | 46 ++---
{virt/kvm/arm => arch/arm64/kvm}/aarch32.c | 0
{virt/kvm/arm => arch/arm64/kvm}/arch_timer.c | 12 +-
{virt/kvm/arm => arch/arm64/kvm}/arm.c | 60 ++++--
arch/arm64/kvm/guest.c | 4 +-
arch/arm64/kvm/handle_exit.c | 2 +-
arch/arm64/kvm/hyp/Makefile | 16 +-
{virt/kvm/arm => arch/arm64/kvm}/hyp/aarch32.c | 0
arch/arm64/kvm/hyp/switch.c | 8 +-
{virt/kvm/arm => arch/arm64/kvm}/hyp/timer-sr.c | 3 +-
{virt/kvm/arm => arch/arm64/kvm}/hyp/vgic-v3-sr.c | 39 ++--
{virt/kvm/arm => arch/arm64/kvm}/hypercalls.c | 0
arch/arm64/kvm/inject_fault.c | 75 +++----
{virt/kvm/arm => arch/arm64/kvm}/mmio.c | 2 +-
{virt/kvm/arm => arch/arm64/kvm}/mmu.c | 148 ++++++++------
{virt/kvm/arm => arch/arm64/kvm}/perf.c | 0
virt/kvm/arm/pmu.c => arch/arm64/kvm/pmu-emul.c | 0
{virt/kvm/arm => arch/arm64/kvm}/psci.c | 6 +-
{virt/kvm/arm => arch/arm64/kvm}/pvtime.c | 0
arch/arm64/kvm/reset.c | 27 ++-
arch/arm64/kvm/sys_regs.c | 212 ++++++++++----------
arch/arm64/kvm/trace.h | 216 +--------------------
virt/kvm/arm/trace.h => arch/arm64/kvm/trace_arm.h | 11 +-
arch/arm64/kvm/trace_handle_exit.h | 215 ++++++++++++++++++++
arch/arm64/kvm/vgic-sys-reg-v3.c | 2 +-
{virt/kvm/arm => arch/arm64/kvm}/vgic/trace.h | 2 +-
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-debug.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-init.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-irqfd.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-its.c | 0
.../arm => arch/arm64/kvm}/vgic/vgic-kvm-device.c | 0
.../kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio-v2.c | 0
.../kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio-v3.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio.h | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v2.c | 10 +-
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v3.c | 18 +-
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v4.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic.c | 25 ++-
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic.h | 0
include/kvm/arm_vgic.h | 5 +-
virt/kvm/coalesced_mmio.c | 2 +-
virt/kvm/eventfd.c | 2 +-
virt/kvm/kvm_main.c | 2 +-
56 files changed, 629 insertions(+), 639 deletions(-)
rename {virt/kvm/arm => arch/arm64/kvm}/aarch32.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/arch_timer.c (98%)
rename {virt/kvm/arm => arch/arm64/kvm}/arm.c (95%)
rename {virt/kvm/arm => arch/arm64/kvm}/hyp/aarch32.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/hyp/timer-sr.c (89%)
rename {virt/kvm/arm => arch/arm64/kvm}/hyp/vgic-v3-sr.c (95%)
rename {virt/kvm/arm => arch/arm64/kvm}/hypercalls.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/mmio.c (98%)
rename {virt/kvm/arm => arch/arm64/kvm}/mmu.c (96%)
rename {virt/kvm/arm => arch/arm64/kvm}/perf.c (100%)
rename virt/kvm/arm/pmu.c => arch/arm64/kvm/pmu-emul.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/psci.c (98%)
rename {virt/kvm/arm => arch/arm64/kvm}/pvtime.c (100%)
rename virt/kvm/arm/trace.h => arch/arm64/kvm/trace_arm.h (97%)
create mode 100644 arch/arm64/kvm/trace_handle_exit.h
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/trace.h (93%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-debug.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-init.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-irqfd.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-its.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-kvm-device.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio-v2.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio-v3.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio.h (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v2.c (98%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v3.c (97%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v4.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic.c (97%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic.h (100%)
_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
^ permalink raw reply
* [PATCH 02/24] KVM: arm64: Kill off CONFIG_KVM_ARM_HOST
From: Marc Zyngier @ 2020-05-29 16:00 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Alexandru Elisei, Andrew Scull, Ard Biesheuvel, Christoffer Dall,
David Brazdil, Fuad Tabba, James Morse, Jiang Yi, Keqian Zhu,
Mark Rutland, Suzuki K Poulose, Will Deacon, Zenghui Yu,
Julien Thierry, linux-arm-kernel, kvm, kvmarm
In-Reply-To: <20200529160121.899083-1-maz@kernel.org>
From: Will Deacon <will@kernel.org>
CONFIG_KVM_ARM_HOST is just a proxy for CONFIG_KVM, so remove it in favour
of the latter.
Signed-off-by: Will Deacon <will@kernel.org>
Signed-off-by: Fuad Tabba <tabba@google.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20200505154520.194120-2-tabba@google.com
---
arch/arm64/kernel/asm-offsets.c | 2 +-
arch/arm64/kernel/cpu_errata.c | 2 +-
arch/arm64/kernel/smp.c | 2 +-
arch/arm64/kvm/Kconfig | 6 ----
arch/arm64/kvm/Makefile | 52 ++++++++++++++++-----------------
arch/arm64/kvm/hyp/Makefile | 22 +++++++-------
6 files changed, 40 insertions(+), 46 deletions(-)
diff --git a/arch/arm64/kernel/asm-offsets.c b/arch/arm64/kernel/asm-offsets.c
index 9981a0a5a87f..a27e0cd731e9 100644
--- a/arch/arm64/kernel/asm-offsets.c
+++ b/arch/arm64/kernel/asm-offsets.c
@@ -96,7 +96,7 @@ int main(void)
DEFINE(CPU_BOOT_PTRAUTH_KEY, offsetof(struct secondary_data, ptrauth_key));
#endif
BLANK();
-#ifdef CONFIG_KVM_ARM_HOST
+#ifdef CONFIG_KVM
DEFINE(VCPU_CONTEXT, offsetof(struct kvm_vcpu, arch.ctxt));
DEFINE(VCPU_FAULT_DISR, offsetof(struct kvm_vcpu, arch.fault.disr_el1));
DEFINE(VCPU_WORKAROUND_FLAGS, offsetof(struct kvm_vcpu, arch.workaround_flags));
diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c
index df56d2295d16..a102321fc8a2 100644
--- a/arch/arm64/kernel/cpu_errata.c
+++ b/arch/arm64/kernel/cpu_errata.c
@@ -234,7 +234,7 @@ static int detect_harden_bp_fw(void)
smccc_end = NULL;
break;
-#if IS_ENABLED(CONFIG_KVM_ARM_HOST)
+#if IS_ENABLED(CONFIG_KVM)
case SMCCC_CONDUIT_SMC:
cb = call_smc_arch_workaround_1;
smccc_start = __smccc_workaround_1_smc;
diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
index 061f60fe452f..0a3045d9f33f 100644
--- a/arch/arm64/kernel/smp.c
+++ b/arch/arm64/kernel/smp.c
@@ -430,7 +430,7 @@ static void __init hyp_mode_check(void)
"CPU: CPUs started in inconsistent modes");
else
pr_info("CPU: All CPU(s) started at EL1\n");
- if (IS_ENABLED(CONFIG_KVM_ARM_HOST))
+ if (IS_ENABLED(CONFIG_KVM))
kvm_compute_layout();
}
diff --git a/arch/arm64/kvm/Kconfig b/arch/arm64/kvm/Kconfig
index 449386d76441..ce724e526689 100644
--- a/arch/arm64/kvm/Kconfig
+++ b/arch/arm64/kvm/Kconfig
@@ -28,7 +28,6 @@ config KVM
select HAVE_KVM_CPU_RELAX_INTERCEPT
select HAVE_KVM_ARCH_TLB_FLUSH_ALL
select KVM_MMIO
- select KVM_ARM_HOST
select KVM_GENERIC_DIRTYLOG_READ_PROTECT
select SRCU
select KVM_VFIO
@@ -50,11 +49,6 @@ config KVM
If unsure, say N.
-config KVM_ARM_HOST
- bool
- ---help---
- Provides host support for ARM processors.
-
config KVM_ARM_PMU
bool
---help---
diff --git a/arch/arm64/kvm/Makefile b/arch/arm64/kvm/Makefile
index 7a3768538343..419696e615b3 100644
--- a/arch/arm64/kvm/Makefile
+++ b/arch/arm64/kvm/Makefile
@@ -7,33 +7,33 @@ ccflags-y += -I $(srctree)/$(src)
KVM=../../../virt/kvm
-obj-$(CONFIG_KVM_ARM_HOST) += kvm.o
-obj-$(CONFIG_KVM_ARM_HOST) += hyp/
+obj-$(CONFIG_KVM) += kvm.o
+obj-$(CONFIG_KVM) += hyp/
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/kvm_main.o $(KVM)/coalesced_mmio.o
-kvm-$(CONFIG_KVM_ARM_HOST) += $(KVM)/eventfd.o $(KVM)/vfio.o $(KVM)/irqchip.o
-kvm-$(CONFIG_KVM_ARM_HOST) += arm.o mmu.o mmio.o
-kvm-$(CONFIG_KVM_ARM_HOST) += psci.o perf.o
-kvm-$(CONFIG_KVM_ARM_HOST) += hypercalls.o
-kvm-$(CONFIG_KVM_ARM_HOST) += pvtime.o
+kvm-$(CONFIG_KVM) += $(KVM)/kvm_main.o $(KVM)/coalesced_mmio.o
+kvm-$(CONFIG_KVM) += $(KVM)/eventfd.o $(KVM)/vfio.o $(KVM)/irqchip.o
+kvm-$(CONFIG_KVM) += arm.o mmu.o mmio.o
+kvm-$(CONFIG_KVM) += psci.o perf.o
+kvm-$(CONFIG_KVM) += hypercalls.o
+kvm-$(CONFIG_KVM) += pvtime.o
-kvm-$(CONFIG_KVM_ARM_HOST) += inject_fault.o regmap.o va_layout.o
-kvm-$(CONFIG_KVM_ARM_HOST) += hyp.o hyp-init.o handle_exit.o
-kvm-$(CONFIG_KVM_ARM_HOST) += guest.o debug.o reset.o sys_regs.o sys_regs_generic_v8.o
-kvm-$(CONFIG_KVM_ARM_HOST) += vgic-sys-reg-v3.o fpsimd.o pmu.o
-kvm-$(CONFIG_KVM_ARM_HOST) += aarch32.o
-kvm-$(CONFIG_KVM_ARM_HOST) += arch_timer.o
+kvm-$(CONFIG_KVM) += inject_fault.o regmap.o va_layout.o
+kvm-$(CONFIG_KVM) += hyp.o hyp-init.o handle_exit.o
+kvm-$(CONFIG_KVM) += guest.o debug.o reset.o sys_regs.o sys_regs_generic_v8.o
+kvm-$(CONFIG_KVM) += vgic-sys-reg-v3.o fpsimd.o pmu.o
+kvm-$(CONFIG_KVM) += aarch32.o
+kvm-$(CONFIG_KVM) += arch_timer.o
kvm-$(CONFIG_KVM_ARM_PMU) += pmu-emul.o
-kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic.o
-kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-init.o
-kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-irqfd.o
-kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-v2.o
-kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-v3.o
-kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-v4.o
-kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-mmio.o
-kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-mmio-v2.o
-kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-mmio-v3.o
-kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-kvm-device.o
-kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-its.o
-kvm-$(CONFIG_KVM_ARM_HOST) += vgic/vgic-debug.o
+kvm-$(CONFIG_KVM) += vgic/vgic.o
+kvm-$(CONFIG_KVM) += vgic/vgic-init.o
+kvm-$(CONFIG_KVM) += vgic/vgic-irqfd.o
+kvm-$(CONFIG_KVM) += vgic/vgic-v2.o
+kvm-$(CONFIG_KVM) += vgic/vgic-v3.o
+kvm-$(CONFIG_KVM) += vgic/vgic-v4.o
+kvm-$(CONFIG_KVM) += vgic/vgic-mmio.o
+kvm-$(CONFIG_KVM) += vgic/vgic-mmio-v2.o
+kvm-$(CONFIG_KVM) += vgic/vgic-mmio-v3.o
+kvm-$(CONFIG_KVM) += vgic/vgic-kvm-device.o
+kvm-$(CONFIG_KVM) += vgic/vgic-its.o
+kvm-$(CONFIG_KVM) += vgic/vgic-debug.o
diff --git a/arch/arm64/kvm/hyp/Makefile b/arch/arm64/kvm/hyp/Makefile
index dc18274a6826..8229e47ba870 100644
--- a/arch/arm64/kvm/hyp/Makefile
+++ b/arch/arm64/kvm/hyp/Makefile
@@ -6,17 +6,17 @@
ccflags-y += -fno-stack-protector -DDISABLE_BRANCH_PROFILING \
$(DISABLE_STACKLEAK_PLUGIN)
-obj-$(CONFIG_KVM_ARM_HOST) += vgic-v3-sr.o
-obj-$(CONFIG_KVM_ARM_HOST) += timer-sr.o
-obj-$(CONFIG_KVM_ARM_HOST) += aarch32.o
-obj-$(CONFIG_KVM_ARM_HOST) += vgic-v2-cpuif-proxy.o
-obj-$(CONFIG_KVM_ARM_HOST) += sysreg-sr.o
-obj-$(CONFIG_KVM_ARM_HOST) += debug-sr.o
-obj-$(CONFIG_KVM_ARM_HOST) += entry.o
-obj-$(CONFIG_KVM_ARM_HOST) += switch.o
-obj-$(CONFIG_KVM_ARM_HOST) += fpsimd.o
-obj-$(CONFIG_KVM_ARM_HOST) += tlb.o
-obj-$(CONFIG_KVM_ARM_HOST) += hyp-entry.o
+obj-$(CONFIG_KVM) += vgic-v3-sr.o
+obj-$(CONFIG_KVM) += timer-sr.o
+obj-$(CONFIG_KVM) += aarch32.o
+obj-$(CONFIG_KVM) += vgic-v2-cpuif-proxy.o
+obj-$(CONFIG_KVM) += sysreg-sr.o
+obj-$(CONFIG_KVM) += debug-sr.o
+obj-$(CONFIG_KVM) += entry.o
+obj-$(CONFIG_KVM) += switch.o
+obj-$(CONFIG_KVM) += fpsimd.o
+obj-$(CONFIG_KVM) += tlb.o
+obj-$(CONFIG_KVM) += hyp-entry.o
# KVM code is run at a different exception code with a different map, so
# compiler instrumentation that inserts callbacks or checks into the code may
--
2.26.2
^ permalink raw reply related
* [GIT PULL] KVM/arm64 updates for Linux 5.8
From: Marc Zyngier @ 2020-05-29 16:00 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Alexandru Elisei, Andrew Scull, Ard Biesheuvel, Christoffer Dall,
David Brazdil, Fuad Tabba, James Morse, Jiang Yi, Keqian Zhu,
Mark Rutland, Suzuki K Poulose, Will Deacon, Zenghui Yu,
Julien Thierry, linux-arm-kernel, kvm, kvmarm
Hi Paolo,
Here's the (rather small) pull request for the 5.8 updates to
KVM/arm64. This mostly contains a bunch of cleanups now that can be
done now that we are free of the 32bit legacy, and a number of
refactoring patches that prepare for the eventual landing of the
dreaded nested virt patches.
Two things though:
- there is another bunch of patches that I have routed via the arm64
tree as they would otherwise very badly conflict if taken via the
KVM tree
- Depending on how things go during the first week, I may have another
small set of patches that I'm holding back for now as they also
conflict very badly with Mike Rapoport's P4D patches.
Please pull,
M.
The following changes since commit 2ef96a5bb12be62ef75b5828c0aab838ebb29cb8:
Linux 5.7-rc5 (2020-05-10 15:16:58 -0700)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm.git tags/kvmarm-5.8
for you to fetch changes up to 8f7f4fe756bd5cfef73cf8234445081385bdbf7d:
KVM: arm64: Drop obsolete comment about sys_reg ordering (2020-05-28 13:16:57 +0100)
----------------------------------------------------------------
KVM/arm64 updates for Linux 5.8:
- Move the arch-specific code into arch/arm64/kvm
- Start the post-32bit cleanup
- Cherry-pick a few non-invasive pre-NV patches
----------------------------------------------------------------
Andrew Scull (1):
KVM: arm64: Remove obsolete kvm_virt_to_phys abstraction
Christoffer Dall (1):
KVM: arm64: vgic-v3: Take cpu_if pointer directly instead of vcpu
David Brazdil (2):
KVM: arm64: Clean up cpu_init_hyp_mode()
KVM: arm64: Fix incorrect comment on kvm_get_hyp_vector()
Fuad Tabba (2):
KVM: arm64: Clean up kvm makefiles
KVM: Fix spelling in code comments
Jiang Yi (1):
KVM: arm/arm64: Release kvm->mmu_lock in loop to prevent starvation
Keqian Zhu (1):
KVM: arm64: Support enabling dirty log gradually in small chunks
Marc Zyngier (10):
KVM: arm64: Move virt/kvm/arm to arch/arm64
KVM: arm64: Simplify __kvm_timer_set_cntvoff implementation
KVM: arm64: Use cpus_have_final_cap for has_vhe()
KVM: arm64: Make KVM_CAP_MAX_VCPUS compatible with the selected GIC version
KVM: arm64: Refactor vcpu_{read,write}_sys_reg
KVM: arm64: Add missing reset handlers for PMU emulation
KVM: arm64: Move sysreg reset check to boot time
KVM: arm64: Don't use empty structures as CPU reset state
KVM: arm64: Parametrize exception entry with a target EL
KVM: arm64: Drop obsolete comment about sys_reg ordering
Suzuki K Poulose (2):
KVM: arm64: Clean up the checking for huge mapping
KVM: arm64: Unify handling THP backed host memory
Will Deacon (3):
KVM: arm64: Kill off CONFIG_KVM_ARM_HOST
KVM: arm64: Update help text
KVM: arm64: Change CONFIG_KVM to a menuconfig entry
Zenghui Yu (1):
KVM: arm64: Sidestep stage2_unmap_vm() on vcpu reset when S2FWB is supported
Documentation/virt/kvm/api.rst | 2 +-
MAINTAINERS | 1 -
arch/arm64/include/asm/kvm_asm.h | 4 +-
arch/arm64/include/asm/kvm_host.h | 44 +----
arch/arm64/include/asm/kvm_hyp.h | 12 +-
arch/arm64/include/asm/kvm_mmu.h | 4 +-
arch/arm64/include/asm/ptrace.h | 1 +
arch/arm64/include/asm/virt.h | 2 +-
arch/arm64/kernel/asm-offsets.c | 2 +-
arch/arm64/kernel/cpu_errata.c | 2 +-
arch/arm64/kernel/smp.c | 2 +-
arch/arm64/kvm/Kconfig | 22 +--
arch/arm64/kvm/Makefile | 46 ++---
{virt/kvm/arm => arch/arm64/kvm}/aarch32.c | 0
{virt/kvm/arm => arch/arm64/kvm}/arch_timer.c | 12 +-
{virt/kvm/arm => arch/arm64/kvm}/arm.c | 60 ++++--
arch/arm64/kvm/guest.c | 4 +-
arch/arm64/kvm/handle_exit.c | 2 +-
arch/arm64/kvm/hyp/Makefile | 16 +-
{virt/kvm/arm => arch/arm64/kvm}/hyp/aarch32.c | 0
arch/arm64/kvm/hyp/switch.c | 8 +-
{virt/kvm/arm => arch/arm64/kvm}/hyp/timer-sr.c | 3 +-
{virt/kvm/arm => arch/arm64/kvm}/hyp/vgic-v3-sr.c | 39 ++--
{virt/kvm/arm => arch/arm64/kvm}/hypercalls.c | 0
arch/arm64/kvm/inject_fault.c | 75 +++----
{virt/kvm/arm => arch/arm64/kvm}/mmio.c | 2 +-
{virt/kvm/arm => arch/arm64/kvm}/mmu.c | 148 ++++++++------
{virt/kvm/arm => arch/arm64/kvm}/perf.c | 0
virt/kvm/arm/pmu.c => arch/arm64/kvm/pmu-emul.c | 0
{virt/kvm/arm => arch/arm64/kvm}/psci.c | 6 +-
{virt/kvm/arm => arch/arm64/kvm}/pvtime.c | 0
arch/arm64/kvm/reset.c | 27 ++-
arch/arm64/kvm/sys_regs.c | 212 ++++++++++----------
arch/arm64/kvm/trace.h | 216 +--------------------
virt/kvm/arm/trace.h => arch/arm64/kvm/trace_arm.h | 11 +-
arch/arm64/kvm/trace_handle_exit.h | 215 ++++++++++++++++++++
arch/arm64/kvm/vgic-sys-reg-v3.c | 2 +-
{virt/kvm/arm => arch/arm64/kvm}/vgic/trace.h | 2 +-
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-debug.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-init.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-irqfd.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-its.c | 0
.../arm => arch/arm64/kvm}/vgic/vgic-kvm-device.c | 0
.../kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio-v2.c | 0
.../kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio-v3.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio.h | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v2.c | 10 +-
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v3.c | 18 +-
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v4.c | 0
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic.c | 25 ++-
{virt/kvm/arm => arch/arm64/kvm}/vgic/vgic.h | 0
include/kvm/arm_vgic.h | 5 +-
virt/kvm/coalesced_mmio.c | 2 +-
virt/kvm/eventfd.c | 2 +-
virt/kvm/kvm_main.c | 2 +-
56 files changed, 629 insertions(+), 639 deletions(-)
rename {virt/kvm/arm => arch/arm64/kvm}/aarch32.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/arch_timer.c (98%)
rename {virt/kvm/arm => arch/arm64/kvm}/arm.c (95%)
rename {virt/kvm/arm => arch/arm64/kvm}/hyp/aarch32.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/hyp/timer-sr.c (89%)
rename {virt/kvm/arm => arch/arm64/kvm}/hyp/vgic-v3-sr.c (95%)
rename {virt/kvm/arm => arch/arm64/kvm}/hypercalls.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/mmio.c (98%)
rename {virt/kvm/arm => arch/arm64/kvm}/mmu.c (96%)
rename {virt/kvm/arm => arch/arm64/kvm}/perf.c (100%)
rename virt/kvm/arm/pmu.c => arch/arm64/kvm/pmu-emul.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/psci.c (98%)
rename {virt/kvm/arm => arch/arm64/kvm}/pvtime.c (100%)
rename virt/kvm/arm/trace.h => arch/arm64/kvm/trace_arm.h (97%)
create mode 100644 arch/arm64/kvm/trace_handle_exit.h
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/trace.h (93%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-debug.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-init.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-irqfd.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-its.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-kvm-device.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio-v2.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio-v3.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-mmio.h (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v2.c (98%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v3.c (97%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic-v4.c (100%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic.c (97%)
rename {virt/kvm/arm => arch/arm64/kvm}/vgic/vgic.h (100%)
^ permalink raw reply
* RE: [PATCH v3] docs: update xenstore-migration.md
From: Ian Jackson @ 2020-05-29 16:00 UTC (permalink / raw)
To: paul@xen.org
Cc: 'Juergen Gross', 'Stefano Stabellini',
'Julien Grall', 'Wei Liu', Andrew Cooper,
George Dunlap, 'Jan Beulich', Ian Jackson,
xen-devel@lists.xenproject.org
In-Reply-To: <005d01d635af$0a3e6ae0$1ebb40a0$@xen.org>
Paul Durrant writes ("RE: [PATCH v3] docs: update xenstore-migration.md"):
> > -----Original Message-----
> > From: Xen-devel <xen-devel-bounces@lists.xenproject.org> On Behalf Of Juergen Gross
> > Sent: 29 May 2020 12:37
> > To: xen-devel@lists.xenproject.org
> > Cc: Juergen Gross <jgross@suse.com>; Stefano Stabellini <sstabellini@kernel.org>; Julien Grall
> > <julien@xen.org>; Wei Liu <wl@xen.org>; Andrew Cooper <andrew.cooper3@citrix.com>; Ian Jackson
> > <ian.jackson@eu.citrix.com>; George Dunlap <george.dunlap@citrix.com>; Jan Beulich <jbeulich@suse.com>
> > Subject: [PATCH v3] docs: update xenstore-migration.md
> >
> > Update connection record details:
> >
> > - make flags common for sockets and domains (makes it easier to have a
> > C union for conn-spec)
> > - add pending incoming data (needed for handling partially read
> > requests when doing live update)
> > - add partial response length (needed for proper split to individual
> > responses after live update)
> >
> > Signed-off-by: Juergen Gross <jgross@suse.com>
>
> LGTM
>
> Reviewed-by: Paul Durrant <paul@xen.org>
Thanks, committed.
Ian.
^ permalink raw reply
* master - tests: integrity wait for sync
From: David Teigland @ 2020-05-29 16:01 UTC (permalink / raw)
To: lvm-devel
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=7b04ed07ba2e68f527ebb4f8d2b2bd092692f2d2
Commit: 7b04ed07ba2e68f527ebb4f8d2b2bd092692f2d2
Parent: 5410dd5441aa827b381ff64dfc6be6e4589d87a1
Author: David Teigland <teigland@redhat.com>
AuthorDate: Fri May 29 10:57:56 2020 -0500
Committer: David Teigland <teigland@redhat.com>
CommitterDate: Fri May 29 10:57:56 2020 -0500
tests: integrity wait for sync
The test was using a raid+integrity LV without
first waiting for the integrity sync, which could
cause the test to fail (depending on init speed)
where it depends on integrity to work in uninitialized
areas.
Also use cmp instead of diff.
---
test/shell/integrity.sh | 46 +++++++++++++++++++++++++++++++++-------------
1 file changed, 33 insertions(+), 13 deletions(-)
diff --git a/test/shell/integrity.sh b/test/shell/integrity.sh
index 77e9430fe..0143129e6 100644
--- a/test/shell/integrity.sh
+++ b/test/shell/integrity.sh
@@ -78,14 +78,14 @@ _test_fs_with_error() {
dd if=$mnt/fileA of=tmp bs=1k
ls -l tmp
stat -c %s tmp
- diff fileA tmp
+ cmp -b fileA tmp
rm tmp
# read partial fileB which was corrupted
not dd if=$mnt/fileB of=tmp bs=1k
ls -l tmp
stat -c %s tmp | grep 12288
- not diff fileB tmp
+ not cmp -b fileB tmp
rm tmp
umount $mnt
@@ -118,14 +118,14 @@ _test_fs_with_raid() {
dd if=$mnt/fileA of=tmp bs=1k
ls -l tmp
stat -c %s tmp | grep 16384
- diff fileA tmp
+ cmp -b fileA tmp
rm tmp
# read complete fileB, corruption is corrected by raid
dd if=$mnt/fileB of=tmp bs=1k
ls -l tmp
stat -c %s tmp | grep 16384
- diff fileB tmp
+ cmp -b fileB tmp
rm tmp
umount $mnt
@@ -161,15 +161,15 @@ _add_more_data_to_mnt() {
}
_verify_data_on_mnt() {
- diff randA $mnt/randA
- diff randB $mnt/randB
- diff randC $mnt/randC
- diff fileA $mnt/1/fileA
- diff fileB $mnt/1/fileB
- diff fileC $mnt/1/fileC
- diff fileA $mnt/2/fileA
- diff fileB $mnt/2/fileB
- diff fileC $mnt/2/fileC
+ cmp -b randA $mnt/randA
+ cmp -b randB $mnt/randB
+ cmp -b randC $mnt/randC
+ cmp -b fileA $mnt/1/fileA
+ cmp -b fileB $mnt/1/fileB
+ cmp -b fileC $mnt/1/fileC
+ cmp -b fileA $mnt/2/fileA
+ cmp -b fileB $mnt/2/fileB
+ cmp -b fileC $mnt/2/fileC
}
_verify_data_on_lv() {
@@ -221,6 +221,8 @@ _wait_recalc() {
_prepare_vg
lvcreate --type raid1 -m1 --raidintegrity y -n $lv1 -l 8 $vg
+_wait_recalc $vg/${lv1}_rimage_0
+_wait_recalc $vg/${lv1}_rimage_1
_test_fs_with_raid
lvchange -an $vg/$lv1
lvconvert --raidintegrity n $vg/$lv1
@@ -229,6 +231,9 @@ vgremove -ff $vg
_prepare_vg
lvcreate --type raid1 -m2 --raidintegrity y -n $lv1 -l 8 $vg
+_wait_recalc $vg/${lv1}_rimage_0
+_wait_recalc $vg/${lv1}_rimage_1
+_wait_recalc $vg/${lv1}_rimage_2
_test_fs_with_raid
lvchange -an $vg/$lv1
lvconvert --raidintegrity n $vg/$lv1
@@ -237,6 +242,9 @@ vgremove -ff $vg
_prepare_vg
lvcreate --type raid4 --raidintegrity y -n $lv1 -l 8 $vg
+_wait_recalc $vg/${lv1}_rimage_0
+_wait_recalc $vg/${lv1}_rimage_1
+_wait_recalc $vg/${lv1}_rimage_2
_test_fs_with_raid
lvchange -an $vg/$lv1
lvconvert --raidintegrity n $vg/$lv1
@@ -245,6 +253,9 @@ vgremove -ff $vg
_prepare_vg
lvcreate --type raid5 --raidintegrity y -n $lv1 -l 8 $vg
+_wait_recalc $vg/${lv1}_rimage_0
+_wait_recalc $vg/${lv1}_rimage_1
+_wait_recalc $vg/${lv1}_rimage_2
_test_fs_with_raid
lvchange -an $vg/$lv1
lvconvert --raidintegrity n $vg/$lv1
@@ -253,6 +264,11 @@ vgremove -ff $vg
_prepare_vg
lvcreate --type raid6 --raidintegrity y -n $lv1 -l 8 $vg
+_wait_recalc $vg/${lv1}_rimage_0
+_wait_recalc $vg/${lv1}_rimage_1
+_wait_recalc $vg/${lv1}_rimage_2
+_wait_recalc $vg/${lv1}_rimage_3
+_wait_recalc $vg/${lv1}_rimage_4
_test_fs_with_raid
lvchange -an $vg/$lv1
lvconvert --raidintegrity n $vg/$lv1
@@ -261,6 +277,10 @@ vgremove -ff $vg
_prepare_vg
lvcreate --type raid10 --raidintegrity y -n $lv1 -l 8 $vg
+_wait_recalc $vg/${lv1}_rimage_0
+_wait_recalc $vg/${lv1}_rimage_1
+_wait_recalc $vg/${lv1}_rimage_2
+_wait_recalc $vg/${lv1}_rimage_3
_test_fs_with_raid
lvchange -an $vg/$lv1
lvconvert --raidintegrity n $vg/$lv1
^ permalink raw reply related
* master - pvck: dump headers_only to skip metadata text
From: David Teigland @ 2020-05-29 16:01 UTC (permalink / raw)
To: lvm-devel
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=5410dd5441aa827b381ff64dfc6be6e4589d87a1
Commit: 5410dd5441aa827b381ff64dfc6be6e4589d87a1
Parent: be61bd6ff5c6c186f38cb36f8878e310df20eff0
Author: David Teigland <teigland@redhat.com>
AuthorDate: Thu May 28 15:51:59 2020 -0500
Committer: David Teigland <teigland@redhat.com>
CommitterDate: Thu May 28 15:51:59 2020 -0500
pvck: dump headers_only to skip metadata text
pvck --dump headers reads the metadata text area
to compute the text metadata checksum to compare
with the mda_header checksum.
The new header_only will skip reading the metadata
text and not validate the mda_header checksum.
---
tools/lvmcmdline.c | 1 +
tools/pvck.c | 12 ++++++++++--
tools/vals.h | 2 +-
3 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c
index d87a8f053..608653827 100644
--- a/tools/lvmcmdline.c
+++ b/tools/lvmcmdline.c
@@ -1092,6 +1092,7 @@ int repairtype_arg(struct cmd_context *cmd, struct arg_values *av)
int dumptype_arg(struct cmd_context *cmd, struct arg_values *av)
{
if (!strcmp(av->value, "headers") ||
+ !strcmp(av->value, "headers_only") ||
!strcmp(av->value, "metadata") ||
!strcmp(av->value, "metadata_all") ||
!strcmp(av->value, "metadata_search") ||
diff --git a/tools/pvck.c b/tools/pvck.c
index a0f567eeb..cd2c5b6d4 100644
--- a/tools/pvck.c
+++ b/tools/pvck.c
@@ -24,6 +24,7 @@
#define PRINT_CURRENT 1
#define PRINT_ALL 2
+#define PRINT_NONE 3
#define ID_STR_SIZE 40 /* uuid formatted with dashes is 38 chars */
@@ -1388,6 +1389,7 @@ static int _dump_headers(struct cmd_context *cmd, const char *dump, struct setti
{
uint64_t mda1_offset = 0, mda1_size = 0, mda2_offset = 0, mda2_size = 0; /* bytes */
uint32_t mda1_checksum, mda2_checksum;
+ int print_metadata = 0;
int mda_count = 0;
int bad = 0;
@@ -1400,14 +1402,17 @@ static int _dump_headers(struct cmd_context *cmd, const char *dump, struct setti
return 1;
}
+ if (!strcmp(dump, "headers_only"))
+ print_metadata = PRINT_NONE;
+
/*
* The first mda is always 4096 bytes from the start of the device.
*/
- if (!_dump_mda_header(cmd, set, 1, 0, 0, NULL, dev, def, 4096, mda1_size, &mda1_checksum, NULL))
+ if (!_dump_mda_header(cmd, set, 1, print_metadata, 0, NULL, dev, def, 4096, mda1_size, &mda1_checksum, NULL))
bad++;
if (mda2_offset) {
- if (!_dump_mda_header(cmd, set, 1, 0, 0, NULL, dev, def, mda2_offset, mda2_size, &mda2_checksum, NULL))
+ if (!_dump_mda_header(cmd, set, 1, print_metadata, 0, NULL, dev, def, mda2_offset, mda2_size, &mda2_checksum, NULL))
bad++;
/* This probably indicates that one was committed and the other not. */
@@ -3083,6 +3088,9 @@ int pvck(struct cmd_context *cmd, int argc, char **argv)
else if (!strcmp(dump, "headers"))
ret = _dump_headers(cmd, dump, &set, labelsector, dev, def);
+ else if (!strcmp(dump, "headers_only"))
+ ret = _dump_headers(cmd, dump, &set, labelsector, dev, def);
+
else if (!strcmp(dump, "backup_to_raw")) {
ret = _dump_backup_to_raw(cmd, &set);
diff --git a/tools/vals.h b/tools/vals.h
index 70404436b..623859e4d 100644
--- a/tools/vals.h
+++ b/tools/vals.h
@@ -142,7 +142,7 @@ val(reportformat_VAL, reportformat_arg, "ReportFmt", "basic|json")
val(configreport_VAL, configreport_arg, "ConfigReport", "log|vg|lv|pv|pvseg|seg")
val(configtype_VAL, configtype_arg, "ConfigType", "current|default|diff|full|list|missing|new|profilable|profilable-command|profilable-metadata")
val(repairtype_VAL, repairtype_arg, "RepairType", "pv_header|metadata|label_header")
-val(dumptype_VAL, dumptype_arg, "DumpType", "headers|metadata|metadata_all|metadata_search")
+val(dumptype_VAL, dumptype_arg, "DumpType", "headers|headers_only|metadata|metadata_all|metadata_search")
/* this should always be last */
val(VAL_COUNT, NULL, NULL, NULL)
^ permalink raw reply related
* Patchwork housekeeping for: spi-devel-general
From: patchwork-bot+linux-spi @ 2020-05-29 16:00 UTC (permalink / raw)
To: linux-spi, broonie
Latest series: [v1] spi: dw: add reset control (2020-05-29T15:58:06)
Superseding: [v1] spi: dw: add reset control (2020-05-27T20:41:10):
[PATCHv3,1/2] spi: dw: add reset control
[PATCHv3,2/2] dt-bindings: snps,dw-apb-ssi: add optional reset property
--
Deet-doot-dot, I am a bot.
https://korg.wiki.kernel.org/userdoc/pwbot
^ permalink raw reply
* Re: [PATCH v4] Bluetooth: hci_qca: Improve controller ID info log level
From: Matthias Kaehlcke @ 2020-05-29 15:59 UTC (permalink / raw)
To: Zijun Hu
Cc: marcel, johan.hedberg, linux-kernel, linux-bluetooth,
linux-arm-msm, bgodavar, c-hbandi, hemantg, rjliao
In-Reply-To: <1590763573-8302-1-git-send-email-zijuhu@codeaurora.org>
On Fri, May 29, 2020 at 10:46:13PM +0800, Zijun Hu wrote:
> Controller ID info got by VSC EDL_PATCH_GETVER is very
> important, so improve its log level from DEBUG to INFO.
>
> Signed-off-by: Zijun Hu <zijuhu@codeaurora.org>
As requested earlier, please add the tags from previous
versions (in this case my 'Reviewed-by' tag from v2/v3),
unless the new patch has substantial changes.
Reviewed-by: Matthias Kaehlcke <mka@chromium.org>
^ permalink raw reply
* Sd_bus_call - ELOOP Issue
From: Kumar Thangavel @ 2020-05-29 15:59 UTC (permalink / raw)
To: openbmc
Cc: vernon.mauery, tomjose, anoo, dkodihal, ratagupt,
Patrick Williams, Brad Bishop, Vijay Khemka, Sai Dasari
[-- Attachment #1: Type: text/plain, Size: 2599 bytes --]
Hi All,
We are handing the ipmi commands (Bridge IC request) in the ipmi
module.
Please find below the gerrit links for the Design and Sample code
implementation of BIC request handling in the ipmi.
Design :
https://gerrit.openbmc-project.xyz/c/openbmc/phosphor-host-ipmid/+/32213
Sample code implementation :
https://gerrit.openbmc-project.xyz/c/openbmc/fb-ipmi-oem/+/32215
So, This is regarding the ipmi implementation issue as per the new
design of handling BIC request.
1. We are handling the command "0x38 0 1 6 0x15 0xa0 0 0 6 1 0"
Netfn = 0x38, cmd =1 is from Bridge IC in the ipmi module. In the ipmid, we
are making new callback(ipmiOemBicHandler) to handle this BIC request.
2. The Netfn= 0x38 and cmd=1 is verified, we are getting the
commands from the BIC, the same is received at ipmb and ipmid also. The
register call back is also called. When we fill up the response from the
ipmiOemBicHandler works fine. The response is received at the BIC as well.
3. But as per the new design, we need to call ipmid command handler
recursively. When we get the Netfn= 0x38 and cmd=1 command in
ipmiOemBicHandler, the handler needs to open the packet and there will be
an another command (for ex Netfn=6 and cmd=1 get_dev_id). ipmiOemBicHandler
needs to send this command
4. In ipmiOemBicHandler callback function we are using synchronous
method to create connection, using this connection we are calling "execute"
ipmid dbus method from the ipmid deamon.
5. While calling "execute" method, internally it calls sd_bus_call
function. Sd_bus_call returns ELOOP exception due to sender and receiver
process are same.
6. As per our understanding, current sd_bus_call not supported for
connection with the same bus/clients. (sender and receiver are same
application name ). Please confirm.
Log :
yosemitev2 ipmid[370]: sd_bus_call function called..
yosemitev2 ipmid[370]: sd_bus_call function ELOOP .
yosemitev2 ipmid[370]: unique name = :1.71
yosemitev2 ipmid[370]: incoming sender = :1.71
yosemitev2 ipmid[370]: executeCallback called. catch block
yosemitev2 ipmid[370]: EXCEPTION=sd_bus_call:
System.Error.ELOOP: Too many levels of symbolic links
So, Could you please confirm sd_bus_call does not support the same
bus/clients with in the same process.
Also, Please let us know if any alternate method to call the
execute dbus method with the same bus/connection.
Thanks,
Kumar.
[-- Attachment #2: Type: text/html, Size: 3920 bytes --]
^ permalink raw reply
* [PATCH bpf-next RFC 3/3] samples/bpf: change xdp_fwd to use new BTF config interface
From: Jesper Dangaard Brouer @ 2020-05-29 15:59 UTC (permalink / raw)
To: David Ahern, bpf, netdev
Cc: Jesper Dangaard Brouer, Daniel Borkmann, Alexei Starovoitov,
Andrii Nakryiko
In-Reply-To: <159076794319.1387573.8722376887638960093.stgit@firesoul>
This enable BTF for samples/bpf/xdp_fwd program, and demonstrates
how the BPF-developer can defined their own version of bpf_devmap_val.
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
---
samples/bpf/xdp_fwd.h | 24 ++++++++++++++++++++++++
samples/bpf/xdp_fwd_kern.c | 5 +++--
samples/bpf/xdp_fwd_user.c | 9 ++++++++-
3 files changed, 35 insertions(+), 3 deletions(-)
create mode 100644 samples/bpf/xdp_fwd.h
diff --git a/samples/bpf/xdp_fwd.h b/samples/bpf/xdp_fwd.h
new file mode 100644
index 000000000000..8abb2a417117
--- /dev/null
+++ b/samples/bpf/xdp_fwd.h
@@ -0,0 +1,24 @@
+// SPDX-License-Identifier: GPL-2.0
+#ifndef _SAMPLES_BPF_XDP_FWD_H
+#define _SAMPLES_BPF_XDP_FWD_H
+
+#define ENABLE_BPF_PROG 1
+
+/* Notice XDP prog can redefine this struct, which through BTF affect
+ * what kernel-side config options are available.
+ */
+struct bpf_devmap_val {
+ __u32 ifindex; /* device index - mandatory */
+#ifdef ENABLE_BPF_PROG
+ union {
+ int fd; /* prog fd on map write */
+ __u32 id; /* prog id on map read */
+ } bpf_prog;
+#endif
+ struct {
+ unsigned char data2[2];
+ __u16 vlan_hdr;
+ } storage;
+};
+
+#endif /* _SAMPLES_BPF_XDP_FWD_H */
diff --git a/samples/bpf/xdp_fwd_kern.c b/samples/bpf/xdp_fwd_kern.c
index 54c099cbd639..bb1ee44dcd60 100644
--- a/samples/bpf/xdp_fwd_kern.c
+++ b/samples/bpf/xdp_fwd_kern.c
@@ -20,13 +20,14 @@
#include <linux/ipv6.h>
#include <bpf/bpf_helpers.h>
+#include "xdp_fwd.h"
#define IPV6_FLOWINFO_MASK cpu_to_be32(0x0FFFFFFF)
struct {
__uint(type, BPF_MAP_TYPE_DEVMAP);
- __uint(key_size, sizeof(int));
- __uint(value_size, sizeof(int));
+ __type(key, u32);
+ __type(value, struct bpf_devmap_val);
__uint(max_entries, 64);
} xdp_tx_ports SEC(".maps");
diff --git a/samples/bpf/xdp_fwd_user.c b/samples/bpf/xdp_fwd_user.c
index 74a4583d0d86..4ddf70bcedde 100644
--- a/samples/bpf/xdp_fwd_user.c
+++ b/samples/bpf/xdp_fwd_user.c
@@ -26,13 +26,20 @@
#include <bpf/libbpf.h>
#include <bpf/bpf.h>
+#include "xdp_fwd.h"
static __u32 xdp_flags = XDP_FLAGS_UPDATE_IF_NOEXIST;
static int do_attach(int idx, int prog_fd, int map_fd, const char *name)
{
+ struct bpf_devmap_val val = { 0 };
int err;
+ val.ifindex = idx;
+#ifdef ENABLE_BPF_PROG
+ val.bpf_prog.fd = - 1;
+#endif
+
err = bpf_set_link_xdp_fd(idx, prog_fd, xdp_flags);
if (err < 0) {
printf("ERROR: failed to attach program to %s\n", name);
@@ -40,7 +47,7 @@ static int do_attach(int idx, int prog_fd, int map_fd, const char *name)
}
/* Adding ifindex as a possible egress TX port */
- err = bpf_map_update_elem(map_fd, &idx, &idx, 0);
+ err = bpf_map_update_elem(map_fd, &idx, &val, 0);
if (err)
printf("ERROR: failed using device %s as TX-port\n", name);
^ permalink raw reply related
* [PATCH bpf-next RFC 2/3] bpf: devmap dynamic map-value storage area based on BTF
From: Jesper Dangaard Brouer @ 2020-05-29 15:59 UTC (permalink / raw)
To: David Ahern, bpf, netdev
Cc: Jesper Dangaard Brouer, Daniel Borkmann, Alexei Starovoitov,
Andrii Nakryiko
In-Reply-To: <159076794319.1387573.8722376887638960093.stgit@firesoul>
The devmap map-value can be read from BPF-prog side, and could be used for a
storage area per device. This could e.g. contain info on headers that need
to be added when packet egress this device.
This patchset adds a dynamic storage member to struct bpf_devmap_val. More
importantly the struct bpf_devmap_val is made dynamic via leveraging and
requiring BTF for struct sizes above 4. The only mandatory struct member is
'ifindex' with a fixed offset of zero.
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
---
kernel/bpf/devmap.c | 216 ++++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 185 insertions(+), 31 deletions(-)
diff --git a/kernel/bpf/devmap.c b/kernel/bpf/devmap.c
index 4ab67b2d8159..9cf2dadcc0fe 100644
--- a/kernel/bpf/devmap.c
+++ b/kernel/bpf/devmap.c
@@ -48,6 +48,7 @@
#include <net/xdp.h>
#include <linux/filter.h>
#include <trace/events/xdp.h>
+#include <linux/btf.h>
#define DEV_CREATE_FLAG_MASK \
(BPF_F_NUMA_NODE | BPF_F_RDONLY | BPF_F_WRONLY)
@@ -60,13 +61,30 @@ struct xdp_dev_bulk_queue {
unsigned int count;
};
-/* DEVMAP values */
+/* DEVMAP map-value layout.
+ *
+ * The struct data-layout of map-value is a configuration interface.
+ * BPF-prog side have read-only access to this memory.
+ *
+ * The layout might be different than below, because some struct members are
+ * optional. This is made dynamic by requiring userspace provides an BTF
+ * description of the struct layout, when creating the BPF-map. Struct names
+ * are important and part of API, as BTF use these names to identify members.
+ */
struct bpf_devmap_val {
- __u32 ifindex; /* device index */
+ __u32 ifindex; /* device index - mandatory */
union {
int fd; /* prog fd on map write */
__u32 id; /* prog id on map read */
} bpf_prog;
+ struct {
+ /* This 'storage' member is meant as a dynamically sized area,
+ * that BPF developer can redefine. As other members are added
+ * overtime, this area can shrink, as size can be regained by
+ * not using members above. Add new members above this struct.
+ */
+ unsigned char data[24];
+ } storage;
};
struct bpf_dtab_netdev {
@@ -79,10 +97,18 @@ struct bpf_dtab_netdev {
struct bpf_devmap_val val;
};
+struct bpf_devmap_val_cfg {
+ struct {
+ int ifindex;
+ int bpf_prog;
+ } btf_offset;
+};
+
struct bpf_dtab {
struct bpf_map map;
struct bpf_dtab_netdev **netdev_map; /* DEVMAP type only */
struct list_head list;
+ struct bpf_devmap_val_cfg cfg;
/* these are only used for DEVMAP_HASH type maps */
struct hlist_head *dev_index_head;
@@ -116,20 +142,24 @@ static inline struct hlist_head *dev_map_index_hash(struct bpf_dtab *dtab,
static int dev_map_init_map(struct bpf_dtab *dtab, union bpf_attr *attr)
{
- __u32 valsize = attr->value_size;
u64 cost = 0;
int err;
- /* check sanity of attributes. 2 value sizes supported:
- * 4 bytes: ifindex
- * 8 bytes: ifindex + prog fd
- */
+ /* Value contents validated in dev_map_check_btf */
if (attr->max_entries == 0 || attr->key_size != 4 ||
- (valsize != offsetofend(struct bpf_devmap_val, ifindex) &&
- valsize != offsetofend(struct bpf_devmap_val, bpf_prog.fd)) ||
+ attr->value_size > sizeof(struct bpf_devmap_val) ||
attr->map_flags & ~DEV_CREATE_FLAG_MASK)
return -EINVAL;
+ /* Enforce BTF for userspace, unless dealing with legacy kABI */
+ if (attr->value_size != 4 &&
+ (!attr->btf_key_type_id || !attr->btf_value_type_id))
+ return -EOPNOTSUPP;
+
+ /* Mark BTF offset's as invalid */
+ dtab->cfg.btf_offset.ifindex = -1;
+ dtab->cfg.btf_offset.bpf_prog = -1;
+
/* Lookup returns a pointer straight to dev->ifindex, so make sure the
* verifier prevents writes from the BPF side
*/
@@ -199,6 +229,119 @@ static struct bpf_map *dev_map_alloc(union bpf_attr *attr)
return &dtab->map;
}
+struct expect {
+ u8 btf_kind;
+ bool mandatory;
+ int bit_offset;
+ int size;
+ const char *name;
+};
+
+static int btf_find_expect_layout_offset(const struct btf *btf,
+ const struct btf_type *value_type,
+ const struct expect *layout)
+{
+ const struct btf_member *member;
+ u32 i, off = -ENOENT;
+
+ for_each_member(i, value_type, member) {
+ const struct btf_type *member_type;
+ const char *member_name;
+
+ member_type = btf_type_skip_modifiers(btf, member->type, NULL);
+ if (BTF_INFO_KIND(member_type->info) != layout->btf_kind) {
+ continue;
+ }
+
+ member_name = btf_name_by_offset(btf, member->name_off);
+ if (!member_name)
+ return -EINVAL;
+
+ if (strcmp(layout->name, member_name))
+ continue;
+
+ if (layout->size > 0 && // btf_type_has_size(member_type) &&
+ member_type->size != layout->size)
+ continue;
+
+ off = btf_member_bit_offset(value_type, member);
+ if (layout->bit_offset > 0 &&
+ layout->bit_offset != off) {
+ off = -ENOENT;
+ continue;
+ }
+
+ return off;
+ }
+ return off;
+}
+
+/* Expected BTF layout that match struct bpf_devmap_val */
+static const struct expect layout[] = {
+ {BTF_KIND_INT, true, 0, 4, "ifindex"},
+ {BTF_KIND_UNION, false, 32, 4, "bpf_prog"},
+ {BTF_KIND_STRUCT, false, -1, -1, "storage"}
+};
+
+static int dev_map_check_btf(const struct bpf_map *map,
+ const struct btf *btf,
+ const struct btf_type *key_type,
+ const struct btf_type *value_type)
+{
+ struct bpf_dtab *dtab = container_of(map, struct bpf_dtab, map);
+ u32 found_members_cnt = 0;
+ u32 int_data;
+ int off;
+ u32 i;
+
+ /* Validate KEY type and size */
+ if (BTF_INFO_KIND(key_type->info) != BTF_KIND_INT)
+ return -EOPNOTSUPP;
+
+ int_data = *(u32 *)(key_type + 1);
+ if (BTF_INT_BITS(int_data) != 32 || BTF_INT_OFFSET(int_data) != 0)
+ return -EOPNOTSUPP;
+
+ /* Validate VALUE have layout that match/map-to struct bpf_devmap_val
+ * - With a flexible size of member 'storage'.
+ */
+
+ if (BTF_INFO_KIND(value_type->info) != BTF_KIND_STRUCT)
+ return -EOPNOTSUPP;
+
+ /* Struct/union members in BTF must not exceed (max) expected members */
+ if (btf_type_vlen(value_type) > ARRAY_SIZE(layout))
+ return -E2BIG;
+
+ for (i = 0; i < ARRAY_SIZE(layout); i++) {
+ off = btf_find_expect_layout_offset(btf, value_type, &layout[i]);
+
+ if (off < 0 && layout[i].mandatory)
+ return -EUCLEAN;
+
+ if (off >= 0)
+ found_members_cnt++;
+
+ /* Transfer layout config to map */
+ switch (i) {
+ case 0:
+ dtab->cfg.btf_offset.ifindex = off;
+ break;
+ case 1:
+ dtab->cfg.btf_offset.bpf_prog = off;
+ break;
+ default:
+ break;
+ }
+ }
+
+ /* Detect if BTF/vlen have members that were not found */
+ if (btf_type_vlen(value_type) > found_members_cnt)
+ return -E2BIG;
+
+ return 0;
+}
+
static void dev_map_free(struct bpf_map *map)
{
struct bpf_dtab *dtab = container_of(map, struct bpf_dtab, map);
@@ -601,42 +744,53 @@ static int dev_map_hash_delete_elem(struct bpf_map *map, void *key)
return ret;
}
+static inline bool map_value_has_bpf_prog(const struct bpf_dtab *dtab)
+{
+ return dtab->cfg.btf_offset.bpf_prog >= 0;
+}
+
static struct bpf_dtab_netdev *__dev_map_alloc_node(struct net *net,
- struct bpf_dtab *dtab,
+ struct bpf_map *map,
struct bpf_devmap_val *val,
unsigned int idx)
{
+ struct bpf_dtab *dtab = container_of(map, struct bpf_dtab, map);
struct bpf_prog *prog = NULL;
struct bpf_dtab_netdev *dev;
- dev = kmalloc_node(sizeof(*dev), GFP_ATOMIC | __GFP_NOWARN,
+ dev = kzalloc_node(sizeof(*dev), GFP_ATOMIC | __GFP_NOWARN,
dtab->map.numa_node);
if (!dev)
return ERR_PTR(-ENOMEM);
+ /* Member: ifindex is mandatory, both BTF and kABI */
dev->dev = dev_get_by_index(net, val->ifindex);
if (!dev->dev)
goto err_out;
- if (val->bpf_prog.fd >= 0) {
- prog = bpf_prog_get_type_dev(val->bpf_prog.fd,
- BPF_PROG_TYPE_XDP, false);
- if (IS_ERR(prog))
- goto err_put_dev;
- if (prog->expected_attach_type != BPF_XDP_DEVMAP)
- goto err_put_prog;
+ /* Member: bpf_prog union is optional, but have fixed offset if exist */
+ if (map_value_has_bpf_prog(dtab)) {
+ if (val->bpf_prog.fd >= 0) {
+ prog = bpf_prog_get_type_dev(val->bpf_prog.fd,
+ BPF_PROG_TYPE_XDP, false);
+ if (IS_ERR(prog))
+ goto err_put_dev;
+ if (prog->expected_attach_type != BPF_XDP_DEVMAP)
+ goto err_put_prog;
+ }
+ if (prog) {
+ dev->xdp_prog = prog;
+ val->bpf_prog.id = prog->aux->id;
+ } else {
+ dev->xdp_prog = NULL;
+ val->bpf_prog.id = 0;
+ }
}
-
dev->idx = idx;
dev->dtab = dtab;
- if (prog) {
- dev->xdp_prog = prog;
- dev->val.bpf_prog.id = prog->aux->id;
- } else {
- dev->xdp_prog = NULL;
- dev->val.bpf_prog.id = 0;
- }
- dev->val.ifindex = val->ifindex;
+
+ /* After adjustment copy map value to get storage area */
+ memcpy(&dev->val, val, map->value_size);
return dev;
err_put_prog:
@@ -672,7 +826,7 @@ static int __dev_map_update_elem(struct net *net, struct bpf_map *map,
if (val.bpf_prog.fd != -1)
return -EINVAL;
} else {
- dev = __dev_map_alloc_node(net, dtab, &val, i);
+ dev = __dev_map_alloc_node(net, map, &val, i);
if (IS_ERR(dev))
return PTR_ERR(dev);
}
@@ -717,7 +871,7 @@ static int __dev_map_hash_update_elem(struct net *net, struct bpf_map *map,
if (old_dev && (map_flags & BPF_NOEXIST))
goto out_err;
- dev = __dev_map_alloc_node(net, dtab, &val, idx);
+ dev = __dev_map_alloc_node(net, map, &val, idx);
if (IS_ERR(dev)) {
err = PTR_ERR(dev);
goto out_err;
@@ -762,7 +916,7 @@ const struct bpf_map_ops dev_map_ops = {
.map_lookup_elem = dev_map_lookup_elem,
.map_update_elem = dev_map_update_elem,
.map_delete_elem = dev_map_delete_elem,
- .map_check_btf = map_check_no_btf,
+ .map_check_btf = dev_map_check_btf,
};
const struct bpf_map_ops dev_map_hash_ops = {
@@ -772,7 +926,7 @@ const struct bpf_map_ops dev_map_hash_ops = {
.map_lookup_elem = dev_map_hash_lookup_elem,
.map_update_elem = dev_map_hash_update_elem,
.map_delete_elem = dev_map_hash_delete_elem,
- .map_check_btf = map_check_no_btf,
+ .map_check_btf = dev_map_check_btf,
};
static void dev_map_hash_remove_netdev(struct bpf_dtab *dtab,
^ permalink raw reply related
* [PATCH bpf-next RFC 1/3] bpf: move struct bpf_devmap_val out of UAPI
From: Jesper Dangaard Brouer @ 2020-05-29 15:59 UTC (permalink / raw)
To: David Ahern, bpf, netdev
Cc: Jesper Dangaard Brouer, Daniel Borkmann, Alexei Starovoitov,
Andrii Nakryiko
In-Reply-To: <159076794319.1387573.8722376887638960093.stgit@firesoul>
The struct bpf_devmap_val doesn't belong in uapi/linux/bpf.h, because this
is a struct that BPF-progs can define themselves, and can provide different
sizes to the kernel.
While moving the struct change the union to be a named union, with the name
"bpf_prog". This makes it easier to identify with BTF in next patch.
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
---
include/uapi/linux/bpf.h | 9 -------
kernel/bpf/devmap.c | 25 ++++++++++++++------
tools/include/uapi/linux/bpf.h | 9 -------
.../selftests/bpf/prog_tests/xdp_devmap_attach.c | 18 ++++++++++----
.../bpf/progs/test_xdp_with_devmap_helpers.c | 10 +++++++-
5 files changed, 39 insertions(+), 32 deletions(-)
diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
index 61ae81bf67de..970c44ecc472 100644
--- a/include/uapi/linux/bpf.h
+++ b/include/uapi/linux/bpf.h
@@ -3628,15 +3628,6 @@ struct xdp_md {
__u32 egress_ifindex; /* txq->dev->ifindex */
};
-/* DEVMAP values */
-struct bpf_devmap_val {
- __u32 ifindex; /* device index */
- union {
- int bpf_prog_fd; /* prog fd on map write */
- __u32 bpf_prog_id; /* prog id on map read */
- };
-};
-
enum sk_action {
SK_DROP = 0,
SK_PASS,
diff --git a/kernel/bpf/devmap.c b/kernel/bpf/devmap.c
index defdd22caa4b..4ab67b2d8159 100644
--- a/kernel/bpf/devmap.c
+++ b/kernel/bpf/devmap.c
@@ -60,6 +60,15 @@ struct xdp_dev_bulk_queue {
unsigned int count;
};
+/* DEVMAP values */
+struct bpf_devmap_val {
+ __u32 ifindex; /* device index */
+ union {
+ int fd; /* prog fd on map write */
+ __u32 id; /* prog id on map read */
+ } bpf_prog;
+};
+
struct bpf_dtab_netdev {
struct net_device *dev; /* must be first member, due to tracepoint */
struct hlist_node index_hlist;
@@ -117,7 +126,7 @@ static int dev_map_init_map(struct bpf_dtab *dtab, union bpf_attr *attr)
*/
if (attr->max_entries == 0 || attr->key_size != 4 ||
(valsize != offsetofend(struct bpf_devmap_val, ifindex) &&
- valsize != offsetofend(struct bpf_devmap_val, bpf_prog_fd)) ||
+ valsize != offsetofend(struct bpf_devmap_val, bpf_prog.fd)) ||
attr->map_flags & ~DEV_CREATE_FLAG_MASK)
return -EINVAL;
@@ -609,8 +618,8 @@ static struct bpf_dtab_netdev *__dev_map_alloc_node(struct net *net,
if (!dev->dev)
goto err_out;
- if (val->bpf_prog_fd >= 0) {
- prog = bpf_prog_get_type_dev(val->bpf_prog_fd,
+ if (val->bpf_prog.fd >= 0) {
+ prog = bpf_prog_get_type_dev(val->bpf_prog.fd,
BPF_PROG_TYPE_XDP, false);
if (IS_ERR(prog))
goto err_put_dev;
@@ -622,10 +631,10 @@ static struct bpf_dtab_netdev *__dev_map_alloc_node(struct net *net,
dev->dtab = dtab;
if (prog) {
dev->xdp_prog = prog;
- dev->val.bpf_prog_id = prog->aux->id;
+ dev->val.bpf_prog.id = prog->aux->id;
} else {
dev->xdp_prog = NULL;
- dev->val.bpf_prog_id = 0;
+ dev->val.bpf_prog.id = 0;
}
dev->val.ifindex = val->ifindex;
@@ -643,7 +652,7 @@ static int __dev_map_update_elem(struct net *net, struct bpf_map *map,
void *key, void *value, u64 map_flags)
{
struct bpf_dtab *dtab = container_of(map, struct bpf_dtab, map);
- struct bpf_devmap_val val = { .bpf_prog_fd = -1 };
+ struct bpf_devmap_val val = { .bpf_prog.fd = -1 };
struct bpf_dtab_netdev *dev, *old_dev;
u32 i = *(u32 *)key;
@@ -660,7 +669,7 @@ static int __dev_map_update_elem(struct net *net, struct bpf_map *map,
if (!val.ifindex) {
dev = NULL;
/* can not specify fd if ifindex is 0 */
- if (val.bpf_prog_fd != -1)
+ if (val.bpf_prog.fd != -1)
return -EINVAL;
} else {
dev = __dev_map_alloc_node(net, dtab, &val, i);
@@ -690,7 +699,7 @@ static int __dev_map_hash_update_elem(struct net *net, struct bpf_map *map,
void *key, void *value, u64 map_flags)
{
struct bpf_dtab *dtab = container_of(map, struct bpf_dtab, map);
- struct bpf_devmap_val val = { .bpf_prog_fd = -1 };
+ struct bpf_devmap_val val = { .bpf_prog.fd = -1 };
struct bpf_dtab_netdev *dev, *old_dev;
u32 idx = *(u32 *)key;
unsigned long flags;
diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h
index 61ae81bf67de..970c44ecc472 100644
--- a/tools/include/uapi/linux/bpf.h
+++ b/tools/include/uapi/linux/bpf.h
@@ -3628,15 +3628,6 @@ struct xdp_md {
__u32 egress_ifindex; /* txq->dev->ifindex */
};
-/* DEVMAP values */
-struct bpf_devmap_val {
- __u32 ifindex; /* device index */
- union {
- int bpf_prog_fd; /* prog fd on map write */
- __u32 bpf_prog_id; /* prog id on map read */
- };
-};
-
enum sk_action {
SK_DROP = 0,
SK_PASS,
diff --git a/tools/testing/selftests/bpf/prog_tests/xdp_devmap_attach.c b/tools/testing/selftests/bpf/prog_tests/xdp_devmap_attach.c
index caeea19f2772..b72a696fc6a8 100644
--- a/tools/testing/selftests/bpf/prog_tests/xdp_devmap_attach.c
+++ b/tools/testing/selftests/bpf/prog_tests/xdp_devmap_attach.c
@@ -8,11 +8,19 @@
#define IFINDEX_LO 1
+struct _bpf_devmap_val {
+ __u32 ifindex; /* device index */
+ union {
+ int fd; /* prog fd on map write */
+ __u32 id; /* prog id on map read */
+ } bpf_prog;
+};
+
void test_xdp_with_devmap_helpers(void)
{
struct test_xdp_with_devmap_helpers *skel;
struct bpf_prog_info info = {};
- struct bpf_devmap_val val = {
+ struct _bpf_devmap_val val = {
.ifindex = IFINDEX_LO,
};
__u32 id, len = sizeof(info);
@@ -40,15 +48,15 @@ void test_xdp_with_devmap_helpers(void)
if (CHECK_FAIL(err))
goto out_close;
- val.bpf_prog_fd = dm_fd;
+ val.bpf_prog.fd = dm_fd;
err = bpf_map_update_elem(map_fd, &idx, &val, 0);
CHECK(err, "Add program to devmap entry",
"err %d errno %d\n", err, errno);
err = bpf_map_lookup_elem(map_fd, &id, &val);
CHECK(err, "Read devmap entry", "err %d errno %d\n", err, errno);
- CHECK(info.id != val.bpf_prog_id, "Expected program id in devmap entry",
- "expected %u read %u\n", info.id, val.bpf_prog_id);
+ CHECK(info.id != val.bpf_prog.id, "Expected program id in devmap entry",
+ "expected %u read %u\n", info.id, val.bpf_prog.id);
/* can not attach BPF_XDP_DEVMAP program to a device */
err = bpf_set_link_xdp_fd(IFINDEX_LO, dm_fd, XDP_FLAGS_SKB_MODE);
@@ -56,7 +64,7 @@ void test_xdp_with_devmap_helpers(void)
"should have failed\n");
val.ifindex = 1;
- val.bpf_prog_fd = bpf_program__fd(skel->progs.xdp_dummy_prog);
+ val.bpf_prog.fd = bpf_program__fd(skel->progs.xdp_dummy_prog);
err = bpf_map_update_elem(map_fd, &idx, &val, 0);
CHECK(err == 0, "Add non-BPF_XDP_DEVMAP program to devmap entry",
"should have failed\n");
diff --git a/tools/testing/selftests/bpf/progs/test_xdp_with_devmap_helpers.c b/tools/testing/selftests/bpf/progs/test_xdp_with_devmap_helpers.c
index 645f7f415857..126f6de514a1 100644
--- a/tools/testing/selftests/bpf/progs/test_xdp_with_devmap_helpers.c
+++ b/tools/testing/selftests/bpf/progs/test_xdp_with_devmap_helpers.c
@@ -3,10 +3,18 @@
#include <linux/bpf.h>
#include <bpf/bpf_helpers.h>
+struct _bpf_devmap_val {
+ __u32 ifindex; /* device index */
+ union {
+ int fd; /* prog fd on map write */
+ __u32 id; /* prog id on map read */
+ } bpf_prog;
+};
+
struct {
__uint(type, BPF_MAP_TYPE_DEVMAP);
__uint(key_size, sizeof(__u32));
- __uint(value_size, sizeof(struct bpf_devmap_val));
+ __uint(value_size, sizeof(struct _bpf_devmap_val));
__uint(max_entries, 4);
} dm_ports SEC(".maps");
^ permalink raw reply related
* [PATCH bpf-next RFC 0/3] bpf: dynamic map-value config layout via BTF
From: Jesper Dangaard Brouer @ 2020-05-29 15:59 UTC (permalink / raw)
To: David Ahern, bpf, netdev
Cc: Jesper Dangaard Brouer, Daniel Borkmann, Alexei Starovoitov,
Andrii Nakryiko
This patchset is based on top of David Ahern's work V3: "bpf: Add support
for XDP programs in DEVMAP entries"[1]. The purpose is to address the kABI
interfaces that is introduced in that patchset, before it is released.
[1] https://lore.kernel.org/netdev/20200529052057.69378-1-dsahern@kernel.org
The map-value of these special maps are evolving into configuration
interface between userspace and kernel. The approach in[1] is to expose a
binary struct layout that can only be grown in the end of the struct.
With the BTF technology it is possible to create an interface that is much
more dynamic and flexible.
---
Jesper Dangaard Brouer (3):
bpf: move struct bpf_devmap_val out of UAPI
bpf: devmap dynamic map-value storage area based on BTF
samples/bpf: change xdp_fwd to use new BTF config interface
include/uapi/linux/bpf.h | 9 -
kernel/bpf/devmap.c | 227 +++++++++++++++++---
samples/bpf/xdp_fwd.h | 24 ++
samples/bpf/xdp_fwd_kern.c | 5
samples/bpf/xdp_fwd_user.c | 9 +
tools/include/uapi/linux/bpf.h | 9 -
.../selftests/bpf/prog_tests/xdp_devmap_attach.c | 18 +-
.../bpf/progs/test_xdp_with_devmap_helpers.c | 10 +
8 files changed, 252 insertions(+), 59 deletions(-)
create mode 100644 samples/bpf/xdp_fwd.h
--
^ permalink raw reply
* [PATCH v1] Bluetooth: btmtkuart: Use serdev_device_write_buf() instead of serdev_device_write()
From: Zijun Hu @ 2020-05-29 15:58 UTC (permalink / raw)
To: sean.wang, marcel, johan.hedberg, matthias.bgg
Cc: linux-kernel, linux-bluetooth, mka, linux-mediatek, zijuhu,
linux-arm-kernel
serdev_device_write() is not appropriate at here because
serdev_device_write_wakeup() is not used to release completion hold
by the former at @write_wakeup member of struct serdev_device_ops.
Fix by using serdev_device_write_buf() instead of serdev_device_write().
Signed-off-by: Zijun Hu <zijuhu@codeaurora.org>
---
drivers/bluetooth/btmtkuart.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/bluetooth/btmtkuart.c b/drivers/bluetooth/btmtkuart.c
index 8a81fbca5c9d..6c40bc75fb5b 100644
--- a/drivers/bluetooth/btmtkuart.c
+++ b/drivers/bluetooth/btmtkuart.c
@@ -695,8 +695,7 @@ static int btmtkuart_change_baudrate(struct hci_dev *hdev)
/* Send a dummy byte 0xff to activate the new baudrate */
param = 0xff;
- err = serdev_device_write(bdev->serdev, ¶m, sizeof(param),
- MAX_SCHEDULE_TIMEOUT);
+ err = serdev_device_write_buf(bdev->serdev, ¶m, sizeof(param));
if (err < 0 || err < sizeof(param))
return err;
--
2.7.4
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek
^ permalink raw reply related
* [PATCH v1] Bluetooth: btmtkuart: Use serdev_device_write_buf() instead of serdev_device_write()
From: Zijun Hu @ 2020-05-29 15:58 UTC (permalink / raw)
To: sean.wang, marcel, johan.hedberg, matthias.bgg
Cc: linux-kernel, linux-bluetooth, mka, linux-mediatek, zijuhu,
linux-arm-kernel
serdev_device_write() is not appropriate at here because
serdev_device_write_wakeup() is not used to release completion hold
by the former at @write_wakeup member of struct serdev_device_ops.
Fix by using serdev_device_write_buf() instead of serdev_device_write().
Signed-off-by: Zijun Hu <zijuhu@codeaurora.org>
---
drivers/bluetooth/btmtkuart.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/bluetooth/btmtkuart.c b/drivers/bluetooth/btmtkuart.c
index 8a81fbca5c9d..6c40bc75fb5b 100644
--- a/drivers/bluetooth/btmtkuart.c
+++ b/drivers/bluetooth/btmtkuart.c
@@ -695,8 +695,7 @@ static int btmtkuart_change_baudrate(struct hci_dev *hdev)
/* Send a dummy byte 0xff to activate the new baudrate */
param = 0xff;
- err = serdev_device_write(bdev->serdev, ¶m, sizeof(param),
- MAX_SCHEDULE_TIMEOUT);
+ err = serdev_device_write_buf(bdev->serdev, ¶m, sizeof(param));
if (err < 0 || err < sizeof(param))
return err;
--
2.7.4
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related
* [PATCH v1] Bluetooth: btmtkuart: Use serdev_device_write_buf() instead of serdev_device_write()
From: Zijun Hu @ 2020-05-29 15:58 UTC (permalink / raw)
To: sean.wang, marcel, johan.hedberg, matthias.bgg
Cc: linux-kernel, linux-bluetooth, linux-mediatek, linux-arm-kernel,
mka, zijuhu
serdev_device_write() is not appropriate at here because
serdev_device_write_wakeup() is not used to release completion hold
by the former at @write_wakeup member of struct serdev_device_ops.
Fix by using serdev_device_write_buf() instead of serdev_device_write().
Signed-off-by: Zijun Hu <zijuhu@codeaurora.org>
---
drivers/bluetooth/btmtkuart.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/bluetooth/btmtkuart.c b/drivers/bluetooth/btmtkuart.c
index 8a81fbca5c9d..6c40bc75fb5b 100644
--- a/drivers/bluetooth/btmtkuart.c
+++ b/drivers/bluetooth/btmtkuart.c
@@ -695,8 +695,7 @@ static int btmtkuart_change_baudrate(struct hci_dev *hdev)
/* Send a dummy byte 0xff to activate the new baudrate */
param = 0xff;
- err = serdev_device_write(bdev->serdev, ¶m, sizeof(param),
- MAX_SCHEDULE_TIMEOUT);
+ err = serdev_device_write_buf(bdev->serdev, ¶m, sizeof(param));
if (err < 0 || err < sizeof(param))
return err;
--
2.7.4
^ permalink raw reply related
* Re: [PATCH 17/20] tools/libx[cl]: Plumb static_data_done() up into libxl
From: Ian Jackson @ 2020-05-29 15:58 UTC (permalink / raw)
To: Andrew Cooper; +Cc: Anthony Perard, Xen-devel, Wei Liu
In-Reply-To: <dd477627-1c36-ae3f-3c7a-ef15d5b9fa21@citrix.com>
Andrew Cooper writes ("Re: [PATCH 17/20] tools/libx[cl]: Plumb static_data_done() up into libxl"):
> There are several things going on here.
>
> One is the control flow marker of "We reached the end of the static
> data". A higher level toolstack needs to know this unconditionally,
> which is why the callback is mandatory.
>
> For v2 compatibility, its callers cope with "this is where an end of
> static data would be in a v3 stream", but that abstracted away so the
> higher level toolstack doesn't know or need to care.
>
> The missing parameter is "p.s. here are the things we were expecting but
> didn't get - you need to pick up the pieces". For now, it is synonymous
> with "here is a v2 stream without CPUID data", but that won't be
> accurate in the future if/when new static data records get retrofitted.
Thanks for the explanation.
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
^ permalink raw reply
* Re: [PATCH v2] perf jvmti: Remove redundant jitdump line table entries
From: Arnaldo Carvalho de Melo @ 2020-05-29 15:59 UTC (permalink / raw)
To: Ian Rogers; +Cc: Nick Gasson, Jiri Olsa, Peter Zijlstra, Stephane Eranian, LKML
In-Reply-To: <CAP-5=fWcMKtPa3C9Jbyf=zY=YmTRaoiyc837nYJcK9pC+NJ-LA@mail.gmail.com>
Em Thu, May 28, 2020 at 12:31:31AM -0700, Ian Rogers escreveu:
> On Wed, May 27, 2020 at 10:41 PM Nick Gasson <nick.gasson@arm.com> wrote:
> > + */
>
> Thanks!
>
> Acked-by: Ian Rogers <irogers@google.com>
Thanks, applied.
- Arnaldo
^ permalink raw reply
* [PATCHv4 1/2] spi: dw: add reset control
From: Dinh Nguyen @ 2020-05-29 15:58 UTC (permalink / raw)
To: linux-kernel
Cc: dinguyen, devicetree, linux-spi, broonie, robh+dt, Sergey.Semin,
fancer.lancer, andriy.shevchenko, lars.povlsen, liang.j.jin
Add mechanism to get the reset control and deassert it in order to bring
the IP out of reset.
Signed-off-by: Liang Jin J <liang.j.jin@ericsson.com>
Signed-off-by: Dinh Nguyen <dinguyen@kernel.org>
---
v4: no change
v3: allow for other failures
remove tab for rstc reset_control
v2: use _get_optional_exclusive
put IP back into reset if there was an error in probe function
---
drivers/spi/spi-dw-mmio.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/drivers/spi/spi-dw-mmio.c b/drivers/spi/spi-dw-mmio.c
index 0894b4c09496..a1b87d4606ba 100644
--- a/drivers/spi/spi-dw-mmio.c
+++ b/drivers/spi/spi-dw-mmio.c
@@ -19,6 +19,7 @@
#include <linux/acpi.h>
#include <linux/property.h>
#include <linux/regmap.h>
+#include <linux/reset.h>
#include "spi-dw.h"
@@ -29,6 +30,7 @@ struct dw_spi_mmio {
struct clk *clk;
struct clk *pclk;
void *priv;
+ struct reset_control *rstc;
};
#define MSCC_CPU_SYSTEM_CTRL_GENERAL_CTRL 0x24
@@ -224,6 +226,14 @@ static int dw_spi_mmio_probe(struct platform_device *pdev)
if (ret)
goto out_clk;
+ /* find an optional reset controller */
+ dwsmmio->rstc = devm_reset_control_get_optional_exclusive(&pdev->dev, "spi");
+ if (IS_ERR(dwsmmio->rstc)) {
+ ret = PTR_ERR(dwsmmio->rstc);
+ goto out_clk;
+ }
+ reset_control_deassert(dwsmmio->rstc);
+
dws->bus_num = pdev->id;
dws->max_freq = clk_get_rate(dwsmmio->clk);
@@ -257,6 +267,8 @@ static int dw_spi_mmio_probe(struct platform_device *pdev)
clk_disable_unprepare(dwsmmio->pclk);
out_clk:
clk_disable_unprepare(dwsmmio->clk);
+ reset_control_assert(dwsmmio->rstc);
+
return ret;
}
@@ -268,6 +280,7 @@ static int dw_spi_mmio_remove(struct platform_device *pdev)
pm_runtime_disable(&pdev->dev);
clk_disable_unprepare(dwsmmio->pclk);
clk_disable_unprepare(dwsmmio->clk);
+ reset_control_assert(dwsmmio->rstc);
return 0;
}
--
2.17.1
^ permalink raw reply related
* [PATCHv4 2/2] dt-bindings: snps,dw-apb-ssi: add optional reset property
From: Dinh Nguyen @ 2020-05-29 15:58 UTC (permalink / raw)
To: linux-kernel
Cc: dinguyen, devicetree, linux-spi, broonie, robh+dt, Sergey.Semin,
fancer.lancer, andriy.shevchenko, lars.povlsen, liang.j.jin
In-Reply-To: <20200529155806.16758-1-dinguyen@kernel.org>
Add optional reset property.
Signed-off-by: Dinh Nguyen <dinguyen@kernel.org>
---
v4: rebased to linux-next 20200529
v3: no change
v2: actually document the "resets" and "reset-names" optional properties
---
Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.txt | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.txt b/Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.txt
index 020e3168ee41..0f21407a7ea3 100644
--- a/Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.txt
+++ b/Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.txt
@@ -25,6 +25,9 @@ Optional properties:
device. Supported values are 2 or 4 (the default).
- dmas : Phandle + identifiers of Tx and Rx DMA channels.
- dma-names : Contains the names of the DMA channels. Must be "tx" and "rx".
+- resets : contains an entry for each entry in reset-names.
+ See ../reset/reset.txt for details.
+- reset-names : must contain "spi"
Child nodes as per the generic SPI binding.
@@ -40,5 +43,7 @@ Example:
num-cs = <2>;
cs-gpios = <&gpio0 13 0>,
<&gpio0 14 0>;
+ resets = <&rst SPIM0_RST>;
+ reset-names = "spi";
};
--
2.17.1
^ permalink raw reply related
* [PATCH 3/3] mfd: arizona: Ensure 32k clock is put on driver unbind and error
From: Charles Keepax @ 2020-05-29 15:57 UTC (permalink / raw)
To: lee.jones; +Cc: s.nawrocki, linux-kernel, patches
In-Reply-To: <20200529155742.18399-1-ckeepax@opensource.cirrus.com>
Whilst it doesn't matter if the internal 32k clock register settings
are cleaned up on exit, as the part will be turned off losing any
settings, hence the driver hasn't historially bothered. The external
clock should however be cleaned up, as it could cause clocks to be
left on, and will at best generate a warning on unbind.
Add clean up on both the probe error path and unbind for the 32k
clock.
Fixes: cdd8da8cc66b ("mfd: arizona: Add gating of external MCLKn clocks")
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
---
drivers/mfd/arizona-core.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c
index 19e0bc3c0683e..000cb82023e35 100644
--- a/drivers/mfd/arizona-core.c
+++ b/drivers/mfd/arizona-core.c
@@ -1426,6 +1426,15 @@ int arizona_dev_init(struct arizona *arizona)
arizona_irq_exit(arizona);
err_pm:
pm_runtime_disable(arizona->dev);
+
+ switch (arizona->pdata.clk32k_src) {
+ case ARIZONA_32KZ_MCLK1:
+ case ARIZONA_32KZ_MCLK2:
+ arizona_clk32k_disable(arizona);
+ break;
+ default:
+ break;
+ }
err_reset:
arizona_enable_reset(arizona);
regulator_disable(arizona->dcvdd);
@@ -1448,6 +1457,15 @@ int arizona_dev_exit(struct arizona *arizona)
regulator_disable(arizona->dcvdd);
regulator_put(arizona->dcvdd);
+ switch (arizona->pdata.clk32k_src) {
+ case ARIZONA_32KZ_MCLK1:
+ case ARIZONA_32KZ_MCLK2:
+ arizona_clk32k_disable(arizona);
+ break;
+ default:
+ break;
+ }
+
mfd_remove_devices(arizona->dev);
arizona_free_irq(arizona, ARIZONA_IRQ_UNDERCLOCKED, arizona);
arizona_free_irq(arizona, ARIZONA_IRQ_OVERCLOCKED, arizona);
--
2.11.0
^ permalink raw reply related
* [PATCH 2/3] mfd: madera: Fix minor formatting issues
From: Charles Keepax @ 2020-05-29 15:57 UTC (permalink / raw)
To: lee.jones; +Cc: s.nawrocki, linux-kernel, patches
In-Reply-To: <20200529155742.18399-1-ckeepax@opensource.cirrus.com>
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
---
drivers/mfd/madera-core.c | 12 ++++++------
drivers/mfd/madera-i2c.c | 1 -
include/linux/mfd/madera/pdata.h | 1 -
3 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/mfd/madera-core.c b/drivers/mfd/madera-core.c
index 7e0835cb062b1..4724c1a01a39f 100644
--- a/drivers/mfd/madera-core.c
+++ b/drivers/mfd/madera-core.c
@@ -44,7 +44,7 @@ static const char * const madera_core_supplies[] = {
};
static const struct mfd_cell madera_ldo1_devs[] = {
- { .name = "madera-ldo1" },
+ { .name = "madera-ldo1", },
};
static const char * const cs47l15_supplies[] = {
@@ -55,8 +55,8 @@ static const char * const cs47l15_supplies[] = {
static const struct mfd_cell cs47l15_devs[] = {
{ .name = "madera-pinctrl", },
- { .name = "madera-irq" },
- { .name = "madera-gpio" },
+ { .name = "madera-irq", },
+ { .name = "madera-gpio", },
{
.name = "madera-extcon",
.parent_supplies = cs47l15_supplies,
@@ -108,7 +108,7 @@ static const char * const cs47l85_supplies[] = {
static const struct mfd_cell cs47l85_devs[] = {
{ .name = "madera-pinctrl", },
{ .name = "madera-irq", },
- { .name = "madera-micsupp" },
+ { .name = "madera-micsupp", },
{ .name = "madera-gpio", },
{
.name = "madera-extcon",
@@ -155,10 +155,10 @@ static const char * const cs47l92_supplies[] = {
};
static const struct mfd_cell cs47l92_devs[] = {
- { .name = "madera-pinctrl" },
+ { .name = "madera-pinctrl", },
{ .name = "madera-irq", },
{ .name = "madera-micsupp", },
- { .name = "madera-gpio" },
+ { .name = "madera-gpio", },
{
.name = "madera-extcon",
.parent_supplies = cs47l92_supplies,
diff --git a/drivers/mfd/madera-i2c.c b/drivers/mfd/madera-i2c.c
index 6b965eb034b6c..7df5b9ba58554 100644
--- a/drivers/mfd/madera-i2c.c
+++ b/drivers/mfd/madera-i2c.c
@@ -88,7 +88,6 @@ static int madera_i2c_probe(struct i2c_client *i2c,
if (!madera)
return -ENOMEM;
-
madera->regmap = devm_regmap_init_i2c(i2c, regmap_16bit_config);
if (IS_ERR(madera->regmap)) {
ret = PTR_ERR(madera->regmap);
diff --git a/include/linux/mfd/madera/pdata.h b/include/linux/mfd/madera/pdata.h
index fa9595dd42ba5..601cbbc10370c 100644
--- a/include/linux/mfd/madera/pdata.h
+++ b/include/linux/mfd/madera/pdata.h
@@ -21,7 +21,6 @@
struct gpio_desc;
struct pinctrl_map;
-struct madera_codec_pdata;
/**
* struct madera_pdata - Configuration data for Madera devices
--
2.11.0
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.