Commit 5db5272c authored by Linus Torvalds's avatar Linus Torvalds

v2.4.14 -> v2.4.14.1

  - me: fix page flags race condition Andrea found
  - David Miller: sparc and network updates
  - various: fix loop driver that thought it was part of the VM system
  - me: teach DRM about VM_RESERVED
  - Alan Cox: more merging
parent aad40ef3
This diff is collapsed.
...@@ -971,7 +971,7 @@ Your cooperation is appreciated. ...@@ -971,7 +971,7 @@ Your cooperation is appreciated.
0 = /dev/rd/c0d0 First disk, whole disk 0 = /dev/rd/c0d0 First disk, whole disk
8 = /dev/rd/c0d1 Second disk, whole disk 8 = /dev/rd/c0d1 Second disk, whole disk
... ...
248 = /dev/rd/c0d15 32nd disk, whole disk 248 = /dev/rd/c0d31 32nd disk, whole disk
For partitions add: For partitions add:
0 = /dev/rd/c?d? Whole disk 0 = /dev/rd/c?d? Whole disk
......
...@@ -471,6 +471,11 @@ your system and how much traffic was routed over those devices: ...@@ -471,6 +471,11 @@ your system and how much traffic was routed over those devices:
...] 1375103 17405 0 0 0 0 0 0 ...] 1375103 17405 0 0 0 0 0 0
...] 1703981 5535 0 0 0 3 0 0 ...] 1703981 5535 0 0 0 3 0 0
In addition, each Channel Bond interface has it's own directory. For
example, the bond0 device will have a directory called /proc/net/bond0/.
It will contain information that is specific to that bond, such as the
current slaves of the bond, the link status of the slaves, and how
many times the slaves link has failed.
1.5 SCSI info 1.5 SCSI info
------------- -------------
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
---------------------------- ----------------------------
H. Peter Anvin <hpa@zytor.com> H. Peter Anvin <hpa@zytor.com>
Last update 2000-07-27 Last update 2000-10-29
On the i386 platform, the Linux kernel uses a rather complicated boot On the i386 platform, the Linux kernel uses a rather complicated boot
convention. This has evolved partially due to historical aspects, as convention. This has evolved partially due to historical aspects, as
...@@ -145,6 +145,9 @@ directly. Such boot loaders do not need to worry about filling in ...@@ -145,6 +145,9 @@ directly. Such boot loaders do not need to worry about filling in
most of the fields in the header. The following fields should be most of the fields in the header. The following fields should be
filled out, however: filled out, however:
vid_mode:
Please see the section on SPECIAL COMMAND LINE OPTIONS.
type_of_loader: type_of_loader:
If your boot loader has an assigned id (see table below), enter If your boot loader has an assigned id (see table below), enter
0xTV here, where T is an identifier for the boot loader and V is 0xTV here, where T is an identifier for the boot loader and V is
...@@ -319,8 +322,8 @@ conflict with actual kernel options now or in the future. ...@@ -319,8 +322,8 @@ conflict with actual kernel options now or in the future.
mem=<size> mem=<size>
<size> is an integer in C notation optionally followed by K, M <size> is an integer in C notation optionally followed by K, M
or G (meaning << 10, << 20 or << 30). This specifies to the or G (meaning << 10, << 20 or << 30). This specifies the end
kernel the memory size. This affects the possible placement of memory to the kernel. This affects the possible placement
of an initrd, since an initrd should be placed near end of of an initrd, since an initrd should be placed near end of
memory. Note that this is an option to *both* the kernel and memory. Note that this is an option to *both* the kernel and
the bootloader! the bootloader!
...@@ -392,8 +395,8 @@ following hooks that, if set, are invoked by the kernel at the ...@@ -392,8 +395,8 @@ following hooks that, if set, are invoked by the kernel at the
appropriate time. The use of these hooks should probably be appropriate time. The use of these hooks should probably be
considered an absolutely last resort! considered an absolutely last resort!
IMPORTANT: All the hooks are required to preserve %ebp, %esi and %edi IMPORTANT: All the hooks are required to preserve %esp, %ebp, %esi and
across invocation. %edi across invocation.
realmode_swtch: realmode_swtch:
A 16-bit real mode far subroutine invoked immediately before A 16-bit real mode far subroutine invoked immediately before
......
This diff is collapsed.
This diff is collapsed.
...@@ -31,6 +31,7 @@ de4x5 YES YES YES Hardware ...@@ -31,6 +31,7 @@ de4x5 YES YES YES Hardware
de600 NO NO NO N/A de600 NO NO NO N/A
de620 PROMISC PROMISC YES Software de620 PROMISC PROMISC YES Software
depca YES PROMISC YES Hardware depca YES PROMISC YES Hardware
dmfe YES YES YES Software(*)
e2100 YES YES YES Hardware e2100 YES YES YES Hardware
eepro YES PROMISC YES Hardware eepro YES PROMISC YES Hardware
eexpress NO NO NO N/A eexpress NO NO NO N/A
...@@ -52,9 +53,12 @@ sunlance YES YES YES Hardware ...@@ -52,9 +53,12 @@ sunlance YES YES YES Hardware
tulip YES YES YES Hardware tulip YES YES YES Hardware
wavelan YES PROMISC YES Hardware wavelan YES PROMISC YES Hardware
wd YES YES YES Hardware wd YES YES YES Hardware
xirc2ps_cs YES YES YES Hardware
znet YES YES YES Software znet YES YES YES Software
PROMISC = This multicast mode is in fact promiscuous mode. Avoid using PROMISC = This multicast mode is in fact promiscuous mode. Avoid using
cards who go PROMISC on any multicast in a multicast kernel. cards who go PROMISC on any multicast in a multicast kernel.
(#) = Hardware multicast support is not used yet. (#) = Hardware multicast support is not used yet.
(*) = Hardware support for Davicom 9132 chipset only.
...@@ -1287,10 +1287,14 @@ this can make debugging a particular process under VM painful under normal ...@@ -1287,10 +1287,14 @@ this can make debugging a particular process under VM painful under normal
circumstances as the process may change when doing a circumstances as the process may change when doing a
TR I R <address range>. TR I R <address range>.
Thankfully after reading VM's online help I figured out how to debug Thankfully after reading VM's online help I figured out how to debug
I particular process. particular processes in 31 bit mode, however, according to the current
VM online help documentation the method described below uses
TR STO or STD which don't currently work on z/Series while in
64-bit mode.
Your first problem is to find the STD ( segment table designation ) Your first problem is to find the STD ( segment table designation )
of the program you wish to debug. of the program you wish to debug.
There are several ways you can do this here are a few There are several ways you can do this here are a few
1) objdump --syms <program to be debugged> | grep main 1) objdump --syms <program to be debugged> | grep main
To get the address of main in the program. To get the address of main in the program.
......
...@@ -56,7 +56,7 @@ will allow only devno's 0x480e & 0x480f to be autodetected. ...@@ -56,7 +56,7 @@ will allow only devno's 0x480e & 0x480f to be autodetected.
.El .El
.Bl -item .Bl -item
.It .It
Multiple options can be passed separated by semicolons but no spaces are allowed between parameters. To be consistent with other hotpluggable architectures the script pointed to /proc/sys/kernel/hotplug (normally /sbin/hotplug) will be called automatically on startup or a machine check of a device as follows. Multiple options can be passed separated by semicolons, no spaces or newlines are allowed between parameters on the kernel parameter line as it complicates parsing, spaces are allowed in /proc/chandev & chandev.conf, newlines are allowed in chandev.conf only. To be consistent with other hotpluggable architectures the script pointed to /proc/sys/kernel/hotplug (normally /sbin/hotplug) will be called automatically on startup or a machine check of a device as follows.
/sbin/hotplug chandev <start starting_devnames> <machine_check (devname last/pre_recovery_status) (current/post_recovery_status)>. /sbin/hotplug chandev <start starting_devnames> <machine_check (devname last/pre_recovery_status) (current/post_recovery_status)>.
The chandev layer doesn't open stdin stdout or stderr so it is advisable that you add the following lines to the start of your script, here is a sample script which starts devices as they become available. The chandev layer doesn't open stdin stdout or stderr so it is advisable that you add the following lines to the start of your script, here is a sample script which starts devices as they become available.
.It .It
...@@ -132,7 +132,7 @@ e.g. ctc0,0x7c00,0x7c01 ...@@ -132,7 +132,7 @@ e.g. ctc0,0x7c00,0x7c01
.It .It
Tells the channel layer to force ctc0 if detected to use cuu's 7c00 & 7c01 port,port_no is the relative adapter no on lcs, on ctc/escon this field is the ctc/escon protocol number ( default 0 ), don't do checksumming on received ip packets & as ctc doesn't have hardware stats so it ignores this parameter. This can be used for instance to force a device if it presents bad sense data to the IO layer & thus autodetection fails. Tells the channel layer to force ctc0 if detected to use cuu's 7c00 & 7c01 port,port_no is the relative adapter no on lcs, on ctc/escon this field is the ctc/escon protocol number ( default 0 ), don't do checksumming on received ip packets & as ctc doesn't have hardware stats so it ignores this parameter. This can be used for instance to force a device if it presents bad sense data to the IO layer & thus autodetection fails.
.It .It
lcs,0x7c00,0x7d00,-1,4096 lcs,0x7c00,0x7d00,4096,-1
All devices between 0x7c00 & 7d00 should be detected as lcs, let the driver use 4096k for each instance, don't care what port relative adapter number is chosen, don't checksum received ip packets & use hw stats . All devices between 0x7c00 & 7d00 should be detected as lcs, let the driver use 4096k for each instance, don't care what port relative adapter number is chosen, don't checksum received ip packets & use hw stats .
.It .It
qeth1,0x7c00,0x7c01,0x7c02 qeth1,0x7c00,0x7c01,0x7c02
......
...@@ -201,6 +201,12 @@ P: Dave Gilbert ...@@ -201,6 +201,12 @@ P: Dave Gilbert
M: linux@treblig.org M: linux@treblig.org
S: Maintained S: Maintained
ARM/SHARK MACHINE SUPPORT
P: Alexander Schulz
M: alex@shark-linux.de
W: http://www.shark-linux.de/shark.html
S: Maintained
ARM/STRONGARM110 PORT ARM/STRONGARM110 PORT
P: Russell King P: Russell King
M: rmk@arm.linux.org.uk M: rmk@arm.linux.org.uk
......
VERSION = 2 VERSION = 2
PATCHLEVEL = 4 PATCHLEVEL = 4
SUBLEVEL = 14 SUBLEVEL = 15
EXTRAVERSION = EXTRAVERSION =-pre1
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
......
...@@ -7,9 +7,10 @@ ...@@ -7,9 +7,10 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <asm/io.h> #include <asm/io.h>
#include <linux/pm.h> #include <linux/pm.h>
#include <linux/keyboard.h>
#include <asm/keyboard.h> #include <asm/keyboard.h>
#include <asm/system.h>
unsigned long dmi_broken;
int is_sony_vaio_laptop; int is_sony_vaio_laptop;
struct dmi_header struct dmi_header
...@@ -87,7 +88,7 @@ static int __init dmi_table(u32 base, int len, int num, void (*decode)(struct dm ...@@ -87,7 +88,7 @@ static int __init dmi_table(u32 base, int len, int num, void (*decode)(struct dm
} }
int __init dmi_iterate(void (*decode)(struct dmi_header *)) static int __init dmi_iterate(void (*decode)(struct dmi_header *))
{ {
unsigned char buf[20]; unsigned char buf[20];
long fp=0xE0000L; long fp=0xE0000L;
...@@ -98,7 +99,7 @@ int __init dmi_iterate(void (*decode)(struct dmi_header *)) ...@@ -98,7 +99,7 @@ int __init dmi_iterate(void (*decode)(struct dmi_header *))
* Skip on x86/64 with simnow. Will eventually go away * Skip on x86/64 with simnow. Will eventually go away
* If you see this ifdef in 2.6pre mail me ! * If you see this ifdef in 2.6pre mail me !
*/ */
return; return -1;
#endif #endif
while( fp < 0xFFFFF) while( fp < 0xFFFFF)
...@@ -315,15 +316,14 @@ static __init int broken_apm_power(struct dmi_blacklist *d) ...@@ -315,15 +316,14 @@ static __init int broken_apm_power(struct dmi_blacklist *d)
return 0; return 0;
} }
#if defined(CONFIG_SONYPI) || defined(CONFIG_SONYPI_MODULE)
/* /*
* Check for a Sony Vaio system in order to enable the use of * Check for a Sony Vaio system
* the sonypi driver (we don't want this driver to be used on
* other systems, even if they have the good PCI IDs).
* *
* This one isn't a bug detect for those who asked, we simply want to * On a Sony system we want to enable the use of the sonypi
* activate Sony specific goodies like the camera and jogdial.. * driver for Sony-specific goodies like the camera and jogdial.
* We also want to avoid using certain functions of the PnP BIOS.
*/ */
static __init int sony_vaio_laptop(struct dmi_blacklist *d) static __init int sony_vaio_laptop(struct dmi_blacklist *d)
{ {
if (is_sony_vaio_laptop == 0) if (is_sony_vaio_laptop == 0)
...@@ -333,7 +333,6 @@ static __init int sony_vaio_laptop(struct dmi_blacklist *d) ...@@ -333,7 +333,6 @@ static __init int sony_vaio_laptop(struct dmi_blacklist *d)
} }
return 0; return 0;
} }
#endif
/* /*
* This bios swaps the APM minute reporting bytes over (Many sony laptops * This bios swaps the APM minute reporting bytes over (Many sony laptops
...@@ -359,11 +358,43 @@ static __init int broken_pirq(struct dmi_blacklist *d) ...@@ -359,11 +358,43 @@ static __init int broken_pirq(struct dmi_blacklist *d)
printk(KERN_INFO " *** Possibly defective BIOS detected (irqtable)\n"); printk(KERN_INFO " *** Possibly defective BIOS detected (irqtable)\n");
printk(KERN_INFO " *** Many BIOSes matching this signature have incorrect IRQ routing tables.\n"); printk(KERN_INFO " *** Many BIOSes matching this signature have incorrect IRQ routing tables.\n");
printk(KERN_INFO " *** If you see IRQ problems, in paticular SCSI resets and hangs at boot\n"); printk(KERN_INFO " *** If you see IRQ problems, in paticular SCSI resets and hangs at boot\n");
printk(KERN_INFO " *** contact your vendor and ask about updates.\n"); printk(KERN_INFO " *** contact your hardware vendor and ask about updates.\n");
printk(KERN_INFO " *** Building an SMP kernel may evade the bug some of the time.\n"); printk(KERN_INFO " *** Building an SMP kernel may evade the bug some of the time.\n");
return 0; return 0;
} }
/*
* ASUS K7V-RM has broken ACPI table defining sleep modes
*/
static __init int broken_acpi_Sx(struct dmi_blacklist *d)
{
printk(KERN_WARNING "Detected ASUS mainboard with broken ACPI sleep table\n");
dmi_broken |= BROKEN_ACPI_Sx;
return 0;
}
/*
* Toshiba keyboard likes to repeat keys when they are not repeated.
*/
static __init int broken_toshiba_keyboard(struct dmi_blacklist *d)
{
printk(KERN_WARNING "Toshiba with broken keyboard detected. If your keyboard sometimes generates 3 keypresses instead of one, contact pavel@ucw.cz\n");
return 0;
}
/*
* Toshiba fails to preserve interrupts over S1
*/
static __init int init_ints_after_s1(struct dmi_blacklist *d)
{
printk(KERN_WARNING "Toshiba with broken S1 detected.\n");
dmi_broken |= BROKEN_INIT_AFTER_S1;
return 0;
}
/* /*
* Some Bioses enable the PS/2 mouse (touchpad) at resume, even if it * Some Bioses enable the PS/2 mouse (touchpad) at resume, even if it
* was disabled before the suspend. Linux gets terribly confused by that. * was disabled before the suspend. Linux gets terribly confused by that.
...@@ -380,11 +411,20 @@ static __init int broken_ps2_resume(struct dmi_blacklist *d) ...@@ -380,11 +411,20 @@ static __init int broken_ps2_resume(struct dmi_blacklist *d)
pm_kbd_request_override = pckbd_pm_resume; pm_kbd_request_override = pckbd_pm_resume;
printk(KERN_INFO "%s machine detected. Mousepad Resume Bug workaround enabled.\n", d->ident); printk(KERN_INFO "%s machine detected. Mousepad Resume Bug workaround enabled.\n", d->ident);
} }
#endif #endif
return 0; return 0;
} }
/*
* Simple "print if true" callback
*/
static __init int print_if_true(struct dmi_blacklist *d)
{
printk("%s\n", d->ident);
return 0;
}
/* /*
* Process the DMI blacklists * Process the DMI blacklists
...@@ -428,10 +468,6 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={ ...@@ -428,10 +468,6 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
MATCH(DMI_PRODUCT_NAME, "PowerEdge 300/"), MATCH(DMI_PRODUCT_NAME, "PowerEdge 300/"),
NO_MATCH, NO_MATCH NO_MATCH, NO_MATCH
} }, } },
{ set_apm_ints, "IBM", { /* Allow interrupts during suspend on IBM laptops */
MATCH(DMI_SYS_VENDOR, "IBM"),
NO_MATCH, NO_MATCH, NO_MATCH
} },
{ set_apm_ints, "Dell Inspiron", { /* Allow interrupts during suspend on Dell Inspiron laptops*/ { set_apm_ints, "Dell Inspiron", { /* Allow interrupts during suspend on Dell Inspiron laptops*/
MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"), MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
MATCH(DMI_PRODUCT_NAME, "Inspiron 4000"), MATCH(DMI_PRODUCT_NAME, "Inspiron 4000"),
...@@ -459,13 +495,11 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={ ...@@ -459,13 +495,11 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
MATCH(DMI_BIOS_VENDOR,"SystemSoft"), MATCH(DMI_BIOS_VENDOR,"SystemSoft"),
MATCH(DMI_BIOS_VERSION,"Version R2.08") MATCH(DMI_BIOS_VERSION,"Version R2.08")
} }, } },
#if defined(CONFIG_SONYPI) || defined(CONFIG_SONYPI_MODULE)
{ sony_vaio_laptop, "Sony Vaio", { /* This is a Sony Vaio laptop */ { sony_vaio_laptop, "Sony Vaio", { /* This is a Sony Vaio laptop */
MATCH(DMI_SYS_VENDOR, "Sony Corporation"), MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
MATCH(DMI_PRODUCT_NAME, "PCG-"), MATCH(DMI_PRODUCT_NAME, "PCG-"),
NO_MATCH, NO_MATCH, NO_MATCH, NO_MATCH,
} }, } },
#endif
{ swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-N505X(DE) */ { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-N505X(DE) */
MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"), MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"),
MATCH(DMI_BIOS_VERSION, "R0206H"), MATCH(DMI_BIOS_VERSION, "R0206H"),
...@@ -536,6 +570,11 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={ ...@@ -536,6 +570,11 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0125.P13"), MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0125.P13"),
NO_MATCH, NO_MATCH NO_MATCH, NO_MATCH
} }, } },
{ broken_pirq, "l44GX Bios", { /* Bad $PIR */
MATCH(DMI_BIOS_VENDOR, "Intel Corporation"),
MATCH(DMI_BIOS_VERSION,"L440GX0.86B.0066.P07.9906041405"),
NO_MATCH, NO_MATCH
} },
/* Intel in disgiuse - In this case they can't hide and they don't run /* Intel in disgiuse - In this case they can't hide and they don't run
too well either... */ too well either... */
...@@ -543,6 +582,37 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={ ...@@ -543,6 +582,37 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
MATCH(DMI_PRODUCT_NAME, "Dell PowerEdge 8450"), MATCH(DMI_PRODUCT_NAME, "Dell PowerEdge 8450"),
NO_MATCH, NO_MATCH, NO_MATCH NO_MATCH, NO_MATCH, NO_MATCH
} }, } },
{ broken_acpi_Sx, "ASUS K7V-RM", { /* Bad ACPI Sx table */
MATCH(DMI_BIOS_VERSION,"ASUS K7V-RM ACPI BIOS Revision 1003A"),
MATCH(DMI_BOARD_NAME, "<K7V-RM>"),
NO_MATCH, NO_MATCH
} },
{ broken_toshiba_keyboard, "Toshiba Satellite 4030cdt", { /* Keyboard generates spurious repeats */
MATCH(DMI_PRODUCT_NAME, "S4030CDT/4.3"),
NO_MATCH, NO_MATCH, NO_MATCH
} },
{ init_ints_after_s1, "Toshiba Satellite 4030cdt", { /* Reinitialization of 8259 is needed after S1 resume */
MATCH(DMI_PRODUCT_NAME, "S4030CDT/4.3"),
NO_MATCH, NO_MATCH, NO_MATCH
} },
{ print_if_true, KERN_WARNING "IBM T23 - BIOS 1.03b+ and controller firmware 1.02+ may be needed for Linux APM.", {
MATCH(DMI_SYS_VENDOR, "IBM"),
MATCH(DMI_BIOS_VERSION, "1AET38WW (1.01b)"),
NO_MATCH, NO_MATCH
} },
/*
* Generic per vendor APM settings
*/
{ set_apm_ints, "IBM", { /* Allow interrupts during suspend on IBM laptops */
MATCH(DMI_SYS_VENDOR, "IBM"),
NO_MATCH, NO_MATCH, NO_MATCH
} },
{ NULL, } { NULL, }
}; };
......
...@@ -487,6 +487,13 @@ static struct ioctl32_list ioctl32_handler_table[] = { ...@@ -487,6 +487,13 @@ static struct ioctl32_list ioctl32_handler_table[] = {
IOCTL32_HANDLER(SIOCADDRT, routing_ioctl), IOCTL32_HANDLER(SIOCADDRT, routing_ioctl),
IOCTL32_HANDLER(SIOCDELRT, routing_ioctl), IOCTL32_HANDLER(SIOCDELRT, routing_ioctl),
IOCTL32_HANDLER(SIOCBONDENSLAVE, bond_ioctl),
IOCTL32_HANDLER(SIOCBONDRELEASE, bond_ioctl),
IOCTL32_HANDLER(SIOCBONDSETHWADDR, bond_ioctl),
IOCTL32_HANDLER(SIOCBONDSLAVEINFOQUERY, bond_ioctl),
IOCTL32_HANDLER(SIOCBONDINFOQUERY, bond_ioctl),
IOCTL32_HANDLER(SIOCBONDCHANGEACTIVE, bond_ioctl),
IOCTL32_HANDLER(EXT2_IOC32_GETFLAGS, do_ext2_ioctl), IOCTL32_HANDLER(EXT2_IOC32_GETFLAGS, do_ext2_ioctl),
IOCTL32_HANDLER(EXT2_IOC32_SETFLAGS, do_ext2_ioctl), IOCTL32_HANDLER(EXT2_IOC32_SETFLAGS, do_ext2_ioctl),
IOCTL32_HANDLER(EXT2_IOC32_GETVERSION, do_ext2_ioctl), IOCTL32_HANDLER(EXT2_IOC32_GETVERSION, do_ext2_ioctl),
......
/* $Id: ioctl32.c,v 1.127 2001/11/01 23:54:19 davem Exp $ /* $Id: ioctl32.c,v 1.131 2001/11/07 01:13:23 davem Exp $
* ioctl32.c: Conversion between 32bit and 64bit native ioctls. * ioctl32.c: Conversion between 32bit and 64bit native ioctls.
* *
* Copyright (C) 1997-2000 Jakub Jelinek (jakub@redhat.com) * Copyright (C) 1997-2000 Jakub Jelinek (jakub@redhat.com)
...@@ -71,6 +71,7 @@ ...@@ -71,6 +71,7 @@
#include <asm/audioio.h> #include <asm/audioio.h>
#include <linux/ethtool.h> #include <linux/ethtool.h>
#include <linux/mii.h> #include <linux/mii.h>
#include <linux/if_bonding.h>
#include <asm/display7seg.h> #include <asm/display7seg.h>
#include <asm/watchdog.h> #include <asm/watchdog.h>
#include <asm/module.h> #include <asm/module.h>
...@@ -592,6 +593,58 @@ static int ethtool_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg) ...@@ -592,6 +593,58 @@ static int ethtool_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg)
return err; return err;
} }
static int bond_ioctl(unsigned long fd, unsigned int cmd, unsigned long arg)
{
struct ifreq ifr;
mm_segment_t old_fs;
int err, len;
u32 data;
if (copy_from_user(&ifr, (struct ifreq32 *)arg, sizeof(struct ifreq32)))
return -EFAULT;
ifr.ifr_data = (__kernel_caddr_t)get_free_page(GFP_KERNEL);
if (!ifr.ifr_data)
return -EAGAIN;
switch (cmd) {
case SIOCBONDENSLAVE:
case SIOCBONDRELEASE:
case SIOCBONDSETHWADDR:
case SIOCBONDCHANGEACTIVE:
len = IFNAMSIZ * sizeof(char);
break;
case SIOCBONDSLAVEINFOQUERY:
len = sizeof(struct ifslave);
break;
case SIOCBONDINFOQUERY:
len = sizeof(struct ifbond);
break;
default:
err = -EINVAL;
goto out;
};
__get_user(data, &(((struct ifreq32 *)arg)->ifr_ifru.ifru_data));
if (copy_from_user(ifr.ifr_data, (char *)A(data), len)) {
err = -EFAULT;
goto out;
}
old_fs = get_fs();
set_fs (KERNEL_DS);
err = sys_ioctl (fd, cmd, (unsigned long)&ifr);
set_fs (old_fs);
if (!err) {
len = copy_to_user((char *)A(data), ifr.ifr_data, len);
if (len)
err = -EFAULT;
}
out:
free_page((unsigned long)ifr.ifr_data);
return err;
}
static inline int dev_ifsioc(unsigned int fd, unsigned int cmd, unsigned long arg) static inline int dev_ifsioc(unsigned int fd, unsigned int cmd, unsigned long arg)
{ {
struct ifreq ifr; struct ifreq ifr;
...@@ -4488,6 +4541,12 @@ HANDLE_IOCTL(SIOCGPPPVER, dev_ifsioc) ...@@ -4488,6 +4541,12 @@ HANDLE_IOCTL(SIOCGPPPVER, dev_ifsioc)
HANDLE_IOCTL(SIOCGIFTXQLEN, dev_ifsioc) HANDLE_IOCTL(SIOCGIFTXQLEN, dev_ifsioc)
HANDLE_IOCTL(SIOCSIFTXQLEN, dev_ifsioc) HANDLE_IOCTL(SIOCSIFTXQLEN, dev_ifsioc)
HANDLE_IOCTL(SIOCETHTOOL, ethtool_ioctl) HANDLE_IOCTL(SIOCETHTOOL, ethtool_ioctl)
HANDLE_IOCTL(SIOCBONDENSLAVE, bond_ioctl)
HANDLE_IOCTL(SIOCBONDRELEASE, bond_ioctl)
HANDLE_IOCTL(SIOCBONDSETHWADDR, bond_ioctl)
HANDLE_IOCTL(SIOCBONDSLAVEINFOQUERY, bond_ioctl)
HANDLE_IOCTL(SIOCBONDINFOQUERY, bond_ioctl)
HANDLE_IOCTL(SIOCBONDCHANGEACTIVE, bond_ioctl)
HANDLE_IOCTL(SIOCADDRT, routing_ioctl) HANDLE_IOCTL(SIOCADDRT, routing_ioctl)
HANDLE_IOCTL(SIOCDELRT, routing_ioctl) HANDLE_IOCTL(SIOCDELRT, routing_ioctl)
/* Note SIOCRTMSG is no longer, so this is safe and * the user would have seen just an -EINVAL anyways. */ /* Note SIOCRTMSG is no longer, so this is safe and * the user would have seen just an -EINVAL anyways. */
......
...@@ -40,6 +40,11 @@ if [ "$CONFIG_PCI" = "y" ]; then ...@@ -40,6 +40,11 @@ if [ "$CONFIG_PCI" = "y" ]; then
bool ' Use suni PHY driver (155Mbps)' CONFIG_ATM_NICSTAR_USE_SUNI bool ' Use suni PHY driver (155Mbps)' CONFIG_ATM_NICSTAR_USE_SUNI
bool ' Use IDT77015 PHY driver (25Mbps)' CONFIG_ATM_NICSTAR_USE_IDT77105 bool ' Use IDT77015 PHY driver (25Mbps)' CONFIG_ATM_NICSTAR_USE_IDT77105
fi fi
tristate 'IDT 77252 (NICStAR II)' CONFIG_ATM_IDT77252
if [ "$CONFIG_ATM_IDT77252" != "n" ]; then
bool ' Receive ALL cells in raw queue' CONFIG_ATM_IDT77252_RCV_ALL
define_bool CONFIG_ATM_IDT77252_USE_SUNI y
fi
tristate 'Madge Ambassador (Collage PCI 155 Server)' CONFIG_ATM_AMBASSADOR tristate 'Madge Ambassador (Collage PCI 155 Server)' CONFIG_ATM_AMBASSADOR
if [ "$CONFIG_ATM_AMBASSADOR" != "n" ]; then if [ "$CONFIG_ATM_AMBASSADOR" != "n" ]; then
bool ' Enable debugging messages' CONFIG_ATM_AMBASSADOR_DEBUG bool ' Enable debugging messages' CONFIG_ATM_AMBASSADOR_DEBUG
......
...@@ -12,6 +12,7 @@ obj-y := atmdev_init.o ...@@ -12,6 +12,7 @@ obj-y := atmdev_init.o
obj-$(CONFIG_ATM_ENI) += eni.o suni.o obj-$(CONFIG_ATM_ENI) += eni.o suni.o
obj-$(CONFIG_ATM_ZATM) += zatm.o uPD98402.o obj-$(CONFIG_ATM_ZATM) += zatm.o uPD98402.o
obj-$(CONFIG_ATM_NICSTAR) += nicstar.o obj-$(CONFIG_ATM_NICSTAR) += nicstar.o
obj-$(CONFIG_ATM_IDT77252) += idt77252.o
ifeq ($(CONFIG_ATM_NICSTAR_USE_SUNI),y) ifeq ($(CONFIG_ATM_NICSTAR_USE_SUNI),y)
obj-$(CONFIG_ATM_NICSTAR) += suni.o obj-$(CONFIG_ATM_NICSTAR) += suni.o
...@@ -21,6 +22,10 @@ ifeq ($(CONFIG_ATM_NICSTAR_USE_IDT77105),y) ...@@ -21,6 +22,10 @@ ifeq ($(CONFIG_ATM_NICSTAR_USE_IDT77105),y)
obj-$(CONFIG_ATM_NICSTAR) += idt77105.o obj-$(CONFIG_ATM_NICSTAR) += idt77105.o
endif endif
ifeq ($(CONFIG_ATM_IDT77252_USE_SUNI),y)
obj-$(CONFIG_ATM_IDT77252) += suni.o
endif
obj-$(CONFIG_ATM_HORIZON) += horizon.o obj-$(CONFIG_ATM_HORIZON) += horizon.o
obj-$(CONFIG_ATM_AMBASSADOR) += ambassador.o obj-$(CONFIG_ATM_AMBASSADOR) += ambassador.o
obj-$(CONFIG_ATM_TCP) += atmtcp.o obj-$(CONFIG_ATM_TCP) += atmtcp.o
......
...@@ -13,6 +13,9 @@ extern int zatm_detect(void); ...@@ -13,6 +13,9 @@ extern int zatm_detect(void);
#ifdef CONFIG_ATM_NICSTAR #ifdef CONFIG_ATM_NICSTAR
extern int nicstar_detect(void); extern int nicstar_detect(void);
#endif #endif
#ifdef CONFIG_ATM_IDT77252
extern int idt77252_detect(void);
#endif
#ifdef CONFIG_ATM_AMBASSADOR #ifdef CONFIG_ATM_AMBASSADOR
extern int amb_detect(void); extern int amb_detect(void);
#endif #endif
...@@ -47,6 +50,9 @@ int __init atmdev_init(void) ...@@ -47,6 +50,9 @@ int __init atmdev_init(void)
#ifdef CONFIG_ATM_NICSTAR #ifdef CONFIG_ATM_NICSTAR
devs += nicstar_detect(); devs += nicstar_detect();
#endif #endif
#ifdef CONFIG_ATM_IDT77252
devs += idt77252_detect();
#endif
#ifdef CONFIG_ATM_AMBASSADOR #ifdef CONFIG_ATM_AMBASSADOR
devs += amb_detect(); devs += amb_detect();
#endif #endif
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -207,7 +207,6 @@ static int lo_send(struct loop_device *lo, struct buffer_head *bh, int bsize, ...@@ -207,7 +207,6 @@ static int lo_send(struct loop_device *lo, struct buffer_head *bh, int bsize,
index++; index++;
pos += size; pos += size;
UnlockPage(page); UnlockPage(page);
deactivate_page(page);
page_cache_release(page); page_cache_release(page);
} }
return 0; return 0;
...@@ -218,7 +217,6 @@ static int lo_send(struct loop_device *lo, struct buffer_head *bh, int bsize, ...@@ -218,7 +217,6 @@ static int lo_send(struct loop_device *lo, struct buffer_head *bh, int bsize,
kunmap(page); kunmap(page);
unlock: unlock:
UnlockPage(page); UnlockPage(page);
deactivate_page(page);
page_cache_release(page); page_cache_release(page);
fail: fail:
return -1; return -1;
......
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
#include <linux/mca.h> #include <linux/mca.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/module.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/io.h> #include <asm/io.h>
......
...@@ -423,7 +423,7 @@ int DRM(mmap_dma)(struct file *filp, struct vm_area_struct *vma) ...@@ -423,7 +423,7 @@ int DRM(mmap_dma)(struct file *filp, struct vm_area_struct *vma)
unlock_kernel(); unlock_kernel();
vma->vm_ops = &DRM(vm_dma_ops); vma->vm_ops = &DRM(vm_dma_ops);
vma->vm_flags |= VM_LOCKED | VM_SHM; /* Don't swap */ vma->vm_flags |= VM_RESERVED; /* Don't swap */
#if LINUX_VERSION_CODE < 0x020203 /* KERNEL_VERSION(2,2,3) */ #if LINUX_VERSION_CODE < 0x020203 /* KERNEL_VERSION(2,2,3) */
/* In Linux 2.2.3 and above, this is /* In Linux 2.2.3 and above, this is
...@@ -558,7 +558,7 @@ int DRM(mmap)(struct file *filp, struct vm_area_struct *vma) ...@@ -558,7 +558,7 @@ int DRM(mmap)(struct file *filp, struct vm_area_struct *vma)
#endif #endif
/* Don't let this area swap. Change when /* Don't let this area swap. Change when
DRM_KERNEL advisory is supported. */ DRM_KERNEL advisory is supported. */
vma->vm_flags |= VM_LOCKED; vma->vm_flags |= VM_RESERVED;
break; break;
case _DRM_SCATTER_GATHER: case _DRM_SCATTER_GATHER:
vma->vm_ops = &DRM(vm_sg_ops); vma->vm_ops = &DRM(vm_sg_ops);
...@@ -567,12 +567,12 @@ int DRM(mmap)(struct file *filp, struct vm_area_struct *vma) ...@@ -567,12 +567,12 @@ int DRM(mmap)(struct file *filp, struct vm_area_struct *vma)
#else #else
vma->vm_pte = (unsigned long)map; vma->vm_pte = (unsigned long)map;
#endif #endif
vma->vm_flags |= VM_LOCKED; vma->vm_flags |= VM_RESERVED;
break; break;
default: default:
return -EINVAL; /* This should never happen. */ return -EINVAL; /* This should never happen. */
} }
vma->vm_flags |= VM_LOCKED | VM_SHM; /* Don't swap */ vma->vm_flags |= VM_RESERVED; /* Don't swap */
#if LINUX_VERSION_CODE < 0x020203 /* KERNEL_VERSION(2,2,3) */ #if LINUX_VERSION_CODE < 0x020203 /* KERNEL_VERSION(2,2,3) */
/* In Linux 2.2.3 and above, this is /* In Linux 2.2.3 and above, this is
......
...@@ -1284,7 +1284,7 @@ static int __init i2c_init(void) ...@@ -1284,7 +1284,7 @@ static int __init i2c_init(void)
#ifdef CONFIG_I2C_ALGOBIT #ifdef CONFIG_I2C_ALGOBIT
extern int i2c_algo_bit_init(void); extern int i2c_algo_bit_init(void);
#endif #endif
#ifdef CONFIG_I2C_CONFIG_I2C_PHILIPSPAR #ifdef CONFIG_I2C_PHILIPSPAR
extern int i2c_bitlp_init(void); extern int i2c_bitlp_init(void);
#endif #endif
#ifdef CONFIG_I2C_ELV #ifdef CONFIG_I2C_ELV
......
...@@ -873,7 +873,7 @@ static void jedec_flash_chip_scan(struct jedec_private *priv,unsigned long start ...@@ -873,7 +873,7 @@ static void jedec_flash_chip_scan(struct jedec_private *priv,unsigned long start
} }
} }
int __init jedec_probe_init(void) static int __init jedec_probe_init(void)
{ {
register_mtd_chip_driver(&jedec_chipdrv); register_mtd_chip_driver(&jedec_chipdrv);
return 0; return 0;
......
...@@ -422,7 +422,7 @@ static struct mtd_chip_driver jedec_chipdrv = { ...@@ -422,7 +422,7 @@ static struct mtd_chip_driver jedec_chipdrv = {
module: THIS_MODULE module: THIS_MODULE
}; };
int __init jedec_probe_init(void) static int __init jedec_probe_init(void)
{ {
register_mtd_chip_driver(&jedec_chipdrv); register_mtd_chip_driver(&jedec_chipdrv);
return 0; return 0;
......
This diff is collapsed.
...@@ -4186,7 +4186,7 @@ ...@@ -4186,7 +4186,7 @@
14e4 0007 NetXtreme BCM5701 1000BaseSX 14e4 0007 NetXtreme BCM5701 1000BaseSX
14e4 0008 NetXtreme BCM5701 1000BaseTX 14e4 0008 NetXtreme BCM5701 1000BaseTX
14e4 8008 NetXtreme BCM5701 1000BaseTX 14e4 8008 NetXtreme BCM5701 1000BaseTX
1647 NetXtreme BCM5701 Gigabit Ethernet 1647 NetXtreme BCM5703 Gigabit Ethernet
5820 BCM5820 Crypto Accelerator 5820 BCM5820 Crypto Accelerator
14e5 Pixelfusion Ltd 14e5 Pixelfusion Ltd
14e6 SHINING Technology Inc 14e6 SHINING Technology Inc
......
...@@ -44,9 +44,6 @@ ...@@ -44,9 +44,6 @@
#include "zisofs.h" #include "zisofs.h"
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
/* This should probably be global. */ /* This should probably be global. */
static char zisofs_sink_page[PAGE_CACHE_SIZE]; static char zisofs_sink_page[PAGE_CACHE_SIZE];
......
...@@ -349,6 +349,10 @@ extern void __global_restore_flags(unsigned long); ...@@ -349,6 +349,10 @@ extern void __global_restore_flags(unsigned long);
void disable_hlt(void); void disable_hlt(void);
void enable_hlt(void); void enable_hlt(void);
extern unsigned long dmi_broken;
extern int is_sony_vaio_laptop; extern int is_sony_vaio_laptop;
#define BROKEN_ACPI_Sx 0x0001
#define BROKEN_INIT_AFTER_S1 0x0002
#endif #endif
...@@ -113,6 +113,8 @@ extern inline int pci_dma_supported(struct pci_dev *hwdev, u64 mask) ...@@ -113,6 +113,8 @@ extern inline int pci_dma_supported(struct pci_dev *hwdev, u64 mask)
return 1; return 1;
} }
#define pci_dac_dma_supported(dev, mask) (0)
/* Return the index of the PCI controller for device PDEV. */ /* Return the index of the PCI controller for device PDEV. */
#define pci_controller_num(PDEV) (0) #define pci_controller_num(PDEV) (0)
......
...@@ -9,16 +9,94 @@ ...@@ -9,16 +9,94 @@
* (c) Copyright 1999, Thomas Davis, tadavis@lbl.gov * (c) Copyright 1999, Thomas Davis, tadavis@lbl.gov
* *
* This software may be used and distributed according to the terms * This software may be used and distributed according to the terms
* of the GNU General Public License, incorporated herein by reference. * of the GNU Public License, incorporated herein by reference.
* *
*/ */
#ifndef _LINUX_IF_BONDING_H #ifndef _LINUX_IF_BONDING_H
#define _LINUX_IF_BONDING_H #define _LINUX_IF_BONDING_H
#define BOND_ENSLAVE (SIOCDEVPRIVATE) #ifdef __KERNEL__
#define BOND_RELEASE (SIOCDEVPRIVATE + 1) #include <linux/timer.h>
#define BOND_SETHWADDR (SIOCDEVPRIVATE + 2) #include <linux/if.h>
#include <linux/proc_fs.h>
#endif /* __KERNEL__ */
#include <linux/types.h>
/*
* We can remove these ioctl definitions in 2.5. People should use the
* SIOC*** versions of them instead
*/
#define BOND_ENSLAVE_OLD (SIOCDEVPRIVATE)
#define BOND_RELEASE_OLD (SIOCDEVPRIVATE + 1)
#define BOND_SETHWADDR_OLD (SIOCDEVPRIVATE + 2)
#define BOND_SLAVE_INFO_QUERY_OLD (SIOCDEVPRIVATE + 11)
#define BOND_INFO_QUERY_OLD (SIOCDEVPRIVATE + 12)
#define BOND_CHANGE_ACTIVE_OLD (SIOCDEVPRIVATE + 13)
#define BOND_CHECK_MII_STATUS (SIOCGMIIPHY)
#define BOND_MODE_ROUNDROBIN 0
#define BOND_MODE_ACTIVEBACKUP 1
#define BOND_MODE_XOR 2
/* each slave's link has 4 states */
#define BOND_LINK_UP 0 /* link is up and running */
#define BOND_LINK_FAIL 1 /* link has just gone down */
#define BOND_LINK_DOWN 2 /* link has been down for too long time */
#define BOND_LINK_BACK 3 /* link is going back */
/* each slave has several states */
#define BOND_STATE_ACTIVE 0 /* link is active */
#define BOND_STATE_BACKUP 1 /* link is backup */
#define MAX_BONDS 1 /* Maximum number of devices to support */
typedef struct ifbond {
__s32 bond_mode;
__s32 num_slaves;
__s32 miimon;
} ifbond;
typedef struct ifslave
{
__s32 slave_id; /* Used as an IN param to the BOND_SLAVE_INFO_QUERY ioctl */
char slave_name[IFNAMSIZ];
char link;
char state;
__u32 link_failure_count;
} ifslave;
#ifdef __KERNEL__
typedef struct slave {
struct slave *next;
struct slave *prev;
struct net_device *dev;
short delay;
char link; /* one of BOND_LINK_XXXX */
char state; /* one of BOND_STATE_XXXX */
u32 link_failure_count;
} slave_t;
typedef struct bonding {
slave_t *next;
slave_t *prev;
slave_t *current_slave;
__s32 slave_cnt;
rwlock_t lock;
rwlock_t ptrlock;
struct timer_list mii_timer;
struct timer_list arp_timer;
struct net_device_stats *stats;
#ifdef CONFIG_PROC_FS
struct proc_dir_entry *bond_proc_dir;
struct proc_dir_entry *bond_proc_info_file;
#endif /* CONFIG_PROC_FS */
struct bonding *next_bond;
struct net_device *device;
} bonding_t;
#endif /* __KERNEL__ */
#endif /* _LINUX_BOND_H */ #endif /* _LINUX_BOND_H */
......
...@@ -60,9 +60,11 @@ extern unsigned long simple_strtoul(const char *,char **,unsigned int); ...@@ -60,9 +60,11 @@ extern unsigned long simple_strtoul(const char *,char **,unsigned int);
extern long simple_strtol(const char *,char **,unsigned int); extern long simple_strtol(const char *,char **,unsigned int);
extern unsigned long long simple_strtoull(const char *,char **,unsigned int); extern unsigned long long simple_strtoull(const char *,char **,unsigned int);
extern long long simple_strtoll(const char *,char **,unsigned int); extern long long simple_strtoll(const char *,char **,unsigned int);
extern int sprintf(char * buf, const char * fmt, ...); extern int sprintf(char * buf, const char * fmt, ...)
__attribute__ ((format (printf, 2, 3)));
extern int vsprintf(char *buf, const char *, va_list); extern int vsprintf(char *buf, const char *, va_list);
extern int snprintf(char * buf, size_t size, const char *fmt, ...); extern int snprintf(char * buf, size_t size, const char * fmt, ...)
__attribute__ ((format (printf, 3, 4)));
extern int vsnprintf(char *buf, size_t size, const char *fmt, va_list args); extern int vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
extern int sscanf(const char *, const char *, ...) extern int sscanf(const char *, const char *, ...)
......
...@@ -271,8 +271,8 @@ typedef struct page { ...@@ -271,8 +271,8 @@ typedef struct page {
#define PG_uptodate 3 #define PG_uptodate 3
#define PG_dirty 4 #define PG_dirty 4
#define PG_unused 5 #define PG_unused 5
#define PG_active 6 #define PG_lru 6
#define PG_inactive 7 #define PG_active 7
#define PG_slab 8 #define PG_slab 8
#define PG_skip 10 #define PG_skip 10
#define PG_highmem 11 #define PG_highmem 11
...@@ -320,14 +320,10 @@ extern void FASTCALL(set_page_dirty(struct page *)); ...@@ -320,14 +320,10 @@ extern void FASTCALL(set_page_dirty(struct page *));
#define PageActive(page) test_bit(PG_active, &(page)->flags) #define PageActive(page) test_bit(PG_active, &(page)->flags)
#define SetPageActive(page) set_bit(PG_active, &(page)->flags) #define SetPageActive(page) set_bit(PG_active, &(page)->flags)
#define ClearPageActive(page) clear_bit(PG_active, &(page)->flags) #define ClearPageActive(page) clear_bit(PG_active, &(page)->flags)
#define TestandSetPageActive(page) test_and_set_bit(PG_active, &(page)->flags)
#define TestandClearPageActive(page) test_and_clear_bit(PG_active, &(page)->flags) #define PageLRU(page) test_bit(PG_lru, &(page)->flags)
#define TestSetPageLRU(page) test_and_set_bit(PG_lru, &(page)->flags)
#define PageInactive(page) test_bit(PG_inactive, &(page)->flags) #define TestClearPageLRU(page) test_and_clear_bit(PG_lru, &(page)->flags)
#define SetPageInactive(page) set_bit(PG_inactive, &(page)->flags)
#define ClearPageInactive(page) clear_bit(PG_inactive, &(page)->flags)
#define TestandSetPageInactive(page) test_and_set_bit(PG_inactive, &(page)->flags)
#define TestandClearPageInactive(page) test_and_clear_bit(PG_inactive, &(page)->flags)
#ifdef CONFIG_HIGHMEM #ifdef CONFIG_HIGHMEM
#define PageHighMem(page) test_bit(PG_highmem, &(page)->flags) #define PageHighMem(page) test_bit(PG_highmem, &(page)->flags)
......
...@@ -1473,7 +1473,9 @@ ...@@ -1473,7 +1473,9 @@
#define PCI_DEVICE_ID_PANACOM_DUALMODEM 0x0402 #define PCI_DEVICE_ID_PANACOM_DUALMODEM 0x0402
#define PCI_VENDOR_ID_BROADCOM 0x14e4 #define PCI_VENDOR_ID_BROADCOM 0x14e4
#define PCI_DEVICE_ID_TIGON3 0x1644 #define PCI_DEVICE_ID_TIGON3_5700 0x1644
#define PCI_DEVICE_ID_TIGON3_5701 0x1645
#define PCI_DEVICE_ID_TIGON3_5703 0x1647
#define PCI_VENDOR_ID_SYBA 0x1592 #define PCI_VENDOR_ID_SYBA 0x1592
#define PCI_DEVICE_ID_SYBA_2P_EPP 0x0782 #define PCI_DEVICE_ID_SYBA_2P_EPP 0x0782
......
...@@ -105,6 +105,15 @@ ...@@ -105,6 +105,15 @@
#define SIOCGIFVLAN 0x8982 /* 802.1Q VLAN support */ #define SIOCGIFVLAN 0x8982 /* 802.1Q VLAN support */
#define SIOCSIFVLAN 0x8983 /* Set 802.1Q VLAN options */ #define SIOCSIFVLAN 0x8983 /* Set 802.1Q VLAN options */
/* bonding calls */
#define SIOCBONDENSLAVE 0x8990 /* enslave a device to the bond */
#define SIOCBONDRELEASE 0x8991 /* release a slave from the bond*/
#define SIOCBONDSETHWADDR 0x8992 /* set the hw addr of the bond */
#define SIOCBONDSLAVEINFOQUERY 0x8993 /* rtn info about slave state */
#define SIOCBONDINFOQUERY 0x8994 /* rtn info about bond state */
#define SIOCBONDCHANGEACTIVE 0x8995 /* update to a new active slave */
/* Device private ioctl calls */ /* Device private ioctl calls */
/* /*
......
...@@ -166,9 +166,9 @@ extern void FASTCALL(mark_page_accessed(struct page *)); ...@@ -166,9 +166,9 @@ extern void FASTCALL(mark_page_accessed(struct page *));
*/ */
#define DEBUG_LRU_PAGE(page) \ #define DEBUG_LRU_PAGE(page) \
do { \ do { \
if (PageActive(page)) \ if (!PageLRU(page)) \
BUG(); \ BUG(); \
if (PageInactive(page)) \ if (PageActive(page)) \
BUG(); \ BUG(); \
if (page_count(page) == 0) \ if (page_count(page) == 0) \
BUG(); \ BUG(); \
...@@ -185,7 +185,6 @@ do { \ ...@@ -185,7 +185,6 @@ do { \
#define add_page_to_inactive_list(page) \ #define add_page_to_inactive_list(page) \
do { \ do { \
DEBUG_LRU_PAGE(page); \ DEBUG_LRU_PAGE(page); \
SetPageInactive(page); \
list_add(&(page)->lru, &inactive_list); \ list_add(&(page)->lru, &inactive_list); \
nr_inactive_pages++; \ nr_inactive_pages++; \
} while (0) } while (0)
...@@ -200,7 +199,6 @@ do { \ ...@@ -200,7 +199,6 @@ do { \
#define del_page_from_inactive_list(page) \ #define del_page_from_inactive_list(page) \
do { \ do { \
list_del(&(page)->lru); \ list_del(&(page)->lru); \
ClearPageInactive(page); \
nr_inactive_pages--; \ nr_inactive_pages--; \
} while (0) } while (0)
......
...@@ -80,9 +80,9 @@ static void __free_pages_ok (struct page *page, unsigned int order) ...@@ -80,9 +80,9 @@ static void __free_pages_ok (struct page *page, unsigned int order)
BUG(); BUG();
if (PageLocked(page)) if (PageLocked(page))
BUG(); BUG();
if (PageActive(page)) if (PageLRU(page))
BUG(); BUG();
if (PageInactive(page)) if (PageActive(page))
BUG(); BUG();
page->flags &= ~((1<<PG_referenced) | (1<<PG_dirty)); page->flags &= ~((1<<PG_referenced) | (1<<PG_dirty));
...@@ -203,7 +203,10 @@ static struct page * rmqueue(zone_t *zone, unsigned int order) ...@@ -203,7 +203,10 @@ static struct page * rmqueue(zone_t *zone, unsigned int order)
set_page_count(page, 1); set_page_count(page, 1);
if (BAD_RANGE(zone,page)) if (BAD_RANGE(zone,page))
BUG(); BUG();
DEBUG_LRU_PAGE(page); if (PageLRU(page))
BUG();
if (PageActive(page))
BUG();
return page; return page;
} }
curr_order++; curr_order++;
...@@ -268,9 +271,9 @@ static struct page * balance_classzone(zone_t * classzone, unsigned int gfp_mask ...@@ -268,9 +271,9 @@ static struct page * balance_classzone(zone_t * classzone, unsigned int gfp_mask
BUG(); BUG();
if (PageLocked(page)) if (PageLocked(page))
BUG(); BUG();
if (PageActive(page)) if (PageLRU(page))
BUG(); BUG();
if (PageInactive(page)) if (PageActive(page))
BUG(); BUG();
if (PageDirty(page)) if (PageDirty(page))
BUG(); BUG();
...@@ -425,7 +428,7 @@ unsigned long get_zeroed_page(unsigned int gfp_mask) ...@@ -425,7 +428,7 @@ unsigned long get_zeroed_page(unsigned int gfp_mask)
void page_cache_release(struct page *page) void page_cache_release(struct page *page)
{ {
if (!PageReserved(page) && put_page_testzero(page)) { if (!PageReserved(page) && put_page_testzero(page)) {
if (PageActive(page) || PageInactive(page)) if (PageLRU(page))
lru_cache_del(page); lru_cache_del(page);
__free_pages_ok(page, 0); __free_pages_ok(page, 0);
} }
......
...@@ -38,7 +38,7 @@ pager_daemon_t pager_daemon = { ...@@ -38,7 +38,7 @@ pager_daemon_t pager_daemon = {
*/ */
static inline void activate_page_nolock(struct page * page) static inline void activate_page_nolock(struct page * page)
{ {
if (PageInactive(page)) { if (PageLRU(page) && !PageActive(page)) {
del_page_from_inactive_list(page); del_page_from_inactive_list(page);
add_page_to_active_list(page); add_page_to_active_list(page);
} }
...@@ -57,7 +57,7 @@ void activate_page(struct page * page) ...@@ -57,7 +57,7 @@ void activate_page(struct page * page)
*/ */
void lru_cache_add(struct page * page) void lru_cache_add(struct page * page)
{ {
if (!PageActive(page) && !PageInactive(page)) { if (!TestSetPageLRU(page)) {
spin_lock(&pagemap_lru_lock); spin_lock(&pagemap_lru_lock);
add_page_to_inactive_list(page); add_page_to_inactive_list(page);
spin_unlock(&pagemap_lru_lock); spin_unlock(&pagemap_lru_lock);
...@@ -73,12 +73,12 @@ void lru_cache_add(struct page * page) ...@@ -73,12 +73,12 @@ void lru_cache_add(struct page * page)
*/ */
void __lru_cache_del(struct page * page) void __lru_cache_del(struct page * page)
{ {
if (PageActive(page)) { if (TestClearPageLRU(page)) {
del_page_from_active_list(page); if (PageActive(page)) {
} else if (PageInactive(page)) { del_page_from_active_list(page);
del_page_from_inactive_list(page); } else {
} else { del_page_from_inactive_list(page);
// printk("VM: __lru_cache_del, found unknown page ?!\n"); }
} }
} }
......
...@@ -347,7 +347,9 @@ static int shrink_cache(int nr_pages, zone_t * classzone, unsigned int gfp_mask, ...@@ -347,7 +347,9 @@ static int shrink_cache(int nr_pages, zone_t * classzone, unsigned int gfp_mask,
page = list_entry(entry, struct page, lru); page = list_entry(entry, struct page, lru);
if (unlikely(!PageInactive(page))) if (unlikely(!PageLRU(page)))
BUG();
if (unlikely(PageActive(page)))
BUG(); BUG();
list_del(entry); list_del(entry);
......
...@@ -565,11 +565,11 @@ int dev_alloc_name(struct net_device *dev, const char *name) ...@@ -565,11 +565,11 @@ int dev_alloc_name(struct net_device *dev, const char *name)
/* /*
* Verify the string as this thing may have come from * Verify the string as this thing may have come from
* the user. There must be one "%d" and no other "%" * the user. There must be either one "%d" and no other "%"
* characters. * characters, or no "%" characters at all.
*/ */
p = strchr(name, '%'); p = strchr(name, '%');
if (!p || p[1] != 'd' || strchr(p+2, '%')) if (p && (p[1] != 'd' || strchr(p+2, '%')))
return -EINVAL; return -EINVAL;
/* /*
...@@ -2221,6 +2221,12 @@ static int dev_ifsioc(struct ifreq *ifr, unsigned int cmd) ...@@ -2221,6 +2221,12 @@ static int dev_ifsioc(struct ifreq *ifr, unsigned int cmd)
default: default:
if ((cmd >= SIOCDEVPRIVATE && if ((cmd >= SIOCDEVPRIVATE &&
cmd <= SIOCDEVPRIVATE + 15) || cmd <= SIOCDEVPRIVATE + 15) ||
cmd == SIOCBONDENSLAVE ||
cmd == SIOCBONDRELEASE ||
cmd == SIOCBONDSETHWADDR ||
cmd == SIOCBONDSLAVEINFOQUERY ||
cmd == SIOCBONDINFOQUERY ||
cmd == SIOCBONDCHANGEACTIVE ||
cmd == SIOCETHTOOL || cmd == SIOCETHTOOL ||
cmd == SIOCGMIIPHY || cmd == SIOCGMIIPHY ||
cmd == SIOCGMIIREG || cmd == SIOCGMIIREG ||
...@@ -2372,6 +2378,12 @@ int dev_ioctl(unsigned int cmd, void *arg) ...@@ -2372,6 +2378,12 @@ int dev_ioctl(unsigned int cmd, void *arg)
case SIOCSIFTXQLEN: case SIOCSIFTXQLEN:
case SIOCSIFNAME: case SIOCSIFNAME:
case SIOCSMIIREG: case SIOCSMIIREG:
case SIOCBONDENSLAVE:
case SIOCBONDRELEASE:
case SIOCBONDSETHWADDR:
case SIOCBONDSLAVEINFOQUERY:
case SIOCBONDINFOQUERY:
case SIOCBONDCHANGEACTIVE:
if (!capable(CAP_NET_ADMIN)) if (!capable(CAP_NET_ADMIN))
return -EPERM; return -EPERM;
dev_load(ifr.ifr_name); dev_load(ifr.ifr_name);
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* Alan Cox, <alan@redhat.com> * Alan Cox, <alan@redhat.com>
* *
* Version: $Id: icmp.c,v 1.81 2001/09/01 00:31:50 davem Exp $ * Version: $Id: icmp.c,v 1.82 2001/11/01 23:44:31 davem Exp $
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
...@@ -139,7 +139,7 @@ struct icmp_err icmp_err_convert[] = { ...@@ -139,7 +139,7 @@ struct icmp_err icmp_err_convert[] = {
{ EHOSTUNREACH, 1 } /* ICMP_PREC_CUTOFF */ { EHOSTUNREACH, 1 } /* ICMP_PREC_CUTOFF */
}; };
/* Control parameters for ECHO relies. */ /* Control parameters for ECHO replies. */
int sysctl_icmp_echo_ignore_all; int sysctl_icmp_echo_ignore_all;
int sysctl_icmp_echo_ignore_broadcasts; int sysctl_icmp_echo_ignore_broadcasts;
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* *
* The Internet Protocol (IP) module. * The Internet Protocol (IP) module.
* *
* Version: $Id: ip_input.c,v 1.53 2000/12/18 19:01:50 davem Exp $ * Version: $Id: ip_input.c,v 1.54 2001/11/06 22:33:52 davem Exp $
* *
* Authors: Ross Biro, <bir7@leland.Stanford.Edu> * Authors: Ross Biro, <bir7@leland.Stanford.Edu>
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
...@@ -383,7 +383,7 @@ static inline int ip_rcv_finish(struct sk_buff *skb) ...@@ -383,7 +383,7 @@ static inline int ip_rcv_finish(struct sk_buff *skb)
*/ */
int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt) int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt)
{ {
struct iphdr *iph = skb->nh.iph; struct iphdr *iph;
/* When the interface is in promisc. mode, drop all the crap /* When the interface is in promisc. mode, drop all the crap
* that it receives, do not try to analyse it. * that it receives, do not try to analyse it.
...@@ -418,6 +418,8 @@ int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt) ...@@ -418,6 +418,8 @@ int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt)
if (!pskb_may_pull(skb, iph->ihl*4)) if (!pskb_may_pull(skb, iph->ihl*4))
goto inhdr_error; goto inhdr_error;
iph = skb->nh.iph;
if (ip_fast_csum((u8 *)iph, iph->ihl) != 0) if (ip_fast_csum((u8 *)iph, iph->ihl) != 0)
goto inhdr_error; goto inhdr_error;
......
...@@ -78,12 +78,20 @@ fw_in(unsigned int hooknum, ...@@ -78,12 +78,20 @@ fw_in(unsigned int hooknum,
{ {
int ret = FW_BLOCK; int ret = FW_BLOCK;
u_int16_t redirpt; u_int16_t redirpt;
struct sk_buff *nskb;
/* Assume worse case: any hook could change packet */ /* Assume worse case: any hook could change packet */
(*pskb)->nfcache |= NFC_UNKNOWN | NFC_ALTERED; (*pskb)->nfcache |= NFC_UNKNOWN | NFC_ALTERED;
if ((*pskb)->ip_summed == CHECKSUM_HW) if ((*pskb)->ip_summed == CHECKSUM_HW)
(*pskb)->ip_summed = CHECKSUM_NONE; (*pskb)->ip_summed = CHECKSUM_NONE;
/* Firewall rules can alter TOS: raw socket may have clone of
skb: don't disturb it --RR */
nskb = skb_unshare(*pskb, GFP_ATOMIC);
if (!nskb)
return NF_DROP;
*pskb = nskb;
switch (hooknum) { switch (hooknum) {
case NF_IP_PRE_ROUTING: case NF_IP_PRE_ROUTING:
if (fwops->fw_acct_in) if (fwops->fw_acct_in)
......
...@@ -734,6 +734,15 @@ do_bindings(struct ip_conntrack *ct, ...@@ -734,6 +734,15 @@ do_bindings(struct ip_conntrack *ct,
synchronize_bh()) can vanish. */ synchronize_bh()) can vanish. */
READ_LOCK(&ip_nat_lock); READ_LOCK(&ip_nat_lock);
for (i = 0; i < info->num_manips; i++) { for (i = 0; i < info->num_manips; i++) {
struct sk_buff *nskb;
/* raw socket may have clone of skb: don't disturb it --RR */
nskb = skb_unshare(*pskb, GFP_ATOMIC);
if (!nskb) {
READ_UNLOCK(&ip_nat_lock);
return NF_DROP;
}
*pskb = nskb;
if (info->manips[i].direction == dir if (info->manips[i].direction == dir
&& info->manips[i].hooknum == hooknum) { && info->manips[i].hooknum == hooknum) {
DEBUGP("Mangling %p: %s to %u.%u.%u.%u %u\n", DEBUGP("Mangling %p: %s to %u.%u.%u.%u %u\n",
......
...@@ -48,6 +48,13 @@ ipt_tcpmss_target(struct sk_buff **pskb, ...@@ -48,6 +48,13 @@ ipt_tcpmss_target(struct sk_buff **pskb,
u_int16_t tcplen, newtotlen, oldval, newmss; u_int16_t tcplen, newtotlen, oldval, newmss;
unsigned int i; unsigned int i;
u_int8_t *opt; u_int8_t *opt;
struct sk_buff *nskb;
/* raw socket may have clone of skb: don't disturb it --RR */
nskb = skb_unshare(*pskb, GFP_ATOMIC);
if (!nskb)
return NF_DROP;
*pskb = nskb;
tcplen = (*pskb)->len - iph->ihl*4; tcplen = (*pskb)->len - iph->ihl*4;
......
...@@ -19,8 +19,15 @@ target(struct sk_buff **pskb, ...@@ -19,8 +19,15 @@ target(struct sk_buff **pskb,
const struct ipt_tos_target_info *tosinfo = targinfo; const struct ipt_tos_target_info *tosinfo = targinfo;
if ((iph->tos & IPTOS_TOS_MASK) != tosinfo->tos) { if ((iph->tos & IPTOS_TOS_MASK) != tosinfo->tos) {
struct sk_buff *nskb;
u_int16_t diffs[2]; u_int16_t diffs[2];
/* raw socket may have clone of skb: don't disturb it --RR */
nskb = skb_unshare(*pskb, GFP_ATOMIC);
if (!nskb)
return NF_DROP;
*pskb = nskb;
diffs[0] = htons(iph->tos) ^ 0xFFFF; diffs[0] = htons(iph->tos) ^ 0xFFFF;
iph->tos = (iph->tos & IPTOS_PREC_MASK) | tosinfo->tos; iph->tos = (iph->tos & IPTOS_PREC_MASK) | tosinfo->tos;
diffs[1] = htons(iph->tos); diffs[1] = htons(iph->tos);
......
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