From 4e5f45c6bbfc86cd14e1ebf8d2cc4ab398de1df5 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Fri, 23 Nov 2007 15:26:41 -0500 Subject: [PATCH] Import 2.3.13pre4 --- Makefile | 2 +- arch/i386/config.in | 4 +- arch/i386/kernel/Makefile | 6 +- arch/i386/kernel/apm.c | 4 +- arch/i386/kernel/init_task.c | 2 +- arch/i386/kernel/io_apic.c | 5 +- arch/i386/kernel/ldt.c | 3 +- arch/i386/kernel/smp.c | 3 + arch/sparc/mm/asyncd.c | 11 +++ drivers/char/Makefile | 136 +++++++++++++++++------------------ drivers/char/msbusmouse.c | 11 +-- drivers/sound/es1370.c | 29 ++++++-- fs/binfmt_aout.c | 22 ++---- fs/binfmt_elf.c | 28 ++------ fs/binfmt_em86.c | 21 ++---- fs/binfmt_misc.c | 26 ++----- fs/binfmt_script.c | 21 ++---- fs/buffer.c | 9 +++ include/asm-i386/init.h | 38 +--------- include/linux/init.h | 61 +++++++++++++++- include/linux/module.h | 8 ++- init/main.c | 20 ------ mm/vmscan.c | 32 +++------ 23 files changed, 237 insertions(+), 265 deletions(-) diff --git a/Makefile b/Makefile index 85bfbd0c98c1..6cca8f5e0b91 100644 --- a/Makefile +++ b/Makefile @@ -110,7 +110,7 @@ CORE_FILES =kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o FILESYSTEMS =fs/filesystems.a NETWORKS =net/network.a DRIVERS =drivers/block/block.a \ - drivers/char/char.a \ + drivers/char/char.o \ drivers/parport/parport.a LIBS =$(TOPDIR)/lib/lib.a SUBDIRS =kernel drivers mm fs net ipc lib diff --git a/arch/i386/config.in b/arch/i386/config.in index ae094896a741..792dbd5ffefd 100644 --- a/arch/i386/config.in +++ b/arch/i386/config.in @@ -94,8 +94,8 @@ tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC source drivers/parport/Config.in -bool 'Advanced Power Management BIOS support' CONFIG_APM -if [ "$CONFIG_APM" = "y" ]; then +tristate 'Advanced Power Management BIOS support' CONFIG_APM +if [ "$CONFIG_APM" != "n" ]; then bool ' Ignore USER SUSPEND' CONFIG_APM_IGNORE_USER_SUSPEND bool ' Enable PM at boot time' CONFIG_APM_DO_ENABLE bool ' Make CPU Idle calls when idle' CONFIG_APM_CPU_IDLE diff --git a/arch/i386/kernel/Makefile b/arch/i386/kernel/Makefile index 7aba6fdc9948..5a5ef33e5edb 100644 --- a/arch/i386/kernel/Makefile +++ b/arch/i386/kernel/Makefile @@ -34,8 +34,12 @@ else endif endif -ifdef CONFIG_APM +ifeq ($(CONFIG_APM),y) OX_OBJS += apm.o +else + ifeq ($(CONFIG_APM),m) + MX_OBJS += apm.o + endif endif ifdef CONFIG_SMP diff --git a/arch/i386/kernel/apm.c b/arch/i386/kernel/apm.c index e853719827d2..d8c3063c02f5 100644 --- a/arch/i386/kernel/apm.c +++ b/arch/i386/kernel/apm.c @@ -1428,7 +1428,7 @@ static int apm(void *unused) * In short, if something bad happens, at least we have a choice * of just killing the apm thread.. */ -void __init apm_init(void) +static int __init apm_init(void) { static struct proc_dir_entry *ent; @@ -1533,3 +1533,5 @@ void __init apm_init(void) kernel_thread(apm, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD); } + +module_init(apm_init) diff --git a/arch/i386/kernel/init_task.c b/arch/i386/kernel/init_task.c index e3ca30fd0bcd..84fba5106444 100644 --- a/arch/i386/kernel/init_task.c +++ b/arch/i386/kernel/init_task.c @@ -1,10 +1,10 @@ #include #include +#include #include #include #include -#include static struct vm_area_struct init_mmap = INIT_MMAP; static struct fs_struct init_fs = INIT_FS; diff --git a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c index 7e1b9236aae5..514487dcebb0 100644 --- a/arch/i386/kernel/io_apic.c +++ b/arch/i386/kernel/io_apic.c @@ -242,7 +242,7 @@ static void clear_IO_APIC (void) int pirq_entries [MAX_PIRQS]; int pirqs_enabled; -static void __init ioapic_setup(char *str, int *ints) +static int __init ioapic_setup(char *str) { extern int skip_ioapic_setup; /* defined in arch/i386/kernel/smp.c */ @@ -252,7 +252,7 @@ static void __init ioapic_setup(char *str, int *ints) __setup("noapic", ioapic_setup); -static void __init ioapic_pirq_setup(char *str) +static int __init ioapic_pirq_setup(char *str) { int i, max; int ints[11]; @@ -275,6 +275,7 @@ static void __init ioapic_pirq_setup(char *str) */ pirq_entries[MAX_PIRQS-i-1] = ints[i+1]; } + return 1; } __setup("pirq=", ioapic_pirq_setup); diff --git a/arch/i386/kernel/ldt.c b/arch/i386/kernel/ldt.c index 63dc9e127a33..1c359b4f4f26 100644 --- a/arch/i386/kernel/ldt.c +++ b/arch/i386/kernel/ldt.c @@ -98,8 +98,9 @@ static int write_ldt(void * ptr, unsigned long bytecount, int oldmode) printk(KERN_WARNING "LDT allocated for cloned task!\n"); /* * Possibly do an SMP cross-call to other CPUs to reload - * their LDTs + * their LDTs? */ + load_LDT(mm); } lp = (__u32 *) ((ldt_info.entry_number << 3) + (char *) mm->segments); diff --git a/arch/i386/kernel/smp.c b/arch/i386/kernel/smp.c index adaf730dfc53..309f18cd1803 100644 --- a/arch/i386/kernel/smp.c +++ b/arch/i386/kernel/smp.c @@ -1634,7 +1634,10 @@ static void flush_tlb_others(unsigned int cpumask) * Take care of "crossing" invalidates */ if (test_bit(cpu, &smp_invalidate_needed)) { + struct mm_struct *mm = current->mm; clear_bit(cpu, &smp_invalidate_needed); + if (mm) + atomic_set_mask(1 << cpu, &mm->cpu_vm_mask); local_flush_tlb(); } --stuck; diff --git a/arch/sparc/mm/asyncd.c b/arch/sparc/mm/asyncd.c index 300f5aa0adad..edf5957848fd 100644 --- a/arch/sparc/mm/asyncd.c +++ b/arch/sparc/mm/asyncd.c @@ -271,3 +271,14 @@ int asyncd(void *unused) } } +#if CONFIG_AP1000 + +static int __init init_ap1000(void) +{ + kernel_thread(asyncd, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + return 0; +} + +module_init(init_ap1000) + +#endif diff --git a/drivers/char/Makefile b/drivers/char/Makefile index 86f513a7aa4b..a8923be84e6e 100644 --- a/drivers/char/Makefile +++ b/drivers/char/Makefile @@ -18,19 +18,19 @@ ALL_SUB_DIRS := $(SUB_DIRS) ftape joystick # FONTMAPFILE = cp437.uni -L_TARGET := char.a +O_TARGET := char.o M_OBJS := -L_OBJS := tty_io.o n_tty.o tty_ioctl.o mem.o random.o raw.o -LX_OBJS := pty.o misc.o +O_OBJS := tty_io.o n_tty.o tty_ioctl.o mem.o random.o raw.o +OX_OBJS := pty.o misc.o ifdef CONFIG_VT -L_OBJS += vt.o vc_screen.o consolemap.o consolemap_deftbl.o -LX_OBJS += console.o selection.o +O_OBJS += vt.o vc_screen.o consolemap.o consolemap_deftbl.o +OX_OBJS += console.o selection.o endif ifeq ($(CONFIG_SERIAL),y) ifeq ($(CONFIG_SUN_SERIAL),) - LX_OBJS += serial.o + OX_OBJS += serial.o endif else ifeq ($(CONFIG_SERIAL),m) @@ -42,24 +42,24 @@ endif ifndef CONFIG_SUN_KEYBOARD ifdef CONFIG_VT -LX_OBJS += keyboard.o +OX_OBJS += keyboard.o endif ifneq ($(ARCH),m68k) - L_OBJS += pc_keyb.o defkeymap.o + O_OBJS += pc_keyb.o defkeymap.o endif else ifdef CONFIG_PCI -L_OBJS += defkeymap.o -LX_OBJS += keyboard.o +O_OBJS += defkeymap.o +OX_OBJS += keyboard.o endif endif ifdef CONFIG_MAGIC_SYSRQ -LX_OBJS += sysrq.o +OX_OBJS += sysrq.o endif ifeq ($(CONFIG_ATARI_DSP56K),y) -L_OBJS += dsp56k.o +O_OBJS += dsp56k.o S = y else ifeq ($(CONFIG_ATARI_DSP56K),m) @@ -69,7 +69,7 @@ else endif ifeq ($(CONFIG_ROCKETPORT),y) -L_OBJS += rocket.o +O_OBJS += rocket.o else ifeq ($(CONFIG_ROCKETPORT),m) M_OBJS += rocket.o @@ -77,7 +77,7 @@ else endif ifeq ($(CONFIG_DIGI),y) -L_OBJS += pcxx.o +O_OBJS += pcxx.o else ifeq ($(CONFIG_DIGI),m) M_OBJS += pcxx.o @@ -85,7 +85,7 @@ else endif ifeq ($(CONFIG_DIGIEPCA),y) -L_OBJS += epca.o +O_OBJS += epca.o else ifeq ($(CONFIG_DIGIEPCA),m) M_OBJS += epca.o @@ -93,7 +93,7 @@ else endif ifeq ($(CONFIG_CYCLADES),y) -L_OBJS += cyclades.o +O_OBJS += cyclades.o else ifeq ($(CONFIG_CYCLADES),m) M_OBJS += cyclades.o @@ -101,7 +101,7 @@ else endif ifeq ($(CONFIG_STALLION),y) -L_OBJS += stallion.o +O_OBJS += stallion.o else ifeq ($(CONFIG_STALLION),m) M_OBJS += stallion.o @@ -109,7 +109,7 @@ else endif ifeq ($(CONFIG_ISTALLION),y) -L_OBJS += istallion.o +O_OBJS += istallion.o else ifeq ($(CONFIG_ISTALLION),m) M_OBJS += istallion.o @@ -117,7 +117,7 @@ else endif ifeq ($(CONFIG_RISCOM8),y) -L_OBJS += riscom8.o +O_OBJS += riscom8.o else ifeq ($(CONFIG_RISCOM8),m) M_OBJS += riscom8.o @@ -125,7 +125,7 @@ else endif ifeq ($(CONFIG_ISI),y) -L_OBJS += isicom.o +O_OBJS += isicom.o else ifeq ($(CONFIG_ISI),m) M_OBJS += isicom.o @@ -133,7 +133,7 @@ else endif ifeq ($(CONFIG_ESPSERIAL),y) -L_OBJS += esp.o +O_OBJS += esp.o else ifeq ($(CONFIG_ESPSERIAL),m) M_OBJS += esp.o @@ -149,7 +149,7 @@ ifeq ($(CONFIG_N_HDLC),m) endif ifeq ($(CONFIG_SPECIALIX),y) -L_OBJS += specialix.o +O_OBJS += specialix.o else ifeq ($(CONFIG_SPECIALIX),m) M_OBJS += specialix.o @@ -157,7 +157,7 @@ else endif ifeq ($(CONFIG_ATIXL_BUSMOUSE),y) -L_OBJS += atixlmouse.o +O_OBJS += atixlmouse.o else ifeq ($(CONFIG_ATIXL_BUSMOUSE),m) M_OBJS += atixlmouse.o @@ -165,7 +165,7 @@ else endif ifeq ($(CONFIG_LOGIBUSMOUSE),y) -L_OBJS += logibusmouse.o +O_OBJS += logibusmouse.o else ifeq ($(CONFIG_LOGIBUSMOUSE),m) M_OBJS += logibusmouse.o @@ -173,7 +173,7 @@ else endif ifeq ($(CONFIG_PRINTER),y) -L_OBJS += lp.o +O_OBJS += lp.o else ifeq ($(CONFIG_PRINTER),m) M_OBJS += lp.o @@ -181,7 +181,7 @@ else endif ifeq ($(CONFIG_JOYSTICK),y) -L_OBJS += joystick/js.o +O_OBJS += joystick/js.o SUB_DIRS += joystick MOD_SUB_DIRS += joystick else @@ -192,7 +192,7 @@ endif ifeq ($(CONFIG_MOUSE),y) M = y -LX_OBJS += busmouse.o +OX_OBJS += busmouse.o else ifeq ($(CONFIG_MOUSE),m) MM = m @@ -201,7 +201,7 @@ else endif ifeq ($(CONFIG_DTLK),y) -L_OBJS += dtlk.o +O_OBJS += dtlk.o else ifeq ($(CONFIG_DTLK),m) M_OBJS += dtlk.o @@ -209,7 +209,7 @@ else endif ifeq ($(CONFIG_MS_BUSMOUSE),y) -L_OBJS += msbusmouse.o +O_OBJS += msbusmouse.o else ifeq ($(CONFIG_MS_BUSMOUSE),m) M_OBJS += msbusmouse.o @@ -217,7 +217,7 @@ else endif ifeq ($(CONFIG_82C710_MOUSE),y) -L_OBJS += qpmouse.o +O_OBJS += qpmouse.o else ifeq ($(CONFIG_82C710_MOUSE),m) M_OBJS += qpmouse.o @@ -225,7 +225,7 @@ else endif ifeq ($(CONFIG_SOFT_WATCHDOG),y) -L_OBJS += softdog.o +O_OBJS += softdog.o else ifeq ($(CONFIG_SOFT_WATCHDOG),m) M_OBJS += softdog.o @@ -233,7 +233,7 @@ else endif ifeq ($(CONFIG_PCWATCHDOG),y) -L_OBJS += pcwd.o +O_OBJS += pcwd.o else ifeq ($(CONFIG_PCWATCHDOG),m) M_OBJS += pcwd.o @@ -241,7 +241,7 @@ else endif ifeq ($(CONFIG_ACQUIRE_WDT),y) -L_OBJS += acquirewdt.o +O_OBJS += acquirewdt.o else ifeq ($(CONFIG_ACQUIRE_WDT),m) M_OBJS += acquirewdt.o @@ -249,7 +249,7 @@ else endif ifeq ($(CONFIG_AMIGAMOUSE),y) -L_OBJS += amigamouse.o +O_OBJS += amigamouse.o else ifeq ($(CONFIG_AMIGAMOUSE),m) M_OBJS += amigamouse.o @@ -257,7 +257,7 @@ else endif ifeq ($(CONFIG_ATARIMOUSE),y) -L_OBJS += atarimouse.o +O_OBJS += atarimouse.o else ifeq ($(CONFIG_ATARIMOUSE),m) M_OBJS += atarimouse.o @@ -265,7 +265,7 @@ else endif ifeq ($(CONFIG_ADBMOUSE),y) -L_OBJS += adbmouse.o +O_OBJS += adbmouse.o else ifeq ($(CONFIG_ADBMOUSE),m) M_OBJS += adbmouse.o @@ -273,7 +273,7 @@ else endif ifeq ($(CONFIG_PC110_PAD),y) -L_OBJS += pc110pad.o +O_OBJS += pc110pad.o else ifeq ($(CONFIG_PC110_PAD),m) M_OBJS += pc110pad.o @@ -281,7 +281,7 @@ else endif ifeq ($(CONFIG_WDT),y) -L_OBJS += wdt.o +O_OBJS += wdt.o else ifeq ($(CONFIG_WDT),m) M_OBJS += wdt.o @@ -289,12 +289,12 @@ else endif ifeq ($(CONFIG_RTC),y) -L_OBJS += rtc.o +O_OBJS += rtc.o endif ifeq ($(CONFIG_NVRAM),y) ifeq ($(CONFIG_PPC),) - L_OBJS += nvram.o + O_OBJS += nvram.o endif else ifeq ($(CONFIG_NVRAM),m) @@ -305,7 +305,7 @@ else endif ifeq ($(CONFIG_VIDEO_DEV),y) -LX_OBJS += videodev.o +OX_OBJS += videodev.o else ifeq ($(CONFIG_VIDEO_DEV),m) MX_OBJS += videodev.o @@ -321,7 +321,7 @@ else endif ifeq ($(CONFIG_VIDEO_BT848),y) -L_OBJS += bttv.o msp3400.o tuner.o +O_OBJS += bttv.o msp3400.o tuner.o L_I2C=y else ifeq ($(CONFIG_VIDEO_BT848),m) @@ -331,7 +331,7 @@ else endif ifeq ($(CONFIG_VIDEO_SAA5249),y) -L_OBJS += saa5249.o +O_OBJS += saa5249.o L_I2C=y else ifeq ($(CONFIG_VIDEO_SAA5249),m) @@ -341,7 +341,7 @@ else endif ifeq ($(CONFIG_I2C_PARPORT),y) -L_OBJS += i2c-parport.o +O_OBJS += i2c-parport.o L_I2C = y else ifeq ($(CONFIG_I2C_PARPORT),m) @@ -351,7 +351,7 @@ else endif ifeq ($(CONFIG_VIDEO_BWQCAM),y) -L_OBJS += bw-qcam.o +O_OBJS += bw-qcam.o else ifeq ($(CONFIG_VIDEO_BWQCAM),m) M_OBJS += bw-qcam.o @@ -359,7 +359,7 @@ else endif ifeq ($(CONFIG_VIDEO_CQCAM),y) -L_OBJS += c-qcam.o +O_OBJS += c-qcam.o else ifeq ($(CONFIG_VIDEO_CQCAM),m) M_OBJS += c-qcam.o @@ -367,7 +367,7 @@ else endif ifeq ($(CONFIG_VIDEO_ZORAN),y) -L_OBJS += buz.o +O_OBJS += buz.o else ifeq ($(CONFIG_VIDEO_LML33),m) M_OBJS += buz.o @@ -375,7 +375,7 @@ else endif ifeq ($(CONFIG_VIDEO_LML33),y) -L_OBJS += bt856.o bt819.o +O_OBJS += bt856.o bt819.o else ifeq ($(CONFIG_VIDEO_LML33),m) M_OBJS += bt856.o bt819.o @@ -383,7 +383,7 @@ else endif ifeq ($(CONFIG_VIDEO_BUZ),y) -L_OBJS += saa7111.o saa7185.o +O_OBJS += saa7111.o saa7185.o else ifeq ($(CONFIG_VIDEO_BUZ),m) M_OBJS += saa7111.o saa7185.o @@ -391,7 +391,7 @@ else endif ifeq ($(CONFIG_VIDEO_PMS),y) -L_OBJS += pms.o +O_OBJS += pms.o else ifeq ($(CONFIG_VIDEO_PMS),m) M_OBJS += pms.o @@ -399,7 +399,7 @@ else endif ifeq ($(CONFIG_VIDEO_PLANB),y) -L_OBJS += planb.o +O_OBJS += planb.o else ifeq ($(CONFIG_VIDEO_PLANB),m) M_OBJS += planb.o @@ -407,7 +407,7 @@ else endif ifeq ($(CONFIG_VIDEO_VINO),y) -L_OBJS += vino.o +O_OBJS += vino.o else ifeq ($(CONFIG_VIDEO_VINO),m) M_OBJS += vino.o @@ -415,7 +415,7 @@ else endif ifeq ($(CONFIG_RADIO_AZTECH),y) -L_OBJS += radio-aztech.o +O_OBJS += radio-aztech.o else ifeq ($(CONFIG_RADIO_AZTECH),m) M_OBJS += radio-aztech.o @@ -423,7 +423,7 @@ else endif ifeq ($(CONFIG_RADIO_SF16FMI),y) -L_OBJS += radio-sf16fmi.o +O_OBJS += radio-sf16fmi.o else ifeq ($(CONFIG_RADIO_SF16FMI),m) M_OBJS += radio-sf16fmi.o @@ -431,7 +431,7 @@ else endif ifeq ($(CONFIG_RADIO_RTRACK),y) -L_OBJS += radio-aimslab.o +O_OBJS += radio-aimslab.o else ifeq ($(CONFIG_RADIO_RTRACK),m) M_OBJS += radio-aimslab.o @@ -439,7 +439,7 @@ else endif ifeq ($(CONFIG_RADIO_RTRACK2),y) -L_OBJS += radio-rtrack2.o +O_OBJS += radio-rtrack2.o else ifeq ($(CONFIG_RADIO_RTRACK2),m) M_OBJS += radio-rtrack2.o @@ -447,7 +447,7 @@ else endif ifeq ($(CONFIG_RADIO_TYPHOON),y) -L_OBJS += radio-typhoon.o +O_OBJS += radio-typhoon.o else ifeq ($(CONFIG_RADIO_TYPHOON),m) M_OBJS += radio-typhoon.o @@ -455,7 +455,7 @@ else endif ifeq ($(CONFIG_RADIO_ZOLTRIX),y) -L_OBJS += radio-zoltrix.o +O_OBJS += radio-zoltrix.o else ifeq ($(CONFIG_RADIO_ZOLTRIX),m) M_OBJS += radio-zoltrix.o @@ -463,7 +463,7 @@ else endif ifeq ($(CONFIG_RADIO_CADET),y) -L_OBJS += radio-cadet.o +O_OBJS += radio-cadet.o else ifeq ($(CONFIG_RADIO_CADET),m) M_OBJS += radio-cadet.o @@ -471,7 +471,7 @@ else endif ifeq ($(CONFIG_RADIO_MIROPCM20),y) -L_OBJS += radio-miropcm20.o +O_OBJS += radio-miropcm20.o else ifeq ($(CONFIG_RADIO_MIROPCM20),m) M_OBJS += radio-miropcm20.o @@ -479,7 +479,7 @@ else endif ifeq ($(CONFIG_RADIO_GEMTEK),y) -L_OBJS += radio-gemtek.o +O_OBJS += radio-gemtek.o else ifeq ($(CONFIG_RADIO_GEMTEK),m) M_OBJS += radio-gemtek.o @@ -487,7 +487,7 @@ else endif ifeq ($(CONFIG_RADIO_TERRATEC),y) -L_OBJS += radio-terratec.o +O_OBJS += radio-terratec.o else ifeq ($(CONFIG_RADIO_TERRATEC),m) M_OBJS += radio-terratec.o @@ -495,7 +495,7 @@ else endif ifeq ($(CONFIG_QIC02_TAPE),y) -L_OBJS += tpqic02.o +O_OBJS += tpqic02.o else ifeq ($(CONFIG_QIC02_TAPE),m) M_OBJS += tpqic02.o @@ -503,7 +503,7 @@ else endif ifeq ($(CONFIG_FTAPE),y) -L_OBJS += ftape/ftape.o +O_OBJS += ftape/ftape.o SUB_DIRS += ftape ifneq ($(CONFIG_ZFTAPE),n) MOD_SUB_DIRS += ftape @@ -515,11 +515,11 @@ else endif ifdef CONFIG_H8 -LX_OBJS += h8.o +OX_OBJS += h8.o endif ifeq ($(CONFIG_PPDEV),y) -L_OBJS += ppdev.o +O_OBJS += ppdev.o else ifeq ($(CONFIG_PPDEV),m) M_OBJS += ppdev.o @@ -527,7 +527,7 @@ else endif ifeq ($(L_I2C),y) -LX_OBJS += i2c.o +OX_OBJS += i2c.o else ifeq ($(M_I2C),y) MX_OBJS += i2c.o @@ -538,7 +538,7 @@ endif ifeq ($(CONFIG_HFMODEM),y) ALL_SUB_DIRS += hfmodem SUB_DIRS += hfmodem -L_OBJS += hfmodem/hfmodem.o +O_OBJS += hfmodem/hfmodem.o else ifeq ($(CONFIG_HFMODEM),m) ALL_SUB_DIRS += hfmodem diff --git a/drivers/char/msbusmouse.c b/drivers/char/msbusmouse.c index bff280ee770f..fd4e72d91baf 100644 --- a/drivers/char/msbusmouse.c +++ b/drivers/char/msbusmouse.c @@ -151,16 +151,11 @@ __initfunc(int ms_bus_mouse_init(void)) return msedev < 0 ? msedev : 0; } -#ifdef MODULE -int init_module(void) -{ - return ms_bus_mouse_init(); -} - -void cleanup_module(void) +void ms_bus_mouse_exit(void) { unregister_busmouse(msedev); release_region(MS_MSE_CONTROL_PORT, 0x04); } -#endif +module_init(ms_bus_mouse_init) +module_exit(ms_bus_mouse_exit) diff --git a/drivers/sound/es1370.c b/drivers/sound/es1370.c index c667b2106734..5ecbf4642c58 100644 --- a/drivers/sound/es1370.c +++ b/drivers/sound/es1370.c @@ -101,6 +101,8 @@ * 15.06.99 0.23 Fix bad allocation bug. * Thanks to Deti Fliegl * 28.06.99 0.24 Add pci_set_master + * 02.08.99 0.25 Added workaround for the "phantom write" bug first + * documented by Dave Sharpless from Anchor Games * * some important things missing in Ensoniq documentation: * @@ -175,12 +177,14 @@ #define ES1370_REG_DAC2_SCOUNT 0x28 #define ES1370_REG_ADC_SCOUNT 0x2c -#define ES1370_REG_DAC1_FRAMEADR 0xc30 -#define ES1370_REG_DAC1_FRAMECNT 0xc34 -#define ES1370_REG_DAC2_FRAMEADR 0xc38 -#define ES1370_REG_DAC2_FRAMECNT 0xc3c -#define ES1370_REG_ADC_FRAMEADR 0xd30 -#define ES1370_REG_ADC_FRAMECNT 0xd34 +#define ES1370_REG_DAC1_FRAMEADR 0xc30 +#define ES1370_REG_DAC1_FRAMECNT 0xc34 +#define ES1370_REG_DAC2_FRAMEADR 0xc38 +#define ES1370_REG_DAC2_FRAMECNT 0xc3c +#define ES1370_REG_ADC_FRAMEADR 0xd30 +#define ES1370_REG_ADC_FRAMECNT 0xd34 +#define ES1370_REG_PHANTOM_FRAMEADR 0xd38 +#define ES1370_REG_PHANTOM_FRAMECNT 0xd3c #define ES1370_FMT_U8_MONO 0 #define ES1370_FMT_U8_STEREO 1 @@ -360,6 +364,13 @@ struct es1370_state { static struct es1370_state *devs = NULL; +/* + * The following buffer is used to point the phantom write channel to, + * so that it cannot wreak havoc. The attribute makes sure it doesn't + * cross a page boundary and ensures dword alignment for the DMA engine + */ +static unsigned char bugbuf[16] __attribute__ ((aligned (16))); + /* --------------------------------------------------------------------- */ extern inline unsigned ld2(unsigned int x) @@ -2321,7 +2332,7 @@ int __init init_es1370(void) if (!pci_present()) /* No PCI bus in this machine! */ return -ENODEV; - printk(KERN_INFO "es1370: version v0.24 time " __TIME__ " " __DATE__ "\n"); + printk(KERN_INFO "es1370: version v0.25 time " __TIME__ " " __DATE__ "\n"); while (index < NR_DEVICE && (pcidev = pci_find_device(PCI_VENDOR_ID_ENSONIQ, PCI_DEVICE_ID_ENSONIQ_ES1370, pcidev))) { if (pcidev->base_address[0] == 0 || @@ -2385,6 +2396,10 @@ int __init init_es1370(void) /* initialize the chips */ outl(s->ctrl, s->io+ES1370_REG_CONTROL); outl(s->sctrl, s->io+ES1370_REG_SERIAL_CONTROL); + /* point phantom write channel to "bugbuf" */ + outl((ES1370_REG_PHANTOM_FRAMEADR >> 8) & 15, s->io+ES1370_REG_MEMPAGE); + outl(virt_to_bus(bugbuf), s->io+(ES1370_REG_PHANTOM_FRAMEADR & 0xff)); + outl(0, s->io+(ES1370_REG_PHANTOM_FRAMECNT & 0xff)); pci_set_master(pcidev); /* enable bus mastering */ wrcodec(s, 0x16, 3); /* no RST, PD */ wrcodec(s, 0x17, 0); /* CODEC ADC and CODEC DAC use {LR,B}CLK2 and run off the LRCLK2 PLL; program DAC_SYNC=0!! */ diff --git a/fs/binfmt_aout.c b/fs/binfmt_aout.c index 658040aeb14a..27de2163ca76 100644 --- a/fs/binfmt_aout.c +++ b/fs/binfmt_aout.c @@ -36,13 +36,7 @@ static int aout_core_dump(long signr, struct pt_regs * regs, struct file *file); extern void dump_thread(struct pt_regs *, struct user *); static struct linux_binfmt aout_format = { - NULL, -#ifndef MODULE - NULL, -#else - &__this_module, -#endif - load_aout_binary, load_aout_library, aout_core_dump, PAGE_SIZE + NULL, THIS_MODULE, load_aout_binary, load_aout_library, aout_core_dump, PAGE_SIZE }; static void set_brk(unsigned long start, unsigned long end) @@ -564,14 +558,10 @@ static int __init init_aout_binfmt(void) return register_binfmt(&aout_format); } -__initcall(init_aout_binfmt); - -#ifdef MODULE -int init_module(void) { - return init_aout_binfmt(); -} - -void cleanup_module( void) { +static void __exit exit_aout_binfmt(void) +{ unregister_binfmt(&aout_format); } -#endif + +module_init(init_aout_binfmt) +module_exit(exit_aout_binfmt) diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index e6ab8c58a821..aa59a2f7fd99 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -64,13 +64,7 @@ static int elf_core_dump(long signr, struct pt_regs * regs, struct file * file); #define ELF_PAGEALIGN(_v) (((_v) + ELF_EXEC_PAGESIZE - 1) & ~(ELF_EXEC_PAGESIZE - 1)) static struct linux_binfmt elf_format = { - NULL, -#ifndef MODULE - NULL, -#else - &__this_module, -#endif - load_elf_binary, load_elf_library, elf_core_dump, ELF_EXEC_PAGESIZE + NULL, THIS_MODULE, load_elf_binary, load_elf_library, elf_core_dump, ELF_EXEC_PAGESIZE }; static void set_brk(unsigned long start, unsigned long end) @@ -1301,23 +1295,11 @@ static int __init init_elf_binfmt(void) return register_binfmt(&elf_format); } -__initcall(init_elf_binfmt); - -#ifdef MODULE - -int init_module(void) -{ - /* Install the COFF, ELF and XOUT loaders. - * N.B. We *rely* on the table being the right size with the - * right number of free slots... - */ - return init_elf_binfmt(); -} - - -void cleanup_module( void) +static void __exit exit_elf_binfmt(void) { /* Remove the COFF and ELF loaders. */ unregister_binfmt(&elf_format); } -#endif + +module_init(init_elf_binfmt) +module_exit(exit_elf_binfmt) diff --git a/fs/binfmt_em86.c b/fs/binfmt_em86.c index 6e0784732159..aa2deaf6e78e 100644 --- a/fs/binfmt_em86.c +++ b/fs/binfmt_em86.c @@ -105,13 +105,7 @@ static int load_em86(struct linux_binprm *bprm,struct pt_regs *regs) } struct linux_binfmt em86_format = { - NULL, -#ifndef MODULE - NULL, -#else - &__this_module, -#endif - load_em86, NULL, NULL, 0 + NULL, THIS_MODULE, load_em86, NULL, NULL, 0 }; static int __init init_em86_binfmt(void) @@ -119,15 +113,10 @@ static int __init init_em86_binfmt(void) return register_binfmt(&em86_format); } -__initcall(init_em86_binfmt); - -#ifdef MODULE -int init_module(void) +static void __exit exit_em86_binfmt(void) { - return init_em86_binfmt(); -} - -void cleanup_module( void) { unregister_binfmt(&em86_format); } -#endif + +module_init(init_em86_binfmt) +module_exit(exit_em86_binfmt) diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c index 6fc5b570e399..fd55f6448b33 100644 --- a/fs/binfmt_misc.c +++ b/fs/binfmt_misc.c @@ -64,13 +64,7 @@ static void entry_proc_cleanup(struct binfmt_entry *e); static int entry_proc_setup(struct binfmt_entry *e); static struct linux_binfmt misc_format = { - NULL, -#ifndef MODULE - NULL, -#else - &__this_module, -#endif - load_misc_binary, NULL, NULL, 0 + NULL, THIS_MODULE, load_misc_binary, NULL, NULL, 0 }; static struct proc_dir_entry *bm_dir = NULL; @@ -530,16 +524,7 @@ cleanup_bm: goto out; } -__initcall(init_misc_binfmt); - -#ifdef MODULE -EXPORT_NO_SYMBOLS; -int init_module(void) -{ - return init_misc_binfmt(); -} - -void cleanup_module(void) +static void __exit exit_misc_binfmt(void) { unregister_binfmt(&misc_format); remove_proc_entry("register", bm_dir); @@ -547,5 +532,8 @@ void cleanup_module(void) clear_entries(); remove_proc_entry("sys/fs/binfmt_misc", NULL); } -#endif -#undef VERBOSE_STATUS + +EXPORT_NO_SYMBOLS; + +module_init(init_misc_binfmt) +module_exit(exit_misc_binfmt) diff --git a/fs/binfmt_script.c b/fs/binfmt_script.c index 7a3e1d9fe08e..3dad604e319b 100644 --- a/fs/binfmt_script.c +++ b/fs/binfmt_script.c @@ -101,13 +101,7 @@ static int load_script(struct linux_binprm *bprm,struct pt_regs *regs) } struct linux_binfmt script_format = { - NULL, -#ifndef MODULE - NULL, -#else - &__this_module, -#endif - load_script, NULL, NULL, 0 + NULL, THIS_MODULE, load_script, NULL, NULL, 0 }; static int __init init_script_binfmt(void) @@ -115,15 +109,10 @@ static int __init init_script_binfmt(void) return register_binfmt(&script_format); } -__initcall(init_script_binfmt); - -#ifdef MODULE -int init_module(void) +static void __exit exit_script_binfmt(void) { - return init_script_binfmt(); -} - -void cleanup_module( void) { unregister_binfmt(&script_format); } -#endif + +module_init(init_script_binfmt) +module_exit(exit_script_binfmt) diff --git a/fs/buffer.c b/fs/buffer.c index f869c280e30c..46c2ff1cf866 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -2319,3 +2319,12 @@ int bdflush(void * unused) } } } + +static int __init bdflush_init(void) +{ + kernel_thread(bdflush, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + return 0; +} + +module_init(bdflush_init) + diff --git a/include/asm-i386/init.h b/include/asm-i386/init.h index 593661ca2e33..17d215574183 100644 --- a/include/asm-i386/init.h +++ b/include/asm-i386/init.h @@ -1,37 +1 @@ -#ifndef _I386_INIT_H -#define _I386_INIT_H - -typedef int (*initcall_t)(void); - -extern initcall_t __initcall_start, __initcall_end; - -struct kernel_param { - const char *str; - int (*setup_func)(char *); -}; - -extern struct kernel_param __setup_start, __setup_end; - -/* Used for initialization calls.. */ -#define __initcall(fn) \ - static __attribute__ ((unused,__section__ (".initcall.init"))) initcall_t __initcall_##fn = fn - -/* Used for kernel command line parameter setup */ -#define __setup(str, fn) \ - static __attribute__ ((unused,__section__ (".setup.init"))) struct kernel_param __setup_##fn = { str, fn } - - -#define __init __attribute__ ((__section__ (".text.init"))) -#define __initdata __attribute__ ((__section__ (".data.init"))) -#define __initfunc(__arginit) \ - __arginit __init; \ - __arginit -/* For assembly routines */ -#define __INIT .section ".text.init",#alloc,#execinstr -#define __FINIT .previous -#define __INITDATA .section ".data.init",#alloc,#write - -#define __cacheline_aligned __attribute__ \ - ((__section__ (".data.cacheline_aligned"))) - -#endif +#error " should never be used - use instead" diff --git a/include/linux/init.h b/include/linux/init.h index 4465f38b5f34..10eef044d610 100644 --- a/include/linux/init.h +++ b/include/linux/init.h @@ -48,15 +48,74 @@ */ #ifndef MODULE -#include + +/* + * Used for initialization calls.. + */ +typedef int (*initcall_t)(void); + +extern initcall_t __initcall_start, __initcall_end; + +#define __initcall(fn) \ + static __attribute__ ((unused,__section__ (".initcall.init"))) \ + initcall_t __initcall_##fn = fn + +/* + * Used for kernel command line parameter setup + */ +struct kernel_param { + const char *str; + int (*setup_func)(char *); +}; + +extern struct kernel_param __setup_start, __setup_end; + +#define __setup(str, fn) \ + static __attribute__ ((__section__ (".data.init"))) \ + char __setup_str_##fn[] = str; \ + static __attribute__ ((unused,__section__ (".setup.init"))) \ + struct kernel_param __setup_##fn = { __setup_str_##fn, fn } + +/* + * Mark functions and data as being only used at initialization + * or exit time. + */ +#define __init __attribute__ ((__section__ (".text.init"))) +#define __exit __attribute__ ((unused, __section__(".text.init"))) +#define __initdata __attribute__ ((__section__ (".data.init"))) +#define __exitdata __attribute__ ((unused, __section__ (".data.init"))) + +#define __initfunc(__arginit) \ + __arginit __init; \ + __arginit + +/* For assembly routines */ +#define __INIT .section ".text.init","ax" +#define __FINIT .previous +#define __INITDATA .section ".data.init","aw" + +#define __cacheline_aligned __attribute__ \ + ((__section__ (".data.cacheline_aligned"))) + +#define module_init(x) __initcall(x); +#define module_exit(x) /* nothing */ + #else + #define __init +#define __exit #define __initdata +#define __exitdata #define __initfunc(__arginit) __arginit +#defint __initcall /* For assembly routines */ #define __INIT #define __FINIT #define __INITDATA + +#define module_init(x) int init_module(void) { return x(); } +#define module_exit(x) void cleanup_module(void) { x(); } + #endif #if __GNUC__ >= 2 && __GNUC_MINOR__ >= 8 diff --git a/include/linux/module.h b/include/linux/module.h index 94cce874f618..e0b655aab82c 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -191,9 +191,10 @@ __asm__(".section .modinfo\n\t.previous"); /* Define the module variable, and usage macros. */ extern struct module __this_module; -#define MOD_INC_USE_COUNT __MOD_INC_USE_COUNT(&__this_module) -#define MOD_DEC_USE_COUNT __MOD_DEC_USE_COUNT(&__this_module) -#define MOD_IN_USE __MOD_IN_USE(&__this_module) +#define THIS_MODULE (&__this_module) +#define MOD_INC_USE_COUNT __MOD_INC_USE_COUNT(THIS_MODULE) +#define MOD_DEC_USE_COUNT __MOD_DEC_USE_COUNT(THIS_MODULE) +#define MOD_IN_USE __MOD_IN_USE(THIS_MODULE) #ifndef __NO_VERSION__ #include @@ -215,6 +216,7 @@ const char __module_using_checksums[] __attribute__((section(".modinfo"))) = #ifndef __GENKSYMS__ +#define THIS_MODULE NULL #define MOD_INC_USE_COUNT do { } while (0) #define MOD_DEC_USE_COUNT do { } while (0) #define MOD_IN_USE 1 diff --git a/init/main.c b/init/main.c index 2ac3409f6828..4752ec4ab4d4 100644 --- a/init/main.c +++ b/init/main.c @@ -68,9 +68,6 @@ extern char *linux_banner; extern int console_loglevel; static int init(void *); -extern int bdflush(void *); -extern int kswapd(void *); -extern void kswapd_setup(void); extern void init_IRQ(void); extern void init_modules(void); @@ -606,29 +603,12 @@ static void __init do_basic_setup(void) #ifdef CONFIG_MAC nubus_init(); #endif -#ifdef CONFIG_APM - apm_init(); -#endif /* Networking initialization needs a process context */ sock_init(); do_initcalls(); - /* Launch bdflush from here, instead of the old syscall way. */ - kernel_thread(bdflush, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND); - /* Start the background pageout daemon. */ - kswapd_setup(); - kernel_thread(kswapd, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND); - -#if CONFIG_AP1000 - /* Start the async paging daemon. */ - { - extern int asyncd(void *); - kernel_thread(asyncd, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND); - } -#endif - #ifdef CONFIG_BLK_DEV_INITRD real_root_dev = ROOT_DEV; diff --git a/mm/vmscan.c b/mm/vmscan.c index 73a4c912a029..ed412d620ca6 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -437,27 +437,6 @@ done: return priority >= 0; } -/* - * Before we start the kernel thread, print out the - * kswapd initialization message (otherwise the init message - * may be printed in the middle of another driver's init - * message). It looks very bad when that happens. - */ -void __init kswapd_setup(void) -{ - int i; - char *revision="$Revision: 1.5 $", *s, *e; - - swap_setup(); - - if ((s = strchr(revision, ':')) && - (e = strchr(s, '$'))) - s++, i = e - s; - else - s = revision, i = -1; - printk ("Starting kswapd v%.*s\n", i, s); -} - static struct task_struct *kswapd_process; /* @@ -544,4 +523,13 @@ int try_to_free_pages(unsigned int gfp_mask) retval = do_try_to_free_pages(gfp_mask); return retval; } - + +static int __init kswapd_init(void) +{ + printk("Starting kswapd v1.6\n"); + swap_setup(); + kernel_thread(kswapd, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + return 0; +} + +module_init(kswapd_init) -- 2.39.5