Commit 4e5f45c6 authored by Linus Torvalds's avatar Linus Torvalds

Import 2.3.13pre4

parent 234c8819
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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)
#include <linux/mm.h>
#include <linux/sched.h>
#include <linux/init.h>
#include <asm/uaccess.h>
#include <asm/pgtable.h>
#include <asm/desc.h>
#include <asm/init.h>
static struct vm_area_struct init_mmap = INIT_MMAP;
static struct fs_struct init_fs = INIT_FS;
......
......@@ -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);
......
......@@ -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);
......
......@@ -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;
......
......@@ -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
This diff is collapsed.
......@@ -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)
......@@ -101,6 +101,8 @@
* 15.06.99 0.23 Fix bad allocation bug.
* Thanks to Deti Fliegl <fliegl@in.tum.de>
* 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!! */
......
......@@ -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)
......@@ -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)
......@@ -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)
......@@ -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 @@ static int __init init_misc_binfmt(void)
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)
......@@ -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)
......@@ -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)
#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 "<asm/init.h> should never be used - use <linux/init.h> instead"
......@@ -48,15 +48,74 @@
*/
#ifndef MODULE
#include <asm/init.h>
/*
* 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
......
......@@ -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 <linux/version.h>
......@@ -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
......
......@@ -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;
......
......@@ -437,27 +437,6 @@ static int do_try_to_free_pages(unsigned int gfp_mask)
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)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment