From: Steffen Eiden <seiden@linux.ibm.com>
To: kvm@vger.kernel.org, kvmarm@lists.linux.dev,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org
Cc: Alexander Gordeev <agordeev@linux.ibm.com>,
Andreas Grapentin <gra@linux.ibm.com>,
Arnd Bergmann <arnd@arndb.de>,
Catalin Marinas <catalin.marinas@arm.com>,
Christian Borntraeger <borntraeger@linux.ibm.com>,
Claudio Imbrenda <imbrenda@linux.ibm.com>,
David Hildenbrand <david@kernel.org>,
Friedrich Welter <fritz@linux.ibm.com>,
Fuad Tabba <tabba@google.com>, Gautam Gala <ggala@linux.ibm.com>,
Hariharan Mari <hari55@linux.ibm.com>,
Heiko Carstens <hca@linux.ibm.com>,
Hendrik Brueckner <brueckner@linux.ibm.com>,
Ilya Leoshkevich <iii@linux.ibm.com>,
Janosch Frank <frankja@linux.ibm.com>,
Joey Gouly <joey.gouly@arm.com>, Marc Zyngier <maz@kernel.org>,
Nico Boehr <nrb@linux.ibm.com>,
Nina Schoetterl-Glausch <oss@nina.schoetterlglausch.eu>,
Oliver Upton <oupton@kernel.org>,
Paolo Bonzini <pbonzini@redhat.com>,
Sean Christopherson <seanjc@google.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Sven Schnelle <svens@linux.ibm.com>,
Ulrich Weigand <Ulrich.Weigand@de.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>, Will Deacon <will@kernel.org>,
Zenghui Yu <yuzenghui@huawei.com>
Subject: [PATCH v7 02/23] KVM: Make device name configurable
Date: Mon, 31 Aug 2026 16:47:39 +0200 [thread overview]
Message-ID: <20260831144802.834315-3-seiden@linux.ibm.com> (raw)
In-Reply-To: <20260831144802.834315-1-seiden@linux.ibm.com>
Allow KVM implementations to choose alternative device names. This is
especially useful for architectures providing multiple KVM
implementations simultaneously. Architectures providing multiple KVM
implementations must compile the KVM common code once per
implementation and mange symbols.
Co-developed-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
Signed-off-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
---
include/linux/kvm_host.h | 4 +++-
virt/kvm/async_pf.c | 13 +++++++++++--
virt/kvm/async_pf.h | 4 ++--
virt/kvm/kvm_main.c | 42 ++++++++++++++++++++++++++++++----------
4 files changed, 48 insertions(+), 15 deletions(-)
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index bfecce1b5955..ec294e419762 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -1082,7 +1082,9 @@ static inline void kvm_irqfd_exit(void)
{
}
#endif
-int kvm_init(unsigned vcpu_size, unsigned vcpu_align, struct module *module);
+int kvm_init(unsigned int vcpu_size, unsigned int vcpu_align, struct module *module);
+int kvm_init_with_dev(unsigned int vcpu_size, unsigned int vcpu_align,
+ struct module *module, const char *dev_name, int minor);
void kvm_exit(void);
void kvm_get_kvm(struct kvm *kvm);
diff --git a/virt/kvm/async_pf.c b/virt/kvm/async_pf.c
index b8aaa96b799b..015761249107 100644
--- a/virt/kvm/async_pf.c
+++ b/virt/kvm/async_pf.c
@@ -19,9 +19,18 @@
static struct kmem_cache *async_pf_cache;
-int kvm_async_pf_init(void)
+int kvm_async_pf_init(const char *cache_name)
{
- async_pf_cache = KMEM_CACHE(kvm_async_pf, 0);
+ char *full_cache_name;
+
+ full_cache_name = kasprintf(GFP_KERNEL, "%s_async_pf", cache_name);
+ if (!full_cache_name)
+ return -ENOMEM;
+
+ async_pf_cache = kmem_cache_create(full_cache_name,
+ sizeof(struct kvm_async_pf), 0,
+ SLAB_ACCOUNT, NULL);
+ kfree(full_cache_name);
if (!async_pf_cache)
return -ENOMEM;
diff --git a/virt/kvm/async_pf.h b/virt/kvm/async_pf.h
index 90d1a7d8c6de..4a7b81743248 100644
--- a/virt/kvm/async_pf.h
+++ b/virt/kvm/async_pf.h
@@ -12,11 +12,11 @@
#define __KVM_ASYNC_PF_H__
#ifdef CONFIG_KVM_ASYNC_PF
-int kvm_async_pf_init(void);
+int kvm_async_pf_init(const char *cache_name);
void kvm_async_pf_deinit(void);
void kvm_async_pf_vcpu_init(struct kvm_vcpu *vcpu);
#else
-#define kvm_async_pf_init() (0)
+#define kvm_async_pf_init(_name) (0)
#define kvm_async_pf_deinit() do {} while (0)
#define kvm_async_pf_vcpu_init(C) do {} while (0)
#endif
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 34b4c43908b3..823b693d89e6 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -5595,9 +5595,7 @@ static struct file_operations kvm_chardev_ops = {
};
static struct miscdevice kvm_dev = {
- KVM_MINOR,
- "kvm",
- &kvm_chardev_ops,
+ .fops = &kvm_chardev_ops,
};
#ifdef CONFIG_KVM_GENERIC_HARDWARE_ENABLING
@@ -6369,13 +6367,13 @@ static void kvm_uevent_notify_change(unsigned int type, struct kvm *kvm)
kfree(env);
}
-static void kvm_init_debug(void)
+static void kvm_init_debug(const char *dev_name)
{
const struct file_operations *fops;
const struct kvm_stats_desc *pdesc;
int i;
- kvm_debugfs_dir = debugfs_create_dir("kvm", NULL);
+ kvm_debugfs_dir = debugfs_create_dir(dev_name, NULL);
for (i = 0; i < kvm_vm_stats_header.num_desc; ++i) {
pdesc = &kvm_vm_stats_desc[i];
@@ -6511,23 +6509,42 @@ void kvm_unregister_perf_callbacks(void)
}
#endif
-int kvm_init(unsigned vcpu_size, unsigned vcpu_align, struct module *module)
+int kvm_init(unsigned int vcpu_size, unsigned int vcpu_align, struct module *module)
{
+ return kvm_init_with_dev(vcpu_size, vcpu_align, module, "kvm", KVM_MINOR);
+}
+
+int kvm_init_with_dev(unsigned int vcpu_size, unsigned int vcpu_align,
+ struct module *module, const char *dev_name, int minor)
+{
+ char *cache_name;
int r;
int cpu;
+ kvm_dev.minor = minor;
+ kvm_dev.name = kstrdup_const(dev_name, GFP_KERNEL);
+ if (!kvm_dev.name)
+ return -ENOMEM;
+
/* A kmem cache lets us meet the alignment requirements of fx_save. */
if (!vcpu_align)
vcpu_align = __alignof__(struct kvm_vcpu);
+
+ r = -ENOMEM;
+ cache_name = kasprintf(GFP_KERNEL, "%s_vcpu", dev_name);
+ if (!cache_name)
+ goto err_dev_name;
kvm_vcpu_cache =
- kmem_cache_create_usercopy("kvm_vcpu", vcpu_size, vcpu_align,
+ kmem_cache_create_usercopy(cache_name, vcpu_size, vcpu_align,
SLAB_ACCOUNT,
offsetof(struct kvm_vcpu, arch),
offsetofend(struct kvm_vcpu, stats_id)
- offsetof(struct kvm_vcpu, arch),
NULL);
+ kfree(cache_name);
+
if (!kvm_vcpu_cache)
- return -ENOMEM;
+ goto err_dev_name;
for_each_possible_cpu(cpu) {
if (!alloc_cpumask_var_node(&per_cpu(cpu_kick_mask, cpu),
@@ -6541,7 +6558,7 @@ int kvm_init(unsigned vcpu_size, unsigned vcpu_align, struct module *module)
if (r)
goto err_irqfd;
- r = kvm_async_pf_init();
+ r = kvm_async_pf_init(dev_name);
if (r)
goto err_async_pf;
@@ -6553,7 +6570,7 @@ int kvm_init(unsigned vcpu_size, unsigned vcpu_align, struct module *module)
kvm_preempt_ops.sched_in = kvm_sched_in;
kvm_preempt_ops.sched_out = kvm_sched_out;
- kvm_init_debug();
+ kvm_init_debug(kvm_dev.name);
r = kvm_vfio_ops_init();
if (WARN_ON_ONCE(r))
@@ -6595,6 +6612,8 @@ int kvm_init(unsigned vcpu_size, unsigned vcpu_align, struct module *module)
for_each_possible_cpu(cpu)
free_cpumask_var(per_cpu(cpu_kick_mask, cpu));
kmem_cache_destroy(kvm_vcpu_cache);
+err_dev_name:
+ kfree_const(kvm_dev.name);
return r;
}
EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_init);
@@ -6620,5 +6639,8 @@ void kvm_exit(void)
kvm_vfio_ops_exit();
kvm_async_pf_deinit();
kvm_irqfd_exit();
+
+ kfree_const(kvm_dev.name);
+ kvm_dev.name = NULL;
}
EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_exit);
--
2.53.0
next prev parent reply other threads:[~2026-08-31 14:53 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-31 14:47 [PATCH v7 00/23] KVM: s390: Introduce arm64 KVM Steffen Eiden
2026-08-31 14:47 ` [PATCH v7 01/23] vfio: Use file-based reference counting for KVM Steffen Eiden
2026-08-31 18:16 ` sashiko-bot
2026-08-31 14:47 ` Steffen Eiden [this message]
2026-08-31 18:25 ` [PATCH v7 02/23] KVM: Make device name configurable sashiko-bot
2026-08-31 14:47 ` [PATCH v7 03/23] KVM: Allow KVM implementations to switch off MMIO independent of Kconfig Steffen Eiden
2026-08-31 18:31 ` sashiko-bot
2026-08-31 14:47 ` [PATCH v7 04/23] arm64: Use proper include variant Steffen Eiden
2026-08-31 18:31 ` sashiko-bot
2026-08-31 14:47 ` [PATCH v7 05/23] arm64: ptrace: Use constants for compat register numbers Steffen Eiden
2026-08-31 18:34 ` sashiko-bot
2026-08-31 14:47 ` [PATCH v7 06/23] arm64: sysreg: Convert SPSR_ELx to automatic register generation Steffen Eiden
2026-08-31 18:38 ` sashiko-bot
2026-08-31 14:47 ` [PATCH v7 07/23] KVM: arm64: Access elements of vcpu_gp_regs individually Steffen Eiden
2026-08-31 18:42 ` sashiko-bot
2026-08-31 14:47 ` [PATCH v7 08/23] KVM: arm64: Use accessor functions for core regs Steffen Eiden
2026-08-31 18:45 ` sashiko-bot
2026-08-31 14:47 ` [PATCH v7 09/23] arm64: Prepare sharing arm64 headers with s390 Steffen Eiden
2026-08-31 18:50 ` sashiko-bot
2026-08-31 14:47 ` [PATCH v7 10/23] arm64: Share " Steffen Eiden
2026-08-31 19:03 ` sashiko-bot
2026-08-31 14:47 ` [PATCH v7 11/23] KVM: arm64: Share arm64 code " Steffen Eiden
2026-08-31 19:14 ` sashiko-bot
2026-08-31 14:47 ` [PATCH v7 12/23] s390/tools: Use arm64 headers Steffen Eiden
2026-08-31 19:18 ` sashiko-bot
2026-08-31 14:47 ` [PATCH v7 13/23] KVM: s390: Use arm64 code Steffen Eiden
2026-08-31 19:26 ` sashiko-bot
2026-08-31 14:47 ` [PATCH v7 14/23] KVM: s390: Prepare KVM/s390 for a second KVM module Steffen Eiden
2026-08-31 19:47 ` sashiko-bot
2026-08-31 14:47 ` [PATCH v7 15/23] s390: Introduce Start Arm Execution instruction Steffen Eiden
2026-08-31 20:00 ` sashiko-bot
2026-08-31 14:47 ` [PATCH v7 16/23] KVM: s390: arm64: Introduce host definitions Steffen Eiden
2026-08-31 20:16 ` sashiko-bot
2026-08-31 14:47 ` [PATCH v7 17/23] s390/hwcaps: Report SAE support as hwcap Steffen Eiden
2026-08-31 20:20 ` sashiko-bot
2026-08-31 14:47 ` [PATCH v7 18/23] KVM: s390: Add basic arm64 kvm module Steffen Eiden
2026-08-31 20:56 ` sashiko-bot
2026-08-31 14:47 ` [PATCH v7 19/23] KVM: s390: arm64: Implement required functions Steffen Eiden
2026-08-31 21:13 ` sashiko-bot
2026-08-31 14:47 ` [PATCH v7 20/23] KVM: s390: arm64: Implement vm/vcpu create destroy Steffen Eiden
2026-08-31 21:30 ` sashiko-bot
2026-08-31 14:47 ` [PATCH v7 21/23] KVM: s390: arm64: Implement vCPU IOCTLs Steffen Eiden
2026-08-31 21:47 ` sashiko-bot
2026-08-31 14:47 ` [PATCH v7 22/23] KVM: s390: arm64: Implement basic page fault handler Steffen Eiden
2026-08-31 22:00 ` sashiko-bot
2026-08-31 14:48 ` [PATCH v7 23/23] KVM: s390: arm64: Add KVM_S390_ARM64 Kconfig and Makefile Steffen Eiden
2026-08-31 22:19 ` sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260831144802.834315-3-seiden@linux.ibm.com \
--to=seiden@linux.ibm.com \
--cc=Ulrich.Weigand@de.ibm.com \
--cc=agordeev@linux.ibm.com \
--cc=arnd@arndb.de \
--cc=borntraeger@linux.ibm.com \
--cc=brueckner@linux.ibm.com \
--cc=catalin.marinas@arm.com \
--cc=david@kernel.org \
--cc=frankja@linux.ibm.com \
--cc=fritz@linux.ibm.com \
--cc=ggala@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=gra@linux.ibm.com \
--cc=hari55@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=iii@linux.ibm.com \
--cc=imbrenda@linux.ibm.com \
--cc=joey.gouly@arm.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=maz@kernel.org \
--cc=nrb@linux.ibm.com \
--cc=oss@nina.schoetterlglausch.eu \
--cc=oupton@kernel.org \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=suzuki.poulose@arm.com \
--cc=svens@linux.ibm.com \
--cc=tabba@google.com \
--cc=will@kernel.org \
--cc=yuzenghui@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox