Commit 61cb5dec authored by Linus Torvalds's avatar Linus Torvalds

Linux 2.1.98

I just released a fairly small patch to 97 to bring it up to 98.

I've gotten a lot of patches in the mail for the last week, and I've been
ignoring most of them for obvious reasons. They aren't in any in-queue,
you can more-or-less consider them lost - but don't resend them all
immediately, because if I get another huge batch of patches then I'll just
have to ignore them again.

We're going slow and easy, and the plan is to not only keep me sane in the
midst of all the diapers, but I'll also at the same time take the
opportunity to actually enforce the feature-freeze. You've known about it
for a long time, _tough_.

Anyway, 2.1.98 _should_ fix:

 - the IDE/SCSI lockups. The irq enable/disable code was broken, and could
   do some really bad things. This tended to lock up the machine if you
   accessed your IDE disks heavily, or in particular if you had a mixture
   of IDE and SCSI and used them at the same time. Tell me if you still
   have problems - I'm sure there are still bugs left, and I want to hear
   about them.
 - memory management especially on small-memory machines. I think I made a
   good change to the allocation logic, and I'm hoping it will fix the bad
   bahevaiour on those wimpy machines that all you losers out there are
   using that have less than half a Gig of RAM. It certainly still works
   fine on my machine, and I'm certainly still too lazy to test it out on
   anything smaller.

There's a few other updates too: the asm constraints are fixed, so it
should compile again with other compiler versions than the particular one
I happen to be using. And some of the SCSI drivers have been updated a
bit.

There's been a lot of discussion and patches on capabilities, and I
haven't applied them yet, I'll let them simmer a bit. Similarly, I've seen
so many pathes to kmod that my head is spinning, and as I don't use
modules myself I'd really like to get feedback from users about the
different patches, so that maybe I'll get something that everybody can
agree on as acceptable. Right now I don't know which patch I should even
begin looking at.

                Linus
parent 5d2e518d
VERSION = 2
PATCHLEVEL = 1
SUBLEVEL = 97
SUBLEVEL = 98
ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/)
......
......@@ -37,11 +37,9 @@ OLD_GAS := $(shell if cat ./GAS_VER | grep 'version 2.7' > /dev/null; then echo
$(shell rm -f ./GAS_VER)
ifneq ($(OLD_GAS),yes)
CFLAGS := $(CFLAGS) -Wa,-m21164a -DBWX_USABLE
# if PYXIS, then enable use of BWIO space
ifeq ($(CONFIG_ALPHA_PYXIS),y)
CFLAGS := $(CFLAGS) -DBWIO_ENABLED
CFLAGS := $(CFLAGS) -Wa,-m21164a -DBWX_USABLE -DBWIO_ENABLED
endif
endif
......
......@@ -337,7 +337,7 @@ int get_irq_list(char *buf)
if (IO_APIC_IRQ(i))
p += sprintf(p, " IO-APIC ");
else
p += sprintf(p, " XT PIC ");
p += sprintf(p, " XT-PIC ");
p += sprintf(p, " %s", action->name);
for (action=action->next; action; action = action->next) {
......@@ -669,7 +669,6 @@ void disable_irq(unsigned int irq)
*/
static void disable_8259A_irq(unsigned int irq)
{
disabled_irq[irq]++;
cached_irq_mask |= 1 << irq;
set_8259A_irq_mask(irq);
}
......@@ -677,7 +676,7 @@ static void disable_8259A_irq(unsigned int irq)
#ifdef __SMP__
static void disable_ioapic_irq(unsigned int irq)
{
disabled_irq[irq]++;
disabled_irq[irq] = 1;
/*
* We do not disable IO-APIC irqs in hardware ...
*/
......@@ -688,12 +687,6 @@ void enable_8259A_irq (unsigned int irq)
{
unsigned long flags;
spin_lock_irqsave(&irq_controller_lock, flags);
if (disabled_irq[irq])
disabled_irq[irq]--;
else {
spin_unlock_irqrestore(&irq_controller_lock, flags);
return;
}
cached_irq_mask &= ~(1 << irq);
set_8259A_irq_mask(irq);
spin_unlock_irqrestore(&irq_controller_lock, flags);
......@@ -706,13 +699,8 @@ void enable_ioapic_irq (unsigned int irq)
int cpu = smp_processor_id();
spin_lock_irqsave(&irq_controller_lock, flags);
if (disabled_irq[irq])
disabled_irq[irq]--;
else {
spin_unlock_irqrestore(&irq_controller_lock, flags);
return;
}
#if 0
disabled_irq[irq] = 0;
/*
* In the SMP+IOAPIC case it might happen that there are an unspecified
* number of pending IRQ events unhandled. These cases are very rare,
......@@ -720,7 +708,7 @@ void enable_ioapic_irq (unsigned int irq)
* better to do it this way as thus we dont have to be aware of
* 'pending' interrupts in the IRQ path, except at this point.
*/
if (!disabled_irq[irq] && irq_events[irq]) {
if (irq_events[irq]) {
if (!ipi_pending[irq]) {
ipi_pending[irq] = 1;
--irq_events[irq];
......@@ -728,36 +716,6 @@ void enable_ioapic_irq (unsigned int irq)
}
}
spin_unlock_irqrestore(&irq_controller_lock, flags);
#else
if (!disabled_irq[irq] && irq_events[irq]) {
struct pt_regs regs; /* FIXME: these are fake currently */
disabled_irq[irq]++;
hardirq_enter(cpu);
spin_unlock(&irq_controller_lock);
release_irqlock(cpu);
while (test_bit(0,&global_irq_lock)) mb();
again:
handle_IRQ_event(irq, &regs);
spin_lock(&irq_controller_lock);
disabled_irq[irq]--;
should_handle_irq=0;
if (--irq_events[irq] && !disabled_irq[irq]) {
should_handle_irq=1;
disabled_irq[irq]++;
}
spin_unlock(&irq_controller_lock);
if (should_handle_irq)
goto again;
irq_exit(cpu, irq);
__restore_flags(flags);
} else
spin_unlock_irqrestore(&irq_controller_lock, flags);
#endif
}
#endif
......
......@@ -21,7 +21,6 @@
* applications that require more DP ram, we can expand the boundaries
* but then we have to be careful of any downloaded microcode.
*/
#include <linux/config.h>
#include <linux/errno.h>
#include <linux/sched.h>
#include <linux/kernel.h>
......
......@@ -21,7 +21,6 @@
* small packets.
*
*/
#include <linux/config.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/string.h>
......
#include <linux/config.h>
#include "../kernel/ppc_defs.h"
#include "../kernel/ppc_asm.tmpl"
#include <asm/processor.h>
......
......@@ -13,6 +13,7 @@
*/
#define __KERNEL_SYSCALLS__
#include <linux/config.h>
#include <linux/errno.h>
#include <linux/sched.h>
#include <linux/kernel.h>
......
......@@ -12,6 +12,7 @@
*
*/
#include <linux/config.h>
#include <linux/sys.h>
#include <asm/unistd.h>
#include <asm/errno.h>
......
......@@ -12,6 +12,7 @@
* 2 of the License, or (at your option) any later version.
*/
#include <linux/config.h>
#include <linux/kernel.h>
#include <linux/pci.h>
#include <linux/delay.h>
......
......@@ -12,6 +12,7 @@
* 2 of the License, or (at your option) any later version.
*/
#include <linux/config.h>
#include <linux/errno.h>
#include <linux/sched.h>
#include <linux/proc_fs.h>
......
......@@ -25,7 +25,6 @@
#include <linux/user.h>
#include <linux/a.out.h>
#include <linux/interrupt.h>
#include <linux/config.h>
#include <asm/pgtable.h>
#include <asm/uaccess.h>
......
......@@ -19,6 +19,7 @@
* creating a software PLL, I have set HZ to 128. -- Dan
*/
#include <linux/config.h>
#include <linux/errno.h>
#include <linux/sched.h>
#include <linux/kernel.h>
......
......@@ -4,7 +4,6 @@
* Copyright (C) 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
*/
#include <linux/config.h> /* for CONFIG_PROFILE */
#include <asm/head.h>
#include <linux/kernel.h>
......
......@@ -9,7 +9,6 @@
* Copyright (C) 1996 Dave Redman (djhr@tadpole.co.uk)
*/
#include <linux/config.h>
#include <linux/ptrace.h>
#include <linux/errno.h>
#include <linux/linkage.h>
......
......@@ -1118,10 +1118,9 @@ struct request **ide_get_queue (kdev_t dev)
* conditions in the event that an unexpected interrupt occurs while
* we are in the driver.
*
* Note that when an interrupt is used to reenter the driver, the first level
* handler will already have masked the irq that triggered, but any other ones
* for the hwgroup will still be unmasked. The driver tries to be careful
* about such things.
* Note that the io-request lock will guarantee that the driver never gets
* re-entered even on another interrupt level, so we no longer need to
* mask the irq's.
*/
static void do_hwgroup_request (ide_hwgroup_t *hwgroup)
{
......@@ -1132,13 +1131,7 @@ static void do_hwgroup_request (ide_hwgroup_t *hwgroup)
del_timer(&hwgroup->timer);
ide_get_lock(&ide_lock, ide_intr, hwgroup);
hwgroup->active = 1;
do {
disable_irq(hwif->irq);
} while ((hwif = hwif->next) != hgif);
ide_do_request (hwgroup);
do {
enable_irq(hwif->irq);
} while ((hwif = hwif->next) != hgif);
}
}
......@@ -1274,10 +1267,6 @@ static void do_ide_intr (int irq, void *dev_id, struct pt_regs *regs)
if (!ide_ack_intr (hwif->io_ports[IDE_STATUS_OFFSET], hwif->io_ports[IDE_IRQ_OFFSET]))
return;
do {
if (!IDE_IRQ_EQUAL(irq, hwgroup->hwif->irq))
disable_irq(hwif->irq);
} while ((hwif = hwif->next) != hwgroup->hwif);
if (IDE_IRQ_EQUAL(irq, hwif->irq)
&& (handler = hwgroup->handler) != NULL) {
ide_drive_t *drive = hwgroup->drive;
......@@ -1309,10 +1298,6 @@ static void do_ide_intr (int irq, void *dev_id, struct pt_regs *regs)
}
__cli();
hwif = hwgroup->hwif;
do {
if (!IDE_IRQ_EQUAL(hwif->irq, irq))
enable_irq(hwif->irq);
} while ((hwif = hwif->next) != hwgroup->hwif);
}
/*
......
......@@ -658,7 +658,7 @@ MODULE_PARM(reset, "i");
#else
static int parport[LP_NO] __initdata = { [0 ... LP_NO-1] = LP_PARPORT_UNSPEC };
static int parport_nr[LP_NO] __initdata = { [0 ... LP_NO-1] = LP_PARPORT_UNSPEC };
static int reset __initdata = 0;
static int parport_ptr = 0;
......@@ -668,21 +668,21 @@ __initfunc(void lp_setup(char *str, int *ints))
if (!str) {
if (ints[0] == 0 || ints[1] == 0) {
/* disable driver on "lp=" or "lp=0" */
parport[0] = LP_PARPORT_OFF;
parport_nr[0] = LP_PARPORT_OFF;
} else {
printk(KERN_WARNING "warning: 'lp=0x%x' is deprecated, ignored\n", ints[1]);
}
} else if (!strncmp(str, "parport", 7)) {
int n = simple_strtoul(str+7, NULL, 10);
if (parport_ptr < LP_NO)
parport[parport_ptr++] = n;
parport_nr[parport_ptr++] = n;
else
printk(KERN_INFO "lp: too many ports, %s ignored.\n",
str);
} else if (!strcmp(str, "auto")) {
parport[0] = LP_PARPORT_AUTO;
parport_nr[0] = LP_PARPORT_AUTO;
} else if (!strcmp(str, "none")) {
parport[parport_ptr++] = LP_PARPORT_NONE;
parport_nr[parport_ptr++] = LP_PARPORT_NONE;
} else if (!strcmp(str, "reset")) {
reset = 1;
}
......
......@@ -7,6 +7,7 @@
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
*/
#include <linux/config.h>
#include <linux/errno.h>
#include <linux/signal.h>
#include <linux/sched.h>
......
......@@ -100,10 +100,6 @@ static int irq_write_proc(struct file *file, const char *buffer,
out_ok:
pp->irq = newirq;
if (oldirq != PARPORT_IRQ_NONE && newirq == PARPORT_IRQ_NONE &&
cad && cad->irq_func)
cad->irq_func(pp->irq, cad->private, NULL);
out:
return retval;
}
......
......@@ -34,7 +34,7 @@
#undef PARPORT_PARANOID
#define PARPORT_DEFAULT_TIMESLICE (HZ/10)
#define PARPORT_DEFAULT_TIMESLICE (HZ/5)
static struct parport *portlist = NULL, *portlist_tail = NULL;
static int portcount = 0;
......
......@@ -66,6 +66,7 @@ static char *version =
static char *lancestr = "LANCE";
static char *lancedma = "LANCE DMA";
#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
......
......@@ -323,7 +323,7 @@ __initfunc(void pci_init(void))
pci_quirks_init();
#endif
#ifdef CONFIG_PROC
#ifdef CONFIG_PROC_FS
pci_proc_init();
#endif
}
......
......@@ -6,6 +6,7 @@
* Copyright (c) 1997, 1998 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
*/
#include <linux/config.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/pci.h>
......
......@@ -6,6 +6,7 @@
* Copyright (C) 1998 Pavel Machek (pavel@ucw.cz)
*/
#include <linux/config.h>
#include <linux/kd.h>
#include <linux/tty.h>
#include <linux/malloc.h>
......
......@@ -46,6 +46,7 @@
*
*/
#include <linux/config.h>
#include <linux/sched.h>
#include <linux/timer.h>
#include <linux/interrupt.h>
......
......@@ -3,6 +3,7 @@
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
*/
#include <linux/config.h>
#include <linux/kernel.h>
#include <linux/malloc.h>
#include <linux/init.h>
......
......@@ -1124,7 +1124,7 @@ static void BusLogic_InitializeProbeInfoList(BusLogic_HostAdapter_T
If a PCI BIOS is present, interrogate it for MultiMaster and FlashPoint
Host Adapters; otherwise, default to the standard ISA MultiMaster probe.
*/
if (!BusLogic_ProbeOptions.NoProbePCI && pcibios_present())
if (!BusLogic_ProbeOptions.NoProbePCI && pci_present())
{
if (BusLogic_ProbeOptions.MultiMasterFirst)
{
......
This diff is collapsed.
......@@ -13,7 +13,7 @@ int eata2x_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
int eata2x_abort(Scsi_Cmnd *);
int eata2x_reset(Scsi_Cmnd *, unsigned int);
#define EATA_VERSION "4.04.00"
#define EATA_VERSION "4.20.00"
#define LinuxVersionCode(v, p, s) (((v)<<16)+((p)<<8)+(s))
......
......@@ -23,6 +23,7 @@
$Header: /vger/u4/cvs/linux/drivers/scsi/hosts.h,v 1.6 1997/01/19 23:07:13 davem Exp $
*/
#include <linux/config.h>
#include <linux/proc_fs.h>
/* It is senseless to set SG_ALL any higher than this - the performance
......
This diff is collapsed.
......@@ -13,7 +13,7 @@ int u14_34f_abort(Scsi_Cmnd *);
int u14_34f_reset(Scsi_Cmnd *, unsigned int);
int u14_34f_biosparam(Disk *, kdev_t, int *);
#define U14_34F_VERSION "4.04.00"
#define U14_34F_VERSION "4.20.00"
#define LinuxVersionCode(v, p, s) (((v)<<16)+((p)<<8)+(s))
......
......@@ -108,6 +108,7 @@ static elf_addr_t *
create_elf_tables(char *p, int argc, int envc,
struct elfhdr * exec,
unsigned long load_addr,
unsigned long load_bias,
unsigned long interp_load_addr, int ibcs)
{
elf_caddr_t *argv;
......@@ -173,7 +174,7 @@ create_elf_tables(char *p, int argc, int envc,
NEW_AUX_ENT(3, AT_PAGESZ, ELF_EXEC_PAGESIZE);
NEW_AUX_ENT(4, AT_BASE, interp_load_addr);
NEW_AUX_ENT(5, AT_FLAGS, 0);
NEW_AUX_ENT(6, AT_ENTRY, (elf_addr_t) exec->e_entry);
NEW_AUX_ENT(6, AT_ENTRY, load_bias + exec->e_entry);
NEW_AUX_ENT(7, AT_UID, (elf_addr_t) current->uid);
NEW_AUX_ENT(8, AT_EUID, (elf_addr_t) current->euid);
NEW_AUX_ENT(9, AT_GID, (elf_addr_t) current->gid);
......@@ -584,6 +585,7 @@ do_load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)
current->mm->end_data = 0;
current->mm->end_code = 0;
current->mm->mmap = NULL;
current->flags &= ~PF_FORKNOEXEC;
elf_entry = (unsigned long) elf_ex.e_entry;
/* Do this immediately, since STACK_TOP as used in setup_arg_pages
......@@ -712,7 +714,7 @@ do_load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)
bprm->argc,
bprm->envc,
(interpreter_type == INTERPRETER_ELF ? &elf_ex : NULL),
load_addr,
load_addr, load_bias,
interp_load_addr,
(interpreter_type == INTERPRETER_AOUT ? 0 : 1));
/* N.B. passed_fileno might not be initialized? */
......
/*
* $Id: nfsroot.c,v 1.43 1997/10/16 19:55:27 mj Exp $
* $Id: nfsroot.c,v 1.45 1998/03/07 10:44:46 mj Exp $
*
* Copyright (C) 1995, 1996 Gero Kuhlmann <gero@gkminix.han.de>
*
......@@ -59,6 +59,8 @@
* host IP address (but host name defaults to IP
* address anyway).
* Martin Mares : Use root_server_addr appropriately during setup.
* Martin Mares : Rewrote parameter parsing, now hopefully giving
* correct overriding.
*/
#include <linux/types.h>
......@@ -83,11 +85,9 @@
/* Default path we try to mount. "%s" gets replaced by our IP address */
#define NFS_ROOT "/tftpboot/%s"
#define NFS_ROOT_NAME_LEN 256
/* Parameters passed from the kernel command line */
static char nfs_root_name[NFS_ROOT_NAME_LEN] __initdata = "default";
static int nfs_params_parsed = 0;
static char nfs_root_name[256] __initdata = "";
/* Address of NFS server */
static __u32 servaddr __initdata = 0;
......@@ -150,19 +150,15 @@ static struct nfs_bool_opts {
/*
* Prepare the NFS data structure and parse any options. This tries to
* set as many values in the nfs_data structure as known right now.
* Extract IP address from the parameter string if needed. Note that we
* need to have root_server_addr set _before_ IPConfig gets called as it
* can override it.
*/
__initfunc(static int root_nfs_name(char *name))
__initfunc(static void root_nfs_parse_addr(char *name))
{
char buf[NFS_MAXPATHLEN];
char *cp, *cq, *options, *val;
int octets = 0;
char *cp, *cq;
if (nfs_params_parsed)
return nfs_params_parsed;
/* It is possible to override the server IP number here */
cp = cq = name;
while (octets < 4) {
while (*cp >= '0' && *cp <= '9')
......@@ -179,45 +175,20 @@ __initfunc(static int root_nfs_name(char *name))
if (*cp == ':')
*cp++ = '\0';
root_server_addr = in_aton(name);
name = cp;
strcpy(name, cp);
}
}
/* Clear the nfs_data structure and setup the server hostname */
memset(&nfs_data, 0, sizeof(nfs_data));
/* Set the name of the directory to mount */
if (root_server_path[0] && !strcmp(name, "default"))
strncpy(buf, root_server_path, NFS_MAXPATHLEN-1);
else
strncpy(buf, name, NFS_MAXPATHLEN-1);
buf[NFS_MAXPATHLEN-1] = '\0';
if ((options = strchr(buf, ',')))
*options++ = '\0';
if (!strcmp(buf, "default"))
strcpy(buf, NFS_ROOT);
cp = system_utsname.nodename;
if (strlen(buf) + strlen(cp) > NFS_MAXPATHLEN) {
printk(KERN_ERR "Root-NFS: Pathname for remote directory too long.\n");
return -1;
}
sprintf(nfs_path, buf, cp);
/* Set some default values */
nfs_port = -1;
nfs_data.version = NFS_MOUNT_VERSION;
nfs_data.flags = NFS_MOUNT_NONLM; /* No lockd in nfs root yet */
nfs_data.rsize = NFS_DEF_FILE_IO_BUFFER_SIZE;
nfs_data.wsize = NFS_DEF_FILE_IO_BUFFER_SIZE;
nfs_data.bsize = 0;
nfs_data.timeo = 7;
nfs_data.retrans = 3;
nfs_data.acregmin = 3;
nfs_data.acregmax = 60;
nfs_data.acdirmin = 30;
nfs_data.acdirmax = 60;
/*
* Parse option string.
*/
__initfunc(static void root_nfs_parse(char *name, char *buf))
{
char *options, *val, *cp;
/* Process any options */
if (options) {
if ((options = strchr(name, ','))) {
*options++ = 0;
cp = strtok(options, ",");
while (cp) {
if ((val = strchr(cp, '='))) {
......@@ -239,6 +210,50 @@ __initfunc(static int root_nfs_name(char *name))
cp = strtok(NULL, ",");
}
}
if (name[0] && strcmp(name, "default")) {
strncpy(buf, name, NFS_MAXPATHLEN-1);
buf[NFS_MAXPATHLEN-1] = 0;
}
}
/*
* Prepare the NFS data structure and parse all options.
*/
__initfunc(static int root_nfs_name(char *name))
{
char buf[NFS_MAXPATHLEN];
char *cp;
/* Set some default values */
memset(&nfs_data, 0, sizeof(nfs_data));
nfs_port = -1;
nfs_data.version = NFS_MOUNT_VERSION;
nfs_data.flags = NFS_MOUNT_NONLM; /* No lockd in nfs root yet */
nfs_data.rsize = NFS_DEF_FILE_IO_BUFFER_SIZE;
nfs_data.wsize = NFS_DEF_FILE_IO_BUFFER_SIZE;
nfs_data.bsize = 0;
nfs_data.timeo = 7;
nfs_data.retrans = 3;
nfs_data.acregmin = 3;
nfs_data.acregmax = 60;
nfs_data.acdirmin = 30;
nfs_data.acdirmax = 60;
strcpy(buf, NFS_ROOT);
/* Process options received from the remote server */
root_nfs_parse(root_server_path, buf);
/* Override them by options set on kernel command-line */
root_nfs_parse(name, buf);
cp = system_utsname.nodename;
if (strlen(buf) + strlen(cp) > NFS_MAXPATHLEN) {
printk(KERN_ERR "Root-NFS: Pathname for remote directory too long.\n");
return -1;
}
sprintf(nfs_path, buf, cp);
return 1;
}
......@@ -317,7 +332,7 @@ __initfunc(void nfs_root_setup(char *line, int *ints))
line[sizeof(nfs_root_name) - strlen(NFS_ROOT) - 1] = '\0';
sprintf(nfs_root_name, NFS_ROOT, line);
}
nfs_params_parsed = root_nfs_name(nfs_root_name);
root_nfs_parse_addr(nfs_root_name);
}
......
......@@ -2,6 +2,8 @@
* include/asm-alpha/serial.h
*/
#include <linux/config.h>
/*
* This assumes you have a 1.8432 MHz clock for your UART.
*
......
......@@ -2,6 +2,8 @@
* include/asm-i386/serial.h
*/
#include <linux/config.h>
/*
* This assumes you have a 1.8432 MHz clock for your UART.
*
......
......@@ -293,7 +293,7 @@ __asm__ __volatile__ ("movw %3,0(%2)\n\t" \
"movb $0,6(%2)\n\t" \
"movb %%ah,7(%2)\n\t" \
"rorl $16,%%eax" \
: "=m"(*(n)) : "a" (addr), "r"(n), "g"(limit), "i"(type))
: "=m"(*(n)) : "a" (addr), "r"(n), "ir"(limit), "i"(type))
#define set_tss_desc(n,addr) \
_set_tssldt_desc(((char *) (n)),((int)(addr)),235,0x89)
......
#include <linux/config.h>
#ifndef _ASM_IRQ_H
#define _ASM_IRQ_H
......
#include <linux/config.h>
#ifndef __PPC_MMU_CONTEXT_H
#define __PPC_MMU_CONTEXT_H
......
#include <linux/config.h>
#ifndef _PPC_PAGE_H
#define _PPC_PAGE_H
......
#include <linux/config.h>
#ifndef _PPC_PGTABLE_H
#define _PPC_PGTABLE_H
......
/* $Id: system.h,v 1.68 1998/03/09 14:04:51 jj Exp $ */
#include <linux/config.h>
#ifndef __SPARC_SYSTEM_H
#define __SPARC_SYSTEM_H
......
......@@ -3,6 +3,9 @@
*
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
*/
#include <linux/config.h>
#ifndef _SPARC_TIMER_H
#define _SPARC_TIMER_H
......
/*
* This is <linux/capability.h>
*
* Andrew G. Morgan <morgan@parc.power.net>
* Andrew G. Morgan <morgan@transmeta.com>
* Alexander Kjeldaas <astor@guardian.no>
* with help from Aleph1, Roland Buresund and Andrew Main.
*/
......
......@@ -283,7 +283,6 @@ extern __inline__ unsigned int parport_yield_blocking(struct pardevice *dev)
if ((dev->port->waithead == NULL) || (timeslip < dev->timeslice))
return 0;
parport_release(dev);
schedule();
return parport_claim_or_block(dev);
}
......
......@@ -113,7 +113,7 @@ int kmod_init(void)
* CLONE_FILES just saves some space (we don't need any
* new file descriptors). Ditto for CLONE_SIGHAND.
*/
kernel_thread(kmod_thread, NULL, CLONE_FILES |CLONE_FS | CLONE_SIGHAND);
kernel_thread(kmod_thread, NULL, CLONE_FILES | CLONE_FS | CLONE_SIGHAND);
kmod_unload_timer.next = NULL;
kmod_unload_timer.prev = NULL;
......
......@@ -273,10 +273,8 @@ unsigned long __get_free_pages(int gfp_mask, unsigned long order)
* "maxorder" is the highest order number that we're allowed
* to empty in order to find a free page..
*/
maxorder = order + NR_MEM_LISTS/3;
if (gfp_mask & __GFP_MED)
maxorder += NR_MEM_LISTS/3;
if ((gfp_mask & __GFP_HIGH) || maxorder > NR_MEM_LISTS)
maxorder = NR_MEM_LISTS-1;
if (gfp_mask & __GFP_HIGH)
maxorder = NR_MEM_LISTS;
if (in_interrupt() && (gfp_mask & __GFP_WAIT)) {
......@@ -295,6 +293,7 @@ unsigned long __get_free_pages(int gfp_mask, unsigned long order)
if (gfp_mask & __GFP_WAIT) {
int freed = try_to_free_pages(gfp_mask,SWAP_CLUSTER_MAX);
gfp_mask &= ~__GFP_WAIT; /* go through this only once */
maxorder = NR_MEM_LISTS; /* Allow anything this time */
if (freed)
goto repeat;
}
......
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