Skip to contentSkip to conversation

Make vm86 support optional

PATCH In review Matt Mackall 3 participants 5 messages Dec 28, 2005 – Dec 29, 2005 ABI/API

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Make vm86 support optional

This adds an option to remove vm86 support under CONFIG_EMBEDDED. Saves about 5k.

This version eliminates most of the #ifdefs of the previous version and instead uses function stubs in vm86.h. Also, release_vm86_irqs is moved from asm-i386/irq.h to a more appropriate home in vm86.h so that the stubs can live together.

$ size vmlinux-baseline vmlinux-novm86
   text    data     bss     dec     hex filename
2920821  523232  190652 3634705  377611 vmlinux-baseline
2916268  523100  190492 3629860  376324 vmlinux-novm86
arch/i386/kernel/Makefile +2 -1
Index: 2.6.15-misc/arch/i386/kernel/Makefile
===================================================================
@@ -4,7 +4,7 @@
 
 extra-y := head.o init_task.o vmlinux.lds
 
-obj-y	:= process.o semaphore.o signal.o entry.o traps.o irq.o vm86.o \
+obj-y	:= process.o semaphore.o signal.o entry.o traps.o irq.o \
 		ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_i386.o \
 		pci-dma.o i386_ksyms.o i387.o dmi_scan.o bootflag.o \
 		quirks.o i8237.o
@@ -36,6 +36,7 @@ obj-$(CONFIG_ACPI_SRAT) 	+= srat.o
 obj-$(CONFIG_HPET_TIMER) 	+= time_hpet.o
 obj-$(CONFIG_EFI) 		+= efi.o efi_stub.o
 obj-$(CONFIG_DOUBLEFAULT) 	+= doublefault.o
+obj-$(CONFIG_VM86)		+= vm86.o
 obj-$(CONFIG_EARLY_PRINTK)	+= early_printk.o
 
 EXTRA_AFLAGS   := -traditional
init/Kconfig +10 -0
Index: 2.6.15-misc/init/Kconfig
===================================================================
@@ -342,6 +342,16 @@ config UID16
 	help
 	  This enables the legacy 16-bit UID syscall wrappers.
 
+config VM86
+	depends X86
+	default y
+	bool "Enable VM86 support" if EMBEDDED
+	help
+          This option is required by programs like DOSEMU to run 16-bit legacy
+	  code on X86 processors. It also may be needed by software like
+          XFree86 to initialize some video cards via BIOS. Disabling this
+          option saves about 6k.
+
 config CC_OPTIMIZE_FOR_SIZE
 	bool "Optimize for size"
 	default y if ARM || H8300
kernel/sys_ni.c +2 -0
Index: 2.6.15-misc/kernel/sys_ni.c
===================================================================
@@ -102,6 +102,8 @@ cond_syscall(sys_setresgid16);
 cond_syscall(sys_setresuid16);
 cond_syscall(sys_setreuid16);
 cond_syscall(sys_setuid16);
+cond_syscall(sys_vm86old);
+cond_syscall(sys_vm86);
 
 /* arch-specific weak syscall entries */
 cond_syscall(sys_pciconfig_read);
arch/i386/kernel/process.c +1 -0
Index: 2.6.15-misc/arch/i386/kernel/process.c
===================================================================
@@ -48,6 +48,7 @@
 #include <asm/processor.h>
 #include <asm/i387.h>
 #include <asm/desc.h>
+#include <asm/vm86.h>
 #ifdef CONFIG_MATH_EMULATION
 #include <asm/math_emu.h>
 #endif
include/asm-i386/irq.h +0 -2
Index: 2.6.15-misc/include/asm-i386/irq.h
===================================================================
@@ -21,8 +21,6 @@ static __inline__ int irq_canonicalize(i
 	return ((irq == 2) ? 9 : irq);
 }
 
-extern void release_vm86_irqs(struct task_struct *);
-
 #ifdef CONFIG_X86_LOCAL_APIC
 # define ARCH_HAS_NMI_WATCHDOG		/* See include/linux/nmi.h */
 #endif
include/asm-i386/vm86.h +20 -0
Index: 2.6.15-misc/include/asm-i386/vm86.h
===================================================================
@@ -16,7 +16,11 @@
 #define IF_MASK		0x00000200
 #define IOPL_MASK	0x00003000
 #define NT_MASK		0x00004000
+#ifdef CONFIG_VM86
 #define VM_MASK		0x00020000
+#else
+#define VM_MASK		0 /* ignored */
+#endif
 #define AC_MASK		0x00040000
 #define VIF_MASK	0x00080000	/* virtual interrupt flag */
 #define VIP_MASK	0x00100000	/* virtual interrupt pending */
