[Devel] [PATCH vz10 10/14] ve: restructure ve.h includes and stubs for UML

Eva Kurchatova eva.kurchatova at virtuozzo.com
Fri Jun 26 01:08:12 MSK 2026


include/linux/ve.h included heavy headers (cgroup.h, kmapset.h,
kthread.h, binfmts.h, tty_driver.h, time_namespace.h) and
arch/x86-specific asm/vdso.h unconditionally, causing type conflicts
when building under UML.

Restructure the header:

- Move the heavy includes and the full struct ve_struct definition
  inside #ifdef CONFIG_VE, so that the !CONFIG_VE path only needs
  forward declarations and static inline stubs.

- Guard asm/vdso.h with #ifdef CONFIG_X86 and provide a forward
  declaration for struct vdso_image on UML.

- In the !CONFIG_VE stub section, remove the now-unnecessary
  includes of init_task.h and net_namespace.h, and the extern
  declarations they pulled in (init_cred, init_user_ns, init_net).
  Replace with forward declarations for struct net and struct
  filename.

- Simplify get_ve() to return NULL, current_user_ns_initial() to
  return true, and is_ve_init_net() to return true, since without
  CONFIG_VE there is no container to check against.

- Add a vtty_alloc_tty_struct() stub under CONFIG_TTY for the
  !CONFIG_VE case.

Signed-off-by: Eva Kurchatova <eva.kurchatova at virtuozzo.com>

https://virtuozzo.atlassian.net/browse/VSTOR-134732
Feature: fix kunit
---
 include/linux/ve.h | 47 ++++++++++++++++++++++++++++------------------
 1 file changed, 29 insertions(+), 18 deletions(-)

diff --git a/include/linux/ve.h b/include/linux/ve.h
index b037f60225bb..1d32f6f57f8b 100644
--- a/include/linux/ve.h
+++ b/include/linux/ve.h
@@ -13,14 +13,6 @@
 #include <linux/types.h>
 #include <linux/ve_proto.h>
 #include <linux/vzstat.h>
-#include <linux/cgroup.h>
-#include <linux/kmapset.h>
-#include <linux/kthread.h>
-#include <linux/binfmts.h>
-#include <linux/tty_driver.h>
-#include <asm/vdso.h>
-#include <linux/time_namespace.h>
-#include <linux/binfmts.h>
 #include <linux/pid.h>
 
 struct nsproxy;
@@ -28,6 +20,21 @@ struct user_namespace;
 struct ve_namespace;
 struct cn_private;
 struct vfsmount;
+struct ve_struct;
+
+#ifdef CONFIG_VE
+
+#include <linux/cgroup.h>
+#include <linux/kmapset.h>
+#include <linux/kthread.h>
+#include <linux/binfmts.h>
+#include <linux/tty_driver.h>
+#ifdef CONFIG_X86
+#include <asm/vdso.h>
+#else
+struct vdso_image;
+#endif
+#include <linux/time_namespace.h>
 
 #define VE_STATE_STARTING	0
 #define VE_STATE_RUNNING	1
@@ -136,8 +143,6 @@ extern int nr_ve;
 #define BPF_PROG_MAX_NR_DEFAULT	256	/* number of loaded BPF progs per-VE */
 
 extern unsigned int sysctl_ve_mount_nr;
-
-#ifdef CONFIG_VE
 static inline void ve_set_state(struct ve_struct *ve, int new_state)
 {
 	if (ve->state == VE_STATE_DEAD) {
@@ -268,14 +273,11 @@ static inline struct vdso_image *ve_get_vdso_64(struct ve_struct *ve)
 }
 
 #else	/* CONFIG_VE */
-#include <linux/init_task.h>
-#include <net/net_namespace.h>
 
-extern struct cred init_cred;
-extern struct user_namespace init_user_ns;
-extern struct net init_net;
+struct net;
+struct filename;
 
-#define get_ve(ve)	(ve)
+#define get_ve(ve)	((void)(ve), NULL)
 #define put_ve(ve)	do { (void)(ve); } while (0)
 
 DEFINE_FREE(put_ve, struct ve_struct *, if (_T) put_ve(_T))
@@ -327,7 +329,7 @@ static inline void ve_set_state(struct ve_struct *ve, int new_state) {}
 
 static inline bool current_user_ns_initial(void)
 {
-	return current_user_ns() == init_cred.user_ns;
+	return true;
 }
 
 static inline struct user_namespace *ve_init_user_ns(void)
@@ -342,7 +344,7 @@ static inline int ve_net_hide_sysctl(struct net *net)
 
 static inline bool is_ve_init_net(const struct net *net)
 {
-	return net_eq(net, &init_net);
+	return true;
 }
 
 static inline struct cgroup *cgroup_ve_root1(struct cgroup *cgrp)
@@ -365,6 +367,7 @@ static inline void ve_setup_task(struct task_struct *p, struct ve_struct *ve) {
 
 static inline void ve_set_rpc_kill_fn(void (*fn)(struct net *, bool)) { }
 
+#if defined(CONFIG_X86) && !defined(CONFIG_UML)
 static inline struct vdso_image *ve_get_vdso_32(struct ve_struct *ve)
 {
 	return (struct vdso_image *)&vdso_image_32;
@@ -374,6 +377,14 @@ static inline struct vdso_image *ve_get_vdso_64(struct ve_struct *ve)
 {
 	return (struct vdso_image *)&vdso_image_64;
 }
+#endif
+
+#ifdef CONFIG_TTY
+struct tty_driver;
+struct tty_struct;
+static inline void vtty_alloc_tty_struct(const struct tty_driver *driver,
+					 struct tty_struct *o_tty) { }
+#endif
 
 #endif	/* CONFIG_VE */
 
-- 
2.54.0



More information about the Devel mailing list