Only in work-2.4.9-ac2: .config Only in work-2.4.9-ac2: .config.old Only in work-2.4.9-ac2: .depend Only in work-2.4.9-ac2: .hdepend Only in work-2.4.9-ac2: .version diff -ur /md0/kernels/2.4/v2.4.9-ac2/Documentation/Configure.help work-2.4.9-ac2/Documentation/Configure.help --- /md0/kernels/2.4/v2.4.9-ac2/Documentation/Configure.help Mon Aug 27 15:08:38 2001 +++ work-2.4.9-ac2/Documentation/Configure.help Mon Aug 27 17:45:09 2001 @@ -21754,6 +21754,14 @@ . The module will be called nsc-ircc.o. +National Semiconductor DP83820 series driver +CONFIG_NS83820 + This is a driver for the National Semiconductor DP83820 series + of gigabit ethernet MACs. Cards using this chipset include + the D-Link DGE-500T, PureData's PDP8023Z-TG, SMC's SMC9462TX, + SOHO-GA2000T, SOHO-GA2500T. The driver supports the use of + zero copy. + Toshiba Type-O IR Port device driver CONFIG_TOSHIBA_FIR Say Y here if you want to build support for the Toshiba Type-O IR Only in work-2.4.9-ac2: System.map Only in work-2.4.9-ac2/arch/i386/boot: bbootsect Only in work-2.4.9-ac2/arch/i386/boot: bbootsect.o Only in work-2.4.9-ac2/arch/i386/boot: bbootsect.s Only in work-2.4.9-ac2/arch/i386/boot: bsetup Only in work-2.4.9-ac2/arch/i386/boot: bsetup.o Only in work-2.4.9-ac2/arch/i386/boot: bsetup.s Only in work-2.4.9-ac2/arch/i386/boot: bzImage Only in work-2.4.9-ac2/arch/i386/boot/compressed: bvmlinux Only in work-2.4.9-ac2/arch/i386/boot/compressed: bvmlinux.out Only in work-2.4.9-ac2/arch/i386/boot/compressed: head.o Only in work-2.4.9-ac2/arch/i386/boot/compressed: misc.o Only in work-2.4.9-ac2/arch/i386/boot/compressed: piggy.o Only in work-2.4.9-ac2/arch/i386/boot/tools: build Only in work-2.4.9-ac2/arch/i386/kernel: .apic.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .bluesmoke.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .bootflag.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .depend Only in work-2.4.9-ac2/arch/i386/kernel: .dmi_scan.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .i386_ksyms.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .i387.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .i8259.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .init_task.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .io_apic.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .ioport.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .irq.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .kernel.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .ldt.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .mpparse.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .mtrr.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .nmi.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .pci-dma.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .pci-i386.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .pci-irq.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .pci-pc.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .process.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .ptrace.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .semaphore.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .setup.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .signal.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .smp.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .smpboot.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .sys_i386.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .time.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .traps.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: .vm86.o.flags Only in work-2.4.9-ac2/arch/i386/kernel: apic.o Only in work-2.4.9-ac2/arch/i386/kernel: bluesmoke.o Only in work-2.4.9-ac2/arch/i386/kernel: bootflag.o Only in work-2.4.9-ac2/arch/i386/kernel: dmi_scan.o Only in work-2.4.9-ac2/arch/i386/kernel: entry.o Only in work-2.4.9-ac2/arch/i386/kernel: head.o Only in work-2.4.9-ac2/arch/i386/kernel: i386_ksyms.o Only in work-2.4.9-ac2/arch/i386/kernel: i387.o Only in work-2.4.9-ac2/arch/i386/kernel: i8259.o Only in work-2.4.9-ac2/arch/i386/kernel: init_task.o Only in work-2.4.9-ac2/arch/i386/kernel: io_apic.o Only in work-2.4.9-ac2/arch/i386/kernel: ioport.o Only in work-2.4.9-ac2/arch/i386/kernel: irq.o Only in work-2.4.9-ac2/arch/i386/kernel: kernel.o Only in work-2.4.9-ac2/arch/i386/kernel: ldt.o Only in work-2.4.9-ac2/arch/i386/kernel: mpparse.o Only in work-2.4.9-ac2/arch/i386/kernel: mtrr.o Only in work-2.4.9-ac2/arch/i386/kernel: nmi.o Only in work-2.4.9-ac2/arch/i386/kernel: pci-dma.o Only in work-2.4.9-ac2/arch/i386/kernel: pci-i386.o Only in work-2.4.9-ac2/arch/i386/kernel: pci-irq.o Only in work-2.4.9-ac2/arch/i386/kernel: pci-pc.o Only in work-2.4.9-ac2/arch/i386/kernel: process.o Only in work-2.4.9-ac2/arch/i386/kernel: ptrace.o Only in work-2.4.9-ac2/arch/i386/kernel: semaphore.o Only in work-2.4.9-ac2/arch/i386/kernel: setup.o Only in work-2.4.9-ac2/arch/i386/kernel: signal.o Only in work-2.4.9-ac2/arch/i386/kernel: smp.o Only in work-2.4.9-ac2/arch/i386/kernel: smpboot.o Only in work-2.4.9-ac2/arch/i386/kernel: sys_i386.o Only in work-2.4.9-ac2/arch/i386/kernel: time.o Only in work-2.4.9-ac2/arch/i386/kernel: trampoline.o Only in work-2.4.9-ac2/arch/i386/kernel: traps.o Only in work-2.4.9-ac2/arch/i386/kernel: vm86.o Only in work-2.4.9-ac2/arch/i386/lib: .dec_and_lock.o.flags Only in work-2.4.9-ac2/arch/i386/lib: .delay.o.flags Only in work-2.4.9-ac2/arch/i386/lib: .depend Only in work-2.4.9-ac2/arch/i386/lib: .lib.a.flags Only in work-2.4.9-ac2/arch/i386/lib: .memcpy.o.flags Only in work-2.4.9-ac2/arch/i386/lib: .old-checksum.o.flags Only in work-2.4.9-ac2/arch/i386/lib: .strstr.o.flags Only in work-2.4.9-ac2/arch/i386/lib: .usercopy.o.flags Only in work-2.4.9-ac2/arch/i386/lib: checksum.o Only in work-2.4.9-ac2/arch/i386/lib: dec_and_lock.o Only in work-2.4.9-ac2/arch/i386/lib: delay.o Only in work-2.4.9-ac2/arch/i386/lib: getuser.o Only in work-2.4.9-ac2/arch/i386/lib: lib.a Only in work-2.4.9-ac2/arch/i386/lib: memcpy.o Only in work-2.4.9-ac2/arch/i386/lib: old-checksum.o Only in work-2.4.9-ac2/arch/i386/lib: strstr.o Only in work-2.4.9-ac2/arch/i386/lib: usercopy.o Only in work-2.4.9-ac2/arch/i386/mm: .depend Only in work-2.4.9-ac2/arch/i386/mm: .extable.o.flags Only in work-2.4.9-ac2/arch/i386/mm: .fault.o.flags Only in work-2.4.9-ac2/arch/i386/mm: .init.o.flags Only in work-2.4.9-ac2/arch/i386/mm: .ioremap.o.flags Only in work-2.4.9-ac2/arch/i386/mm: .mm.o.flags Only in work-2.4.9-ac2/arch/i386/mm: extable.o Only in work-2.4.9-ac2/arch/i386/mm: fault.o Only in work-2.4.9-ac2/arch/i386/mm: init.o Only in work-2.4.9-ac2/arch/i386/mm: ioremap.o Only in work-2.4.9-ac2/arch/i386/mm: mm.o Only in work-2.4.9-ac2: core Only in work-2.4.9-ac2/drivers: .depend Only in work-2.4.9-ac2/drivers/acpi: .depend Only in work-2.4.9-ac2/drivers/acpi/dispatcher: .depend Only in work-2.4.9-ac2/drivers/acpi/events: .depend Only in work-2.4.9-ac2/drivers/acpi/executer: .depend Only in work-2.4.9-ac2/drivers/acpi/hardware: .depend Only in work-2.4.9-ac2/drivers/acpi/namespace: .depend Only in work-2.4.9-ac2/drivers/acpi/ospm: .depend Only in work-2.4.9-ac2/drivers/acpi/ospm/ac_adapter: .depend Only in work-2.4.9-ac2/drivers/acpi/ospm/battery: .depend Only in work-2.4.9-ac2/drivers/acpi/ospm/busmgr: .depend Only in work-2.4.9-ac2/drivers/acpi/ospm/button: .depend Only in work-2.4.9-ac2/drivers/acpi/ospm/ec: .depend Only in work-2.4.9-ac2/drivers/acpi/ospm/processor: .depend Only in work-2.4.9-ac2/drivers/acpi/ospm/system: .depend Only in work-2.4.9-ac2/drivers/acpi/ospm/thermal: .depend Only in work-2.4.9-ac2/drivers/acpi/parser: .depend Only in work-2.4.9-ac2/drivers/acpi/resources: .depend Only in work-2.4.9-ac2/drivers/acpi/tables: .depend Only in work-2.4.9-ac2/drivers/acpi/utilities: .depend Only in work-2.4.9-ac2/drivers/atm: .depend Only in work-2.4.9-ac2/drivers/block: .blkpg.o.flags Only in work-2.4.9-ac2/drivers/block: .block.o.flags Only in work-2.4.9-ac2/drivers/block: .depend Only in work-2.4.9-ac2/drivers/block: .elevator.o.flags Only in work-2.4.9-ac2/drivers/block: .floppy.o.flags Only in work-2.4.9-ac2/drivers/block: .genhd.o.flags Only in work-2.4.9-ac2/drivers/block: .ll_rw_blk.o.flags Only in work-2.4.9-ac2/drivers/block: .loop.o.flags Only in work-2.4.9-ac2/drivers/block: .nbd.o.flags Only in work-2.4.9-ac2/drivers/block: blkpg.o Only in work-2.4.9-ac2/drivers/block: block.o Only in work-2.4.9-ac2/drivers/block: elevator.o Only in work-2.4.9-ac2/drivers/block: floppy.o Only in work-2.4.9-ac2/drivers/block: genhd.o Only in work-2.4.9-ac2/drivers/block: ll_rw_blk.o Only in work-2.4.9-ac2/drivers/block: loop.o Only in work-2.4.9-ac2/drivers/block: nbd.o Only in work-2.4.9-ac2/drivers/block/paride: .depend Only in work-2.4.9-ac2/drivers/bluetooth: .depend Only in work-2.4.9-ac2/drivers/cdrom: .cdrom.o.flags Only in work-2.4.9-ac2/drivers/cdrom: .depend Only in work-2.4.9-ac2/drivers/cdrom: .driver.o.flags Only in work-2.4.9-ac2/drivers/cdrom: cdrom.o Only in work-2.4.9-ac2/drivers/cdrom: driver.o Only in work-2.4.9-ac2/drivers/char: .char.o.flags Only in work-2.4.9-ac2/drivers/char: .console.o.flags Only in work-2.4.9-ac2/drivers/char: .consolemap.o.flags Only in work-2.4.9-ac2/drivers/char: .consolemap_deftbl.o.flags Only in work-2.4.9-ac2/drivers/char: .defkeymap.o.flags Only in work-2.4.9-ac2/drivers/char: .depend Only in work-2.4.9-ac2/drivers/char: .keyboard.o.flags Only in work-2.4.9-ac2/drivers/char: .mem.o.flags Only in work-2.4.9-ac2/drivers/char: .misc.o.flags Only in work-2.4.9-ac2/drivers/char: .n_tty.o.flags Only in work-2.4.9-ac2/drivers/char: .pc_keyb.o.flags Only in work-2.4.9-ac2/drivers/char: .pty.o.flags Only in work-2.4.9-ac2/drivers/char: .random.o.flags Only in work-2.4.9-ac2/drivers/char: .raw.o.flags Only in work-2.4.9-ac2/drivers/char: .selection.o.flags Only in work-2.4.9-ac2/drivers/char: .serial.o.flags Only in work-2.4.9-ac2/drivers/char: .tty_io.o.flags Only in work-2.4.9-ac2/drivers/char: .tty_ioctl.o.flags Only in work-2.4.9-ac2/drivers/char: .vc_screen.o.flags Only in work-2.4.9-ac2/drivers/char: .vt.o.flags Only in work-2.4.9-ac2/drivers/char/agp: .depend Only in work-2.4.9-ac2/drivers/char: char.o Only in work-2.4.9-ac2/drivers/char: conmakehash Only in work-2.4.9-ac2/drivers/char: console.o Only in work-2.4.9-ac2/drivers/char: consolemap.o Only in work-2.4.9-ac2/drivers/char: consolemap_deftbl.c Only in work-2.4.9-ac2/drivers/char: consolemap_deftbl.o Only in work-2.4.9-ac2/drivers/char: defkeymap.o Only in work-2.4.9-ac2/drivers/char/drm: .depend Only in work-2.4.9-ac2/drivers/char/drm-4.0: .depend Only in work-2.4.9-ac2/drivers/char/ftape: .depend Only in work-2.4.9-ac2/drivers/char/ftape/compressor: .depend Only in work-2.4.9-ac2/drivers/char/ftape/lowlevel: .depend Only in work-2.4.9-ac2/drivers/char/ftape/zftape: .depend Only in work-2.4.9-ac2/drivers/char/joystick: .depend Only in work-2.4.9-ac2/drivers/char: keyboard.o Only in work-2.4.9-ac2/drivers/char: mem.o Only in work-2.4.9-ac2/drivers/char: misc.o Only in work-2.4.9-ac2/drivers/char: n_tty.o Only in work-2.4.9-ac2/drivers/char: pc_keyb.o Only in work-2.4.9-ac2/drivers/char/pcmcia: .depend Only in work-2.4.9-ac2/drivers/char: pty.o Only in work-2.4.9-ac2/drivers/char: random.o Only in work-2.4.9-ac2/drivers/char: raw.o Only in work-2.4.9-ac2/drivers/char/rio: .depend Only in work-2.4.9-ac2/drivers/char: selection.o Only in work-2.4.9-ac2/drivers/char: serial.o Only in work-2.4.9-ac2/drivers/char: tty_io.o Only in work-2.4.9-ac2/drivers/char: tty_ioctl.o Only in work-2.4.9-ac2/drivers/char: vc_screen.o Only in work-2.4.9-ac2/drivers/char: vt.o Only in work-2.4.9-ac2/drivers/dio: .depend Only in work-2.4.9-ac2/drivers/fc4: .depend Only in work-2.4.9-ac2/drivers/i2c: .depend Only in work-2.4.9-ac2/drivers/ide: .alim15x3.o.flags Only in work-2.4.9-ac2/drivers/ide: .cmd640.o.flags Only in work-2.4.9-ac2/drivers/ide: .depend Only in work-2.4.9-ac2/drivers/ide: .ide-adma.o.flags Only in work-2.4.9-ac2/drivers/ide: .ide-cd.o.flags Only in work-2.4.9-ac2/drivers/ide: .ide-disk.o.flags Only in work-2.4.9-ac2/drivers/ide: .ide-dma.o.flags Only in work-2.4.9-ac2/drivers/ide: .ide-features.o.flags Only in work-2.4.9-ac2/drivers/ide: .ide-geometry.o.flags Only in work-2.4.9-ac2/drivers/ide: .ide-pci.o.flags Only in work-2.4.9-ac2/drivers/ide: .ide-probe.o.flags Only in work-2.4.9-ac2/drivers/ide: .ide-proc.o.flags Only in work-2.4.9-ac2/drivers/ide: .ide.o.flags Only in work-2.4.9-ac2/drivers/ide: .idedriver.o.flags Only in work-2.4.9-ac2/drivers/ide: .pdc202xx.o.flags Only in work-2.4.9-ac2/drivers/ide: .piix.o.flags Only in work-2.4.9-ac2/drivers/ide: .rz1000.o.flags Only in work-2.4.9-ac2/drivers/ide: alim15x3.o Only in work-2.4.9-ac2/drivers/ide: cmd640.o Only in work-2.4.9-ac2/drivers/ide: ide-adma.o Only in work-2.4.9-ac2/drivers/ide: ide-cd.o Only in work-2.4.9-ac2/drivers/ide: ide-disk.o Only in work-2.4.9-ac2/drivers/ide: ide-dma.o Only in work-2.4.9-ac2/drivers/ide: ide-features.o Only in work-2.4.9-ac2/drivers/ide: ide-geometry.o Only in work-2.4.9-ac2/drivers/ide: ide-mod.o Only in work-2.4.9-ac2/drivers/ide: ide-pci.o Only in work-2.4.9-ac2/drivers/ide: ide-probe-mod.o Only in work-2.4.9-ac2/drivers/ide: ide-probe.o Only in work-2.4.9-ac2/drivers/ide: ide-proc.o Only in work-2.4.9-ac2/drivers/ide: ide.o Only in work-2.4.9-ac2/drivers/ide: idedriver.o Only in work-2.4.9-ac2/drivers/ide: pdc202xx.o Only in work-2.4.9-ac2/drivers/ide: piix.o Only in work-2.4.9-ac2/drivers/ide: rz1000.o Only in work-2.4.9-ac2/drivers/ieee1394: .depend Only in work-2.4.9-ac2/drivers/input: .depend Only in work-2.4.9-ac2/drivers/isdn: .depend Only in work-2.4.9-ac2/drivers/isdn/act2000: .depend Only in work-2.4.9-ac2/drivers/isdn/avmb1: .depend Only in work-2.4.9-ac2/drivers/isdn/divert: .depend Only in work-2.4.9-ac2/drivers/isdn/eicon: .depend Only in work-2.4.9-ac2/drivers/isdn/hisax: .depend Only in work-2.4.9-ac2/drivers/isdn/hysdn: .depend Only in work-2.4.9-ac2/drivers/isdn/icn: .depend Only in work-2.4.9-ac2/drivers/isdn/isdnloop: .depend Only in work-2.4.9-ac2/drivers/isdn/pcbit: .depend Only in work-2.4.9-ac2/drivers/isdn/sc: .depend Only in work-2.4.9-ac2/drivers/isdn/tpam: .depend Only in work-2.4.9-ac2/drivers/macintosh: .depend Only in work-2.4.9-ac2/drivers/md: .depend Only in work-2.4.9-ac2/drivers/md: .linear.o.flags Only in work-2.4.9-ac2/drivers/md: .md.o.flags Only in work-2.4.9-ac2/drivers/md: .mddev.o.flags Only in work-2.4.9-ac2/drivers/md: .raid0.o.flags Only in work-2.4.9-ac2/drivers/md: .raid1.o.flags Only in work-2.4.9-ac2/drivers/md: .raid5.o.flags Only in work-2.4.9-ac2/drivers/md: .xor.o.flags Only in work-2.4.9-ac2/drivers/md: linear.o Only in work-2.4.9-ac2/drivers/md: md.o Only in work-2.4.9-ac2/drivers/md: mddev.o Only in work-2.4.9-ac2/drivers/md: raid0.o Only in work-2.4.9-ac2/drivers/md: raid1.o Only in work-2.4.9-ac2/drivers/md: raid5.o Only in work-2.4.9-ac2/drivers/md: xor.o Only in work-2.4.9-ac2/drivers/media: .depend Only in work-2.4.9-ac2/drivers/media: .media.o.flags Only in work-2.4.9-ac2/drivers/media: media.o Only in work-2.4.9-ac2/drivers/media/radio: .depend Only in work-2.4.9-ac2/drivers/media/radio: .radio.o.flags Only in work-2.4.9-ac2/drivers/media/radio: radio.o Only in work-2.4.9-ac2/drivers/media/video: .depend Only in work-2.4.9-ac2/drivers/media/video: .video.o.flags Only in work-2.4.9-ac2/drivers/media/video: video.o Only in work-2.4.9-ac2/drivers/message/fusion: .depend Only in work-2.4.9-ac2/drivers/message/i2o: .depend Only in work-2.4.9-ac2/drivers/misc: .depend Only in work-2.4.9-ac2/drivers/misc: .misc.o.flags Only in work-2.4.9-ac2/drivers/misc: misc.o Only in work-2.4.9-ac2/drivers/mtd: .depend Only in work-2.4.9-ac2/drivers/mtd/chips: .depend Only in work-2.4.9-ac2/drivers/mtd/devices: .depend Only in work-2.4.9-ac2/drivers/mtd/maps: .depend Only in work-2.4.9-ac2/drivers/mtd/nand: .depend Only in work-2.4.9-ac2/drivers/net: .3c59x.o.flags Only in work-2.4.9-ac2/drivers/net: .8390.o.flags Only in work-2.4.9-ac2/drivers/net: .Space.o.flags Only in work-2.4.9-ac2/drivers/net: .acenic.o.flags Only in work-2.4.9-ac2/drivers/net: .auto_irq.o.flags Only in work-2.4.9-ac2/drivers/net: .depend Only in work-2.4.9-ac2/drivers/net: .dummy.o.flags Only in work-2.4.9-ac2/drivers/net: .eepro100.o.flags Only in work-2.4.9-ac2/drivers/net: .loopback.o.flags Only in work-2.4.9-ac2/drivers/net: .ne2k-pci.o.flags Only in work-2.4.9-ac2/drivers/net: .net.o.flags Only in work-2.4.9-ac2/drivers/net: .net_init.o.flags Only in work-2.4.9-ac2/drivers/net: .ns83820.o.flags Only in work-2.4.9-ac2/drivers/net: .pcnet32.o.flags Only in work-2.4.9-ac2/drivers/net: .setup.o.flags Only in work-2.4.9-ac2/drivers/net: 3c59x.o Only in work-2.4.9-ac2/drivers/net: 8390.o Only in work-2.4.9-ac2/drivers/net: Space.o Only in work-2.4.9-ac2/drivers/net: acenic.o Only in work-2.4.9-ac2/drivers/net/appletalk: .depend Only in work-2.4.9-ac2/drivers/net/arcnet: .depend Only in work-2.4.9-ac2/drivers/net: auto_irq.o Only in work-2.4.9-ac2/drivers/net: dummy.o Only in work-2.4.9-ac2/drivers/net: eepro100.o Only in work-2.4.9-ac2/drivers/net/fc: .depend Only in work-2.4.9-ac2/drivers/net/hamradio: .depend Only in work-2.4.9-ac2/drivers/net/hamradio/soundmodem: .depend Only in work-2.4.9-ac2/drivers/net/hamradio/soundmodem: gentbl Only in work-2.4.9-ac2/drivers/net/hamradio/soundmodem: sm_tbl_afsk1200.h Only in work-2.4.9-ac2/drivers/net/hamradio/soundmodem: sm_tbl_afsk2400_7.h Only in work-2.4.9-ac2/drivers/net/hamradio/soundmodem: sm_tbl_afsk2400_8.h Only in work-2.4.9-ac2/drivers/net/hamradio/soundmodem: sm_tbl_afsk2666.h Only in work-2.4.9-ac2/drivers/net/hamradio/soundmodem: sm_tbl_fsk9600.h Only in work-2.4.9-ac2/drivers/net/hamradio/soundmodem: sm_tbl_hapn4800.h Only in work-2.4.9-ac2/drivers/net/hamradio/soundmodem: sm_tbl_psk4800.h Only in work-2.4.9-ac2/drivers/net/irda: .depend Only in work-2.4.9-ac2/drivers/net: loopback.o Only in work-2.4.9-ac2/drivers/net: ne2k-pci.o Only in work-2.4.9-ac2/drivers/net: net.o Only in work-2.4.9-ac2/drivers/net: net_init.o diff -ur /md0/kernels/2.4/v2.4.9-ac2/drivers/net/ns83820.c work-2.4.9-ac2/drivers/net/ns83820.c --- /md0/kernels/2.4/v2.4.9-ac2/drivers/net/ns83820.c Mon Aug 27 15:08:42 2001 +++ work-2.4.9-ac2/drivers/net/ns83820.c Fri Sep 7 16:23:28 2001 @@ -1,6 +1,7 @@ -#define VERSION "0.7" +#define VERSION "0.10" /* ns83820.c by Benjamin LaHaise - * $Revision: 1.28 $ + * + * $Revision: 1.39 $ * * Copyright 2001 Benjamin LaHaise. * Copyright 2001 Red Hat. @@ -35,6 +36,10 @@ * fiddling with TXCFG * 20010810 0.6 - use pci dma api for ringbuffers, work on ia64 * 20010816 0.7 - misc cleanups + * 20010826 0.8 - fix critical zero copy bugs + * 0.9 - internal experiment + * 20010827 0.10 - fix ia64 unaligned access. + * 0.11 - prefetching optimizations * * Driver Overview * =============== @@ -48,6 +53,15 @@ * management, d) initialization and configuration. Where possible, * these code paths are designed to run in parallel. * + * This driver has been tested and found to work with the following + * cards (in no particular order): + * + * Cameo SOHO-GA2000T SOHO-GA2500T + * D-Link DGE-500T + * PureData PDP8023Z-TG + * SMC SMC9462TX + * + * Reports of success or failure would be greatly appreciated. */ //#define dprintk printk #define dprintk(x...) do { } while (0) @@ -64,18 +78,30 @@ #include /* for iph */ #include /* for IPPROTO_... */ #include +#include +#include //#include /* Dprintk is used for more interesting debug events */ #undef Dprintk #define Dprintk dprintk +#if !defined(GCC_VERSION) && defined(__GNUC__) +#define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__) +#endif /* GCC_VERSION */ + #if !defined(GCC_VERSION) || (GCC_VERSION < 2096) #define __builtin_expect(x,y) (x) #endif +#if !defined(HAVE_NET_KICK_TX) +#define HAVE_NET_KICK_TX 0 +#endif + #ifdef CONFIG_HIGHMEM64G -//#define USE_64BIT_ADDR /* Disabled for now as it doesn't work. */ +#define USE_64BIT_ADDR +#elif defined(__ia64__) +#define USE_64BIT_ADDR #endif /* Tell davem to fix the pci dma api. Grrr. */ @@ -116,9 +142,10 @@ /* tunables */ -#define RX_BUF_SIZE 1536 /* 8192 */ -#define NR_RX_DESC 256 +#define RX_BUF_SIZE 7000 /* 8192 */ +/* do not raise above 65536 as u16's are used for the index */ +#define NR_RX_DESC 256 #define NR_TX_DESC 256 /* register defines */ @@ -293,14 +320,15 @@ #define VDR 0xc4 #define CCSR 0xcc -#define __kick_rx(dev) writel(CR_RXE, dev->base + CR) +#define kick_tx(dev) writel(CR_TXE, (dev)->base + CR) +#define __kick_rx(dev) writel(CR_RXE, (dev)->base + CR) #define kick_rx(dev) do { \ dprintk("kick_rx: maybe kicking\n"); \ - if (test_and_clear_bit(0, &dev->rx_info.idle)) { \ + if (__builtin_expect(test_and_clear_bit(0, &dev->rx_idle), 1)) { \ dprintk("actually kicking\n"); \ - writel(dev->rx_info.phy_descs + (4 * DESC_SIZE * dev->rx_info.next_rx), dev->base + RXDP); \ - if (dev->rx_info.next_rx == dev->rx_info.next_empty) \ + writel(dev->rx_phy_descs + (4 * DESC_SIZE * dev->next_rx), dev->base + RXDP); \ + if (__builtin_expect((dev->next_rx == dev->next_empty), 0)) \ printk(KERN_DEBUG "%s: uh-oh: next_rx == next_empty???\n", dev->net_dev.name);\ __kick_rx(dev); \ } \ @@ -318,7 +346,10 @@ #define BUFPTR (LINK + HW_ADDR_LEN/4) #define CMDSTS (BUFPTR + HW_ADDR_LEN/4) #define EXTSTS (CMDSTS + 4/4) -#define DRV_NEXT (EXTSTS + 4/4) +#define DRV_SKB (EXTSTS + 4/4) +#define DRV_0 (DRV_SKB + 4/4) +#define DRV_1 (DRV_0 + 4/4) +#define DRV_2 (DRV_1 + 4/4) #define CMDSTS_OWN 0x80000000 #define CMDSTS_MORE 0x40000000 @@ -332,30 +363,36 @@ #define DESC_SIZE 8 /* Should be cache line sized */ -struct rx_info { - spinlock_t lock; - int up; - long idle; - - struct sk_buff *skbs[NR_RX_DESC]; - - unsigned next_rx, next_empty; - - u32 *descs; - dma_addr_t phy_descs; -}; - - struct ns83820 { struct net_device net_dev; - u8 *base; struct pci_dev *pci_dev; - struct ns83820 *next_dev; + void *base; + u32 *tx_descs; + dma_addr_t tx_phy_descs; + + u8 ihr; + u8 up; + u16 pad; + + volatile u16 next_empty; + volatile u16 next_rx; + + volatile u16 tx_free_idx; /* idx of free desc chain */ + u16 tx_done_idx; + u16 tx_idx; + u16 tx_intr_idx; + + u32 *rx_descs; + dma_addr_t rx_phy_descs; + long last_jiffies; + int last_irqs; - struct rx_info rx_info; + struct tasklet_struct rx_tasklet; + + long rx_idle; + spinlock_t rx_lock; - unsigned ihr; struct tq_struct tq_refill; /* protects everything below. irqsave when using. */ @@ -367,20 +404,7 @@ u32 IMR_cache; struct eeprom ee; - - spinlock_t tx_lock; - - long tx_idle; - u32 tx_done_idx; - u32 tx_idx; - volatile u32 tx_free_idx; /* idx of free desc chain */ - u32 tx_intr_idx; - - struct sk_buff *tx_skbs[NR_TX_DESC]; - - char pad[16] __attribute__((aligned(16))); - u32 *tx_descs; - dma_addr_t tx_phy_descs; + struct ns83820 *next_dev; }; //free = (tx_done_idx + NR_TX_DESC-2 - free_idx) % NR_TX_DESC @@ -404,86 +428,77 @@ * possible. */ #ifdef USE_64BIT_ADDR -static inline void build_rx_desc64(struct ns83820 *dev, u32 *desc, void *link, u64 buf, u32 cmdsts, u32 extsts) +static inline void build_rx_desc64(struct ns83820 *dev, u32 *desc, u64 link, u64 buf, u32 cmdsts, u32 extsts) { - u64 lnk = link ? virt_to_phys(link) : 0; - desc[0] = lnk; - desc[1] = 0; //lnk >> 32; + desc[0] = link; + desc[1] = link >> 32; desc[2] = buf; desc[3] = buf >> 32; desc[5] = extsts; - mb(); + barrier(); desc[4] = cmdsts; } #define build_rx_desc build_rx_desc64 #else -static inline void build_rx_desc32(struct ns83820 *dev, u32 *desc, void *link, u32 buf, u32 cmdsts, u32 extsts) +static inline void build_rx_desc32(struct ns83820 *dev, u32 *desc, u32 link, u32 buf, u32 cmdsts, u32 extsts) { - desc[0] = link ? (u32)virt_to_phys(link) : 0; + desc[0] = link; desc[1] = buf; desc[3] = extsts; - mb(); + barrier(); desc[2] = cmdsts; } #define build_rx_desc build_rx_desc32 #endif -#define nr_rx_empty(dev) ((NR_RX_DESC-2 + dev->rx_info.next_rx - dev->rx_info.next_empty) % NR_RX_DESC) -static int ns83820_add_rx_skb(struct ns83820 *dev, struct sk_buff *skb) +#define nr_rx_empty(dev) ((NR_RX_DESC-2 + dev->next_rx - dev->next_empty) % NR_RX_DESC) +static inline int ns83820_add_rx_skb(struct ns83820 *dev, struct sk_buff *skb) { unsigned next_empty; u32 cmdsts; u32 *sg; hw_addr_t buf; - next_empty = dev->rx_info.next_empty; + next_empty = dev->next_empty; /* don't overrun last rx marker */ - if (nr_rx_empty(dev) <= 2) { - kfree_skb(skb); + if (__builtin_expect((nr_rx_empty(dev) <= 2), 0)) return 1; - } -#if 0 - dprintk("next_empty[%d] nr_used[%d] next_rx[%d]\n", - dev->rx_info.next_empty, - dev->rx_info.nr_used, - dev->rx_info.next_rx - ); -#endif - - sg = dev->rx_info.descs + (next_empty * DESC_SIZE); - if (dev->rx_info.skbs[next_empty]) - BUG(); - dev->rx_info.skbs[next_empty] = skb; + sg = dev->rx_descs + (next_empty * DESC_SIZE); + *(struct sk_buff **)(sg + DRV_SKB) = skb; - dev->rx_info.next_empty = (next_empty + 1) % NR_RX_DESC; + dev->next_empty = (next_empty + 1) % NR_RX_DESC; cmdsts = RX_BUF_SIZE | CMDSTS_INTR; buf = pci_map_single(dev->pci_dev, skb->tail, RX_BUF_SIZE, PCI_DMA_FROMDEVICE); - build_rx_desc(dev, sg, NULL, buf, cmdsts, 0); + build_rx_desc(dev, sg, 0, buf, cmdsts, 0); /* update link of previous rx */ - if (next_empty != dev->rx_info.next_rx) - dev->rx_info.descs[((NR_RX_DESC + next_empty - 1) % NR_RX_DESC) * DESC_SIZE] = dev->rx_info.phy_descs + (next_empty * DESC_SIZE * 4); + if (__builtin_expect((next_empty != dev->next_rx), 1)) + dev->rx_descs[((NR_RX_DESC + next_empty - 1) % NR_RX_DESC) * DESC_SIZE] = dev->rx_phy_descs + (next_empty * DESC_SIZE * 4); return 0; } -static int rx_refill(struct ns83820 *dev, int gfp) +static inline int __rx_refill(struct ns83820 *dev, int gfp) { unsigned i; - long flags = 0; dprintk("rx_refill(%p)\n", dev); - if (gfp == GFP_ATOMIC) - spin_lock_irqsave(&dev->rx_info.lock, flags); + if (gfp == GFP_ATOMIC) { + if (!spin_trylock(&dev->rx_lock)) + return 0; + } for (i=0; itail & 0xf; @@ -492,41 +507,52 @@ skb_reserve(skb, res); skb->dev = &dev->net_dev; - if (gfp != GFP_ATOMIC) - spin_lock_irqsave(&dev->rx_info.lock, flags); - res = ns83820_add_rx_skb(dev, skb); - if (gfp != GFP_ATOMIC) - spin_unlock_irqrestore(&dev->rx_info.lock, flags); - if (res) { + if (gfp != GFP_ATOMIC) { + long flags; + spin_lock_irqsave(&dev->rx_lock, flags); + res = ns83820_add_rx_skb(dev, skb); + spin_unlock_irqrestore(&dev->rx_lock, flags); + } else + res = ns83820_add_rx_skb(dev, skb); + + if (__builtin_expect(res, 0)) { + kfree_skb(skb); i = 1; break; } } if (gfp == GFP_ATOMIC) - spin_unlock_irqrestore(&dev->rx_info.lock, flags); + spin_unlock(&dev->rx_lock); return i ? 0 : -ENOMEM; } +static void FASTCALL(rx_refill_atomic(struct ns83820 *dev)); +static void rx_refill_atomic(struct ns83820 *dev) +{ + __rx_refill(dev, GFP_ATOMIC); +} + /* REFILL */ -static inline void queue_refill(void *_dev) +static void queue_refill(void *_dev) { struct ns83820 *dev = _dev; - rx_refill(dev, GFP_KERNEL); - if (dev->rx_info.up) + __rx_refill(dev, GFP_KERNEL); + if (dev->up) kick_rx(dev); } static inline void clear_rx_desc(struct ns83820 *dev, unsigned i) { - build_rx_desc(dev, dev->rx_info.descs + (DESC_SIZE * i), 0, 0, CMDSTS_OWN, 0); + build_rx_desc(dev, dev->rx_descs + (DESC_SIZE * i), 0, 0, CMDSTS_OWN, 0); } +static void FASTCALL(phy_intr(struct ns83820 *dev)); static void phy_intr(struct ns83820 *dev) { static char *speeds[] = { "10", "100", "1000", "1000(?)" }; - u32 cfg, new_cfg; + u32 cfg, new_cfg, old_cfg; new_cfg = dev->CFG_cache & ~(CFG_SB | CFG_MODE_1000 | CFG_SPDSTS); cfg = readl(dev->base + CFG) ^ SPDSTS_POLARITY; @@ -541,6 +567,7 @@ dev->CFG_cache = new_cfg; } + old_cfg = dev->CFG_cache; dev->CFG_cache &= ~CFG_SPDSTS; dev->CFG_cache |= cfg & CFG_SPDSTS; @@ -551,11 +578,13 @@ netif_stop_queue(&dev->net_dev); } - printk(KERN_INFO "%s: link now %s mbps, %s duplex and %s.\n", - dev->net_dev.name, - speeds[((cfg / CFG_SPDSTS0) & 3)], - (cfg & CFG_DUPSTS) ? "full" : "half", - (cfg & CFG_LNKSTS) ? "up" : "down"); + if (cfg & CFG_LNKSTS) + printk(KERN_INFO "%s: link now %s mbps, %s duplex and up.\n", + dev->net_dev.name, + speeds[((cfg / CFG_SPDSTS0) & 3)], + (cfg & CFG_DUPSTS) ? "full" : "half"); + else if (!(cfg & CFG_LNKSTS) && (old_cfg & CFG_LNKSTS)) + printk(KERN_INFO "%s: link now down.\n", dev->net_dev.name); } static int ns83820_setup_rx(struct ns83820 *dev) @@ -565,28 +594,28 @@ dprintk("ns83820_setup_rx(%p)\n", dev); - dev->rx_info.idle = 1; - dev->rx_info.next_rx = 0; - dev->rx_info.next_empty = 0; + dev->rx_idle = 1; + dev->next_rx = 0; + dev->next_empty = 0; for (i=0; ibase + RXDP_HI); - writel(dev->rx_info.phy_descs, dev->base + RXDP); + writel(dev->rx_phy_descs, dev->base + RXDP); - ret = rx_refill(dev, GFP_KERNEL); + ret = __rx_refill(dev, GFP_KERNEL); if (!ret) { dprintk("starting receiver\n"); /* prevent the interrupt handler from stomping on us */ - spin_lock_irq(&dev->rx_info.lock); + spin_lock_irq(&dev->rx_lock); writel(0x0001, dev->base + CCSR); writel(0, dev->base + RFCR); writel(0x7fc00000, dev->base + RFCR); writel(0xffc00000, dev->base + RFCR); - dev->rx_info.up = 1; + dev->up = 1; phy_intr(dev); @@ -601,7 +630,7 @@ dev->IMR_cache |= ISR_RXDESC; dev->IMR_cache |= ISR_RXIDLE; dev->IMR_cache |= ISR_TXDESC; - //dev->IMR_cache |= ISR_TXIDLE; + dev->IMR_cache |= ISR_TXIDLE; writel(dev->IMR_cache, dev->base + IMR); writel(1, dev->base + IER); @@ -609,7 +638,7 @@ kick_rx(dev); - spin_unlock_irq(&dev->rx_info.lock); + spin_unlock_irq(&dev->rx_lock); } return ret; } @@ -628,7 +657,7 @@ spin_unlock_irqrestore(&dev->misc_lock, flags); /* synchronize with the interrupt handler and kill it */ - dev->rx_info.up = 0; + dev->up = 0; synchronize_irq(); /* touch the pci bus... */ @@ -639,8 +668,8 @@ writel(0, dev->base + RXDP); for (i=0; irx_info.skbs[i]; - dev->rx_info.skbs[i] = NULL; + u32 *desc = dev->rx_descs + i * DESC_SIZE; + struct sk_buff *skb = *(struct sk_buff **)(desc + DRV_SKB); clear_rx_desc(dev, i); if (skb) kfree_skb(skb); @@ -648,64 +677,100 @@ } /* rx_irq - * + * */ -static void FASTCALL(rx_irq(struct ns83820 *dev)); -static void rx_irq(struct ns83820 *dev) +static int FASTCALL(rx_irq(struct ns83820 *dev)); +static void rx_action(unsigned long _dev) +{ + struct ns83820 *dev = (void *)_dev; + long now; + int i=0; + br_read_lock(BR_NETPROTO_LOCK); + while (i++ < 8 && rx_irq(dev)); + br_read_unlock(BR_NETPROTO_LOCK); +#if 0 + if ((jiffies - dev->last_jiffies) > (HZ/100 + 1)) + writel(0, dev->base + IHR); +#endif +} + +static int rx_irq(struct ns83820 *dev) { - struct rx_info *info = &dev->rx_info; unsigned next_rx; u32 cmdsts, *desc; - long flags; + //long flags; int nr = 0; dprintk("rx_irq(%p)\n", dev); dprintk("rxdp: %08x, descs: %08lx next_rx[%d]: %p next_empty[%d]: %p\n", readl(dev->base + RXDP), - (dev->rx_info.phy_descs), - dev->rx_info.next_rx, - (dev->rx_info.descs + (DESC_SIZE * dev->rx_info.next_rx)), - dev->rx_info.next_empty, - (dev->rx_info.descs + (DESC_SIZE * dev->rx_info.next_empty)) + (dev->rx_phy_descs), + dev->next_rx, + (dev->rx_descs + (DESC_SIZE * dev->next_rx)), + dev->next_empty, + (dev->rx_descs + (DESC_SIZE * dev->next_empty)) ); - spin_lock_irqsave(&info->lock, flags); - if (!info->up) + if (dev->up && (nr_rx_empty(dev) >= NR_RX_DESC/4)) { + rx_refill_atomic(dev); + kick_rx(dev); + if (__builtin_expect((nr_rx_empty(dev) > NR_RX_DESC*3/4), 0)) + schedule_task(&dev->tq_refill); + if (dev->rx_idle) + schedule_task(&dev->tq_refill); + } + + //spin_lock_irqsave(&dev->rx_lock, flags); + if (__builtin_expect(!dev->up, 0)) goto out; dprintk("walking descs\n"); - next_rx = info->next_rx; - desc = info->descs + (DESC_SIZE * next_rx); - while ((CMDSTS_OWN & (cmdsts = desc[CMDSTS])) && - (cmdsts != CMDSTS_OWN)) { + next_rx = dev->next_rx; + desc = dev->rx_descs + (DESC_SIZE * next_rx); + cmdsts = desc[CMDSTS]; + prefetchnta(dev->rx_descs + ((next_rx + 2) % NR_RX_DESC) * DESC_SIZE); + for (;;) { + dmaaddr_high_t bufptr; struct sk_buff *skb; - u32 extsts = desc[EXTSTS]; - dmaaddr_high_t bufptr = *(dmaaddr_high_t *)(desc + BUFPTR); + u32 extsts; dprintk("cmdsts: %08x\n", cmdsts); dprintk("link: %08x\n", desc[LINK]); dprintk("extsts: %08x\n", desc[EXTSTS]); - skb = info->skbs[next_rx]; - info->skbs[next_rx] = NULL; - info->next_rx = (next_rx + 1) % NR_RX_DESC; + bufptr = *(dmaaddr_high_t *)(desc + BUFPTR); + skb = *(struct sk_buff **)(desc + DRV_SKB); - barrier(); - clear_rx_desc(dev, next_rx); + if (__builtin_expect((next_rx == dev->next_empty), 0)) + break; + if (__builtin_expect(!(CMDSTS_OWN & cmdsts), 0)) + break; + if (__builtin_expect((cmdsts == CMDSTS_OWN), 0)) + break; + + prefetcht1(skb->data); + prefetcht1(skb->data + 32); + + /* prefetch the next descriptor */ + prefetchnta(dev->rx_descs + ((next_rx + 3) % NR_RX_DESC) * DESC_SIZE); + extsts = desc[EXTSTS]; + desc[LINK] = 0; + desc[LINK+1] = 0; + desc[DRV_SKB] = 0; + desc[DRV_0] = 0; + desc[CMDSTS] = CMDSTS_OWN; pci_unmap_single(dev->pci_dev, bufptr, RX_BUF_SIZE, PCI_DMA_FROMDEVICE); - if (CMDSTS_OK & cmdsts) { + if (__builtin_expect(!!(CMDSTS_OK & cmdsts), 1)) { #ifndef __i386__ struct sk_buff *tmp; #endif int len = cmdsts & 0xffff; - if (!skb) - BUG(); skb_put(skb, len); #ifndef __i386__ /* I hate the network stack sometimes */ tmp = __dev_alloc_skb(RX_BUF_SIZE+16, GFP_ATOMIC); - if (!tmp) + if (__builtin_expect(!tmp, 0)) goto done; tmp->dev = &dev->net_dev; skb_reserve(tmp, 2); @@ -716,73 +781,60 @@ if ((extsts & 0x002a0000) && !(extsts & 0x00540000)) { skb->ip_summed = CHECKSUM_UNNECESSARY; } else { - if (len >500) printk("bad\n"); skb->ip_summed = CHECKSUM_NONE; } skb->protocol = eth_type_trans(skb, &dev->net_dev); - switch (netif_rx(skb)) { - case NET_RX_SUCCESS: - dev->ihr = 0; - break; - case NET_RX_CN_LOW: - dev->ihr = 2; - break; - case NET_RX_CN_MOD: - dev->ihr = dev->ihr + 1; - break; - case NET_RX_CN_HIGH: - dev->ihr += dev->ihr/2 + 1; - break; - case NET_RX_DROP: - dev->ihr = 255; - break; - } - if (dev->ihr > 255) - dev->ihr = 8; +#ifdef HAVE___NETIF_RX + __netif_rx(&dev->net_dev, skb); +#warning bar. +#else + dev->ihr = (netif_rx(skb) > NET_RX_CN_MOD) ? 16 : 4; +#endif #ifndef __i386__ done:; #endif } else { - static int err; - if (err++ < 20) { - Dprintk("error packet: %08x\n", cmdsts); - } + dprintk("error packet: cmdsts: %08x extsts: %08x\n", + cmdsts, extsts); kfree_skb(skb); } nr++; - next_rx = info->next_rx; - desc = info->descs + (DESC_SIZE * next_rx); + next_rx = (next_rx + 1) % NR_RX_DESC; + dev->next_rx = next_rx; + desc = dev->rx_descs + (DESC_SIZE * next_rx); + barrier(); + cmdsts = desc[CMDSTS]; } - info->next_rx = next_rx; out: if (0 && !nr) { Dprintk("dazed: cmdsts_f: %08x\n", cmdsts); } - spin_unlock_irqrestore(&info->lock, flags); + //spin_unlock_irqrestore(&dev->rx_lock, flags); + + return nr; } /* Packet Transmit code */ -static inline void kick_tx(struct ns83820 *dev) -{ - dprintk("kick_tx(%p): tx_idle=%ld, tx_idx=%d free_idx=%d\n", - dev, dev->tx_idle, dev->tx_idx, dev->tx_free_idx); - writel(CR_TXE, dev->base + CR); -} /* no spinlock needed on the transmit irq path as the interrupt handler is serialized */ +static void FASTCALL(do_tx_done(struct ns83820 *dev)); static void do_tx_done(struct ns83820 *dev) { u32 cmdsts, tx_done_idx, *desc; dprintk("do_tx_done(%p)\n", dev); + tx_done_idx = dev->tx_done_idx; desc = dev->tx_descs + (tx_done_idx * DESC_SIZE); + prefetch(dev->tx_descs + ((tx_done_idx + 2) % NR_TX_DESC) * DESC_SIZE); + prefetch(dev->tx_descs + ((tx_done_idx + 3) % NR_TX_DESC) * DESC_SIZE); + dprintk("tx_done_idx=%d free_idx=%d cmdsts=%08x\n", tx_done_idx, dev->tx_free_idx, desc[CMDSTS]); while ((tx_done_idx != dev->tx_free_idx) && @@ -791,10 +843,11 @@ dprintk("tx_done_idx=%d free_idx=%d cmdsts=%08x\n", tx_done_idx, dev->tx_free_idx, desc[CMDSTS]); - skb = dev->tx_skbs[tx_done_idx]; - dev->tx_skbs[tx_done_idx] = NULL; + prefetch(dev->tx_descs + ((tx_done_idx + 4) % NR_TX_DESC) * DESC_SIZE); + skb = *(struct sk_buff **)(desc + DRV_SKB); + *(struct sk_buff **)(desc + DRV_SKB) = NULL; dprintk("done(%p)\n", skb); - if (skb) { + if (__builtin_expect(!!skb, 1)) { pci_unmap_single(dev->pci_dev, *(hw_addr_t *)(desc + BUFPTR), skb->len, @@ -804,18 +857,26 @@ tx_done_idx = (tx_done_idx + 1) % NR_TX_DESC; dev->tx_done_idx = tx_done_idx; - desc[CMDSTS] = 0; + + /* lockless is safe so long as tx_done_idx can be + * seen by the interrupt handler before CMDSTS + */ barrier(); + desc[CMDSTS] = 0; + desc = dev->tx_descs + (tx_done_idx * DESC_SIZE); } /* Allow network stack to resume queueing packets after we've * finished transmitting at least 1/4 of the packets in the queue. */ - if (netif_queue_stopped(&dev->net_dev) && start_tx_okay(dev)) { - dprintk("start_queue(%p)\n", dev); - netif_start_queue(&dev->net_dev); - netif_wake_queue(&dev->net_dev); + if (netif_queue_stopped(&dev->net_dev)) { + if (start_tx_okay(dev)) { + dprintk("start_queue(%p)\n", dev); + netif_start_queue(&dev->net_dev); + netif_wake_queue(&dev->net_dev); + } + dev->ihr = 4; } } @@ -824,14 +885,24 @@ unsigned i; for (i=0; itx_skbs[i]; - dev->tx_skbs[i] = NULL; + u32 *desc = dev->tx_descs + i * DESC_SIZE; + struct sk_buff *skb = *(struct sk_buff **)(desc + DRV_SKB); if (skb) dev_kfree_skb(skb); } memset(dev->tx_descs, 0, NR_TX_DESC * DESC_SIZE * 4); - set_bit(0, &dev->tx_idle); +} + +static int stop_queue(struct ns83820 *dev) +{ + netif_stop_queue(&dev->net_dev); + /* check for the extremely rare race */ + if (dev->CFG_cache & CFG_LNKSTS) + return 1; + + netif_start_queue(&dev->net_dev); + return 0; } /* transmit routine. This code relies on the network layer serializing @@ -840,7 +911,6 @@ * while trying to track down a bug in either the zero copy code or * the tx fifo (hence the MAX_FRAG_LEN). */ -#define MAX_FRAG_LEN 8192 /* disabled for now */ static int ns83820_hard_start_xmit(struct sk_buff *skb, struct net_device *_dev) { struct ns83820 *dev = (struct ns83820 *)_dev; @@ -852,29 +922,28 @@ skb_frag_t *frag; int stopped = 0; int do_intr = 0; - volatile u32 *first_desc; + u32 *first_desc, *tx_descs = dev->tx_descs; dprintk("ns83820_hard_start_xmit\n"); - nr_frags = skb_shinfo(skb)->nr_frags; again: - if (__builtin_expect(dev->CFG_cache & CFG_LNKSTS, 0)) { - netif_stop_queue(&dev->net_dev); - if (__builtin_expect(dev->CFG_cache & CFG_LNKSTS, 0)) + if (__builtin_expect((dev->CFG_cache & CFG_LNKSTS), 0)) + if (__builtin_expect(stop_queue(dev), 0)) return 1; - netif_start_queue(&dev->net_dev); - } + nr_frags = skb_shinfo(skb)->nr_frags; free_idx = dev->tx_free_idx; + first_desc = tx_descs + (free_idx * DESC_SIZE); + tx_done_idx = dev->tx_done_idx; nr_free = (tx_done_idx + NR_TX_DESC-2 - free_idx) % NR_TX_DESC; nr_free -= 1; - if ((nr_free <= nr_frags) || (nr_free <= 8192 / MAX_FRAG_LEN)) { + if (__builtin_expect((nr_free <= nr_frags), 0)) { dprintk("stop_queue - not enough(%p)\n", dev); netif_stop_queue(&dev->net_dev); /* Check again: we may have raced with a tx done irq */ - if (dev->tx_done_idx != tx_done_idx) { + if (__builtin_expect((dev->tx_done_idx != tx_done_idx), 0)) { dprintk("restart queue(%p)\n", dev); netif_start_queue(&dev->net_dev); goto again; @@ -884,21 +953,22 @@ if (free_idx == dev->tx_intr_idx) { do_intr = 1; - dev->tx_intr_idx = (dev->tx_intr_idx + NR_TX_DESC/2) % NR_TX_DESC; + dev->tx_intr_idx = (dev->tx_intr_idx + NR_TX_DESC*3/4 + 2) % NR_TX_DESC; } nr_free -= nr_frags; - if (nr_free < 1) { + if (__builtin_expect((nr_free < 1), 0)) { dprintk("stop_queue - last entry(%p)\n", dev); netif_stop_queue(&dev->net_dev); stopped = 1; } frag = skb_shinfo(skb)->frags; + if (!nr_frags) + frag = 0; extsts = 0; if (skb->ip_summed == CHECKSUM_HW) { extsts |= EXTSTS_IPPKT; - if (IPPROTO_TCP == skb->nh.iph->protocol) extsts |= EXTSTS_TCPPKT; else if (IPPROTO_UDP == skb->nh.iph->protocol) @@ -906,41 +976,33 @@ } len = skb->len; + if (nr_frags) + len -= skb->data_len; buf = pci_map_single(dev->pci_dev, skb->data, len, PCI_DMA_TODEVICE); - first_desc = dev->tx_descs + (free_idx * DESC_SIZE); - for (;;) { - volatile u32 *desc = dev->tx_descs + (free_idx * DESC_SIZE); - u32 residue = 0; -#if 0 - if (len > MAX_FRAG_LEN) { - residue = len; - /* align the start address of the next fragment */ - len = MAX_FRAG_LEN; - residue -= len; - } -#endif + u32 *desc = tx_descs + (free_idx * DESC_SIZE); + //u32 *desc2 = tx_descs + ((free_idx + 2) * DESC_SIZE) % (NR_TX_DESC * DESC_SIZE); + //prefetch(desc2); dprintk("frag[%3u]: %4u @ 0x%x%08x\n", free_idx, len, dmaaddr_high(buf), dmaaddr_low(buf)); free_idx = (free_idx + 1) % NR_TX_DESC; + desc[DRV_0] = 0; + desc[DRV_1] = 0; + desc[DRV_2] = 0; + desc[DRV_SKB] = 0; desc[LINK] = dev->tx_phy_descs + (free_idx * DESC_SIZE * 4); desc[BUFPTR] = dmaaddr_low(buf); desc[BUFPTR+1] = dmaaddr_high(buf); desc[EXTSTS] = extsts; - cmdsts = ((nr_frags|residue) ? CMDSTS_MORE : do_intr ? CMDSTS_INTR : 0); + cmdsts = (nr_frags ? CMDSTS_MORE : do_intr ? CMDSTS_INTR : 0); cmdsts |= (desc == first_desc) ? 0 : CMDSTS_OWN; cmdsts |= len; + barrier(); desc[CMDSTS] = cmdsts; - if (residue) { - buf += len; - len = residue; - continue; - } - if (!nr_frags) break; @@ -953,101 +1015,121 @@ nr_frags--; } dprintk("done pkt\n"); - dev->tx_skbs[free_idx] = skb; - first_desc[CMDSTS] |= CMDSTS_OWN; + *(struct sk_buff **)(first_desc + DRV_SKB) = skb; + *(volatile u32 *)&first_desc[CMDSTS] |= CMDSTS_OWN; + barrier(); dev->tx_free_idx = free_idx; kick_tx(dev); /* Check again: we may have raced with a tx done irq */ - if (stopped && (dev->tx_done_idx != tx_done_idx) && start_tx_okay(dev)) + if (stopped && start_tx_okay(dev)) netif_start_queue(&dev->net_dev); - +#if 0 + if ((jiffies - dev->last_jiffies) > (HZ/100 + 1)) + writel(0, dev->base + IHR); +#endif return 0; } static void ns83820_irq(int foo, void *data, struct pt_regs *regs) { struct ns83820 *dev = data; - int count = 0; + //int count = 0; + unsigned tx_done_idx; + u32 *tx_descs; u32 isr; dprintk("ns83820_irq(%p)\n", dev); - dev->ihr = 0; + tx_descs = dev->tx_descs; + tx_done_idx = dev->tx_done_idx; + prefetch(tx_descs + tx_done_idx * DESC_SIZE); + + isr = readl(dev->base + ISR); + if (__builtin_expect(!dev->up, 0)) + return; - while (count++ < 32 && (isr = readl(dev->base + ISR))) { + //do + { dprintk("irq: %08x\n", isr); if (isr & ~(ISR_PHY | ISR_RXDESC | ISR_RXEARLY | ISR_RXOK | ISR_RXERR | ISR_TXIDLE | ISR_TXOK | ISR_TXDESC)) Dprintk("odd isr? 0x%08x\n", isr); - if ((ISR_RXEARLY | ISR_RXIDLE | ISR_RXORN | ISR_RXDESC | ISR_RXOK | ISR_RXERR) & isr) { - if (ISR_RXIDLE & isr) { - dev->rx_info.idle = 1; - Dprintk("oh dear, we are idle\n"); - } - - if ((ISR_RXDESC) & isr) { - rx_irq(dev); - writel(3, dev->base + IHR); - } - - if (nr_rx_empty(dev) >= NR_RX_DESC/4) { - if (dev->rx_info.up) { - rx_refill(dev, GFP_ATOMIC); - kick_rx(dev); - } - } - - if (dev->rx_info.up && nr_rx_empty(dev) > NR_RX_DESC*3/4) - schedule_task(&dev->tq_refill); - else - kick_rx(dev); - if (dev->rx_info.idle) - Dprintk("BAD\n"); - } - if (ISR_RXSOVR & isr) Dprintk("overrun\n"); if (ISR_RXORN & isr) Dprintk("overrun\n"); - if ((ISR_RXRCMP & isr) && dev->rx_info.up) + if ((ISR_RXRCMP & isr) && dev->up) writel(CR_RXE, dev->base + CR); + prefetch(&dev->rx_tasklet); + prefetch(dev->rx_descs + dev->next_rx * DESC_SIZE); + prefetch(dev->rx_descs + ((dev->next_rx + 1) % NR_RX_DESC) * DESC_SIZE); + if (ISR_TXIDLE & isr) { u32 txdp; txdp = readl(dev->base + TXDP); dprintk("txdp: %08x\n", txdp); txdp -= dev->tx_phy_descs; dev->tx_idx = txdp / (DESC_SIZE * 4); - if (dev->tx_idx >= NR_TX_DESC) { + if (__builtin_expect((dev->tx_idx >= NR_TX_DESC), 0)) { printk(KERN_ALERT "%s: BUG -- txdp out of range\n", dev->net_dev.name); dev->tx_idx = 0; } - if (dev->tx_idx != dev->tx_free_idx) - writel(CR_TXE, dev->base + CR); - //kick_tx(dev); - else - dev->tx_idle = 1; - mb(); - if (dev->tx_idx != dev->tx_free_idx) + if (__builtin_expect((dev->tx_idx != dev->tx_free_idx), 0)) kick_tx(dev); } + if ((ISR_TXDESC | ISR_TXIDLE) & isr) { + do_tx_done(dev); + } - /* Defer tx ring processing until more than a minimum amount of - * work has accumulated - */ - if ((ISR_TXDESC | ISR_TXIDLE) & isr) - do_tx_done(dev); + if (__builtin_expect((ISR_PHY & isr), 0)) + phy_intr(dev); + } //while (count++ < 1 && (isr = readl(dev->base + ISR))) ; - if (ISR_PHY & isr) - phy_intr(dev); - } + if ((/*ISR_RXEARLY |*/ ISR_RXIDLE | ISR_RXORN | ISR_RXDESC | /*ISR_RXOK |*/ ISR_RXERR) & isr) { + if (ISR_RXIDLE & isr) { + dev->rx_idle = 1; + Dprintk("oh dear, we are idle\n"); + dev->ihr = 4; + } -#if 0 /* Still working on the interrupt mitigation strategy */ - if (dev->ihr) - writel(dev->ihr, dev->base + IHR); + if ((ISR_RXDESC) & isr) { +#ifdef HAVE___NETIF_RX +#warning will be fast... + ; +#else + rx_irq(dev); +#endif +#if 1 /* Still working on the interrupt mitigation strategy */ + dev->ihr = 4; #endif + } + tasklet_schedule(&dev->rx_tasklet); + if (ISR_TXDESC & isr) + dev->ihr = 6; + } + + { + int ihr = 0; + while ((jiffies - dev->last_jiffies) >= HZ/4) { + dev->last_jiffies += HZ/4; + dev->last_irqs >>= 1; + } + dev->last_irqs ++; +{ +static long last_pr; +if ((jiffies - last_pr) > 2*HZ) { + last_pr = jiffies; + printk("last_irqs = %d\n", dev->last_irqs); +} +} + if (dev->last_irqs > 256) + ihr = 5; + writel(ihr, dev->base + IHR); + dev->ihr = ihr; + } } static void ns83820_do_reset(struct ns83820 *dev, u32 which) @@ -1071,9 +1153,14 @@ writel(0, dev->base + IER); readl(dev->base + IER); - dev->rx_info.up = 0; + dev->up = 0; synchronize_irq(); + /* Once more, just in case an irq reenbled */ + writel(0, dev->base + IMR); + writel(0, dev->base + IER); + readl(dev->base + IER); + ns83820_do_reset(dev, CR_RST); synchronize_irq(); @@ -1115,7 +1202,6 @@ //printk("IMR: %08x / %08x\n", readl(dev->base + IMR), dev->IMR_cache); - set_bit(0, &dev->tx_idle); netif_start_queue(&dev->net_dev); /* FIXME: wait for phy to come up */ return 0; @@ -1169,8 +1255,7 @@ if (!dev) goto out; - spin_lock_init(&dev->rx_info.lock); - spin_lock_init(&dev->tx_lock); + spin_lock_init(&dev->rx_lock); spin_lock_init(&dev->misc_lock); dev->pci_dev = pci_dev; @@ -1179,6 +1264,7 @@ dev->net_dev.owner = THIS_MODULE; PREPARE_TQUEUE(&dev->tq_refill, queue_refill, dev); + tasklet_init(&dev->rx_tasklet, rx_action, (unsigned long)dev); err = pci_enable_device(pci_dev); if (err) { @@ -1191,14 +1277,14 @@ dev->base = ioremap_nocache(addr, PAGE_SIZE); dev->tx_descs = pci_alloc_consistent(pci_dev, 4 * DESC_SIZE * NR_TX_DESC, &dev->tx_phy_descs); - dev->rx_info.descs = pci_alloc_consistent(pci_dev, - 4 * DESC_SIZE * NR_RX_DESC, &dev->rx_info.phy_descs); + dev->rx_descs = pci_alloc_consistent(pci_dev, + 4 * DESC_SIZE * NR_RX_DESC, &dev->rx_phy_descs); err = -ENOMEM; - if (!dev->base || !dev->tx_descs || !dev->rx_info.descs) + if (!dev->base || !dev->tx_descs || !dev->rx_descs) goto out_disable; dprintk("%p: %08lx %p: %08lx\n", dev->tx_descs, dev->tx_phy_descs, - dev->rx_info.descs, dev->rx_info.phy_descs); + dev->rx_descs, dev->rx_phy_descs); /* disable interrupts */ writel(0, dev->base + IMR); writel(0, dev->base + IER); @@ -1206,8 +1292,7 @@ dev->IMR_cache = 0; - setup_ee_mem_bitbanger(&dev->ee, (long)dev->base + MEAR, 3, 2, 1, 0, - 0); + setup_ee_mem_bitbanger(&dev->ee, (long)dev->base + MEAR, 3, 2, 1, 0, 0); err = request_irq(pci_dev->irq, ns83820_irq, SA_SHIRQ, dev->net_dev.name, dev); @@ -1274,7 +1359,7 @@ #endif writel(dev->CFG_cache, dev->base + CFG); - dprintk("CFG: %08x\n", dev->CFG_cache); + printk("CFG: %08x\n", dev->CFG_cache); if (readl(dev->base + SRR)) writel(readl(dev->base+0x20c) | 0xfe00, dev->base + 0x20c); @@ -1285,8 +1370,9 @@ * If only the transmit fifo was larger... */ writel(TXCFG_CSI | TXCFG_HBI | TXCFG_ATP | TXCFG_MXDMA1024 - | ((1600 / 32) * 0x100), + | ((256 / 32) * 0x100), dev->base + TXCFG); + printk("TXCFG: %08x\n", readl(dev->base + TXCFG)); /* Flush the interrupt holdoff timer */ writel(0x000, dev->base + IHR); @@ -1297,13 +1383,14 @@ */ writel(RXCFG_AEP | RXCFG_ARP | RXCFG_AIRL | RXCFG_RX_FD | RXCFG_ALP - | RXCFG_MXDMA | 0, dev->base + RXCFG); + | RXCFG_MXDMA | 63, dev->base + RXCFG); + printk("RXCFG: %08x\n", readl(dev->base + RXCFG)); /* Disable priority queueing */ writel(0, dev->base + PQCR); /* Enable IP checksum validation and detetion of VLAN headers */ - writel(VRCR_RUDPE | VRCR_RTCPE | VRCR_RIPE | VRCR_IPEN | VRCR_VTDEN, dev->base + VRCR); + writel(VRCR_IPEN | VRCR_VTDEN, dev->base + VRCR); /* Enable per-packet TCP/UDP/IP checksumming */ writel(VTCR_PPCHK, dev->base + VTCR); @@ -1340,7 +1427,7 @@ iounmap(dev->base); out_disable: pci_free_consistent(pci_dev, 4 * DESC_SIZE * NR_TX_DESC, dev->tx_descs, dev->tx_phy_descs); - pci_free_consistent(pci_dev, 4 * DESC_SIZE * NR_RX_DESC, dev->rx_info.descs, dev->rx_info.phy_descs); + pci_free_consistent(pci_dev, 4 * DESC_SIZE * NR_RX_DESC, dev->rx_descs, dev->rx_phy_descs); pci_disable_device(pci_dev); out_free: kfree(dev); @@ -1388,7 +1475,7 @@ pci_free_consistent(dev->pci_dev, 4 * DESC_SIZE * NR_TX_DESC, dev->tx_descs, dev->tx_phy_descs); pci_free_consistent(dev->pci_dev, 4 * DESC_SIZE * NR_RX_DESC, - dev->rx_info.descs, dev->rx_info.phy_descs); + dev->rx_descs, dev->rx_phy_descs); pci_disable_device(dev->pci_dev); kfree(dev); dev = next; @@ -1400,5 +1487,6 @@ MODULE_AUTHOR("Benjamin LaHaise "); MODULE_DESCRIPTION("National Semiconductor DP83820 10/100/1000 driver"); MODULE_DEVICE_TABLE(pci, pci_device_id); +//MODULE_LICENSE("GPL"); module_init(ns83820_init); module_exit(ns83820_exit); Only in work-2.4.9-ac2/drivers/net: ns83820.o Only in work-2.4.9-ac2/drivers/net/pcmcia: .depend Only in work-2.4.9-ac2/drivers/net: pcnet32.o Only in work-2.4.9-ac2/drivers/net: setup.o Only in work-2.4.9-ac2/drivers/net/sk98lin: .depend Only in work-2.4.9-ac2/drivers/net/skfp: .depend Only in work-2.4.9-ac2/drivers/net/tokenring: .depend Only in work-2.4.9-ac2/drivers/net/tulip: .21142.o.flags Only in work-2.4.9-ac2/drivers/net/tulip: .depend Only in work-2.4.9-ac2/drivers/net/tulip: .eeprom.o.flags Only in work-2.4.9-ac2/drivers/net/tulip: .interrupt.o.flags Only in work-2.4.9-ac2/drivers/net/tulip: .media.o.flags Only in work-2.4.9-ac2/drivers/net/tulip: .pnic.o.flags Only in work-2.4.9-ac2/drivers/net/tulip: .timer.o.flags Only in work-2.4.9-ac2/drivers/net/tulip: .tulip.o.flags Only in work-2.4.9-ac2/drivers/net/tulip: .tulip_core.o.flags Only in work-2.4.9-ac2/drivers/net/tulip: 21142.o Only in work-2.4.9-ac2/drivers/net/tulip: eeprom.o Only in work-2.4.9-ac2/drivers/net/tulip: interrupt.o Only in work-2.4.9-ac2/drivers/net/tulip: media.o Only in work-2.4.9-ac2/drivers/net/tulip: pnic.o Only in work-2.4.9-ac2/drivers/net/tulip: timer.o Only in work-2.4.9-ac2/drivers/net/tulip: tulip.o Only in work-2.4.9-ac2/drivers/net/tulip: tulip_core.o Only in work-2.4.9-ac2/drivers/net/wan: .depend Only in work-2.4.9-ac2/drivers/net/wan/lmc: .depend Only in work-2.4.9-ac2/drivers/net/wireless: .depend Only in work-2.4.9-ac2/drivers/nubus: .depend Only in work-2.4.9-ac2/drivers/parport: .depend Only in work-2.4.9-ac2/drivers/parport: .driver.o.flags Only in work-2.4.9-ac2/drivers/parport: driver.o Only in work-2.4.9-ac2/drivers/pci: .compat.o.flags Only in work-2.4.9-ac2/drivers/pci: .depend Only in work-2.4.9-ac2/drivers/pci: .driver.o.flags Only in work-2.4.9-ac2/drivers/pci: .names.o.flags Only in work-2.4.9-ac2/drivers/pci: .pci.o.flags Only in work-2.4.9-ac2/drivers/pci: .proc.o.flags Only in work-2.4.9-ac2/drivers/pci: .quirks.o.flags Only in work-2.4.9-ac2/drivers/pci: .setup-res.o.flags Only in work-2.4.9-ac2/drivers/pci: classlist.h Only in work-2.4.9-ac2/drivers/pci: compat.o Only in work-2.4.9-ac2/drivers/pci: devlist.h Only in work-2.4.9-ac2/drivers/pci: driver.o Only in work-2.4.9-ac2/drivers/pci: gen-devlist Only in work-2.4.9-ac2/drivers/pci: names.o Only in work-2.4.9-ac2/drivers/pci: pci.o Only in work-2.4.9-ac2/drivers/pci: proc.o Only in work-2.4.9-ac2/drivers/pci: quirks.o Only in work-2.4.9-ac2/drivers/pci: setup-res.o Only in work-2.4.9-ac2/drivers/pcmcia: .depend Only in work-2.4.9-ac2/drivers/pnp: .depend Only in work-2.4.9-ac2/drivers/pnp: .isapnp.o.flags Only in work-2.4.9-ac2/drivers/pnp: .isapnp_proc.o.flags Only in work-2.4.9-ac2/drivers/pnp: .pnp.o.flags Only in work-2.4.9-ac2/drivers/pnp: .quirks.o.flags Only in work-2.4.9-ac2/drivers/pnp: isa-pnp.o Only in work-2.4.9-ac2/drivers/pnp: isapnp.o Only in work-2.4.9-ac2/drivers/pnp: isapnp_proc.o Only in work-2.4.9-ac2/drivers/pnp: pnp.o Only in work-2.4.9-ac2/drivers/pnp: quirks.o Only in work-2.4.9-ac2/drivers/sbus: .depend Only in work-2.4.9-ac2/drivers/sbus/audio: .depend Only in work-2.4.9-ac2/drivers/sbus/char: .depend Only in work-2.4.9-ac2/drivers/scsi: .aic7xxx_old.o.flags Only in work-2.4.9-ac2/drivers/scsi: .constants.o.flags Only in work-2.4.9-ac2/drivers/scsi: .depend Only in work-2.4.9-ac2/drivers/scsi: .hosts.o.flags Only in work-2.4.9-ac2/drivers/scsi: .scsi.o.flags Only in work-2.4.9-ac2/drivers/scsi: .scsi_dma.o.flags Only in work-2.4.9-ac2/drivers/scsi: .scsi_error.o.flags Only in work-2.4.9-ac2/drivers/scsi: .scsi_ioctl.o.flags Only in work-2.4.9-ac2/drivers/scsi: .scsi_lib.o.flags Only in work-2.4.9-ac2/drivers/scsi: .scsi_merge.o.flags Only in work-2.4.9-ac2/drivers/scsi: .scsi_obsolete.o.flags Only in work-2.4.9-ac2/drivers/scsi: .scsi_proc.o.flags Only in work-2.4.9-ac2/drivers/scsi: .scsi_queue.o.flags Only in work-2.4.9-ac2/drivers/scsi: .scsi_scan.o.flags Only in work-2.4.9-ac2/drivers/scsi: .scsi_syms.o.flags Only in work-2.4.9-ac2/drivers/scsi: .scsicam.o.flags Only in work-2.4.9-ac2/drivers/scsi: .scsidrv.o.flags Only in work-2.4.9-ac2/drivers/scsi: .sd.o.flags Only in work-2.4.9-ac2/drivers/scsi: .sg.o.flags Only in work-2.4.9-ac2/drivers/scsi/aic7xxx: .depend Only in work-2.4.9-ac2/drivers/scsi: aic7xxx_old.o Only in work-2.4.9-ac2/drivers/scsi: constants.o Only in work-2.4.9-ac2/drivers/scsi: hosts.o Only in work-2.4.9-ac2/drivers/scsi: scsi.o Only in work-2.4.9-ac2/drivers/scsi: scsi_dma.o Only in work-2.4.9-ac2/drivers/scsi: scsi_error.o Only in work-2.4.9-ac2/drivers/scsi: scsi_ioctl.o Only in work-2.4.9-ac2/drivers/scsi: scsi_lib.o Only in work-2.4.9-ac2/drivers/scsi: scsi_merge.o Only in work-2.4.9-ac2/drivers/scsi: scsi_mod.o Only in work-2.4.9-ac2/drivers/scsi: scsi_obsolete.o Only in work-2.4.9-ac2/drivers/scsi: scsi_proc.o Only in work-2.4.9-ac2/drivers/scsi: scsi_queue.o Only in work-2.4.9-ac2/drivers/scsi: scsi_scan.o Only in work-2.4.9-ac2/drivers/scsi: scsi_syms.o Only in work-2.4.9-ac2/drivers/scsi: scsicam.o Only in work-2.4.9-ac2/drivers/scsi: scsidrv.o Only in work-2.4.9-ac2/drivers/scsi: sd.o Only in work-2.4.9-ac2/drivers/scsi: sd_mod.o Only in work-2.4.9-ac2/drivers/scsi: sg.o Only in work-2.4.9-ac2/drivers/sgi: .depend Only in work-2.4.9-ac2/drivers/sgi/char: .depend Only in work-2.4.9-ac2/drivers/sound: .ac97_codec.o.flags Only in work-2.4.9-ac2/drivers/sound: .depend Only in work-2.4.9-ac2/drivers/sound: .es1371.o.flags Only in work-2.4.9-ac2/drivers/sound: .sound_core.o.flags Only in work-2.4.9-ac2/drivers/sound: .sound_firmware.o.flags Only in work-2.4.9-ac2/drivers/sound: .sounddrivers.o.flags Only in work-2.4.9-ac2/drivers/sound: ac97_codec.o Only in work-2.4.9-ac2/drivers/sound/cs4281: .depend Only in work-2.4.9-ac2/drivers/sound/dmasound: .depend Only in work-2.4.9-ac2/drivers/sound/emu10k1: .audio.o.flags Only in work-2.4.9-ac2/drivers/sound/emu10k1: .cardmi.o.flags Only in work-2.4.9-ac2/drivers/sound/emu10k1: .cardmo.o.flags Only in work-2.4.9-ac2/drivers/sound/emu10k1: .cardwi.o.flags Only in work-2.4.9-ac2/drivers/sound/emu10k1: .cardwo.o.flags Only in work-2.4.9-ac2/drivers/sound/emu10k1: .depend Only in work-2.4.9-ac2/drivers/sound/emu10k1: .ecard.o.flags Only in work-2.4.9-ac2/drivers/sound/emu10k1: .efxmgr.o.flags Only in work-2.4.9-ac2/drivers/sound/emu10k1: .emu10k1.o.flags Only in work-2.4.9-ac2/drivers/sound/emu10k1: .emuadxmg.o.flags Only in work-2.4.9-ac2/drivers/sound/emu10k1: .hwaccess.o.flags Only in work-2.4.9-ac2/drivers/sound/emu10k1: .irqmgr.o.flags Only in work-2.4.9-ac2/drivers/sound/emu10k1: .main.o.flags Only in work-2.4.9-ac2/drivers/sound/emu10k1: .midi.o.flags Only in work-2.4.9-ac2/drivers/sound/emu10k1: .mixer.o.flags Only in work-2.4.9-ac2/drivers/sound/emu10k1: .passthrough.o.flags Only in work-2.4.9-ac2/drivers/sound/emu10k1: .recmgr.o.flags Only in work-2.4.9-ac2/drivers/sound/emu10k1: .timer.o.flags Only in work-2.4.9-ac2/drivers/sound/emu10k1: .voicemgr.o.flags Only in work-2.4.9-ac2/drivers/sound/emu10k1: audio.o Only in work-2.4.9-ac2/drivers/sound/emu10k1: cardmi.o Only in work-2.4.9-ac2/drivers/sound/emu10k1: cardmo.o Only in work-2.4.9-ac2/drivers/sound/emu10k1: cardwi.o Only in work-2.4.9-ac2/drivers/sound/emu10k1: cardwo.o Only in work-2.4.9-ac2/drivers/sound/emu10k1: ecard.o Only in work-2.4.9-ac2/drivers/sound/emu10k1: efxmgr.o Only in work-2.4.9-ac2/drivers/sound/emu10k1: emu10k1.o Only in work-2.4.9-ac2/drivers/sound/emu10k1: emuadxmg.o Only in work-2.4.9-ac2/drivers/sound/emu10k1: hwaccess.o Only in work-2.4.9-ac2/drivers/sound/emu10k1: irqmgr.o Only in work-2.4.9-ac2/drivers/sound/emu10k1: main.o Only in work-2.4.9-ac2/drivers/sound/emu10k1: midi.o Only in work-2.4.9-ac2/drivers/sound/emu10k1: mixer.o Only in work-2.4.9-ac2/drivers/sound/emu10k1: passthrough.o Only in work-2.4.9-ac2/drivers/sound/emu10k1: recmgr.o Only in work-2.4.9-ac2/drivers/sound/emu10k1: timer.o Only in work-2.4.9-ac2/drivers/sound/emu10k1: voicemgr.o Only in work-2.4.9-ac2/drivers/sound: es1371.o Only in work-2.4.9-ac2/drivers/sound: sound_core.o Only in work-2.4.9-ac2/drivers/sound: sound_firmware.o Only in work-2.4.9-ac2/drivers/sound: soundcore.o Only in work-2.4.9-ac2/drivers/sound: sounddrivers.o Only in work-2.4.9-ac2/drivers/tc: .depend Only in work-2.4.9-ac2/drivers/telephony: .depend Only in work-2.4.9-ac2/drivers/usb: .depend Only in work-2.4.9-ac2/drivers/usb: .hub.o.flags Only in work-2.4.9-ac2/drivers/usb: .uhci.o.flags Only in work-2.4.9-ac2/drivers/usb: .usb-debug.o.flags Only in work-2.4.9-ac2/drivers/usb: .usb.o.flags Only in work-2.4.9-ac2/drivers/usb: .usbdrv.o.flags Only in work-2.4.9-ac2/drivers/usb: hub.o Only in work-2.4.9-ac2/drivers/usb/serial: .depend Only in work-2.4.9-ac2/drivers/usb/storage: .depend Only in work-2.4.9-ac2/drivers/usb/storage: .dpcm.o.flags Only in work-2.4.9-ac2/drivers/usb/storage: .freecom.o.flags Only in work-2.4.9-ac2/drivers/usb/storage: .initializers.o.flags Only in work-2.4.9-ac2/drivers/usb/storage: .protocol.o.flags Only in work-2.4.9-ac2/drivers/usb/storage: .scsiglue.o.flags Only in work-2.4.9-ac2/drivers/usb/storage: .storage.o.flags Only in work-2.4.9-ac2/drivers/usb/storage: .transport.o.flags Only in work-2.4.9-ac2/drivers/usb/storage: .usb.o.flags Only in work-2.4.9-ac2/drivers/usb/storage: dpcm.o Only in work-2.4.9-ac2/drivers/usb/storage: freecom.o Only in work-2.4.9-ac2/drivers/usb/storage: initializers.o Only in work-2.4.9-ac2/drivers/usb/storage: protocol.o Only in work-2.4.9-ac2/drivers/usb/storage: scsiglue.o Only in work-2.4.9-ac2/drivers/usb/storage: storage.o Only in work-2.4.9-ac2/drivers/usb/storage: transport.o Only in work-2.4.9-ac2/drivers/usb/storage: usb-storage.o Only in work-2.4.9-ac2/drivers/usb/storage: usb.o Only in work-2.4.9-ac2/drivers/usb: uhci.o Only in work-2.4.9-ac2/drivers/usb: usb-debug.o Only in work-2.4.9-ac2/drivers/usb: usb.o Only in work-2.4.9-ac2/drivers/usb: usbcore.o Only in work-2.4.9-ac2/drivers/usb: usbdrv.o Only in work-2.4.9-ac2/drivers/video: .depend Only in work-2.4.9-ac2/drivers/video: .vgacon.o.flags Only in work-2.4.9-ac2/drivers/video: .video.o.flags Only in work-2.4.9-ac2/drivers/video/aty: .depend Only in work-2.4.9-ac2/drivers/video/matrox: .depend Only in work-2.4.9-ac2/drivers/video/riva: .depend Only in work-2.4.9-ac2/drivers/video/sis: .depend Only in work-2.4.9-ac2/drivers/video: vgacon.o Only in work-2.4.9-ac2/drivers/video: video.o Only in work-2.4.9-ac2/drivers/zorro: .depend Only in work-2.4.9-ac2/fs: .attr.o.flags Only in work-2.4.9-ac2/fs: .bad_inode.o.flags Only in work-2.4.9-ac2/fs: .binfmt_aout.o.flags Only in work-2.4.9-ac2/fs: .binfmt_elf.o.flags Only in work-2.4.9-ac2/fs: .binfmt_misc.o.flags Only in work-2.4.9-ac2/fs: .binfmt_script.o.flags Only in work-2.4.9-ac2/fs: .block_dev.o.flags Only in work-2.4.9-ac2/fs: .buffer.o.flags Only in work-2.4.9-ac2/fs: .char_dev.o.flags Only in work-2.4.9-ac2/fs: .dcache.o.flags Only in work-2.4.9-ac2/fs: .depend Only in work-2.4.9-ac2/fs: .devices.o.flags Only in work-2.4.9-ac2/fs: .dnotify.o.flags Only in work-2.4.9-ac2/fs: .exec.o.flags Only in work-2.4.9-ac2/fs: .fcntl.o.flags Only in work-2.4.9-ac2/fs: .fifo.o.flags Only in work-2.4.9-ac2/fs: .file.o.flags Only in work-2.4.9-ac2/fs: .file_table.o.flags Only in work-2.4.9-ac2/fs: .filesystems.o.flags Only in work-2.4.9-ac2/fs: .fs.o.flags Only in work-2.4.9-ac2/fs: .inode.o.flags Only in work-2.4.9-ac2/fs: .iobuf.o.flags Only in work-2.4.9-ac2/fs: .ioctl.o.flags Only in work-2.4.9-ac2/fs: .jbd-kernel.o.flags Only in work-2.4.9-ac2/fs: .locks.o.flags Only in work-2.4.9-ac2/fs: .namei.o.flags Only in work-2.4.9-ac2/fs: .namespace.o.flags Only in work-2.4.9-ac2/fs: .noquot.o.flags Only in work-2.4.9-ac2/fs: .open.o.flags Only in work-2.4.9-ac2/fs: .pipe.o.flags Only in work-2.4.9-ac2/fs: .read_write.o.flags Only in work-2.4.9-ac2/fs: .readdir.o.flags Only in work-2.4.9-ac2/fs: .select.o.flags Only in work-2.4.9-ac2/fs: .stat.o.flags Only in work-2.4.9-ac2/fs: .super.o.flags Only in work-2.4.9-ac2/fs/adfs: .depend Only in work-2.4.9-ac2/fs/affs: .depend Only in work-2.4.9-ac2/fs: attr.o Only in work-2.4.9-ac2/fs/autofs: .depend Only in work-2.4.9-ac2/fs/autofs4: .autofs4.o.flags Only in work-2.4.9-ac2/fs/autofs4: .depend Only in work-2.4.9-ac2/fs/autofs4: .expire.o.flags Only in work-2.4.9-ac2/fs/autofs4: .init.o.flags Only in work-2.4.9-ac2/fs/autofs4: .inode.o.flags Only in work-2.4.9-ac2/fs/autofs4: .root.o.flags Only in work-2.4.9-ac2/fs/autofs4: .symlink.o.flags Only in work-2.4.9-ac2/fs/autofs4: .waitq.o.flags Only in work-2.4.9-ac2/fs/autofs4: autofs4.o Only in work-2.4.9-ac2/fs/autofs4: expire.o Only in work-2.4.9-ac2/fs/autofs4: init.o Only in work-2.4.9-ac2/fs/autofs4: inode.o Only in work-2.4.9-ac2/fs/autofs4: root.o Only in work-2.4.9-ac2/fs/autofs4: symlink.o Only in work-2.4.9-ac2/fs/autofs4: waitq.o Only in work-2.4.9-ac2/fs: bad_inode.o Only in work-2.4.9-ac2/fs/bfs: .depend Only in work-2.4.9-ac2/fs: binfmt_aout.o Only in work-2.4.9-ac2/fs: binfmt_elf.o Only in work-2.4.9-ac2/fs: binfmt_misc.o Only in work-2.4.9-ac2/fs: binfmt_script.o Only in work-2.4.9-ac2/fs: block_dev.o Only in work-2.4.9-ac2/fs: buffer.o Only in work-2.4.9-ac2/fs: char_dev.o Only in work-2.4.9-ac2/fs/cmsfs: .depend Only in work-2.4.9-ac2/fs/coda: .depend Only in work-2.4.9-ac2/fs/cramfs: .depend Only in work-2.4.9-ac2/fs: dcache.o Only in work-2.4.9-ac2/fs/devfs: .depend Only in work-2.4.9-ac2/fs: devices.o Only in work-2.4.9-ac2/fs/devpts: .depend Only in work-2.4.9-ac2/fs/devpts: .devpts.o.flags Only in work-2.4.9-ac2/fs/devpts: .inode.o.flags Only in work-2.4.9-ac2/fs/devpts: .root.o.flags Only in work-2.4.9-ac2/fs/devpts: devpts.o Only in work-2.4.9-ac2/fs/devpts: inode.o Only in work-2.4.9-ac2/fs/devpts: root.o Only in work-2.4.9-ac2/fs: dnotify.o Only in work-2.4.9-ac2/fs/efs: .depend Only in work-2.4.9-ac2/fs: exec.o Only in work-2.4.9-ac2/fs/ext2: .acl.o.flags Only in work-2.4.9-ac2/fs/ext2: .balloc.o.flags Only in work-2.4.9-ac2/fs/ext2: .bitmap.o.flags Only in work-2.4.9-ac2/fs/ext2: .depend Only in work-2.4.9-ac2/fs/ext2: .dir.o.flags Only in work-2.4.9-ac2/fs/ext2: .ext2.o.flags Only in work-2.4.9-ac2/fs/ext2: .file.o.flags Only in work-2.4.9-ac2/fs/ext2: .fsync.o.flags Only in work-2.4.9-ac2/fs/ext2: .ialloc.o.flags Only in work-2.4.9-ac2/fs/ext2: .inode.o.flags Only in work-2.4.9-ac2/fs/ext2: .ioctl.o.flags Only in work-2.4.9-ac2/fs/ext2: .namei.o.flags Only in work-2.4.9-ac2/fs/ext2: .super.o.flags Only in work-2.4.9-ac2/fs/ext2: .symlink.o.flags Only in work-2.4.9-ac2/fs/ext2: acl.o Only in work-2.4.9-ac2/fs/ext2: balloc.o Only in work-2.4.9-ac2/fs/ext2: bitmap.o Only in work-2.4.9-ac2/fs/ext2: dir.o Only in work-2.4.9-ac2/fs/ext2: ext2.o Only in work-2.4.9-ac2/fs/ext2: file.o Only in work-2.4.9-ac2/fs/ext2: fsync.o Only in work-2.4.9-ac2/fs/ext2: ialloc.o Only in work-2.4.9-ac2/fs/ext2: inode.o Only in work-2.4.9-ac2/fs/ext2: ioctl.o Only in work-2.4.9-ac2/fs/ext2: namei.o Only in work-2.4.9-ac2/fs/ext2: super.o Only in work-2.4.9-ac2/fs/ext2: symlink.o Only in work-2.4.9-ac2/fs/ext3: .depend Only in work-2.4.9-ac2/fs/fat: .depend Only in work-2.4.9-ac2/fs: fcntl.o Only in work-2.4.9-ac2/fs: fifo.o Only in work-2.4.9-ac2/fs: file.o Only in work-2.4.9-ac2/fs: file_table.o Only in work-2.4.9-ac2/fs: filesystems.o Only in work-2.4.9-ac2/fs/freevxfs: .depend Only in work-2.4.9-ac2/fs: fs.o Only in work-2.4.9-ac2/fs/hfs: .depend Only in work-2.4.9-ac2/fs/hpfs: .depend Only in work-2.4.9-ac2/fs: inode.o Only in work-2.4.9-ac2/fs/intermezzo: .depend Only in work-2.4.9-ac2/fs: iobuf.o Only in work-2.4.9-ac2/fs: ioctl.o Only in work-2.4.9-ac2/fs/isofs: .depend Only in work-2.4.9-ac2/fs/isofs: .dir.o.flags Only in work-2.4.9-ac2/fs/isofs: .inode.o.flags Only in work-2.4.9-ac2/fs/isofs: .isofs.o.flags Only in work-2.4.9-ac2/fs/isofs: .joliet.o.flags Only in work-2.4.9-ac2/fs/isofs: .namei.o.flags Only in work-2.4.9-ac2/fs/isofs: .rock.o.flags Only in work-2.4.9-ac2/fs/isofs: .util.o.flags Only in work-2.4.9-ac2/fs/isofs: dir.o Only in work-2.4.9-ac2/fs/isofs: inode.o Only in work-2.4.9-ac2/fs/isofs: isofs.o Only in work-2.4.9-ac2/fs/isofs: joliet.o Only in work-2.4.9-ac2/fs/isofs: namei.o Only in work-2.4.9-ac2/fs/isofs: rock.o Only in work-2.4.9-ac2/fs/isofs: util.o Only in work-2.4.9-ac2/fs/jbd: .depend Only in work-2.4.9-ac2/fs: jbd-kernel.o Only in work-2.4.9-ac2/fs/jffs: .depend Only in work-2.4.9-ac2/fs/jffs2: .depend Only in work-2.4.9-ac2/fs/lockd: .clntlock.o.flags Only in work-2.4.9-ac2/fs/lockd: .clntproc.o.flags Only in work-2.4.9-ac2/fs/lockd: .depend Only in work-2.4.9-ac2/fs/lockd: .host.o.flags Only in work-2.4.9-ac2/fs/lockd: .lockd.o.flags Only in work-2.4.9-ac2/fs/lockd: .lockd_syms.o.flags Only in work-2.4.9-ac2/fs/lockd: .mon.o.flags Only in work-2.4.9-ac2/fs/lockd: .svc.o.flags Only in work-2.4.9-ac2/fs/lockd: .svc4proc.o.flags Only in work-2.4.9-ac2/fs/lockd: .svclock.o.flags Only in work-2.4.9-ac2/fs/lockd: .svcproc.o.flags Only in work-2.4.9-ac2/fs/lockd: .svcshare.o.flags Only in work-2.4.9-ac2/fs/lockd: .svcsubs.o.flags Only in work-2.4.9-ac2/fs/lockd: .xdr.o.flags Only in work-2.4.9-ac2/fs/lockd: .xdr4.o.flags Only in work-2.4.9-ac2/fs/lockd: clntlock.o Only in work-2.4.9-ac2/fs/lockd: clntproc.o Only in work-2.4.9-ac2/fs/lockd: host.o Only in work-2.4.9-ac2/fs/lockd: lockd.o Only in work-2.4.9-ac2/fs/lockd: lockd_syms.o Only in work-2.4.9-ac2/fs/lockd: mon.o Only in work-2.4.9-ac2/fs/lockd: svc.o Only in work-2.4.9-ac2/fs/lockd: svc4proc.o Only in work-2.4.9-ac2/fs/lockd: svclock.o Only in work-2.4.9-ac2/fs/lockd: svcproc.o Only in work-2.4.9-ac2/fs/lockd: svcshare.o Only in work-2.4.9-ac2/fs/lockd: svcsubs.o Only in work-2.4.9-ac2/fs/lockd: xdr.o Only in work-2.4.9-ac2/fs/lockd: xdr4.o Only in work-2.4.9-ac2/fs: locks.o Only in work-2.4.9-ac2/fs/minix: .depend Only in work-2.4.9-ac2/fs/msdos: .depend Only in work-2.4.9-ac2/fs: namei.o Only in work-2.4.9-ac2/fs: namespace.o Only in work-2.4.9-ac2/fs/ncpfs: .depend Only in work-2.4.9-ac2/fs/nfs: .depend Only in work-2.4.9-ac2/fs/nfs: .dir.o.flags Only in work-2.4.9-ac2/fs/nfs: .file.o.flags Only in work-2.4.9-ac2/fs/nfs: .flushd.o.flags Only in work-2.4.9-ac2/fs/nfs: .inode.o.flags Only in work-2.4.9-ac2/fs/nfs: .nfs.o.flags Only in work-2.4.9-ac2/fs/nfs: .nfs2xdr.o.flags Only in work-2.4.9-ac2/fs/nfs: .nfs3proc.o.flags Only in work-2.4.9-ac2/fs/nfs: .nfs3xdr.o.flags Only in work-2.4.9-ac2/fs/nfs: .proc.o.flags Only in work-2.4.9-ac2/fs/nfs: .read.o.flags Only in work-2.4.9-ac2/fs/nfs: .symlink.o.flags Only in work-2.4.9-ac2/fs/nfs: .unlink.o.flags Only in work-2.4.9-ac2/fs/nfs: .write.o.flags Only in work-2.4.9-ac2/fs/nfs: dir.o Only in work-2.4.9-ac2/fs/nfs: file.o Only in work-2.4.9-ac2/fs/nfs: flushd.o Only in work-2.4.9-ac2/fs/nfs: inode.o Only in work-2.4.9-ac2/fs/nfs: nfs.o Only in work-2.4.9-ac2/fs/nfs: nfs2xdr.o Only in work-2.4.9-ac2/fs/nfs: nfs3proc.o Only in work-2.4.9-ac2/fs/nfs: nfs3xdr.o Only in work-2.4.9-ac2/fs/nfs: proc.o Only in work-2.4.9-ac2/fs/nfs: read.o Only in work-2.4.9-ac2/fs/nfs: symlink.o Only in work-2.4.9-ac2/fs/nfs: unlink.o Only in work-2.4.9-ac2/fs/nfs: write.o Only in work-2.4.9-ac2/fs/nfsd: .auth.o.flags Only in work-2.4.9-ac2/fs/nfsd: .depend Only in work-2.4.9-ac2/fs/nfsd: .export.o.flags Only in work-2.4.9-ac2/fs/nfsd: .lockd.o.flags Only in work-2.4.9-ac2/fs/nfsd: .nfs3proc.o.flags Only in work-2.4.9-ac2/fs/nfsd: .nfs3xdr.o.flags Only in work-2.4.9-ac2/fs/nfsd: .nfscache.o.flags Only in work-2.4.9-ac2/fs/nfsd: .nfsctl.o.flags Only in work-2.4.9-ac2/fs/nfsd: .nfsd.o.flags Only in work-2.4.9-ac2/fs/nfsd: .nfsfh.o.flags Only in work-2.4.9-ac2/fs/nfsd: .nfsproc.o.flags Only in work-2.4.9-ac2/fs/nfsd: .nfssvc.o.flags Only in work-2.4.9-ac2/fs/nfsd: .nfsxdr.o.flags Only in work-2.4.9-ac2/fs/nfsd: .stats.o.flags Only in work-2.4.9-ac2/fs/nfsd: .vfs.o.flags Only in work-2.4.9-ac2/fs/nfsd: auth.o Only in work-2.4.9-ac2/fs/nfsd: export.o Only in work-2.4.9-ac2/fs/nfsd: lockd.o Only in work-2.4.9-ac2/fs/nfsd: nfs3proc.o Only in work-2.4.9-ac2/fs/nfsd: nfs3xdr.o Only in work-2.4.9-ac2/fs/nfsd: nfscache.o Only in work-2.4.9-ac2/fs/nfsd: nfsctl.o Only in work-2.4.9-ac2/fs/nfsd: nfsd.o Only in work-2.4.9-ac2/fs/nfsd: nfsfh.o Only in work-2.4.9-ac2/fs/nfsd: nfsproc.o Only in work-2.4.9-ac2/fs/nfsd: nfssvc.o Only in work-2.4.9-ac2/fs/nfsd: nfsxdr.o Only in work-2.4.9-ac2/fs/nfsd: stats.o Only in work-2.4.9-ac2/fs/nfsd: vfs.o Only in work-2.4.9-ac2/fs/nls: .depend Only in work-2.4.9-ac2/fs/nls: .nls.o.flags Only in work-2.4.9-ac2/fs/nls: .nls_base.o.flags Only in work-2.4.9-ac2/fs/nls: nls.o Only in work-2.4.9-ac2/fs/nls: nls_base.o Only in work-2.4.9-ac2/fs: noquot.o Only in work-2.4.9-ac2/fs/ntfs: .depend Only in work-2.4.9-ac2/fs: open.o Only in work-2.4.9-ac2/fs/openpromfs: .depend Only in work-2.4.9-ac2/fs/partitions: .check.o.flags Only in work-2.4.9-ac2/fs/partitions: .depend Only in work-2.4.9-ac2/fs/partitions: .msdos.o.flags Only in work-2.4.9-ac2/fs/partitions: .partitions.o.flags Only in work-2.4.9-ac2/fs/partitions: check.o Only in work-2.4.9-ac2/fs/partitions: msdos.o Only in work-2.4.9-ac2/fs/partitions: partitions.o Only in work-2.4.9-ac2/fs: pipe.o Only in work-2.4.9-ac2/fs/proc: .array.o.flags Only in work-2.4.9-ac2/fs/proc: .base.o.flags Only in work-2.4.9-ac2/fs/proc: .depend Only in work-2.4.9-ac2/fs/proc: .generic.o.flags Only in work-2.4.9-ac2/fs/proc: .inode.o.flags Only in work-2.4.9-ac2/fs/proc: .kcore.o.flags Only in work-2.4.9-ac2/fs/proc: .kmsg.o.flags Only in work-2.4.9-ac2/fs/proc: .proc.o.flags Only in work-2.4.9-ac2/fs/proc: .proc_misc.o.flags Only in work-2.4.9-ac2/fs/proc: .proc_tty.o.flags Only in work-2.4.9-ac2/fs/proc: .root.o.flags Only in work-2.4.9-ac2/fs/proc: array.o Only in work-2.4.9-ac2/fs/proc: base.o Only in work-2.4.9-ac2/fs/proc: generic.o Only in work-2.4.9-ac2/fs/proc: inode.o Only in work-2.4.9-ac2/fs/proc: kcore.o Only in work-2.4.9-ac2/fs/proc: kmsg.o Only in work-2.4.9-ac2/fs/proc: proc.o Only in work-2.4.9-ac2/fs/proc: proc_misc.o Only in work-2.4.9-ac2/fs/proc: proc_tty.o Only in work-2.4.9-ac2/fs/proc: root.o Only in work-2.4.9-ac2/fs/qnx4: .depend Only in work-2.4.9-ac2/fs/ramfs: .depend Only in work-2.4.9-ac2/fs: read_write.o Only in work-2.4.9-ac2/fs: readdir.o Only in work-2.4.9-ac2/fs/reiserfs: .depend Only in work-2.4.9-ac2/fs/romfs: .depend Only in work-2.4.9-ac2/fs: select.o Only in work-2.4.9-ac2/fs/smbfs: .depend Only in work-2.4.9-ac2/fs: stat.o Only in work-2.4.9-ac2/fs: super.o Only in work-2.4.9-ac2/fs/sysv: .depend Only in work-2.4.9-ac2/fs/udf: .depend Only in work-2.4.9-ac2/fs/ufs: .depend Only in work-2.4.9-ac2/fs/umsdos: .depend Only in work-2.4.9-ac2/fs/vfat: .depend Only in work-2.4.9-ac2/include: asm diff -ur /md0/kernels/2.4/v2.4.9-ac2/include/asm-i386/param.h work-2.4.9-ac2/include/asm-i386/param.h --- /md0/kernels/2.4/v2.4.9-ac2/include/asm-i386/param.h Fri Oct 27 14:04:43 2000 +++ work-2.4.9-ac2/include/asm-i386/param.h Tue Aug 28 17:09:15 2001 @@ -2,7 +2,8 @@ #define _ASMi386_PARAM_H #ifndef HZ -#define HZ 100 +//#define HZ 100 +#define HZ 1024 #endif #define EXEC_PAGESIZE 4096 diff -ur /md0/kernels/2.4/v2.4.9-ac2/include/asm-i386/pci.h work-2.4.9-ac2/include/asm-i386/pci.h --- /md0/kernels/2.4/v2.4.9-ac2/include/asm-i386/pci.h Tue Aug 28 17:54:45 2001 +++ work-2.4.9-ac2/include/asm-i386/pci.h Mon Sep 10 20:05:31 2001 @@ -64,7 +64,7 @@ static inline dma_addr_t pci_map_single(struct pci_dev *hwdev, void *ptr, size_t size, int direction) { - if (direction == PCI_DMA_NONE) + if (__builtin_expect((direction == PCI_DMA_NONE), 0)) BUG(); flush_write_buffers(); return virt_to_bus(ptr); @@ -80,7 +80,7 @@ static inline void pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr, size_t size, int direction) { - if (direction == PCI_DMA_NONE) + if (__builtin_expect((direction == PCI_DMA_NONE), 0)) BUG(); /* Nothing to do */ } @@ -103,7 +103,7 @@ static inline int pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg, int nents, int direction) { - if (direction == PCI_DMA_NONE) + if (__builtin_expect((direction == PCI_DMA_NONE), 0)) BUG(); flush_write_buffers(); return nents; @@ -116,7 +116,7 @@ static inline void pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg, int nents, int direction) { - if (direction == PCI_DMA_NONE) + if (__builtin_expect((direction == PCI_DMA_NONE), 0)) BUG(); /* Nothing to do */ } @@ -134,7 +134,7 @@ dma_addr_t dma_handle, size_t size, int direction) { - if (direction == PCI_DMA_NONE) + if (__builtin_expect((direction == PCI_DMA_NONE), 0)) BUG(); flush_write_buffers(); } @@ -149,7 +149,7 @@ struct scatterlist *sg, int nelems, int direction) { - if (direction == PCI_DMA_NONE) + if (__builtin_expect((direction == PCI_DMA_NONE), 0)) BUG(); flush_write_buffers(); } diff -ur /md0/kernels/2.4/v2.4.9-ac2/include/asm-i386/processor.h work-2.4.9-ac2/include/asm-i386/processor.h --- /md0/kernels/2.4/v2.4.9-ac2/include/asm-i386/processor.h Tue Aug 28 14:41:57 2001 +++ work-2.4.9-ac2/include/asm-i386/processor.h Mon Sep 10 19:59:58 2001 @@ -483,9 +483,19 @@ #ifdef CONFIG_MPENTIUMIII #define ARCH_HAS_PREFETCH +extern inline void prefetchnta(const void *x) +{ + __asm__ __volatile__ ("prefetchnta (%0)" :: "r"(x)); +} + extern inline void prefetch(const void *x) { - __asm__ __volatile__ ("prefetchnta (%0)" : : "r"(x)); + __asm__ __volatile__ ("prefetcht0 (%0)" :: "r"(x)); +} + +extern inline void prefetcht1(const void *x) +{ + __asm__ __volatile__ ("prefetcht0 (%0)" :: "r"(x)); } #elif CONFIG_X86_USE_3DNOW @@ -494,14 +504,14 @@ #define ARCH_HAS_PREFETCHW #define ARCH_HAS_SPINLOCK_PREFETCH -extern inline void prefetch(const void *x) +extern inline void prefetch(void *x) { - __asm__ __volatile__ ("prefetch (%0)" : : "r"(x)); + __asm__ __volatile__ ("prefetch (%0)" :: "r"(x)); } -extern inline void prefetchw(const void *x) +extern inline void prefetchw(void *x) { - __asm__ __volatile__ ("prefetchw (%0)" : : "r"(x)); + __asm__ __volatile__ ("prefetchw (%0)" ::"r"(x)); } #define spin_lock_prefetch(x) prefetchw(x) Only in work-2.4.9-ac2/include: config Only in work-2.4.9-ac2/include/linux: autoconf.h Only in work-2.4.9-ac2/include/linux: compile.h diff -ur /md0/kernels/2.4/v2.4.9-ac2/include/linux/etherdevice.h work-2.4.9-ac2/include/linux/etherdevice.h --- /md0/kernels/2.4/v2.4.9-ac2/include/linux/etherdevice.h Wed Aug 29 21:54:18 2001 +++ work-2.4.9-ac2/include/linux/etherdevice.h Wed Aug 29 23:12:41 2001 @@ -31,7 +31,7 @@ unsigned short type, void *daddr, void *saddr, unsigned len); extern int eth_rebuild_header(struct sk_buff *skb); -extern unsigned short eth_type_trans(struct sk_buff *skb, struct net_device *dev); +extern unsigned short FASTCALL(eth_type_trans(struct sk_buff *skb, struct net_device *dev)); extern void eth_header_cache_update(struct hh_cache *hh, struct net_device *dev, unsigned char * haddr); extern int eth_header_cache(struct neighbour *neigh, Only in work-2.4.9-ac2/include/linux: modules Only in work-2.4.9-ac2/include/linux: modversions.h diff -ur /md0/kernels/2.4/v2.4.9-ac2/include/linux/netdevice.h work-2.4.9-ac2/include/linux/netdevice.h --- /md0/kernels/2.4/v2.4.9-ac2/include/linux/netdevice.h Mon Sep 24 16:11:47 2001 +++ work-2.4.9-ac2/include/linux/netdevice.h Mon Sep 10 20:03:44 2001 @@ -554,6 +554,8 @@ extern void net_call_rx_atomic(void (*fn)(void)); #define HAVE_NETIF_RX 1 extern int netif_rx(struct sk_buff *skb); +#define HAVE___NETIF_RX 1 +extern void FASTCALL(__netif_rx(struct net_device *rx_dev, struct sk_buff *skb)); extern int dev_ioctl(unsigned int cmd, void *); extern int dev_change_flags(struct net_device *, unsigned); extern void dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev); diff -ur /md0/kernels/2.4/v2.4.9-ac2/include/linux/skbuff.h work-2.4.9-ac2/include/linux/skbuff.h --- /md0/kernels/2.4/v2.4.9-ac2/include/linux/skbuff.h Tue Aug 28 17:54:37 2001 +++ work-2.4.9-ac2/include/linux/skbuff.h Mon Sep 10 20:03:44 2001 @@ -754,9 +754,9 @@ return skb->len - skb->data_len; } -#define SKB_PAGE_ASSERT(skb) do { if (skb_shinfo(skb)->nr_frags) BUG(); } while (0) -#define SKB_FRAG_ASSERT(skb) do { if (skb_shinfo(skb)->frag_list) BUG(); } while (0) -#define SKB_LINEAR_ASSERT(skb) do { if (skb_is_nonlinear(skb)) BUG(); } while (0) +#define SKB_PAGE_ASSERT(skb) do { if (__builtin_expect((skb_shinfo(skb)->nr_frags), 0)) BUG(); } while (0) +#define SKB_FRAG_ASSERT(skb) do { if (__builtin_expect((skb_shinfo(skb)->frag_list), 0)) BUG(); } while (0) +#define SKB_LINEAR_ASSERT(skb) do { if (__builtin_expect(skb_is_nonlinear(skb), 0)) BUG(); } while (0) /* * Add data to an sk_buff @@ -784,12 +784,11 @@ static inline unsigned char *skb_put(struct sk_buff *skb, unsigned int len) { unsigned char *tmp=skb->tail; - SKB_LINEAR_ASSERT(skb); + //SKB_LINEAR_ASSERT(skb); skb->tail+=len; skb->len+=len; - if(skb->tail>skb->end) { - skb_over_panic(skb, len, current_text_addr()); - } + //if (__builtin_expect((skb->tail > skb->end), 0)) + // skb_over_panic(skb, len, current_text_addr()); return tmp; } @@ -814,7 +813,7 @@ { skb->data-=len; skb->len+=len; - if(skb->datahead) { + if (__builtin_expect((skb->data < skb->head), 0)) { skb_under_panic(skb, len, current_text_addr()); } return skb->data; @@ -823,7 +822,7 @@ static inline char *__skb_pull(struct sk_buff *skb, unsigned int len) { skb->len-=len; - if (skb->len < skb->data_len) + if (__builtin_expect((skb->len < skb->data_len), 0)) BUG(); return skb->data+=len; } @@ -841,7 +840,7 @@ static inline unsigned char * skb_pull(struct sk_buff *skb, unsigned int len) { - if (len > skb->len) + if (__builtin_expect((len > skb->len), 0)) return NULL; return __skb_pull(skb,len); } @@ -850,8 +849,8 @@ static inline char *__pskb_pull(struct sk_buff *skb, unsigned int len) { - if (len > skb_headlen(skb) && - __pskb_pull_tail(skb, len-skb_headlen(skb)) == NULL) + if (__builtin_expect((len > skb_headlen(skb) && + __pskb_pull_tail(skb, len-skb_headlen(skb)) == NULL), 0)) return NULL; skb->len -= len; return skb->data += len; @@ -859,7 +858,7 @@ static inline unsigned char * pskb_pull(struct sk_buff *skb, unsigned int len) { - if (len > skb->len) + if (__builtin_expect((len > skb->len), 0)) return NULL; return __pskb_pull(skb,len); } @@ -1091,7 +1090,7 @@ static inline void *kmap_skb_frag(const skb_frag_t *frag) { #ifdef CONFIG_HIGHMEM - if (in_irq()) + if (__builtin_expect(in_irq(), 0)) BUG(); local_bh_disable(); Only in work-2.4.9-ac2/include/linux: version.h diff -ur /md0/kernels/2.4/v2.4.9-ac2/include/net/tcp.h work-2.4.9-ac2/include/net/tcp.h --- /md0/kernels/2.4/v2.4.9-ac2/include/net/tcp.h Tue Aug 28 17:12:25 2001 +++ work-2.4.9-ac2/include/net/tcp.h Mon Sep 10 20:05:05 2001 @@ -1317,7 +1317,6 @@ static __inline__ int tcp_prequeue(struct sock *sk, struct sk_buff *skb) { struct tcp_opt *tp = &sk->tp_pinfo.af_tcp; - if (tp->ucopy.task) { __skb_queue_tail(&tp->ucopy.prequeue, skb); tp->ucopy.memory += skb->truesize; Only in work-2.4.9-ac2/init: main.o Only in work-2.4.9-ac2/init: version.o Only in work-2.4.9-ac2/ipc: .depend Only in work-2.4.9-ac2/ipc: .ipc.o.flags Only in work-2.4.9-ac2/ipc: .msg.o.flags Only in work-2.4.9-ac2/ipc: .sem.o.flags Only in work-2.4.9-ac2/ipc: .shm.o.flags Only in work-2.4.9-ac2/ipc: .util.o.flags Only in work-2.4.9-ac2/ipc: ipc.o Only in work-2.4.9-ac2/ipc: msg.o Only in work-2.4.9-ac2/ipc: sem.o Only in work-2.4.9-ac2/ipc: shm.o Only in work-2.4.9-ac2/ipc: util.o Only in work-2.4.9-ac2/kernel: .acct.o.flags Only in work-2.4.9-ac2/kernel: .capability.o.flags Only in work-2.4.9-ac2/kernel: .context.o.flags Only in work-2.4.9-ac2/kernel: .depend Only in work-2.4.9-ac2/kernel: .dma.o.flags Only in work-2.4.9-ac2/kernel: .exec_domain.o.flags Only in work-2.4.9-ac2/kernel: .exit.o.flags Only in work-2.4.9-ac2/kernel: .fork.o.flags Only in work-2.4.9-ac2/kernel: .info.o.flags Only in work-2.4.9-ac2/kernel: .itimer.o.flags Only in work-2.4.9-ac2/kernel: .kernel.o.flags Only in work-2.4.9-ac2/kernel: .kmod.o.flags Only in work-2.4.9-ac2/kernel: .ksyms.o.flags Only in work-2.4.9-ac2/kernel: .module.o.flags Only in work-2.4.9-ac2/kernel: .panic.o.flags Only in work-2.4.9-ac2/kernel: .printk.o.flags Only in work-2.4.9-ac2/kernel: .ptrace.o.flags Only in work-2.4.9-ac2/kernel: .resource.o.flags Only in work-2.4.9-ac2/kernel: .sched.o.flags Only in work-2.4.9-ac2/kernel: .signal.o.flags Only in work-2.4.9-ac2/kernel: .softirq.o.flags Only in work-2.4.9-ac2/kernel: .sys.o.flags Only in work-2.4.9-ac2/kernel: .sysctl.o.flags Only in work-2.4.9-ac2/kernel: .time.o.flags Only in work-2.4.9-ac2/kernel: .timer.o.flags Only in work-2.4.9-ac2/kernel: .uid16.o.flags Only in work-2.4.9-ac2/kernel: .user.o.flags Only in work-2.4.9-ac2/kernel: acct.o Only in work-2.4.9-ac2/kernel: capability.o Only in work-2.4.9-ac2/kernel: context.o Only in work-2.4.9-ac2/kernel: dma.o Only in work-2.4.9-ac2/kernel: exec_domain.o Only in work-2.4.9-ac2/kernel: exit.o Only in work-2.4.9-ac2/kernel: fork.o Only in work-2.4.9-ac2/kernel: info.o Only in work-2.4.9-ac2/kernel: itimer.o Only in work-2.4.9-ac2/kernel: kernel.o Only in work-2.4.9-ac2/kernel: kmod.o Only in work-2.4.9-ac2/kernel: ksyms.o Only in work-2.4.9-ac2/kernel: module.o Only in work-2.4.9-ac2/kernel: panic.o Only in work-2.4.9-ac2/kernel: printk.o Only in work-2.4.9-ac2/kernel: ptrace.o Only in work-2.4.9-ac2/kernel: resource.o Only in work-2.4.9-ac2/kernel: sched.o Only in work-2.4.9-ac2/kernel: signal.o diff -ur /md0/kernels/2.4/v2.4.9-ac2/kernel/softirq.c work-2.4.9-ac2/kernel/softirq.c --- /md0/kernels/2.4/v2.4.9-ac2/kernel/softirq.c Mon Aug 13 15:12:09 2001 +++ work-2.4.9-ac2/kernel/softirq.c Tue Aug 28 17:19:17 2001 @@ -63,7 +63,7 @@ int cpu = smp_processor_id(); __u32 pending; long flags; - __u32 mask; + int i = 0; if (in_interrupt()) return; @@ -75,7 +75,6 @@ if (pending) { struct softirq_action *h; - mask = ~pending; local_bh_disable(); restart: /* Reset the pending bitmask before enabling irqs */ @@ -95,14 +94,15 @@ local_irq_disable(); pending = softirq_pending(cpu); - if (pending & mask) { - mask &= ~pending; + if (pending && (i++ < 16)) goto restart; - } + __local_bh_enable(); - if (pending) + if (pending) { + //printk("oh bother\n"); wakeup_softirqd(cpu); + } } local_irq_restore(flags); Only in work-2.4.9-ac2/kernel: softirq.o Only in work-2.4.9-ac2/kernel: sys.o Only in work-2.4.9-ac2/kernel: sysctl.o Only in work-2.4.9-ac2/kernel: time.o Only in work-2.4.9-ac2/kernel: timer.o Only in work-2.4.9-ac2/kernel: uid16.o Only in work-2.4.9-ac2/kernel: user.o Only in work-2.4.9-ac2/lib: .brlock.o.flags Only in work-2.4.9-ac2/lib: .bust_spinlocks.o.flags Only in work-2.4.9-ac2/lib: .cmdline.o.flags Only in work-2.4.9-ac2/lib: .ctype.o.flags Only in work-2.4.9-ac2/lib: .depend Only in work-2.4.9-ac2/lib: .errno.o.flags Only in work-2.4.9-ac2/lib: .lib.a.flags Only in work-2.4.9-ac2/lib: .rwsem.o.flags Only in work-2.4.9-ac2/lib: .string.o.flags Only in work-2.4.9-ac2/lib: .vsprintf.o.flags Only in work-2.4.9-ac2/lib: brlock.o Only in work-2.4.9-ac2/lib: bust_spinlocks.o Only in work-2.4.9-ac2/lib: cmdline.o Only in work-2.4.9-ac2/lib: ctype.o Only in work-2.4.9-ac2/lib: errno.o Only in work-2.4.9-ac2/lib: lib.a Only in work-2.4.9-ac2/lib: rwsem.o Only in work-2.4.9-ac2/lib: string.o Only in work-2.4.9-ac2/lib: vsprintf.o Only in work-2.4.9-ac2/mm: .bootmem.o.flags Only in work-2.4.9-ac2/mm: .depend Only in work-2.4.9-ac2/mm: .filemap.o.flags Only in work-2.4.9-ac2/mm: .highmem.o.flags Only in work-2.4.9-ac2/mm: .memory.o.flags Only in work-2.4.9-ac2/mm: .mlock.o.flags Only in work-2.4.9-ac2/mm: .mm.o.flags Only in work-2.4.9-ac2/mm: .mmap.o.flags Only in work-2.4.9-ac2/mm: .mprotect.o.flags Only in work-2.4.9-ac2/mm: .mremap.o.flags Only in work-2.4.9-ac2/mm: .numa.o.flags Only in work-2.4.9-ac2/mm: .oom_kill.o.flags Only in work-2.4.9-ac2/mm: .page_alloc.o.flags Only in work-2.4.9-ac2/mm: .page_io.o.flags Only in work-2.4.9-ac2/mm: .shmem.o.flags Only in work-2.4.9-ac2/mm: .slab.o.flags Only in work-2.4.9-ac2/mm: .swap.o.flags Only in work-2.4.9-ac2/mm: .swap_state.o.flags Only in work-2.4.9-ac2/mm: .swapfile.o.flags Only in work-2.4.9-ac2/mm: .vmalloc.o.flags Only in work-2.4.9-ac2/mm: .vmscan.o.flags Only in work-2.4.9-ac2/mm: bootmem.o Only in work-2.4.9-ac2/mm: filemap.o Only in work-2.4.9-ac2/mm: highmem.o Only in work-2.4.9-ac2/mm: memory.o Only in work-2.4.9-ac2/mm: mlock.o Only in work-2.4.9-ac2/mm: mm.o Only in work-2.4.9-ac2/mm: mmap.o Only in work-2.4.9-ac2/mm: mprotect.o Only in work-2.4.9-ac2/mm: mremap.o Only in work-2.4.9-ac2/mm: numa.o Only in work-2.4.9-ac2/mm: oom_kill.o Only in work-2.4.9-ac2/mm: page_alloc.o Only in work-2.4.9-ac2/mm: page_io.o Only in work-2.4.9-ac2/mm: shmem.o Only in work-2.4.9-ac2/mm: slab.o Only in work-2.4.9-ac2/mm: swap.o Only in work-2.4.9-ac2/mm: swap_state.o Only in work-2.4.9-ac2/mm: swapfile.o diff -ur /md0/kernels/2.4/v2.4.9-ac2/mm/vmalloc.c work-2.4.9-ac2/mm/vmalloc.c --- /md0/kernels/2.4/v2.4.9-ac2/mm/vmalloc.c Wed Sep 5 20:18:30 2001 +++ work-2.4.9-ac2/mm/vmalloc.c Wed Sep 5 21:05:32 2001 @@ -91,8 +91,27 @@ flush_tlb_all(); } +static void alloc_area_pte_page(int gfp_mask, struct page **pagep, struct page **lastp, unsigned long size) +{ + unsigned order; + + for (order = 0; order < MAX_ORDER; order++) + if ((1U << order) > size) + break; + *pagep = *lastp = NULL; + order++; + do { + *pagep = alloc_pages(gfp_mask, --order); + if (*pagep) { + *lastp = *pagep + (1U << order); + break; + } + } while (order) ; +} + static inline int alloc_area_pte (pte_t * pte, unsigned long address, - unsigned long size, int gfp_mask, pgprot_t prot) + unsigned long size, int gfp_mask, pgprot_t prot, + struct page **pagep, struct page **lastp) { unsigned long end; @@ -102,13 +121,18 @@ end = PMD_SIZE; do { struct page * page; - spin_unlock(&init_mm.page_table_lock); - page = alloc_page(gfp_mask); - spin_lock(&init_mm.page_table_lock); + if (*pagep >= *lastp) { + spin_unlock(&init_mm.page_table_lock); + alloc_area_pte_page(gfp_mask, pagep, lastp, size); + spin_lock(&init_mm.page_table_lock); + } if (!pte_none(*pte)) printk(KERN_ERR "alloc_area_pte: page already exists\n"); + page = *pagep; if (!page) return -ENOMEM; + else + ++*pagep; set_pte(pte, mk_pte(page, prot)); address += PAGE_SIZE; pte++; @@ -116,7 +140,7 @@ return 0; } -static inline int alloc_area_pmd(pmd_t * pmd, unsigned long address, unsigned long size, int gfp_mask, pgprot_t prot) +static inline int alloc_area_pmd(pmd_t * pmd, unsigned long address, unsigned long size, int gfp_mask, pgprot_t prot, struct page **pagep, struct page **lastp) { unsigned long end; @@ -128,7 +152,7 @@ pte_t * pte = pte_alloc(&init_mm, pmd, address); if (!pte) return -ENOMEM; - if (alloc_area_pte(pte, address, end - address, gfp_mask, prot)) + if (alloc_area_pte(pte, address, end - address, gfp_mask, prot, pagep, lastp)) return -ENOMEM; address = (address + PMD_SIZE) & PMD_MASK; pmd++; @@ -140,9 +164,17 @@ int gfp_mask, pgprot_t prot) { pgd_t * dir; + struct page *page = NULL, *last = NULL; unsigned long end = address + size; int ret; + /* We try to allocate a contiguous chunk of pages for better + * cache colouring of modules. + */ + alloc_area_pte_page(gfp_mask, &page, &last, size); + if (!page) + return -ENOMEM; + dir = pgd_offset_k(address); flush_cache_all(); spin_lock(&init_mm.page_table_lock); @@ -155,7 +187,7 @@ break; ret = -ENOMEM; - if (alloc_area_pmd(pmd, address, end - address, gfp_mask, prot)) + if (alloc_area_pmd(pmd, address, end - address, gfp_mask, prot, &page, &last)) break; address = (address + PGDIR_SIZE) & PGDIR_MASK; @@ -165,6 +197,10 @@ } while (address && (address < end)); spin_unlock(&init_mm.page_table_lock); flush_tlb_all(); + + while (page && page < last) + __free_page(page++); + return ret; } Only in work-2.4.9-ac2/mm: vmalloc.o Only in work-2.4.9-ac2/mm: vmscan.o Only in work-2.4.9-ac2/net: .depend Only in work-2.4.9-ac2/net: .netsyms.o.flags Only in work-2.4.9-ac2/net: .network.o.flags Only in work-2.4.9-ac2/net: .socket.o.flags Only in work-2.4.9-ac2/net: .sysctl_net.o.flags Only in work-2.4.9-ac2/net/802: .802.o.flags Only in work-2.4.9-ac2/net/802: .depend Only in work-2.4.9-ac2/net/802: .p8023.o.flags Only in work-2.4.9-ac2/net/802: .sysctl_net_802.o.flags Only in work-2.4.9-ac2/net/802: 802.o Only in work-2.4.9-ac2/net/802: p8023.o Only in work-2.4.9-ac2/net/802: sysctl_net_802.o Only in work-2.4.9-ac2/net/appletalk: .depend Only in work-2.4.9-ac2/net/atm: .depend Only in work-2.4.9-ac2/net/ax25: .depend Only in work-2.4.9-ac2/net/bluetooth: .depend Only in work-2.4.9-ac2/net/bridge: .depend Only in work-2.4.9-ac2/net/core: .core.o.flags Only in work-2.4.9-ac2/net/core: .datagram.o.flags Only in work-2.4.9-ac2/net/core: .depend Only in work-2.4.9-ac2/net/core: .dev.o.flags Only in work-2.4.9-ac2/net/core: .dev_mcast.o.flags Only in work-2.4.9-ac2/net/core: .dst.o.flags Only in work-2.4.9-ac2/net/core: .iovec.o.flags Only in work-2.4.9-ac2/net/core: .neighbour.o.flags Only in work-2.4.9-ac2/net/core: .rtnetlink.o.flags Only in work-2.4.9-ac2/net/core: .scm.o.flags Only in work-2.4.9-ac2/net/core: .skbuff.o.flags Only in work-2.4.9-ac2/net/core: .sock.o.flags Only in work-2.4.9-ac2/net/core: .sysctl_net_core.o.flags Only in work-2.4.9-ac2/net/core: .utils.o.flags Only in work-2.4.9-ac2/net/core: core.o Only in work-2.4.9-ac2/net/core: datagram.o diff -ur /md0/kernels/2.4/v2.4.9-ac2/net/core/dev.c work-2.4.9-ac2/net/core/dev.c --- /md0/kernels/2.4/v2.4.9-ac2/net/core/dev.c Mon Aug 13 15:12:09 2001 +++ work-2.4.9-ac2/net/core/dev.c Wed Aug 29 04:40:20 2001 @@ -1398,6 +1398,102 @@ #endif /* CONFIG_NET_DIVERT */ +void __netif_rx(struct net_device *rx_dev, struct sk_buff *skb) +{ + int this_cpu = smp_processor_id(); + dev_hold(rx_dev); + if (skb->stamp.tv_sec == 0) + get_fast_time(&skb->stamp); + + skb_bond(skb); + +#ifdef CONFIG_NET_FASTROUTE + if (skb->pkt_type == PACKET_FASTROUTE) { + netdev_rx_stat[this_cpu].fastroute_deferred_out++; + dev_queue_xmit(skb); + dev_put(rx_dev); + goto out; + } +#endif + skb->h.raw = skb->nh.raw = skb->data; + { + struct packet_type *ptype, *pt_prev; + unsigned short type = skb->protocol; + + pt_prev = NULL; + for (ptype = ptype_all; ptype; ptype = ptype->next) { + if (!ptype->dev || ptype->dev == rx_dev) { + if (pt_prev) { + if (!pt_prev->data) { + deliver_to_old_ones(pt_prev, skb, 0); + } else { + atomic_inc(&skb->users); + pt_prev->func(skb, + rx_dev, + pt_prev); + } + } + pt_prev = ptype; + } + } + +#ifdef CONFIG_NET_DIVERT + if (skb->dev->divert && skb->dev->divert->divert) + handle_diverter(skb); +#endif /* CONFIG_NET_DIVERT */ + +#if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) + if (skb->dev->br_port != NULL && + br_handle_frame_hook != NULL) { + handle_bridge(skb, pt_prev); + dev_put(rx_dev); + goto out; + } +#endif + + for (ptype=ptype_base[ntohs(type)&15];ptype;ptype=ptype->next) { + if (ptype->type == type && + (!ptype->dev || ptype->dev == skb->dev)) { + if (pt_prev) { + if (!pt_prev->data) + deliver_to_old_ones(pt_prev, skb, 0); + else { + atomic_inc(&skb->users); + pt_prev->func(skb, + skb->dev, + pt_prev); + } + } + pt_prev = ptype; + } + } + + if (pt_prev) { + if (!pt_prev->data) + deliver_to_old_ones(pt_prev, skb, 1); + else + pt_prev->func(skb, skb->dev, pt_prev); + } else + kfree_skb(skb); + } + + dev_put(rx_dev); + +#ifdef CONFIG_NET_HW_FLOWCONTROL + if (queue->throttle && queue->input_pkt_queue.qlen < no_cong_thresh ) { + if (atomic_dec_and_test(&netdev_dropping)) { + queue->throttle = 0; + netdev_wakeup(); + goto softnet_break; + } + } +#endif + +out: + /* This already runs in BH context, no need to wake up BH's */ + __cpu_raise_softirq(this_cpu, NET_RX_SOFTIRQ); +} + static void net_rx_action(struct softirq_action *h) { int this_cpu = smp_processor_id(); Only in work-2.4.9-ac2/net/core: dev.o Only in work-2.4.9-ac2/net/core: dev_mcast.o Only in work-2.4.9-ac2/net/core: dst.o Only in work-2.4.9-ac2/net/core: iovec.o Only in work-2.4.9-ac2/net/core: neighbour.o Only in work-2.4.9-ac2/net/core: rtnetlink.o Only in work-2.4.9-ac2/net/core: scm.o Only in work-2.4.9-ac2/net/core: skbuff.o Only in work-2.4.9-ac2/net/core: sock.o Only in work-2.4.9-ac2/net/core: sysctl_net_core.o Only in work-2.4.9-ac2/net/core: utils.o Only in work-2.4.9-ac2/net/decnet: .depend Only in work-2.4.9-ac2/net/econet: .depend Only in work-2.4.9-ac2/net/ethernet: .depend Only in work-2.4.9-ac2/net/ethernet: .eth.o.flags Only in work-2.4.9-ac2/net/ethernet: .ethernet.o.flags Only in work-2.4.9-ac2/net/ethernet: .sysctl_net_ether.o.flags Only in work-2.4.9-ac2/net/ethernet: eth.o Only in work-2.4.9-ac2/net/ethernet: ethernet.o Only in work-2.4.9-ac2/net/ethernet: sysctl_net_ether.o Only in work-2.4.9-ac2/net/ipv4: .af_inet.o.flags Only in work-2.4.9-ac2/net/ipv4: .arp.o.flags Only in work-2.4.9-ac2/net/ipv4: .depend Only in work-2.4.9-ac2/net/ipv4: .devinet.o.flags Only in work-2.4.9-ac2/net/ipv4: .fib_frontend.o.flags Only in work-2.4.9-ac2/net/ipv4: .fib_hash.o.flags Only in work-2.4.9-ac2/net/ipv4: .fib_semantics.o.flags Only in work-2.4.9-ac2/net/ipv4: .icmp.o.flags Only in work-2.4.9-ac2/net/ipv4: .igmp.o.flags Only in work-2.4.9-ac2/net/ipv4: .inetpeer.o.flags Only in work-2.4.9-ac2/net/ipv4: .ip_forward.o.flags Only in work-2.4.9-ac2/net/ipv4: .ip_fragment.o.flags Only in work-2.4.9-ac2/net/ipv4: .ip_input.o.flags Only in work-2.4.9-ac2/net/ipv4: .ip_options.o.flags Only in work-2.4.9-ac2/net/ipv4: .ip_output.o.flags Only in work-2.4.9-ac2/net/ipv4: .ip_sockglue.o.flags Only in work-2.4.9-ac2/net/ipv4: .ipv4.o.flags Only in work-2.4.9-ac2/net/ipv4: .proc.o.flags Only in work-2.4.9-ac2/net/ipv4: .protocol.o.flags Only in work-2.4.9-ac2/net/ipv4: .raw.o.flags Only in work-2.4.9-ac2/net/ipv4: .route.o.flags Only in work-2.4.9-ac2/net/ipv4: .sysctl_net_ipv4.o.flags Only in work-2.4.9-ac2/net/ipv4: .tcp.o.flags Only in work-2.4.9-ac2/net/ipv4: .tcp_input.o.flags Only in work-2.4.9-ac2/net/ipv4: .tcp_ipv4.o.flags Only in work-2.4.9-ac2/net/ipv4: .tcp_minisocks.o.flags Only in work-2.4.9-ac2/net/ipv4: .tcp_output.o.flags Only in work-2.4.9-ac2/net/ipv4: .tcp_timer.o.flags Only in work-2.4.9-ac2/net/ipv4: .udp.o.flags Only in work-2.4.9-ac2/net/ipv4: .utils.o.flags Only in work-2.4.9-ac2/net/ipv4: af_inet.o Only in work-2.4.9-ac2/net/ipv4: arp.o Only in work-2.4.9-ac2/net/ipv4: devinet.o Only in work-2.4.9-ac2/net/ipv4: fib_frontend.o Only in work-2.4.9-ac2/net/ipv4: fib_hash.o Only in work-2.4.9-ac2/net/ipv4: fib_semantics.o Only in work-2.4.9-ac2/net/ipv4: icmp.o Only in work-2.4.9-ac2/net/ipv4: igmp.o Only in work-2.4.9-ac2/net/ipv4: inetpeer.o Only in work-2.4.9-ac2/net/ipv4: ip_forward.o Only in work-2.4.9-ac2/net/ipv4: ip_fragment.o Only in work-2.4.9-ac2/net/ipv4: ip_input.o Only in work-2.4.9-ac2/net/ipv4: ip_options.o Only in work-2.4.9-ac2/net/ipv4: ip_output.o Only in work-2.4.9-ac2/net/ipv4: ip_sockglue.o Only in work-2.4.9-ac2/net/ipv4: ipv4.o Only in work-2.4.9-ac2/net/ipv4/netfilter: .depend Only in work-2.4.9-ac2/net/ipv4: proc.o Only in work-2.4.9-ac2/net/ipv4: protocol.o Only in work-2.4.9-ac2/net/ipv4: raw.o Only in work-2.4.9-ac2/net/ipv4: route.o Only in work-2.4.9-ac2/net/ipv4: sysctl_net_ipv4.o Only in work-2.4.9-ac2/net/ipv4: tcp.o Only in work-2.4.9-ac2/net/ipv4: tcp_input.o Only in work-2.4.9-ac2/net/ipv4: tcp_ipv4.o Only in work-2.4.9-ac2/net/ipv4: tcp_minisocks.o Only in work-2.4.9-ac2/net/ipv4: tcp_output.o Only in work-2.4.9-ac2/net/ipv4: tcp_timer.o Only in work-2.4.9-ac2/net/ipv4: udp.o Only in work-2.4.9-ac2/net/ipv4: utils.o Only in work-2.4.9-ac2/net/ipv6: .depend Only in work-2.4.9-ac2/net/ipx: .depend Only in work-2.4.9-ac2/net/irda: .depend Only in work-2.4.9-ac2/net/irda/ircomm: .depend Only in work-2.4.9-ac2/net/irda/irlan: .depend Only in work-2.4.9-ac2/net/irda/irnet: .depend Only in work-2.4.9-ac2/net/khttpd: .depend Only in work-2.4.9-ac2/net/lapb: .depend Only in work-2.4.9-ac2/net/netlink: .depend Only in work-2.4.9-ac2/net/netrom: .depend diff -ur /md0/kernels/2.4/v2.4.9-ac2/net/netsyms.c work-2.4.9-ac2/net/netsyms.c --- /md0/kernels/2.4/v2.4.9-ac2/net/netsyms.c Mon Aug 27 15:08:45 2001 +++ work-2.4.9-ac2/net/netsyms.c Wed Aug 29 04:17:15 2001 @@ -481,6 +481,7 @@ EXPORT_SYMBOL(skb_clone); EXPORT_SYMBOL(skb_copy); EXPORT_SYMBOL(netif_rx); +EXPORT_SYMBOL(__netif_rx); EXPORT_SYMBOL(dev_add_pack); EXPORT_SYMBOL(dev_remove_pack); EXPORT_SYMBOL(dev_get); Only in work-2.4.9-ac2/net: netsyms.o Only in work-2.4.9-ac2/net: network.o Only in work-2.4.9-ac2/net/packet: .af_packet.o.flags Only in work-2.4.9-ac2/net/packet: .depend Only in work-2.4.9-ac2/net/packet: .packet.o.flags Only in work-2.4.9-ac2/net/packet: af_packet.o Only in work-2.4.9-ac2/net/packet: packet.o Only in work-2.4.9-ac2/net/rose: .depend Only in work-2.4.9-ac2/net/sched: .depend Only in work-2.4.9-ac2/net/sched: .sch_generic.o.flags Only in work-2.4.9-ac2/net/sched: .sched.o.flags Only in work-2.4.9-ac2/net/sched: sch_generic.o Only in work-2.4.9-ac2/net/sched: sched.o Only in work-2.4.9-ac2/net: socket.o Only in work-2.4.9-ac2/net/sunrpc: .auth.o.flags Only in work-2.4.9-ac2/net/sunrpc: .auth_null.o.flags Only in work-2.4.9-ac2/net/sunrpc: .auth_unix.o.flags Only in work-2.4.9-ac2/net/sunrpc: .clnt.o.flags Only in work-2.4.9-ac2/net/sunrpc: .depend Only in work-2.4.9-ac2/net/sunrpc: .pmap_clnt.o.flags Only in work-2.4.9-ac2/net/sunrpc: .sched.o.flags Only in work-2.4.9-ac2/net/sunrpc: .stats.o.flags Only in work-2.4.9-ac2/net/sunrpc: .sunrpc.o.flags Only in work-2.4.9-ac2/net/sunrpc: .sunrpc_syms.o.flags Only in work-2.4.9-ac2/net/sunrpc: .svc.o.flags Only in work-2.4.9-ac2/net/sunrpc: .svcauth.o.flags Only in work-2.4.9-ac2/net/sunrpc: .svcsock.o.flags Only in work-2.4.9-ac2/net/sunrpc: .sysctl.o.flags Only in work-2.4.9-ac2/net/sunrpc: .xdr.o.flags Only in work-2.4.9-ac2/net/sunrpc: .xprt.o.flags Only in work-2.4.9-ac2/net/sunrpc: auth.o Only in work-2.4.9-ac2/net/sunrpc: auth_null.o Only in work-2.4.9-ac2/net/sunrpc: auth_unix.o Only in work-2.4.9-ac2/net/sunrpc: clnt.o Only in work-2.4.9-ac2/net/sunrpc: pmap_clnt.o Only in work-2.4.9-ac2/net/sunrpc: sched.o Only in work-2.4.9-ac2/net/sunrpc: stats.o Only in work-2.4.9-ac2/net/sunrpc: sunrpc.o Only in work-2.4.9-ac2/net/sunrpc: sunrpc_syms.o Only in work-2.4.9-ac2/net/sunrpc: svc.o Only in work-2.4.9-ac2/net/sunrpc: svcauth.o Only in work-2.4.9-ac2/net/sunrpc: svcsock.o Only in work-2.4.9-ac2/net/sunrpc: sysctl.o Only in work-2.4.9-ac2/net/sunrpc: xdr.o Only in work-2.4.9-ac2/net/sunrpc: xprt.o Only in work-2.4.9-ac2/net: sysctl_net.o Only in work-2.4.9-ac2/net/unix: .af_unix.o.flags Only in work-2.4.9-ac2/net/unix: .depend Only in work-2.4.9-ac2/net/unix: .garbage.o.flags Only in work-2.4.9-ac2/net/unix: .sysctl_net_unix.o.flags Only in work-2.4.9-ac2/net/unix: .unix.o.flags Only in work-2.4.9-ac2/net/unix: af_unix.o Only in work-2.4.9-ac2/net/unix: garbage.o Only in work-2.4.9-ac2/net/unix: sysctl_net_unix.o Only in work-2.4.9-ac2/net/unix: unix.o Only in work-2.4.9-ac2/net/wanrouter: .depend Only in work-2.4.9-ac2/net/x25: .depend Only in work-2.4.9-ac2/scripts/lxdialog: checklist.o Only in work-2.4.9-ac2/scripts/lxdialog: inputbox.o Only in work-2.4.9-ac2/scripts/lxdialog: lxdialog Only in work-2.4.9-ac2/scripts/lxdialog: lxdialog.o Only in work-2.4.9-ac2/scripts/lxdialog: menubox.o Only in work-2.4.9-ac2/scripts/lxdialog: msgbox.o Only in work-2.4.9-ac2/scripts/lxdialog: textbox.o Only in work-2.4.9-ac2/scripts/lxdialog: util.o Only in work-2.4.9-ac2/scripts/lxdialog: yesno.o Only in work-2.4.9-ac2/scripts: mkdep Only in work-2.4.9-ac2/scripts: split-include Only in work-2.4.9-ac2: vmlinux