@@ -200,9 +204,25 @@ struct kernel_vm86_struct {
  */
 };
 
+#ifdef CONFIG_VM86
+
 void handle_vm86_fault(struct kernel_vm86_regs *, long);
 int handle_vm86_trap(struct kernel_vm86_regs *, long, int);
 
+struct task_struct;
+void release_vm86_irqs(struct task_struct *);
+
+#else
+
+#define handle_vm86_fault(a, b)
+#define release_vm86_irqs(a)
+
+static inline int handle_vm86_trap(struct kernel_vm86_regs *a, long b, int c) {
+	return 0;
+}
+
+#endif /* CONFIG_VM86 */
+
 #endif /* __KERNEL__ */
 
 #endif
arch/i386/kernel/entry.S +2 -0
Index: 2.6.15-misc/arch/i386/kernel/entry.S
===================================================================
@@ -341,6 +341,7 @@ work_notifysig:				# deal with pending s
 
 	ALIGN
 work_notifysig_v86:
+#ifdef CONFIG_VM86
 	pushl %ecx			# save ti_flags for do_notify_resume
 	call save_v86_state		# %eax contains pt_regs pointer
 	popl %ecx
@@ -348,6 +349,7 @@ work_notifysig_v86:
 	xorl %edx, %edx
 	call do_notify_resume
 	jmp resume_userspace
+#endif
 
 	# perform syscall exit tracing
 	ALIGN
Signature · 1 line
Mathematics is the supreme nostalgia of our time.
#1 lore raw

init/Kconfig config UID16 · line 353

Quoted 4 lines
init/Kconfig +4 -0
+          This option is required by programs like DOSEMU to run 16-bit legacy
+	  code on X86 processors. It also may be needed by software like
+          XFree86 to initialize some video cards via BIOS. Disabling this
+          option saves about 6k.

I'm not sure if this is even worth pointing out, but there's a whitespace inconsistency here.

- R. [obviously with too little to do on a slow vacation day]

#2 lore raw
In reply to Matt Mackall

init/Kconfig config UID16 · line 353

Quoted 11 lines · Matt Mackall

...

init/Kconfig +9 -0
+config VM86
+	depends X86
+	default y
+	bool "Enable VM86 support" if EMBEDDED
+	help
+          This option is required by programs like DOSEMU to run 16-bit legacy
+	  code on X86 processors. It also may be needed by software like
+          XFree86 to initialize some video cards via BIOS. Disabling this
+          option saves about 6k.
...

I don't like such space statements ("about 6k") in help texts, since history has shown that noone updates them when the actual size changes...

cu
Adrian

Signature · 4 lines
       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed
#3 lore raw
Quoted 16 lines · Adrian Bunk

init/Kconfig config UID16 · line 353

Quoted 11 lines · Matt Mackall

...

init/Kconfig +9 -0
+config VM86
+	depends X86
+	default y
+	bool "Enable VM86 support" if EMBEDDED
+	help
+          This option is required by programs like DOSEMU to run 16-bit legacy
+	  code on X86 processors. It also may be needed by software like
+          XFree86 to initialize some video cards via BIOS. Disabling this
+          option saves about 6k.
...

I don't like such space statements ("about 6k") in help texts, since history has shown that noone updates them when the actual size changes...

What would you prefer? It's important to give a relative size vs functionality savings so people can decide whether they want a feature and simply saying a little/a lot is insufficient.

Signature · 1 line
Mathematics is the supreme nostalgia of our time.
#4 lore raw
Quoted 18 lines · Matt Mackall
Quoted 16 lines · Adrian Bunk

init/Kconfig config UID16 · line 353

Quoted 11 lines · Matt Mackall

...

init/Kconfig +9 -0
+config VM86
+	depends X86
+	default y
+	bool "Enable VM86 support" if EMBEDDED
+	help
+          This option is required by programs like DOSEMU to run 16-bit legacy
+	  code on X86 processors. It also may be needed by software like
+          XFree86 to initialize some video cards via BIOS. Disabling this
+          option saves about 6k.
...

I don't like such space statements ("about 6k") in help texts, since history has shown that noone updates them when the actual size changes...

Quoted 3 lines

What would you prefer? It's important to give a relative size vs functionality savings so people can decide whether they want a feature and simply saying a little/a lot is insufficient.

I'd expect people using the "enable only if you know what you are doing" EMBEDDED option to be able to figure out themselves how big a space saving is (and even more important whether they can actually live without the feature).

cu
Adrian

Signature · 4 lines
       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed