]> git.neil.brown.name Git - history.git/commitdiff
Import 2.1.86 2.1.86
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:14:40 +0000 (15:14 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:14:40 +0000 (15:14 -0500)
310 files changed:
CREDITS
Documentation/filesystems/isofs.txt
Documentation/stallion.txt
Makefile
arch/alpha/config.in
arch/alpha/kernel/alpha_ksyms.c
arch/alpha/kernel/entry.S
arch/alpha/kernel/traps.c
arch/alpha/lib/Makefile
arch/arm/kernel/irq.c
arch/i386/kernel/entry.S
arch/i386/kernel/head.S
arch/i386/kernel/io_apic.c
arch/i386/kernel/irq.c
arch/i386/kernel/irq.h
arch/i386/kernel/signal.c
arch/i386/kernel/smp.c
arch/m68k/config.in
arch/ppc/kernel/irq.c
arch/sparc/ap1000/bnet.c
arch/sparc/ap1000/tnet.c
arch/sparc/config.in
arch/sparc/kernel/irq.c
arch/sparc/kernel/smp.c
arch/sparc64/config.in
drivers/ap1000/bif.c
drivers/ap1000/mac.c
drivers/block/genhd.c
drivers/block/md.c
drivers/block/paride/pt.c
drivers/block/ps2esdi.c
drivers/cdrom/cdu31a.c
drivers/cdrom/cm206.c
drivers/cdrom/mcd.c
drivers/cdrom/mcdx.c
drivers/cdrom/sbpcd.c
drivers/char/Config.in
drivers/char/apm_bios.c
drivers/char/conmakehash.c
drivers/char/console.c
drivers/char/istallion.c
drivers/char/lp.c
drivers/char/rocket.c
drivers/char/stallion.c
drivers/char/sysrq.c
drivers/char/vc_screen.c
drivers/isdn/avmb1/b1capi.c
drivers/isdn/avmb1/b1lli.c
drivers/isdn/avmb1/capi.c
drivers/isdn/avmb1/capidrv.c
drivers/isdn/hisax/avm_a1.c
drivers/isdn/hisax/callc.c
drivers/isdn/hisax/elsa.c
drivers/isdn/hisax/isdnl1.c
drivers/isdn/hisax/isdnl2.c
drivers/isdn/hisax/isdnl3.c
drivers/isdn/hisax/ix1_micro.c
drivers/isdn/hisax/l3_1tr6.c
drivers/isdn/hisax/l3dss1.c
drivers/isdn/hisax/tei.c
drivers/isdn/hisax/teles0.c
drivers/isdn/hisax/teles3.c
drivers/isdn/icn/icn.c
drivers/isdn/isdn_audio.c
drivers/isdn/isdn_common.c
drivers/isdn/isdn_net.c
drivers/isdn/isdn_ppp.c
drivers/isdn/isdn_tty.c
drivers/isdn/pcbit/drv.c
drivers/isdn/pcbit/layer2.c
drivers/isdn/sc/packet.c
drivers/misc/parport_pc.c
drivers/misc/parport_procfs.c
drivers/net/3c501.c
drivers/net/3c505.c
drivers/net/3c507.c
drivers/net/3c509.c
drivers/net/3c523.c
drivers/net/3c59x.c
drivers/net/8390.c
drivers/net/a2065.c
drivers/net/apricot.c
drivers/net/arc-rimi.c
drivers/net/arcnet.c
drivers/net/ariadne.c
drivers/net/at1700.c
drivers/net/atari_bionet.c
drivers/net/atari_pamsnet.c
drivers/net/atarilance.c
drivers/net/atp.c
drivers/net/com20020.c
drivers/net/com90io.c
drivers/net/com90xx.c
drivers/net/cops.c
drivers/net/cs89x0.c
drivers/net/de4x5.c
drivers/net/de600.c
drivers/net/de620.c
drivers/net/defxx.c
drivers/net/depca.c
drivers/net/dgrs.c
drivers/net/dlci.c
drivers/net/dummy.c
drivers/net/eepro.c
drivers/net/eepro100.c
drivers/net/eexpress.c
drivers/net/eql.c
drivers/net/eth16i.c
drivers/net/ethertap.c
drivers/net/ewrk3.c
drivers/net/fmv18x.c
drivers/net/hamradio/bpqether.c
drivers/net/hamradio/dmascc.c
drivers/net/hamradio/hdlcdrv.c
drivers/net/hamradio/mkiss.c
drivers/net/hamradio/pi2.c
drivers/net/hamradio/pt.c
drivers/net/hamradio/scc.c
drivers/net/hp100.c
drivers/net/hydra.c
drivers/net/ibmtr.c
drivers/net/ipddp.c
drivers/net/lance.c
drivers/net/lapbether.c
drivers/net/loopback.c
drivers/net/ltpc.c
drivers/net/mace.c
drivers/net/myri_sbus.c
drivers/net/ni5010.c
drivers/net/ni52.c
drivers/net/ni65.c
drivers/net/pcnet32.c
drivers/net/plip.c
drivers/net/ppp.c
drivers/net/sdla_fr.c
drivers/net/sdla_ppp.c
drivers/net/sdla_x25.c
drivers/net/seeq8005.c
drivers/net/sgiseeq.c
drivers/net/shaper.c
drivers/net/sk_g16.c
drivers/net/skeleton.c
drivers/net/slip.c
drivers/net/smc9194.c
drivers/net/sonic.c
drivers/net/strip.c
drivers/net/sunhme.c
drivers/net/sunlance.c
drivers/net/sunqe.c
drivers/net/tlan.c
drivers/net/tulip.c
drivers/net/wavelan.c
drivers/net/x25_asy.c
drivers/net/znet.c
drivers/scsi/Config.in
drivers/scsi/advansys.c
drivers/scsi/sr_ioctl.c
drivers/scsi/sr_vendor.c
drivers/sound/Config.in
drivers/sound/sequencer.c
drivers/sound/sound_calls.h
drivers/sound/sound_timer.c
drivers/sound/soundcard.c
drivers/sound/sscape.c
drivers/sound/uart6850.c
drivers/sound/v_midi.c
fs/affs/namei.c
fs/binfmt_elf.c
fs/coda/file.c
fs/coda/pioctl.c
fs/coda/super.c
fs/coda/symlink.c
fs/ext2/inode.c
fs/ext2/namei.c
fs/inode.c
fs/isofs/inode.c
fs/minix/namei.c
fs/nfsd/export.c
fs/sysv/CHANGES
fs/sysv/namei.c
include/asm-alpha/a.out.h
include/asm-alpha/elf.h
include/asm-alpha/processor.h
include/asm-alpha/signal.h
include/asm-alpha/unistd.h
include/asm-i386/elf.h
include/asm-i386/semaphore.h
include/asm-i386/signal.h
include/asm-i386/system.h
include/asm-i386/unistd.h
include/asm-m68k/elf.h
include/asm-ppc/elf.h
include/asm-sparc/elf.h
include/asm-sparc64/elf.h
include/linux/apm_bios.h
include/linux/cd1400.h
include/linux/cdk.h
include/linux/comstats.h
include/linux/ctype.h
include/linux/elf.h
include/linux/fs.h
include/linux/iso_fs.h
include/linux/iso_fs_i.h
include/linux/iso_fs_sb.h
include/linux/istallion.h
include/linux/lp.h
include/linux/module.h
include/linux/personality.h
include/linux/sc26198.h
include/linux/sched.h
include/linux/skbuff.h
include/linux/stallion.h
include/net/ip.h
init/main.c
kernel/acct.c
kernel/ksyms.c
kernel/module.c
kernel/printk.c
kernel/sched.c
net/802/llc_macinit.c
net/802/llc_sendpdu.c
net/802/p8022.c
net/802/p8022tr.c
net/802/psnap.c
net/appletalk/aarp.c
net/appletalk/ddp.c
net/ax25/af_ax25.c
net/ax25/ax25_in.c
net/ax25/ax25_ip.c
net/ax25/ax25_out.c
net/ax25/ax25_route.c
net/ax25/ax25_subr.c
net/core/datagram.c
net/core/dev.c
net/core/dst.c
net/core/neighbour.c
net/core/profile.c
net/core/rtnetlink.c
net/core/skbuff.c
net/core/sock.c
net/ipv4/af_inet.c
net/ipv4/arp.c
net/ipv4/icmp.c
net/ipv4/igmp.c
net/ipv4/ip_forward.c
net/ipv4/ip_fragment.c
net/ipv4/ip_fw.c
net/ipv4/ip_gre.c
net/ipv4/ip_input.c
net/ipv4/ip_masq_app.c
net/ipv4/ip_options.c
net/ipv4/ip_output.c
net/ipv4/ip_sockglue.c
net/ipv4/ipconfig.c
net/ipv4/ipip.c
net/ipv4/ipmr.c
net/ipv4/rarp.c
net/ipv4/raw.c
net/ipv4/route.c
net/ipv4/tcp.c
net/ipv4/tcp_input.c
net/ipv4/tcp_ipv4.c
net/ipv4/tcp_output.c
net/ipv4/udp.c
net/ipv6/exthdrs.c
net/ipv6/icmp.c
net/ipv6/ip6_fw.c
net/ipv6/ip6_input.c
net/ipv6/ip6_output.c
net/ipv6/ndisc.c
net/ipv6/raw.c
net/ipv6/reassembly.c
net/ipv6/route.c
net/ipv6/sit.c
net/ipv6/tcp_ipv6.c
net/ipv6/udp.c
net/ipx/af_ipx.c
net/lapb/lapb_in.c
net/lapb/lapb_out.c
net/lapb/lapb_subr.c
net/netbeui/af_netbeui.c
net/netbeui/netbeui_llc.c
net/netbeui/netbeui_name.c
net/netrom/af_netrom.c
net/netrom/nr_dev.c
net/netrom/nr_in.c
net/netrom/nr_out.c
net/netrom/nr_subr.c
net/packet/af_packet.c
net/rose/af_rose.c
net/rose/rose_dev.c
net/rose/rose_link.c
net/rose/rose_route.c
net/rose/rose_subr.c
net/sched/sch_csz.c
net/sched/sch_fifo.c
net/sched/sch_generic.c
net/sched/sch_red.c
net/sched/sch_sfq.c
net/sched/sch_tbf.c
net/unix/af_unix.c
net/x25/af_x25.c
net/x25/x25_dev.c
net/x25/x25_in.c
net/x25/x25_link.c
net/x25/x25_out.c
net/x25/x25_subr.c
scripts/header.tk
scripts/tkgen.c
scripts/tkparse.c

diff --git a/CREDITS b/CREDITS
index 90896f9d9606d3ad86d95f5d5ece1ded05baf849..3fe64ef4c0e950a20fcb572b52e9a92975ddfdf4 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -420,11 +420,11 @@ S: S-143 32 VARBY
 S: Sweden
 
 N: Paal-Kristian Engstad
-E: engstad@funcom.com
+E: engstad@intermetrics.com
 D: Kernel smbfs (to mount WfW, NT and OS/2 network drives.)
-S: Oscars gt. 35
-S: N-0258 OSLO
-S: Norway
+S: 17101 Springdale Street #225
+S: Huntington Beach, California 92649
+S: USA
 
 N: Doug Evans
 E: dje@cygnus.com
@@ -1594,7 +1594,7 @@ E: torvalds@transmeta.com
 W: http://www.cs.helsinki.fi/~torvalds/
 P: 1024/A86B35C5 96 54 50 29 EC 11 44 7A  BE 67 3C 24 03 13 62 C8
 D: Original kernel hacker
-S: 3665 Benton Street #36
+S: 1050 Woodduck Avenue
 S: Santa Clara, California 95051
 S: USA
 
index 8c826f197cb1c12df49579dfa0095124f6f376b4..2f0a4249e4a3c6c5e7a565628d71e7e28ff321fa 100644 (file)
@@ -1,9 +1,5 @@
 Mount options that are the same as for msdos and vfat partitions.
 
-  conv=binary   Data is returned exactly as is, with CRLF's.  [default]
-  conv=text     (Carriage return, line feed) is replaced with newline.
-  conv=mtext    (Carriage return, line feed) is returned as is (?).
-  conv=auto     Chooses, file by file, conv=binary or conv=text (by guessing)
   gid=nnn      All files in the partition will be in group nnn.
   uid=nnn      All files in the partition will be owned by user id nnn.
   umask=nnn    The permission mask (see umask(1)) for the partition.
index d33d056f6e421dec3281e8afb6a8ff88cfc3e656..aff00034e212ae6100d88e265f116820df079f40 100644 (file)
@@ -2,10 +2,10 @@
 Stallion Multiport Serial Driver Readme
 ---------------------------------------
 
-Copyright (C) 1994-1997,  Stallion Technologies (support@stallion.com).
+Copyright (C) 1994-1998,  Stallion Technologies (support@stallion.com).
 
-Version:   5.4.1
-Date:      19DEC97
+Version:   5.4.3
+Date:      04FEB98
 
 
 
@@ -20,7 +20,7 @@ the true Stallion intelligent multiport boards - EasyConnection 8/64
 If you are using any of the Stallion intelligent multiport boards (Brumby,
 ONboard, EasyConnection 8/64 (ISA or EISA)) with Linux you will need to
 get the driver utility package. This package is available at most of the
-Linux archive sites (and on CD's that contain these archives). The file
+Linux archive sites (and on CD-ROMs that contain these archives). The file
 will be called stallion-X.X.X.tar.gz where X.X.X will be the version
 number. In particular this package contains the board embedded executable
 images that are required for these boards. It also contains the downloader
@@ -31,12 +31,12 @@ the latest version of the driver utility package. Other sites that usually
 have the latest version are tsx-11.mit.edu, sunsite.unc.edu and their
 mirrors.
 
-ftp.stallion.com:/drivers/ata5/Linux/stallion-5.4.0.tar.gz
-tsx-11.mit.edu:/pub/linux/BETA/serial/stallion/stallion-5.4.0.tar.gz
-sunsite.unc.edu:/pub/Linux/kernel/patches/serial/stallion-5.4.0.tar.gz
+ftp.stallion.com:/drivers/ata5/Linux/stallion-5.4.2.tar.gz
+tsx-11.mit.edu:/pub/linux/packages/stallion/stallion-5.4.2.tar.gz
+sunsite.unc.edu:/pub/Linux/kernel/patches/serial/stallion-5.4.2.tar.gz
 
 As of the printing of this document the latest version of the driver
-utility package is 5.4.0. If a later version is now available then you
+utility package is 5.4.2. If a later version is now available then you
 should use the latest version.
 
 If you are using the EasyIO, EasyConnection 8/32 or EasyConnection 8/64-PCI
index 5e5b7db9d980c3e87a186b5b0635f6f4dda4b416..2577292db10f22e03bc1a33161554950c04d4d61 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 2
 PATCHLEVEL = 1
-SUBLEVEL = 85
+SUBLEVEL = 86
 
 ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/)
 
@@ -12,9 +12,6 @@ ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/)
 # NOTE! SMP is experimental. See the file Documentation/SMP.txt
 #
 SMP = 1
-#
-# SMP profiling options
-# SMP_PROF = 1
 
 .EXPORT_ALL_VARIABLES:
 
@@ -97,11 +94,6 @@ endif
 ifdef SMP
 CFLAGS += -D__SMP__
 AFLAGS += -D__SMP__
-
-ifdef SMP_PROF
-CFLAGS += -D__SMP_PROF__
-AFLAGS += -D__SMP_PROF__
-endif
 endif
 
 #
index aff036696d0019c6fe3483ac3398501b1d4e62e6..c751f2574c2bff8c8d4045ae2e265e7da39cc161 100644 (file)
@@ -227,9 +227,6 @@ source fs/Config.in
 source fs/nls/Config.in
 
 source drivers/char/Config.in
-if [ "$CONFIG_RTC" != "n" ]; then
-  bool '  ARC console time' CONFIG_RTC_ARC y
-fi
 
 mainmenu_option next_comment
 comment 'Sound'
index c9b6eea236a7dd4296b151022bf11b402aea675b..6534e33e0e1f5edb63c8e581247831bed496c96c 100644 (file)
@@ -56,6 +56,9 @@ EXPORT_SYMBOL(_readl);
 EXPORT_SYMBOL(_writeb);
 EXPORT_SYMBOL(_writew);
 EXPORT_SYMBOL(_writel);
+EXPORT_SYMBOL(_memcpy_fromio);
+EXPORT_SYMBOL(_memcpy_toio);
+EXPORT_SYMBOL(_memset_io);
 EXPORT_SYMBOL(insb);
 EXPORT_SYMBOL(insw);
 EXPORT_SYMBOL(insl);
@@ -101,9 +104,11 @@ EXPORT_SYMBOL(sys_wait4);
 
 /* Networking helper routines. */
 EXPORT_SYMBOL(csum_tcpudp_magic);
-EXPORT_SYMBOL(ip_fast_csum);
 EXPORT_SYMBOL(ip_compute_csum);
+EXPORT_SYMBOL(ip_fast_csum);
 EXPORT_SYMBOL(csum_partial_copy);
+EXPORT_SYMBOL(csum_partial_copy_from_user);
+EXPORT_SYMBOL(csum_ipv6_magic);
 
 /*
  * The following are specially called from the uaccess assembly stubs.
index cd8541380a82cd6bc77e5a8f19e2317317cc02ca..b7e3c097347a848c6f116c291b220fd591be7843 100644 (file)
@@ -10,7 +10,7 @@
 #define rti    .long PAL_rti
 #define SIGCHLD        20
 
-#define NR_SYSCALLS 360
+#define NR_SYSCALLS 370
 #define osf_vfork sys_fork
 
 /*
@@ -529,7 +529,7 @@ entSys:
        lda     $4,NR_SYSCALLS($31)
        stq     $16,SP_OFF+24($30)
        lda     $5,sys_call_table
-       lda     $27,alpha_ni_syscall
+       lda     $27,sys_ni_syscall
        cmpult  $0,$4,$4
        ldq     $3,TASK_FLAGS($8)
        stq     $17,SP_OFF+32($30)
@@ -854,7 +854,7 @@ sys_call_table:
        .quad alpha_ni_syscall
        .quad alpha_ni_syscall                  /* 110 */
        .quad sys_sigsuspend
-       .quad alpha_ni_syscall
+       .quad sys_ni_syscall
        .quad sys_recvmsg
        .quad sys_sendmsg
        .quad alpha_ni_syscall                  /* 115 */
@@ -1081,7 +1081,7 @@ sys_call_table:
        .quad sys_sched_get_priority_max        /* 335 */
        .quad sys_sched_get_priority_min
        .quad sys_sched_rr_get_interval
-       .quad alpha_ni_syscall /* sys_afs_syscall */
+       .quad sys_ni_syscall                    /* sys_afs_syscall */
        .quad sys_newuname
        .quad sys_nanosleep                     /* 340 */
        .quad sys_mremap
@@ -1101,8 +1101,15 @@ sys_call_table:
        .quad sys_rt_sigtimedwait               /* 355 */
        .quad sys_rt_sigqueueinfo
        .quad sys_rt_sigsuspend
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall
-       .quad alpha_ni_syscall                  /* 360 */
+       .quad sys_select
+       .quad sys_gettimeofday
+       .quad sys_settimeofday                  /* 360 */
+       .quad sys_getitimer
+       .quad sys_setitimer
+       .quad sys_utimes
+       .quad sys_getrusage
+       .quad sys_wait4                         /* 365 */
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall
+       .quad sys_ni_syscall                    /* 369 */
index 14a8e20107fb22c5ece133c0119438db63ed68cf..64bb5ac4c2a559525ca99458559d4f434bc07fe0 100644 (file)
@@ -863,9 +863,9 @@ asmlinkage long alpha_ni_syscall(unsigned long a0, unsigned long a1,
                                 unsigned long a4, unsigned long a5,
                                 struct pt_regs regs)
 {
-       /* Only report OSF system calls.  */
-       if (regs.r0 != 112 && regs.r0 < 300)
-               printk("<sc %ld(%lx,%lx,%lx)>", regs.r0, a0, a1, a2);
+       /* We only get here for OSF system calls, minus #112;
+          the rest go to sys_ni_syscall.  */
+       printk("<sc %ld(%lx,%lx,%lx)>", regs.r0, a0, a1, a2);
        return -ENOSYS;
 }
 
index 28dc3d45176ba157b79f048d61489f9e7e12cd3c..7c1e37bac683c48cd87cb6b94630422b40db165d 100644 (file)
@@ -6,15 +6,8 @@ OBJS  = __divqu.o __remqu.o __divlu.o __remlu.o memset.o memcpy.o io.o \
        checksum.o csum_partial_copy.o strlen.o \
        strcat.o strcpy.o strncat.o strncpy.o stxcpy.o stxncpy.o \
        strchr.o strrchr.o \
-       copy_user.o clear_user.o strncpy_from_user.o strlen_user.o
-
-ifeq ($(CONFIG_IPV6),y)
-  OBJS += csum_ipv6_magic.o
-else
-  ifeq ($(CONFIG_IPV6),m)
-    OBJS += csum_ipv6_magic.o
-  endif
-endif
+       copy_user.o clear_user.o strncpy_from_user.o strlen_user.o \
+       csum_ipv6_magic.o
 
 lib.a: $(OBJS)
        $(AR) rcs lib.a $(OBJS)
index a294a06346b1e4b7c5394ad059ca506eeb347001..41c67a5047895025342851614ff96367bac0ff48 100644 (file)
 #include <asm/irq-no.h>
 #include <asm/arch/irq.h>
 
-#ifdef __SMP_PROF__
-extern volatile unsigned long smp_local_timer_ticks[1+NR_CPUS];
-#endif
-
 unsigned int local_irq_count[NR_CPUS];
 #ifdef __SMP__
 atomic_t __arm_bh_counter;
index a13a96dab026714837643e7f00bf46acb0cd7c17..14b82b45b884ab9cc476afcc6e0a61a8372a0232 100644 (file)
@@ -366,7 +366,7 @@ ENTRY(sys_call_table)
        .long SYMBOL_NAME(sys_time)
        .long SYMBOL_NAME(sys_mknod)
        .long SYMBOL_NAME(sys_chmod)            /* 15 */
-       .long SYMBOL_NAME(sys_chown)
+       .long SYMBOL_NAME(sys_lchown)
        .long SYMBOL_NAME(sys_ni_syscall)                               /* old break syscall holder */
        .long SYMBOL_NAME(sys_stat)
        .long SYMBOL_NAME(sys_lseek)
@@ -532,7 +532,7 @@ ENTRY(sys_call_table)
        .long SYMBOL_NAME(sys_rt_sigsuspend)
        .long SYMBOL_NAME(sys_pread)            /* 180 */
        .long SYMBOL_NAME(sys_pwrite)
-       .long SYMBOL_NAME(sys_lchown);
+       .long SYMBOL_NAME(sys_chown)
        
        .rept NR_syscalls-182
                .long SYMBOL_NAME(sys_ni_syscall)
index b319fbe7ac8ea7ffcc921a2a222b44158c9b784c..c8a6f86ea4f441163e0b04ebcc8e49aa4f63745d 100644 (file)
@@ -11,7 +11,6 @@
 #include <linux/tasks.h>
 #include <linux/linkage.h>
 #include <asm/segment.h>
-#include <linux/config.h>
 
 #define CL_MAGIC_ADDR  0x90020
 #define CL_MAGIC       0xA33F
@@ -423,11 +422,7 @@ ignore_int:
  * of tasks we can have..
  */
 #define IDT_ENTRIES    256
-#ifdef CONFIG_APM
-#define GDT_ENTRIES    (11+2*NR_TASKS)
-#else
-#define GDT_ENTRIES    (8+2*NR_TASKS)
-#endif
+#define GDT_ENTRIES    (12+2*NR_TASKS)
 
 
 .globl SYMBOL_NAME(idt)
@@ -637,9 +632,8 @@ ENTRY(gdt_table)
        .quad 0x00cff2000000ffff        /* 0x2b user   4GB data at 0x00000000 */
        .quad 0x0000000000000000        /* not used */
        .quad 0x0000000000000000        /* not used */
+       .quad 0x00c0920000000000        /* 0x40 APM set up for bad BIOS's */
+       .quad 0x00c09a0000000000        /* 0x48 APM CS    code */
+       .quad 0x00809a0000000000        /* 0x50 APM CS 16 code (16 bit) */
+       .quad 0x00c0920000000000        /* 0x58 APM DS    data */
        .fill 2*NR_TASKS,8,0            /* space for LDT's and TSS's etc */
-#ifdef CONFIG_APM
-       .quad 0x00c09a0000000000        /* APM CS    code */
-       .quad 0x00809a0000000000        /* APM CS 16 code (16 bit) */
-       .quad 0x00c0920000000000        /* APM DS    data */
-#endif
index 0fdb5c047ef2e4247a5938fc35d3083a37353409..be074cac680f13098e831e1b62f8ddd36232537e 100644 (file)
@@ -191,10 +191,12 @@ int find_irq_entry(int pin)
 {
        int i;
 
-       for (i=mp_irq_entries-1; i>=0; i--) {
-               if (mp_irqs[i].mpc_dstirq == pin)
+       for (i=0; i<mp_irq_entries; i++)
+               if ( (mp_irqs[i].mpc_irqtype == 0x00) &&
+                       (mp_irqs[i].mpc_dstirq == pin))
+
                        return i;
-       }
+
        return -1;
 }
 
@@ -397,11 +399,11 @@ int IO_APIC_get_PCI_irq_vector (int bus, int slot, int pci_pin)
        for (i=0; i<mp_irq_entries; i++) {
                int lbus = mp_irqs[i].mpc_srcbus;
 
-               if (IO_APIC_IRQ(i) &&
+               if (IO_APIC_IRQ(mp_irqs[i].mpc_dstirq) &&
                    (mp_bus_id_to_type[lbus] == MP_BUS_PCI) &&
                    !mp_irqs[i].mpc_irqtype &&
-                   (bus == mp_irqs[i].mpc_srcbus) &&
-                   (slot == (mp_irqs[i].mpc_srcbusirq >> 2)) &&
+                   (bus == mp_bus_id_to_pci_bus[mp_irqs[i].mpc_srcbus]) &&
+                   (slot == ((mp_irqs[i].mpc_srcbusirq >> 2) & 0x1f)) &&
                    (pci_pin == (mp_irqs[i].mpc_srcbusirq & 3)))
 
                        return mp_irqs[i].mpc_dstirq;
@@ -409,6 +411,30 @@ int IO_APIC_get_PCI_irq_vector (int bus, int slot, int pci_pin)
        return -1;
 }
 
+/*
+ * There is a nasty bug in some older SMP boards, their mptable lies
+ * about the timer IRQ. We do the following to work around the situation:
+ *
+ *     - timer IRQ defaults to IO-APIC IRQ
+ *     - if this function detects that timer IRQs are defunct, then we fall
+ *       back to ISA timer IRQs
+ */
+static int timer_irq_works (void)
+{
+       unsigned int t1=jiffies;
+       unsigned long flags;
+
+       save_flags(flags);
+       sti();
+
+       udelay(100*1000);
+
+       if (jiffies-t1>1)
+               return 1;
+
+       return 0;
+}
+
 void print_IO_APIC (void)
 {
        int i;
@@ -506,6 +532,8 @@ struct ioapic_list_entry {
 struct ioapic_list_entry ioapic_whitelist [] = {
 
        { "INTEL   "    ,       "PR440FX     "  },
+       { "INTEL   "    ,       "82440FX     "  },
+       { "AIR     "    ,       "KDI         "  },
        { 0             ,       0               }
 };
 
@@ -527,7 +555,15 @@ static int in_ioapic_list (struct ioapic_list_entry * table)
 
 static int ioapic_whitelisted (void)
 {
+/*
+ * Right now, whitelist everything to see whether the new parsing
+ * routines really do work for everybody..
+ */
+#if 1
+       return 1;
+#else
        return in_ioapic_list(ioapic_whitelist);
+#endif
 }
 
 static int ioapic_blacklisted (void)
@@ -579,7 +615,7 @@ void setup_IO_APIC (void)
                pirqs_enabled)
        {
                printk("ENABLING IO-APIC IRQs\n");
-               io_apic_irqs = ~((1<<0)|(1<<2)|(1<<13));
+               io_apic_irqs = ~((1<<2)|(1<<13));
        } else {
                if (ioapic_blacklisted())
                        printk(" blacklisted board, DISABLING IO-APIC IRQs\n");
@@ -593,6 +629,14 @@ void setup_IO_APIC (void)
        init_IO_APIC_traps();
        setup_IO_APIC_irqs ();
 
+       if (!timer_irq_works ()) {
+               make_8259A_irq(0);
+               if (!timer_irq_works ())
+                       panic("IO-APIC + timer doesnt work!");
+               printk("..MP-BIOS bug: i8254 timer not connected to IO-APIC\n");
+               printk("..falling back to 8259A-based timer interrupt\n");
+       }
+
        printk("nr of MP irq sources: %d.\n", mp_irq_entries);
        printk("nr of IOAPIC registers: %d.\n", nr_ioapic_registers);
        print_IO_APIC();
index f5e61f727f1f833c08d85bb6634b8d18580e65e1..95e126dd2ff41be6ca58619aa0722809f03a7672 100644 (file)
@@ -719,6 +719,14 @@ void enable_irq(unsigned int irq)
        irq_handles[irq]->enable(irq);
 }
 
+void make_8259A_irq (unsigned int irq)
+{
+       io_apic_irqs &= ~(1<<irq);
+       irq_handles[irq] = &i8259A_irq_type;
+       disable_irq(irq);
+       enable_irq(irq);
+}
+
 /*
  * Careful! The 8259A is a fragile beast, it pretty
  * much _has_ to be done exactly like this (mask it
index 74a529dac4ae9bba47656e2b8b4c02f66622e7de..1bf0b10dbe50579e0f7df90adf828b7fa58160be 100644 (file)
@@ -18,6 +18,7 @@ void ack_APIC_irq (void);
 void setup_IO_APIC (void);
 void init_IO_APIC_traps(void);
 int IO_APIC_get_PCI_irq_vector (int bus, int slot, int fn);
+void make_8259A_irq (unsigned int irq);
 
 #ifdef __SMP__
  extern unsigned int io_apic_irqs;
@@ -34,6 +35,7 @@ enum mp_bustype {
        MP_BUS_PCI
 };
 extern int mp_bus_id_to_type [MAX_MP_BUSSES];
+extern int mp_bus_id_to_pci_bus [MAX_MP_BUSSES];
 extern char ioapic_OEM_ID [16];
 extern char ioapic_Product_ID [16];
 
index 2ed384eeeb2cd94f612556169b6df4c723765df1..12a777b5c8bd60e6deccda7298eb681481d8df89 100644 (file)
@@ -365,21 +365,33 @@ setup_sigcontext(struct sigcontext *sc, struct _fpstate *fpstate,
        /* non-iBCS2 extensions.. */
        __put_user(mask, &sc->oldmask);
        __put_user(current->tss.cr2, &sc->cr2);
-}      
+}
+
+/*
+ * Determine which stack to use..
+ */
+static inline unsigned long sigstack_esp(struct k_sigaction *ka, struct pt_regs * regs)
+{
+       unsigned long esp;
+
+       /* Default to using normal stack */
+       esp = regs->esp;
+
+       /* This is the legacy signal stack switching. */
+       if ((regs->xss & 0xffff) != __USER_DS &&
+           !(ka->sa.sa_flags & SA_RESTORER) &&
+           ka->sa.sa_restorer)
+               esp = (unsigned long) ka->sa.sa_restorer;
+
+       return esp;
+}
 
 static void setup_frame(int sig, struct k_sigaction *ka,
                        sigset_t *set, struct pt_regs * regs)
 {
        struct sigframe *frame;
 
-       frame = (struct sigframe *)((regs->esp - sizeof(*frame)) & -8);
-
-       /* XXX: Check here if we need to switch stacks.. */
-
-       /* This is legacy signal stack switching.  */
-       if ((regs->xss & 0xffff) != __USER_DS
-           && !(ka->sa.sa_flags & SA_RESTORER) && ka->sa.sa_restorer)
-               frame = (struct sigframe *) ka->sa.sa_restorer;
+       frame = (struct sigframe *)((sigstack_esp(ka, regs) - sizeof(*frame)) & -8);
 
        if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
                goto segv_and_exit;
@@ -441,14 +453,7 @@ static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
 {
        struct rt_sigframe *frame;
 
-       frame = (struct rt_sigframe *)((regs->esp - sizeof(*frame)) & -8);
-
-       /* XXX: Check here if we need to switch stacks.. */
-
-       /* This is legacy signal stack switching.  */
-       if ((regs->xss & 0xffff) != __USER_DS
-           && !(ka->sa.sa_flags & SA_RESTORER) && ka->sa.sa_restorer)
-               frame = (struct rt_sigframe *) ka->sa.sa_restorer;
+       frame = (struct rt_sigframe *)((sigstack_esp(ka, regs) - sizeof(*frame)) & -8);
 
        if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
                goto segv_and_exit;
index 52b41c79033e1e200166cb61bf41a2c5ce157079..ef94dc97166bbe99eef39dfebec49a5118b27d39 100644 (file)
@@ -52,6 +52,8 @@
 
 #include "irq.h"
 
+spinlock_t semaphore_wake_lock = SPIN_LOCK_UNLOCKED;
+
 extern unsigned long start_kernel, _etext;
 extern void update_one_process( struct task_struct *p,
                                unsigned long ticks, unsigned long user,
@@ -148,6 +150,8 @@ const char lk_lockmsg[] = "lock from interrupt context at %p\n";
 int mp_bus_id_to_type [MAX_MP_BUSSES] = { -1, };
 extern int mp_irq_entries;
 extern struct mpc_config_intsrc mp_irqs [MAX_IRQ_SOURCES];
+int mp_bus_id_to_pci_bus [MAX_MP_BUSSES] = { -1, };
+int mp_current_pci_id = 0;
 
 /* #define SMP_DEBUG */
 
@@ -336,9 +340,13 @@ __initfunc(static int smp_read_mpc(struct mp_config_table *mpc))
                                        mp_bus_id_to_type[m->mpc_busid] =
                                                MP_BUS_ISA;
                                else
-                               if (strncmp(m->mpc_bustype,"PCI",3) == 0)
+                               if (strncmp(m->mpc_bustype,"PCI",3) == 0) {
                                        mp_bus_id_to_type[m->mpc_busid] =
                                                MP_BUS_PCI;
+                                       mp_bus_id_to_pci_bus[m->mpc_busid] =
+                                               mp_current_pci_id;
+                                       mp_current_pci_id++;
+                               }
                                mpt+=sizeof(*m);
                                count+=sizeof(*m);
                                break;
index ab460947b18608c50843b11fa1565a354da600b6..66d6d4f73187c47dc373ba04ed6781dcac4fcc8c 100644 (file)
@@ -129,7 +129,7 @@ dep_tristate 'SCSI disk support' CONFIG_BLK_DEV_SD $CONFIG_SCSI
 dep_tristate 'SCSI tape support' CONFIG_CHR_DEV_ST $CONFIG_SCSI
 dep_tristate 'SCSI CD-ROM support' CONFIG_BLK_DEV_SR $CONFIG_SCSI
 if [ "$CONFIG_BLK_DEV_SR" != "n" ]; then
-  bool '  Enable vendor-specific extentions (for SCSI CDROM)' CONFIG_BLK_DEV_SR_VENDOR
+  bool '  Enable vendor-specific extensions (for SCSI CDROM)' CONFIG_BLK_DEV_SR_VENDOR
 fi
 dep_tristate 'SCSI generic support' CONFIG_CHR_DEV_SG $CONFIG_SCSI
 
index d60829be451bd4ba0d7549e7181b8232cc8b54bd..4616d59a2505c10ce6879eac97d3d552043492f9 100644 (file)
@@ -224,10 +224,6 @@ int get_irq_list(char *buf)
                }
                len += sprintf(buf+len, "\n");
        }
-#ifdef __SMP_PROF__
-       len+=sprintf(buf+len, "IPI: %8lu received\n",
-               ipi_count);
-#endif
        len += sprintf(buf+len, "99: %10u   spurious or short\n",
                       spurious_interrupts);
        return len;
index 974501d795f4c280e1253ed4b841ad2c027330e8..4174968e0c6f14019d773141c9764947b77a8d67 100644 (file)
@@ -584,7 +584,7 @@ static void bif_intr_runqueue(void)
                if (q->req.type == REQ_IP) {
                        struct sk_buff *skb = (struct sk_buff *)q->data;
                        write_bif(skb->data,q->data_size,1,1);       
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
                } else {
                        write_bif(q->data,q->data_size,1,1);
                        if (!(q->flags & BIF_NOCOPY))
@@ -718,7 +718,7 @@ int bif_send_ip(int cid, struct sk_buff *skb)
        q = (struct bif_queue *)kmalloc(sizeof(*q), GFP_ATOMIC);
        if (!q) {
                /* yikes! */
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                return(-ENOMEM);
        }
        
@@ -1021,7 +1021,7 @@ static void bif_dma_complete(void)
        }
        
        if (skb_out) {
-               dev_kfree_skb(skb_out, FREE_WRITE);
+               dev_kfree_skb(skb_out);
                skb_out = NULL;
        }
        
index c5095a015169fe2f20363390c626c82e16cac3b3..830a49152280006d8587daa2de91ef8221bff97d 100644 (file)
@@ -596,11 +596,10 @@ void tnet_send_ip(int cid,struct sk_buff *skb)
                int *info = (int *)skb->data; /* re-use the header */
                info[0] = (int)data;
                info[1] = size;
-               info[2] = tnet_add_completion(free_skb,(int)skb,(int)FREE_WRITE);
+               info[2] = tnet_add_completion(free_skb, (int)skb, 0);
                tnet_send(cid,TNET_IP,info,sizeof(int)*3,0,0);
        } else {
-               flag = tnet_add_completion(free_skb,
-                                          (int)skb,(int)FREE_WRITE);
+               flag = tnet_add_completion(free_skb, (int)skb, 0);
                tnet_send(cid,TNET_IP_SMALL,data,size,0,flag);
                tnet_stats.small_packets_sent++;
        }
index 9510c0c0a848183878dfe4edd208b2df7418b255..d7902e88694c9c6fd4b7dcfe471d650963c46bac 100644 (file)
@@ -110,7 +110,7 @@ if [ "$CONFIG_SCSI" != "n" ]; then
        dep_tristate 'SCSI tape support' CONFIG_CHR_DEV_ST $CONFIG_SCSI
        dep_tristate 'SCSI CDROM support' CONFIG_BLK_DEV_SR $CONFIG_SCSI
        if [ "$CONFIG_BLK_DEV_SR" != "n" ]; then
-         bool '  Enable vendor-specific extentions (for SCSI CDROM)' CONFIG_BLK_DEV_SR_VENDOR
+         bool '  Enable vendor-specific extensions (for SCSI CDROM)' CONFIG_BLK_DEV_SR_VENDOR
        fi
        dep_tristate 'SCSI generic support' CONFIG_CHR_DEV_SG $CONFIG_SCSI
 
index 83a0c4c7cf95cb8380e1060c5a49f1e69b20cf9b..08c0be5c6f96fd1617449462237eb46b3a2db68d 100644 (file)
 #include <asm/hardirq.h>
 #include <asm/softirq.h>
 
-#ifdef __SMP_PROF__
-extern volatile unsigned long smp_local_timer_ticks[1+NR_CPUS];
-#endif
-
 /*
  * Dave Redman (djhr@tadpole.co.uk)
  *
@@ -137,109 +133,6 @@ int get_irq_list(char *buf)
        return len;
 }
 
-#ifdef __SMP_PROF__
-
-static unsigned int int_count[NR_CPUS][NR_IRQS] = {{0},};
-
-extern unsigned int prof_multiplier[NR_CPUS];
-extern unsigned int prof_counter[NR_CPUS];
-
-int get_smp_prof_list(char *buf) {
-       int i,j, len = 0;
-       struct irqaction * action;
-       unsigned long sum_spins = 0;
-       unsigned long sum_spins_syscall = 0;
-       unsigned long sum_spins_sys_idle = 0;
-       unsigned long sum_smp_idle_count = 0;
-       unsigned long sum_local_timer_ticks = 0;
-
-       for (i=0;i<smp_num_cpus;i++) {
-               int cpunum = cpu_logical_map[i];
-               sum_spins+=smp_spins[cpunum];
-               sum_spins_syscall+=smp_spins_syscall[cpunum];
-               sum_spins_sys_idle+=smp_spins_sys_idle[cpunum];
-               sum_smp_idle_count+=smp_idle_count[cpunum];
-               sum_local_timer_ticks+=smp_local_timer_ticks[cpunum];
-       }
-
-       len += sprintf(buf+len,"CPUS: %10i \n", smp_num_cpus);
-       len += sprintf(buf+len,"            SUM ");
-       for (i=0;i<smp_num_cpus;i++)
-               len += sprintf(buf+len,"        P%1d ",cpu_logical_map[i]);
-       len += sprintf(buf+len,"\n");
-       for (i = 0 ; i < NR_IRQS ; i++) {
-               action = *(i + irq_action);
-               if (!action || !action->handler)
-                       continue;
-               len += sprintf(buf+len, "%3d: %10d ",
-                       i, kstat.interrupts[i]);
-               for (j=0;j<smp_num_cpus;j++)
-                       len+=sprintf(buf+len, "%10d ",
-                               int_count[cpu_logical_map[j]][i]);
-               len += sprintf(buf+len, "%c %s",
-                       (action->flags & SA_INTERRUPT) ? '+' : ' ',
-                       action->name);
-               for (action=action->next; action; action = action->next) {
-                       len += sprintf(buf+len, ",%s %s",
-                               (action->flags & SA_INTERRUPT) ? " +" : "",
-                               action->name);
-               }
-               len += sprintf(buf+len, "\n");
-       }
-       len+=sprintf(buf+len, "LCK: %10lu",
-               sum_spins);
-
-       for (i=0;i<smp_num_cpus;i++)
-               len+=sprintf(buf+len," %10lu",smp_spins[cpu_logical_map[i]]);
-
-       len +=sprintf(buf+len,"   spins from int\n");
-
-       len+=sprintf(buf+len, "LCK: %10lu",
-               sum_spins_syscall);
-
-       for (i=0;i<smp_num_cpus;i++)
-               len+=sprintf(buf+len," %10lu",smp_spins_syscall[cpu_logical_map[i]]);
-
-       len +=sprintf(buf+len,"   spins from syscall\n");
-
-       len+=sprintf(buf+len, "LCK: %10lu",
-               sum_spins_sys_idle);
-
-       for (i=0;i<smp_num_cpus;i++)
-               len+=sprintf(buf+len," %10lu",smp_spins_sys_idle[cpu_logical_map[i]]);
-
-       len +=sprintf(buf+len,"   spins from sysidle\n");
-       len+=sprintf(buf+len,"IDLE %10lu",sum_smp_idle_count);
-
-       for (i=0;i<smp_num_cpus;i++)
-               len+=sprintf(buf+len," %10lu",smp_idle_count[cpu_logical_map[i]]);
-
-       len +=sprintf(buf+len,"   idle ticks\n");
-
-       len+=sprintf(buf+len,"TICK %10lu",sum_local_timer_ticks);
-       for (i=0;i<smp_num_cpus;i++)
-               len+=sprintf(buf+len," %10lu",smp_local_timer_ticks[cpu_logical_map[i]]);
-
-       len +=sprintf(buf+len,"   local APIC timer ticks\n");
-
-       len+=sprintf(buf+len,"MULT:          ");
-       for (i=0;i<smp_num_cpus;i++)
-               len+=sprintf(buf+len," %10u",prof_multiplier[cpu_logical_map[i]]);
-       len +=sprintf(buf+len,"   profiling multiplier\n");
-
-       len+=sprintf(buf+len,"COUNT:         ");
-       for (i=0;i<smp_num_cpus;i++)
-               len+=sprintf(buf+len," %10u",prof_counter[cpu_logical_map[i]]);
-
-       len +=sprintf(buf+len,"   profiling counter\n");
-
-       len+=sprintf(buf+len, "IPI: %10lu   received\n",
-               ipi_count);
-
-       return len;
-}
-#endif 
-
 void free_irq(unsigned int irq, void *dev_id)
 {
        struct irqaction * action;
index 57894b89f29113e038b1c44baede50767094dfca..c33f09abd9b1091527c90df30307c2bdfc958123 100644 (file)
@@ -66,16 +66,6 @@ volatile int cpu_logical_map[NR_CPUS];
 struct klock_info klock_info = { KLOCK_CLEAR, 0 };
 
 volatile unsigned long ipi_count;
-#ifdef __SMP_PROF__
-volatile unsigned long smp_spins[NR_CPUS]={0};
-volatile unsigned long smp_spins_syscall[NR_CPUS]={0};
-volatile unsigned long smp_spins_syscall_cur[NR_CPUS]={0};
-volatile unsigned long smp_spins_sys_idle[NR_CPUS]={0};
-volatile unsigned long smp_idle_count[1+NR_CPUS]={0,};
-#endif
-#if defined (__SMP_PROF__)
-volatile unsigned long smp_idle_map=0;
-#endif
 
 volatile int smp_process_available=0;
 
@@ -605,8 +595,6 @@ static inline void sparc_do_profile(unsigned long pc)
 
 #endif
 
-volatile unsigned long smp_local_timer_ticks[1+NR_CPUS]={0,};
-
 unsigned int prof_multiplier[NR_CPUS];
 unsigned int prof_counter[NR_CPUS];
 
@@ -645,9 +633,6 @@ void smp_percpu_timer_interrupt(struct pt_regs *regs)
                }
                prof_counter[cpu] = prof_multiplier[cpu];
        }
-#ifdef __SMP_PROF__
-       smp_local_timer_ticks[cpu]++;
-#endif
 }
 
 extern unsigned int lvl14_resolution;
index dc6336c0172d3875d98632227d3d01d8b61a1bdb..97e9972f0ff2707223378f17abc0206257af1f9f 100644 (file)
@@ -138,7 +138,7 @@ if [ "$CONFIG_SCSI" != "n" ]; then
        dep_tristate 'SCSI tape support' CONFIG_CHR_DEV_ST $CONFIG_SCSI
        dep_tristate 'SCSI CDROM support' CONFIG_BLK_DEV_SR $CONFIG_SCSI
        if [ "$CONFIG_BLK_DEV_SR" != "n" ]; then
-         bool '  Enable vendor-specific extentions (for SCSI CDROM)' CONFIG_BLK_DEV_SR_VENDOR
+         bool '  Enable vendor-specific extensions (for SCSI CDROM)' CONFIG_BLK_DEV_SR_VENDOR
        fi
        dep_tristate 'SCSI generic support' CONFIG_CHR_DEV_SG $CONFIG_SCSI
 
index 45ae418f460989f806a74c09e08147af712a0832..20c26ce583ea33fd8917b6ba3153a497735baf8f 100644 (file)
@@ -242,7 +242,7 @@ int bif_rx(struct sk_buff *skb)
 
        if (bif_device == NULL) {
                printk("bif: bif_device is NULL in bif_rx\n");
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                return 0;
        }
        skb->dev = bif_device;
index c17b4eec74fc361ecc7e45f393ea4b2b1c61700b..8e85ff555adeef694701aacda63ba738c9b95dfe 100644 (file)
@@ -803,7 +803,7 @@ void mac_process(void)
                    memcpy(msp->cur_mbuf.ptr - 3, el->skb->data, 
                           ROUND4(el->skb->len));
                    mac_queue_frame((struct mac_buf *)&msp->cur_mbuf);
-                   dev_kfree_skb(el->skb, FREE_WRITE);
+                   dev_kfree_skb(el->skb);
                    kfree_s(el, sizeof(*el));
                    continue;
                }
@@ -1096,7 +1096,7 @@ void mac_dma_complete(void)
        printk("mac_dma_complete(): Calling mac_queue_frame\n");
 #endif
        mac_queue_frame((struct mac_buf *)&msp->cur_mbuf);
-       dev_kfree_skb(msp->cur_macq->skb, FREE_WRITE);
+       dev_kfree_skb(msp->cur_macq->skb);
        kfree_s((struct mac_buf *)msp->cur_macq, sizeof(*(msp->cur_macq)));
        msp->cur_macq = NULL;
 #if MAC_DEBUG
index 06ec5fad382496683a9a5b41bd3da38ea3fe1067..5f8fb1444f0587d601523112012201749b5f41a7 100644 (file)
@@ -280,7 +280,7 @@ solaris_x86_partition(struct gendisk *hd, kdev_t dev, long offset) {
        for(i=0; i<SOLARIS_X86_NUMSLICE; i++) {
                s = &v->v_slice[i];
 
-               if (s->s_tag == 0)
+               if (s->s_size == 0)
                        continue;
                printk(" [s%d]", i);
                /* solaris partitions are relative to current MS-DOS
index 817342efed446c88780de0e1c7f1d5fe24583ca4..4feeb0ce920fa5158460f3c2d0a5a408130d3dbd 100644 (file)
@@ -61,7 +61,7 @@
 #include <asm/atomic.h>
 
 #ifdef CONFIG_MD_BOOT
-extern dev_t name_to_dev_t(char *line) __init;
+extern kdev_t name_to_kdev_t(char *line) __init;
 #endif
 
 static struct hd_struct md_hd_struct[MAX_MD_DEV];
@@ -1196,7 +1196,7 @@ __initfunc(void md_setup(char *str,int *ints))
 __initfunc(void do_md_setup(char *str,int *ints))
 {
        int minor, pers, factor, fault;
-       dev_t dev;
+       kdev_t dev;
        int i=1;
 
        if(ints[0] < 4) {
@@ -1254,9 +1254,9 @@ __initfunc(void do_md_setup(char *str,int *ints))
    
          pers=pers | factor | (fault << FAULT_SHIFT);   
    
-         while( str && (dev = name_to_dev_t(str))) {
+         while( str && (dev = name_to_kdev_t(str))) {
            do_md_add (minor, dev);
-           if(str = strchr (str, ','))
+           if((str = strchr (str, ',')) != NULL)
              str++;
          }
 
index b6b3d3fcb942598ee0849b3a91395d19dffb0f43..922e98271cdbb68c1b5db15bf49abc8b0b9c8d9e 100644 (file)
@@ -680,7 +680,7 @@ static int pt_detect( void )
        return -1;
 }
 
-#define DEVICE_NR(x)   (x % 128)
+#define DEVICE_NR(dev) (MINOR(dev) % 128)
 
 static int pt_open (struct inode *inode, struct file *file)
 
@@ -711,7 +711,8 @@ static int pt_open (struct inode *inode, struct file *file)
                return -EROFS;
                }
 
-       if (!(inode->i_rdev & 128)) PT.flags |= PT_REWIND;
+       if (!(MINOR(inode->i_rdev) & 128))
+               PT.flags |= PT_REWIND;
 
        PT.bufptr = kmalloc(PT_BUFSIZE,GFP_KERNEL);
        if (PT.bufptr == NULL) {
@@ -726,18 +727,19 @@ static int pt_open (struct inode *inode, struct file *file)
 
 static int pt_ioctl(struct inode *inode,struct file *file,
                     unsigned int cmd, unsigned long arg)
-
-{       int unit;
+{
+       int unit;
        struct mtop mtop;
 
-
-        if ((!inode) || (!inode->i_rdev)) return -EINVAL;
+        if (!inode || !inode->i_rdev)
+               return -EINVAL;
         unit = DEVICE_NR(inode->i_rdev);
-        if (unit >= PT_UNITS) return -EINVAL;
-        if (!PT.present) return -ENODEV;
+        if (unit >= PT_UNITS)
+               return -EINVAL;
+        if (!PT.present)
+               return -ENODEV;
 
         switch (cmd) {
-
            case MTIOCTOP:      
                if (copy_from_user((char *)&mtop, (char *)arg, 
                                   sizeof(struct mtop))) return -EFAULT;
@@ -763,8 +765,8 @@ static int pt_ioctl(struct inode *inode,struct file *file,
 
 
 static int pt_release (struct inode *inode, struct file *file)
-
-{       int    unit = DEVICE_NR(inode->i_rdev);
+{
+        int    unit = DEVICE_NR(inode->i_rdev);
 
         if ((unit >= PT_UNITS) || (PT.access <= 0)) 
                 return -EINVAL;
@@ -786,8 +788,8 @@ static int pt_release (struct inode *inode, struct file *file)
 
 static ssize_t pt_read(struct file * filp, char * buf, 
                        size_t count, loff_t *ppos)
-
-{      struct  inode *ino = filp->f_dentry->d_inode;
+{
+       struct  inode *ino = filp->f_dentry->d_inode;
        int     unit = DEVICE_NR(ino->i_rdev);
        char    rd_cmd[12] = {ATAPI_READ_6,1,0,0,0,0,0,0,0,0,0,0};
        int     k, n, r, p, s, t, b;
@@ -870,8 +872,8 @@ static ssize_t pt_read(struct file * filp, char * buf,
 
 static ssize_t pt_write(struct file * filp, const char * buf, 
                         size_t count, loff_t *ppos)
-
-{       struct inode *ino = filp->f_dentry->d_inode;
+{
+        struct inode *ino = filp->f_dentry->d_inode;
         int unit = DEVICE_NR(ino->i_rdev);
         char    wr_cmd[12] = {ATAPI_WRITE_6,1,0,0,0,0,0,0,0,0,0,0};
         int     k, n, r, p, s, t, b;
index b109192fbd0e62a2271ed614a56f1cfb7e309235..cf13eccafb26fe722e7130e97e3b4b38148ffb7a 100644 (file)
@@ -95,7 +95,7 @@ static int ps2esdi_release(struct inode *inode, struct file *file);
 static int ps2esdi_ioctl(struct inode *inode, struct file *file,
                         u_int cmd, u_long arg);
 
-static int ps2esdi_reread_partitions(int dev);
+static int ps2esdi_reread_partitions(kdev_t dev);
 
 static int ps2esdi_read_status_words(int num_words, int max_words, u_short * buffer);
 
@@ -1060,7 +1060,7 @@ static int ps2esdi_release(struct inode *inode, struct file *file)
        int dev = DEVICE_NR(inode->i_rdev);
 
        if (dev < ps2esdi_drives) {
-               sync_dev(dev);
+               sync_dev(inode->i_rdev);
                access_count[dev]--;
        }
        return 0;
@@ -1126,7 +1126,7 @@ static int ps2esdi_ioctl(struct inode *inode,
 
 
 
-static int ps2esdi_reread_partitions(int dev)
+static int ps2esdi_reread_partitions(kdev_t dev)
 {
        int target = DEVICE_NR(dev);
        int start = target << ps2esdi_gendisk.minor_shift;
index 7ff08bb852410435fcddafbc3de2bbd6b6ce9c13..15481c9a8864bdeb659788f065237b038463c925 100644 (file)
@@ -3282,7 +3282,7 @@ static struct cdrom_device_info scd_info = {
   &scd_dops,                  /* device operations */
   NULL,                       /* link */
   NULL,                       /* handle */
-  MKDEV(MAJOR_NR,0),          /* dev */
+  0,                         /* dev */
   0,                          /* mask */
   2,                          /* maximum speed */
   1,                          /* number of discs */
@@ -3549,6 +3549,7 @@ cdu31a_init(void))
       init_timer(&cdu31a_abort_timer);
       cdu31a_abort_timer.function = handle_abort_timeout;
 
+      scd_info.dev = MKDEV(MAJOR_NR,0);
       scd_info.mask = deficiency;
       strncpy(scd_info.name, "cdu31a", sizeof(scd_info.name));
 
index e255fa54e64998bedafad13f7f861788f5a7f1cc..c0bcc7bf4232d09dc5bde1c2c8c550a37206db98 100644 (file)
@@ -1248,7 +1248,7 @@ static struct cdrom_device_info cm206_info = {
   &cm206_dops,                  /* device operations */
   NULL,                                /* link */
   NULL,                                /* handle (not used by cm206) */
-  MKDEV(MAJOR_NR,0),           /* dev */
+  0,                           /* dev */
   0,                           /* mask */
   2,                           /* maximum speed */
   1,                           /* number of discs */
@@ -1386,6 +1386,7 @@ __initfunc(int cm206_init(void))
     cleanup(3);
     return -EIO;
   }
+  cm206_info.dev = MKDEV(MAJOR_NR,0);
   if (register_cdrom(&cm206_info) != 0) {
     printk(KERN_INFO "Cannot register for cdrom %d!\n", MAJOR_NR);
     cleanup(3);
index f806743e9bbc47223f1bbc47e00e20910d043ec0..1de0f7ba7e26915cdbf446d4c48cf0ba8a08aa33 100644 (file)
@@ -216,7 +216,7 @@ static struct cdrom_device_info mcd_info = {
   &mcd_dops,                    /* device operations */
   NULL,                         /* link */
   NULL,                         /* handle */
-  MKDEV(MAJOR_NR,0),            /* dev */
+  0,                           /* dev */
   0,                            /* mask */
   2,                            /* maximum speed */
   1,                            /* number of discs */
@@ -243,15 +243,14 @@ __initfunc(void mcd_setup(char *str, int *ints))
 
 static int mcd_media_changed(struct cdrom_device_info * cdi, int disc_nr)
 {
-   int retval, target;
+   int retval;
 
 
 #if 1   /* the below is not reliable */
    return 0;
 #endif  
-   target = cdi->dev;
 
-   if (target > 0) {
+   if (cdi->dev) {
       printk("mcd: Mitsumi CD-ROM request error: invalid device.\n");
       return 0;
    }
@@ -1231,17 +1230,20 @@ __initfunc(int mcd_init(void))
 
         if (result[1] == 'D') 
        {
-       sprintf(msg, " mcd: Mitsumi Double Speed CD-ROM at port=0x%x, irq=%d\n", mcd_port, mcd_irq);
-       MCMD_DATA_READ = MCMD_2X_READ;
-       mcd_info.speed = 2;
-        mcdDouble = 1; /* Added flag to drop to 1x speed if too many errors */
-        }
-        else {
-        sprintf(msg, " mcd: Mitsumi Single Speed CD-ROM at port=0x%x, irq=%d\n", mcd_port, mcd_irq);
-       mcd_info.speed = 2;
+               sprintf(msg, " mcd: Mitsumi Double Speed CD-ROM at port=0x%x,"
+                            " irq=%d\n", mcd_port, mcd_irq);
+               MCMD_DATA_READ = MCMD_2X_READ;
+
+               mcd_info.speed = 2;
+               /* Added flag to drop to 1x speed if too many errors */
+               mcdDouble = 1;
+        } else {
+               sprintf(msg, " mcd: Mitsumi Single Speed CD-ROM at port=0x%x,"
+                            " irq=%d\n", mcd_port, mcd_irq);
+               mcd_info.speed = 2;
        }
 
-       request_region(mcd_port, 4,"mcd");
+       request_region(mcd_port, 4, "mcd");
 
        outb(MCMD_CONFIG_DRIVE, MCDPORT(0));
        outb(0x02,MCDPORT(0));
@@ -1256,6 +1258,8 @@ __initfunc(int mcd_init(void))
        mcd_invalidate_buffers();
        mcdPresent = 1;
 
+       mcd_info.dev = MKDEV(MAJOR_NR,0);
+
         if (register_cdrom(&mcd_info) != 0) {
               printk("Cannot register Mitsumi CD-ROM!\n");
               cleanup(3);
index 9fc316e17fc5ff3ac3fe82be64be2c71f06dc38a..d27417be6ec9c60f8e3d1bb1dcf8c4709433eb5a 100644 (file)
@@ -294,7 +294,7 @@ static struct cdrom_device_info mcdx_info = {
   &mcdx_dops,                    /* device operations */
   NULL,                         /* link */
   NULL,                         /* handle */
-  MKDEV(MAJOR_NR,0),            /* dev */
+  0,                           /* dev */
   0,                            /* mask */
   2,                            /* maximum speed */
   1,                            /* number of discs */
@@ -1024,174 +1024,186 @@ void cleanup_module(void)
 
 /* Support functions ************************************************/
 
-__initfunc(int mcdx_init(void))
+__initfunc(int mcdx_init_drive(int drive))
 {
-       int drive;
+       struct s_version version;
+       struct s_drive_stuff* stuffp;
+       int size = sizeof(*stuffp);
        char msg[80];
-#ifdef MODULE
-       xwarn("Version 2.14(hs) for " UTS_RELEASE "\n");
-#else
-       xwarn("Version 2.14(hs) \n");
-#endif
-
-       xwarn("$Id: mcdx.c,v 1.21 1997/01/26 07:12:59 davem Exp $\n");
 
-       /* zero the pointer array */
-       for (drive = 0; drive < MCDX_NDRIVES; drive++)
-               mcdx_stuffp[drive] = NULL;
+       mcdx_blocksizes[drive] = 0;
 
-       /* do the initialisation */
-       for (drive = 0; drive < MCDX_NDRIVES; drive++) {
-               struct s_version version;
-               struct s_drive_stuff* stuffp;
-        int size;
+       xtrace(INIT, "init() try drive %d\n", drive);
 
-               mcdx_blocksizes[drive] = 0;
-
-        size = sizeof(*stuffp);
-
-               xtrace(INIT, "init() try drive %d\n", drive);
-
-        xtrace(INIT, "kmalloc space for stuffpt's\n");
-               xtrace(MALLOC, "init() malloc %d bytes\n", size);
-               if (!(stuffp = kmalloc(size, GFP_KERNEL))) {
-                       xwarn("init() malloc failed\n");
-                       break;
-               }
+       xtrace(INIT, "kmalloc space for stuffpt's\n");
+       xtrace(MALLOC, "init() malloc %d bytes\n", size);
+       if (!(stuffp = kmalloc(size, GFP_KERNEL))) {
+               xwarn("init() malloc failed\n");
+               return 1;
+       }
 
-               xtrace(INIT, "init() got %d bytes for drive stuff @ %p\n", sizeof(*stuffp), stuffp);
-
-               /* set default values */
-               memset(stuffp, 0, sizeof(*stuffp));
-
-               stuffp->present = 0;            /* this should be 0 already */
-               stuffp->toc = NULL;                     /* this should be NULL already */
-
-               /* setup our irq and i/o addresses */
-               stuffp->irq = irq(mcdx_drive_map[drive]);
-               stuffp->wreg_data = stuffp->rreg_data = port(mcdx_drive_map[drive]);
-               stuffp->wreg_reset = stuffp->rreg_status = stuffp->wreg_data + 1;
-               stuffp->wreg_hcon = stuffp->wreg_reset + 1;
-               stuffp->wreg_chn = stuffp->wreg_hcon + 1;
-
-               /* check if i/o addresses are available */
-               if (0 != check_region((unsigned int) stuffp->wreg_data, MCDX_IO_SIZE)) {
-            xwarn("0x%3p,%d: "
-                    "Init failed. I/O ports (0x%3p..0x%3p) already in use.\n",
-                    stuffp->wreg_data, stuffp->irq,
-                    stuffp->wreg_data,
-                    stuffp->wreg_data + MCDX_IO_SIZE - 1);
-                       xtrace(MALLOC, "init() free stuffp @ %p\n", stuffp);
-            kfree(stuffp);
-                       xtrace(INIT, "init() continue at next drive\n");
-                       continue; /* next drive */
-               }
+       xtrace(INIT, "init() got %d bytes for drive stuff @ %p\n",
+              sizeof(*stuffp), stuffp);
+
+       /* set default values */
+       memset(stuffp, 0, sizeof(*stuffp));
+
+       stuffp->present = 0;    /* this should be 0 already */
+       stuffp->toc = NULL;     /* this should be NULL already */
+
+       /* setup our irq and i/o addresses */
+       stuffp->irq = irq(mcdx_drive_map[drive]);
+       stuffp->wreg_data = stuffp->rreg_data = port(mcdx_drive_map[drive]);
+       stuffp->wreg_reset = stuffp->rreg_status = stuffp->wreg_data + 1;
+       stuffp->wreg_hcon = stuffp->wreg_reset + 1;
+       stuffp->wreg_chn = stuffp->wreg_hcon + 1;
+
+       /* check if i/o addresses are available */
+       if (check_region((unsigned int) stuffp->wreg_data, MCDX_IO_SIZE)) {
+               xwarn("0x%3p,%d: Init failed. "
+                     "I/O ports (0x%3p..0x%3p) already in use.\n",
+                     stuffp->wreg_data, stuffp->irq,
+                     stuffp->wreg_data,
+                     stuffp->wreg_data + MCDX_IO_SIZE - 1);
+               xtrace(MALLOC, "init() free stuffp @ %p\n", stuffp);
+               kfree(stuffp);
+               xtrace(INIT, "init() continue at next drive\n");
+               return 0; /* next drive */
+       }
 
-               xtrace(INIT, "init() i/o port is available at 0x%3p\n", stuffp->wreg_data);
-
-               xtrace(INIT, "init() hardware reset\n");
-               mcdx_reset(stuffp, HARD, 1);
-
-               xtrace(INIT, "init() get version\n");
-               if (-1 == mcdx_requestversion(stuffp, &version, 4)) {
-                       /* failed, next drive */
-            xwarn("%s=0x%3p,%d: Init failed. Can't get version.\n",
-                    MCDX,
-                    stuffp->wreg_data, stuffp->irq);
-                       xtrace(MALLOC, "init() free stuffp @ %p\n", stuffp);
-            kfree(stuffp);
-                       xtrace(INIT, "init() continue at next drive\n");
-                       continue;
-               }
+       xtrace(INIT, "init() i/o port is available at 0x%3p\n",
+              stuffp->wreg_data);
+       xtrace(INIT, "init() hardware reset\n");
+       mcdx_reset(stuffp, HARD, 1);
+
+       xtrace(INIT, "init() get version\n");
+       if (-1 == mcdx_requestversion(stuffp, &version, 4)) {
+               /* failed, next drive */
+               xwarn("%s=0x%3p,%d: Init failed. Can't get version.\n",
+                     MCDX,
+                     stuffp->wreg_data, stuffp->irq);
+               xtrace(MALLOC, "init() free stuffp @ %p\n", stuffp);
+               kfree(stuffp);
+               xtrace(INIT, "init() continue at next drive\n");
+               return 0;
+       }
 
-               switch (version.code) {
-               case 'D':
+       switch (version.code) {
+       case 'D':
                 stuffp->readcmd = READ2X;
                 stuffp->present = DOUBLE | DOOR | MULTI;
                 break;
-               case 'F':
+       case 'F':
                 stuffp->readcmd = READ1X;
                 stuffp->present = SINGLE | DOOR | MULTI;
                 break;
-               case 'M':
+       case 'M':
                 stuffp->readcmd = READ1X;
                 stuffp->present = SINGLE;
                 break;
-               default:
+       default:
                 stuffp->present = 0; break;
-               }
+       }
 
         stuffp->playcmd = READ1X;
 
+       if (!stuffp->present) {
+               xwarn("%s=0x%3p,%d: Init failed. No Mitsumi CD-ROM?.\n",
+                     MCDX, stuffp->wreg_data, stuffp->irq);
+               kfree(stuffp);
+               return 0; /* next drive */
+       }
 
-               if (!stuffp->present) {
-            xwarn("%s=0x%3p,%d: Init failed. No Mitsumi CD-ROM?.\n",
-                    MCDX, stuffp->wreg_data, stuffp->irq);
-                       kfree(stuffp);
-                       continue; /* next drive */
-               }
-
-               xtrace(INIT, "init() register blkdev\n");
-               if (register_blkdev(MAJOR_NR, "mcdx", &cdrom_fops) != 0) {
-            xwarn("%s=0x%3p,%d: Init failed. Can't get major %d.\n",
-                    MCDX,
-                    stuffp->wreg_data, stuffp->irq, MAJOR_NR);
-                       kfree(stuffp);
-                       continue; /* next drive */
-               }
-
-               blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST;
-               read_ahead[MAJOR_NR] = READ_AHEAD;
-
-               blksize_size[MAJOR_NR] = mcdx_blocksizes;
+       xtrace(INIT, "init() register blkdev\n");
+       if (register_blkdev(MAJOR_NR, "mcdx", &cdrom_fops) != 0) {
+               xwarn("%s=0x%3p,%d: Init failed. Can't get major %d.\n",
+                     MCDX,
+                     stuffp->wreg_data, stuffp->irq, MAJOR_NR);
+               kfree(stuffp);
+               return 1;
+       }
 
-               xtrace(INIT, "init() subscribe irq and i/o\n");
-               mcdx_irq_map[stuffp->irq] = stuffp;
-               if (request_irq(stuffp->irq, mcdx_intr, SA_INTERRUPT, "mcdx", NULL)) {
-            xwarn("%s=0x%3p,%d: Init failed. Can't get irq (%d).\n",
-                    MCDX,
-                    stuffp->wreg_data, stuffp->irq, stuffp->irq);
-                       stuffp->irq = 0;
-                       kfree(stuffp);
-                       continue;
-               }
-               request_region((unsigned int) stuffp->wreg_data,
-                MCDX_IO_SIZE,
-                "mcdx");
+       blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST;
+       read_ahead[MAJOR_NR] = READ_AHEAD;
+       blksize_size[MAJOR_NR] = mcdx_blocksizes;
+
+       xtrace(INIT, "init() subscribe irq and i/o\n");
+       mcdx_irq_map[stuffp->irq] = stuffp;
+       if (request_irq(stuffp->irq, mcdx_intr, SA_INTERRUPT, "mcdx", NULL)) {
+               xwarn("%s=0x%3p,%d: Init failed. Can't get irq (%d).\n",
+                     MCDX,
+                     stuffp->wreg_data, stuffp->irq, stuffp->irq);
+               stuffp->irq = 0;
+               kfree(stuffp);
+               return 0;
+       }
+       request_region((unsigned int) stuffp->wreg_data,
+                      MCDX_IO_SIZE,
+                      "mcdx");
 
-               xtrace(INIT, "init() get garbage\n");
-               {
-                       int i;
-                       mcdx_delay(stuffp, HZ/2);
-                       for (i = 100; i; i--) (void) inb((unsigned int) stuffp->rreg_status);
-               }
+       xtrace(INIT, "init() get garbage\n");
+       {
+               int i;
+               mcdx_delay(stuffp, HZ/2);
+               for (i = 100; i; i--)
+                       (void) inb((unsigned int) stuffp->rreg_status);
+       }
 
 
 #if WE_KNOW_WHY
-                       outb(0x50, (unsigned int) stuffp->wreg_chn);    /* irq 11 -> channel register */
+       /* irq 11 -> channel register */
+       outb(0x50, (unsigned int) stuffp->wreg_chn);
 #endif
 
-               xtrace(INIT, "init() set non dma but irq mode\n");
-               mcdx_config(stuffp, 1);
+       xtrace(INIT, "init() set non dma but irq mode\n");
+       mcdx_config(stuffp, 1);
 
-               stuffp->minor = drive;
+       stuffp->minor = drive;
 
-               sprintf(msg, " mcdx: Mitsumi CD-ROM installed at 0x%3p, irq %d."
-                          " (Firmware version %c %x)\n", 
-                          stuffp->wreg_data, stuffp->irq, version.code,
-               version.ver);
-               mcdx_stuffp[drive] = stuffp;
-               xtrace(INIT, "init() mcdx_stuffp[%d] = %p\n", drive, stuffp);
+       sprintf(msg, " mcdx: Mitsumi CD-ROM installed at 0x%3p, irq %d."
+               " (Firmware version %c %x)\n", 
+               stuffp->wreg_data, stuffp->irq, version.code,
+               version.ver);
+       mcdx_stuffp[drive] = stuffp;
+       xtrace(INIT, "init() mcdx_stuffp[%d] = %p\n", drive, stuffp);
+       mcdx_info.dev = MKDEV(MAJOR_NR,0);
         if (register_cdrom(&mcdx_info) != 0) {
-              printk("Cannot register Mitsumi CD-ROM!\n");
-                 release_region((unsigned long) stuffp->wreg_data, MCDX_IO_SIZE);
-                 free_irq(stuffp->irq, NULL);
-              kfree(stuffp);
-              if (unregister_blkdev(MAJOR_NR, "mcdx") != 0)
+               printk("Cannot register Mitsumi CD-ROM!\n");
+               release_region((unsigned long) stuffp->wreg_data,
+                              MCDX_IO_SIZE);
+               free_irq(stuffp->irq, NULL);
+               kfree(stuffp);
+               if (unregister_blkdev(MAJOR_NR, "mcdx") != 0)
                        xwarn("cleanup() unregister_blkdev() failed\n");
-                         return -EIO;
+               return 2;
         }
         printk(msg);
+       return 0;
+}
+
+__initfunc(int mcdx_init(void))
+{
+       int drive;
+#ifdef MODULE
+       xwarn("Version 2.14(hs) for " UTS_RELEASE "\n");
+#else
+       xwarn("Version 2.14(hs) \n");
+#endif
+
+       xwarn("$Id: mcdx.c,v 1.21 1997/01/26 07:12:59 davem Exp $\n");
+
+       /* zero the pointer array */
+       for (drive = 0; drive < MCDX_NDRIVES; drive++)
+               mcdx_stuffp[drive] = NULL;
+
+       /* do the initialisation */
+       for (drive = 0; drive < MCDX_NDRIVES; drive++) {
+               switch(mcdx_init_drive(drive)) {
+               case 2:
+                       return -EIO;
+               case 1:
+                       break;
+               }
        }
        return 0;
 }
index f3fce22d54d490fcc81f69510c488ef26d7fbdf6..a3b3e2989689be079c0d410f19c389860828ad42 100644 (file)
@@ -5417,7 +5417,7 @@ static struct cdrom_device_info sbpcd_info = {
   &sbpcd_dops,                /* device operations */
   NULL,                       /* link */
   NULL,                       /* handle */
-  MKDEV(MAJOR_NR,0),          /* dev */
+  0,                         /* dev */
   0,                          /* mask */
   2,                          /* maximum speed */
   1,                          /* number of discs */
index 01b90940a709222bbd8cf8347b101b2376627b80..3ee30b7f91b6933e74f889d1563007e3d69e0820 100644 (file)
@@ -105,6 +105,11 @@ if [ "$CONFIG_WATCHDOG" != "n" ]; then
   tristate '   Acquire SBC Watchdog Timer' CONFIG_ACQUIRE_WDT
 fi
 bool 'Enhanced Real Time Clock Support' CONFIG_RTC
+if [ "$CONFIG_RTC" = "y" ]; then
+  if [ "$ARCH" = "alpha" ]; then
+    bool '  ARC console time' CONFIG_RTC_ARC y
+  fi
+fi
 if [ "$CONFIG_ALPHA_BOOK1" = "y" ]; then
   bool 'Tadpole ANA H8 Support'  CONFIG_H8
 fi
index 6a06654aedf4ff78dc738cadc9ccb10738c33bbc..cd4f1890300da44a7114f7c1e57fec62e97a87b7 100644 (file)
@@ -26,6 +26,7 @@
  * April 1996, Stephen Rothwell (Stephen.Rothwell@canb.auug.org.au)
  *    Version 1.0 and 1.1
  * May 1996, Version 1.2
+ * Feb 1998, Version 1.3
  *
  * History:
  *    0.6b: first version in official kernel, Linux 1.3.46
@@ -44,6 +45,7 @@
  *        levels to the printk calls. APM is not defined for SMP machines.
  *         The new replacment for it is, but Linux doesn't yet support this.
  *         Alan Cox Linux 2.1.55
+ *    1.3: Set up a valid data descriptor 0x40 for buggy BIOS's
  *
  * Reference:
  *
@@ -162,8 +164,8 @@ extern unsigned long get_cmos_time(void);
 #define APM_NOINTS
 
 /*
- * Define to make the APM BIOS calls zero all data segment registers (do
- * that if an incorrect BIOS implementation will cause a kernel panic if it
+ * Define to make the APM BIOS calls zero all data segment registers (so
+ * that an incorrect BIOS implementation will cause a kernel panic if it
  * tries to write to arbitrary memory).
  */
 #define APM_ZERO_SEGS
@@ -340,7 +342,7 @@ static struct apm_bios_struct *     user_list = NULL;
 
 static struct timer_list       apm_timer;
 
-static char                    driver_version[] = "1.2";/* no spaces */
+static char                    driver_version[] = "1.3";       /* no spaces */
 
 #ifdef APM_DEBUG
 static char *  apm_event_name[] = {
@@ -1112,6 +1114,16 @@ __initfunc(void apm_bios_init(void))
                       apm_bios_info.cseg_len, apm_bios_info.dseg_len);
        printk("\n");
 
+       /*
+        * Set up a segment that references the real mode segment 0x40
+        * that extends up to the end of page zero (that we have reserved).
+        * This is for buggy BIOS's that refer to (real mode) segment 0x40
+        * even though they are called in protected mode.
+        */
+       set_base(gdt[APM_40 >> 3],
+                0xc0000000 + ((unsigned long)0x40 << 4));
+       set_limit(gdt[APM_40 >> 3], 4096 - (0x40 << 4));
+
        apm_bios_entry.offset = apm_bios_info.offset;
        apm_bios_entry.segment = APM_CS;
        set_base(gdt[APM_CS >> 3],
index 89215aa17e735d8aea7e0b8e6fb9d72bbdd031b5..4d3958fd95992805ccbb1632f182b8fc2b702954 100644 (file)
@@ -283,7 +283,7 @@ u8 dfont_unicount[%d] = \n\
        }
       printf("0x%04x", unitable[fp0][nent++]);
       if ( i == nuni-1 )
-         printf("\n};");
+         printf("\n};\n");
        else if ( i % 8 == 7 )
          printf(",\n\t");
        else
index 48ada84e145c005ddf14e25e96971cdf003dbe7a..927cc12beb3be1f911d3b01d4e4430e42e678269 100644 (file)
@@ -1420,6 +1420,12 @@ static int do_con_write(struct tty_struct * tty, int from_user,
                                 /* If we got -4 (not found) then see if we have
                                    defined a replacement character (U+FFFD) */
                                 tc = conv_uni_to_pc(0xfffd);
+
+                               /* One reason for the -4 can be that we just
+                                  did a clear_unimap();
+                                  try at least to show something. */
+                               if (tc == -4)
+                                    tc = c;
                         } else if ( tc == -3 ) {
                                 /* Bad hash table -- hope for the best */
                                 tc = c;
index d880eb3b6182d5ca58589b447b5d67cbba45a143..0d7ea6da040a80ccef0a05a552ea8af9facb64ee 100644 (file)
@@ -3,7 +3,7 @@
 /*
  *     istallion.c  -- stallion intelligent multiport serial driver.
  *
- *     Copyright (C) 1996-1997  Stallion Technologies (support@stallion.oz.au).
+ *     Copyright (C) 1996-1998  Stallion Technologies (support@stallion.oz.au).
  *     Copyright (C) 1994-1996  Greg Ungerer (gerg@stallion.oz.au).
  *
  *     This code is loosely based on the Linux serial driver, written by
@@ -170,7 +170,7 @@ static int  stli_nrbrds = sizeof(stli_brdconf) / sizeof(stlconf_t);
  */
 static char    *stli_drvtitle = "Stallion Intelligent Multiport Serial Driver";
 static char    *stli_drvname = "istallion";
-static char    *stli_drvversion = "5.4.1";
+static char    *stli_drvversion = "5.4.3";
 static char    *stli_serialname = "ttyE";
 static char    *stli_calloutname = "cue";
 
@@ -498,8 +498,8 @@ int         stli_eisaprobe = STLI_EISAPROBE;
 /*
  *     Define macros to extract a brd or port number from a minor number.
  */
-#define        MKDEV2BRD(min)          (((min) & 0xc0) >> 6)
-#define        MKDEV2PORT(min)         ((min) & 0x3f)
+#define        MINOR2BRD(min)          (((min) & 0xc0) >> 6)
+#define        MINOR2PORT(min)         ((min) & 0x3f)
 
 /*
  *     Define a baud rate table that converts termios baud rate selector
@@ -749,12 +749,8 @@ void cleanup_module()
                }
 
                iounmap(brdp->membase);
-               if ((brdp->brdtype == BRD_ECP) ||
-                   (brdp->brdtype == BRD_ECPE) ||
-                   (brdp->brdtype == BRD_ECPMC))
-                       release_region(brdp->iobase, ECP_IOSIZE);
-               else
-                       release_region(brdp->iobase, ONB_IOSIZE);
+               if (brdp->iosize > 0)
+                       release_region(brdp->iobase, brdp->iosize);
                kfree_s(brdp, sizeof(stlibrd_t));
                stli_brds[i] = (stlibrd_t *) NULL;
        }
@@ -790,7 +786,7 @@ static int stli_open(struct tty_struct *tty, struct file *filp)
 #endif
 
        minordev = MINOR(tty->device);
-       brdnr = MKDEV2BRD(minordev);
+       brdnr = MINOR2BRD(minordev);
        if (brdnr >= stli_nrbrds)
                return(-ENODEV);
        brdp = stli_brds[brdnr];
@@ -798,7 +794,7 @@ static int stli_open(struct tty_struct *tty, struct file *filp)
                return(-ENODEV);
        if ((brdp->state & BST_STARTED) == 0)
                return(-ENODEV);
-       portnr = MKDEV2PORT(minordev);
+       portnr = MINOR2PORT(minordev);
        if ((portnr < 0) || (portnr > brdp->nrports))
                return(-ENODEV);
 
@@ -3688,7 +3684,8 @@ static inline int stli_initecp(stlibrd_t *brdp)
        if ((brdp->iobase == 0) || (brdp->memaddr == 0))
                return(-ENODEV);
 
-       if (check_region(brdp->iobase, ECP_IOSIZE))
+       brdp->iosize = ECP_IOSIZE;
+       if (check_region(brdp->iobase, brdp->iosize))
                printk("STALLION: Warning, unit %d I/O address %x conflicts "
                        "with another device\n", brdp->brdnr, brdp->iobase);
 
@@ -3797,7 +3794,7 @@ static inline int stli_initecp(stlibrd_t *brdp)
                brdp->nrpanels++;
        }
 
-       request_region(brdp->iobase, ECP_IOSIZE, name);
+       request_region(brdp->iobase, brdp->iosize, name);
        brdp->state |= BST_FOUND;
        return(0);
 }
@@ -3826,7 +3823,8 @@ static inline int stli_initonb(stlibrd_t *brdp)
        if ((brdp->iobase == 0) || (brdp->memaddr == 0))
                return(-ENODEV);
 
-       if (check_region(brdp->iobase, ONB_IOSIZE))
+       brdp->iosize = ONB_IOSIZE;
+       if (check_region(brdp->iobase, brdp->iosize))
                printk("STALLION: Warning, unit %d I/O address %x conflicts "
                        "with another device\n", brdp->brdnr, brdp->iobase);
 
@@ -3954,7 +3952,7 @@ static inline int stli_initonb(stlibrd_t *brdp)
        }
        brdp->panels[0] = brdp->nrports;
 
-       request_region(brdp->iobase, ONB_IOSIZE, name);
+       request_region(brdp->iobase, brdp->iosize, name);
        brdp->state |= BST_FOUND;
        return(0);
 }
index 47868a50323d0dadab43e493744dc16e2a42d7ae..acb183b4fa357b28ae826aca0900fe7b3063d69d 100644 (file)
@@ -305,6 +305,7 @@ static inline int lp_write_buf(unsigned int minor, const char *buf, int count)
                                        }
                                        current->timeout = jiffies + LP_TIMEOUT_INTERRUPT;
                                        interruptible_sleep_on(&lp->dev->wait_q);
+                                       disable_irq(lp->dev->port->irq);
                                        w_ctr(minor, LP_PSELECP | LP_PINITP);
                                        sti();
                                        if (lp_check_status(minor))
@@ -663,7 +664,7 @@ __initfunc(void lp_setup(char *str, int *ints))
        } else if (!strcmp(str, "auto")) {
                parport[0] = LP_PARPORT_AUTO;
        } else if (!strcmp(str, "none")) {
-               parport_ptr++;
+               parport[parport_ptr++] = LP_PARPORT_NONE;
        } else if (!strcmp(str, "reset")) {
                reset = 1;
        } else {
@@ -701,6 +702,7 @@ int lp_register(int nr, struct parport *port)
 int lp_init(void)
 {
        unsigned int count = 0;
+       unsigned int i;
        struct parport *port;
 
        switch (parport[0])
@@ -722,15 +724,17 @@ int lp_init(void)
                }
                break;
 
+       case LP_PARPORT_NONE:
        default:
-               for (count = 0; count < LP_NO; count++) {
-                       if (parport[count] != LP_PARPORT_UNSPEC) {
+               for (i = 0; i < LP_NO; i++) {
+                       if (parport[i] >= 0) {
                                char buffer[16];
-                               sprintf(buffer, "parport%d", parport[count]);
+                               sprintf(buffer, "parport%d", parport[i]);
                                for (port = parport_enumerate(); port; 
                                     port = port->next) {
                                        if (!strcmp(port->name, buffer)) {
-                                               (void) lp_register(count, port);
+                                               (void) lp_register(i, port);
+                                               count++;
                                                break;
                                        }
                                }
index a6dd01d8cd5757427893689e2eb449d4a92597c9..09723fa8f2717dc038cc91c218f6311e3a31de69 100644 (file)
@@ -224,7 +224,7 @@ static struct semaphore tmp_buf_sem = MUTEX;
 static void rp_start(struct tty_struct *tty);
 
 static inline int rocket_paranoia_check(struct r_port *info,
-                                       dev_t device, const char *routine)
+                                       kdev_t device, const char *routine)
 {
 #ifdef ROCKET_PARANOIA_CHECK
        static const char *badmagic =
index 7ead386301f3e6eadd4b0b27525ef9fbb00d6ed1..064031dd8b2b2de675da8eaaea5fd99f8fcbc571 100644 (file)
@@ -3,7 +3,7 @@
 /*
  *     stallion.c  -- stallion multiport serial driver.
  *
- *     Copyright (C) 1996-1997  Stallion Technologies (support@stallion.oz.au).
+ *     Copyright (C) 1996-1998  Stallion Technologies (support@stallion.oz.au).
  *     Copyright (C) 1994-1996  Greg Ungerer (gerg@stallion.oz.au).
  *
  *     This code is loosely based on the Linux serial driver, written by
@@ -143,7 +143,7 @@ static int  stl_nrbrds = sizeof(stl_brdconf) / sizeof(stlconf_t);
  */
 static char    *stl_drvtitle = "Stallion Multiport Serial Driver";
 static char    *stl_drvname = "stallion";
-static char    *stl_drvversion = "5.4.1";
+static char    *stl_drvversion = "5.4.3";
 static char    *stl_serialname = "ttyE";
 static char    *stl_calloutname = "cue";
 
@@ -338,6 +338,8 @@ static unsigned char        stl_vecmap[] = {
 
 /*****************************************************************************/
 
+#ifdef CONFIG_PCI
+
 /*
  *     Define the Stallion PCI vendor and device IDs.
  */
@@ -372,13 +374,15 @@ static stlpcibrd_t        stl_pcibrds[] = {
 
 static int     stl_nrpcibrds = sizeof(stl_pcibrds) / sizeof(stlpcibrd_t);
 
+#endif
+
 /*****************************************************************************/
 
 /*
  *     Define macros to extract a brd/port number from a minor number.
  */
-#define        MKDEV2BRD(min)          (((min) & 0xc0) >> 6)
-#define        MKDEV2PORT(min)         ((min) & 0x3f)
+#define        MINOR2BRD(min)          (((min) & 0xc0) >> 6)
+#define        MINOR2PORT(min)         ((min) & 0x3f)
 
 /*
  *     Define a baud rate table that converts termios baud rate selector
@@ -796,13 +800,13 @@ static int stl_open(struct tty_struct *tty, struct file *filp)
 #endif
 
        minordev = MINOR(tty->device);
-       brdnr = MKDEV2BRD(minordev);
+       brdnr = MINOR2BRD(minordev);
        if (brdnr >= stl_nrbrds)
                return(-ENODEV);
        brdp = stl_brds[brdnr];
        if (brdp == (stlbrd_t *) NULL)
                return(-ENODEV);
-       minordev = MKDEV2PORT(minordev);
+       minordev = MINOR2PORT(minordev);
        for (portnr = -1, panelnr = 0; (panelnr < STL_MAXPANELS); panelnr++) {
                if (brdp->panels[panelnr] == (stlpanel_t *) NULL)
                        break;
index 83b10d4a264384146984106b2b855f0e40a22d8f..a518f6b6a62fd7665a8cddbd0b164b94ba86b934 100644 (file)
@@ -171,9 +171,9 @@ static int is_local_disk(kdev_t dev)            /* Guess if the device is a local hard
 
 static void go_sync(kdev_t dev, int remount_flag)
 {
-       printk(KERN_INFO "%sing device %04x ... ",
+       printk(KERN_INFO "%sing device %s ... ",
               remount_flag ? "Remount" : "Sync",
-              dev);
+              kdevname(dev));
 
        if (remount_flag) {                                 /* Remount R/O */
                struct super_block *sb = get_super(dev);
index 11e49a06e27681c7bc0d65dc21bf5bdf06e53fe8..c0a4dc151e8208768bad2e2ff2766662c9c1b7e3 100644 (file)
@@ -16,8 +16,7 @@
  * aeb@cwi.nl - efter Friedas begravelse - 950211
  *
  * machek@k332.feld.cvut.cz - modified not to send characters to wrong console
- *      - fixed some fatal of-by-one bugs (0-- no longer == -1 -> looping and looping and looping...)
- *      - making it working with multiple monitor patches
+ *      - fixed some fatal off-by-one bugs (0-- no longer == -1 -> looping and looping and looping...)
  *      - making it shorter - scr_readw are macros which expand in PRETTY long code
  */
 
@@ -76,24 +75,22 @@ vcs_size(struct inode *inode)
 
 static long long vcs_lseek(struct file *file, long long offset, int orig)
 {
-       int size;
-       size = vcs_size(file->f_dentry->d_inode);
+       int size = vcs_size(file->f_dentry->d_inode);
 
        switch (orig) {
-               case 0:
-                       file->f_pos = offset;
+               default:
+                       return -EINVAL;
+               case 2:
+                       offset += size;
                        break;
                case 1:
-                       file->f_pos += offset;
-                       break;
-               case 2:
-                       file->f_pos = size + offset;
+                       offset += file->f_pos;
+               case 0:
                        break;
-               default:
-                       return -EINVAL;
        }
-       if (file->f_pos < 0 || file->f_pos > size)
-               { file->f_pos = 0; return -EINVAL; }
+       if (offset < 0 || offset > size)
+               return -EINVAL;
+       file->f_pos = offset;
        return file->f_pos;
 }
 
index 525f447f84e0d53691b439d3a92812154e938768..00be6fef778c9a7732c76f7aef24c0c09f55ff4d 100644 (file)
@@ -300,13 +300,13 @@ static void recv_handler(void *dummy)
                if (!VALID_APPLID(appl)) {
                        printk(KERN_ERR "b1capi: recv_handler: applid %d ? (%s)\n",
                               appl, capi_message2str(skb->data));
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        continue;
                }
                if (APPL(appl)->signal == 0) {
                        printk(KERN_ERR "b1capi: recv_handler: applid %d has no signal function\n",
                               appl);
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        continue;
                }
                if (   CAPIMSG_COMMAND(skb->data) == CAPI_DATA_B3
@@ -336,7 +336,7 @@ void avmb1_handle_capimsg(avmb1_card * card, __u16 appl, struct sk_buff *skb)
        return;
 
       error:
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
 }
 
 void avmb1_interrupt(int interrupt, void *devptr, struct pt_regs *regs)
@@ -537,7 +537,7 @@ static __u16 capi_release(__u16 applid)
        if (!VALID_APPLID(applid) || APPL(applid)->releasing)
                return CAPI_ILLAPPNR;
        while ((skb = skb_dequeue(&APPL(applid)->recv_queue)) != 0)
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
        for (i = 0; i < ncards; i++) {
                if (cards[i].cardstate != CARD_RUNNING)
                        continue;
index bc1cb1cd34f9fffd4334d7e7fd7c043ce50e3be3..64292ef2189e0311382e0204c793c1b4089eb096 100644 (file)
@@ -456,7 +456,7 @@ void B1_send_message(unsigned short port, struct sk_buff *skb)
                B1_put_slice(port, skb->data, len);
                restore_flags(flags);
        }
-       dev_kfree_skb(skb, FREE_WRITE);
+       dev_kfree_skb(skb);
 }
 
 /*
index e02de0bddddb8b4203b27e4a8c342eb1302a95bb..544ca0e2090704d3a22a31cf897db6813c7e2881 100644 (file)
@@ -144,7 +144,7 @@ static ssize_t capi_read(struct file *file,
        copied = skb->len;
 
 
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
 
        return copied;
 }
@@ -169,7 +169,7 @@ static ssize_t capi_write(struct file *file,
        skb = alloc_skb(count, GFP_USER);
 
        if ((retval = copy_from_user(skb_put(skb, count), buf, count))) {
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                return retval;
        }
        cmd = CAPIMSG_COMMAND(skb->data);
@@ -178,11 +178,11 @@ static ssize_t capi_write(struct file *file,
        if (cmd == CAPI_DATA_B3 && subcmd == CAPI_REQ) {
                __u16 dlen = CAPIMSG_DATALEN(skb->data);
                if (mlen + dlen != count) {
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
                        return -EINVAL;
                }
        } else if (mlen != count) {
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                return -EINVAL;
        }
        CAPIMSG_SETAPPID(skb->data, cdev->applid);
@@ -190,7 +190,7 @@ static ssize_t capi_write(struct file *file,
        cdev->errcode = (*capifuncs->capi_put_message) (cdev->applid, skb);
 
        if (cdev->errcode) {
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                return -EIO;
        }
        return count;
@@ -416,7 +416,7 @@ capi_release(struct inode *inode, struct file *file)
                cdev->applid = 0;
 
                while ((skb = skb_dequeue(&cdev->recv_queue)) != 0)
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
        }
        cdev->is_open = 0;
 
index f6bb51f136358c71db45cc8fb23b35b1a4e66a19..c1dfcdafe1a3d6a4eea1cca0e235afa93d1961b6 100644 (file)
@@ -1169,7 +1169,7 @@ static void handle_data(_cmsg * cmsg, struct sk_buff *skb)
                printk(KERN_ERR "capidrv: %s: ncci 0x%x not found\n",
                       capi_cmd2str(cmsg->Command, cmsg->Subcommand),
                       cmsg->adr.adrNCCI);
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return;
        }
        (void) skb_pull(skb, CAPIMSG_LEN(skb->data));
@@ -1194,7 +1194,7 @@ static void capidrv_signal(__u16 applid, __u32 dummy)
                        handle_data(&s_cmsg, skb);
                        continue;
                }
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                if ((s_cmsg.adr.adrController & 0xffffff00) == 0)
                        handle_controller(&s_cmsg);
                else if ((s_cmsg.adr.adrPLCI & 0xffff0000) == 0)
@@ -1517,10 +1517,10 @@ static int if_sendbuf(int id, int channel, struct sk_buff *skb)
                errcode = (*capifuncs->capi_put_message) (global.appid, nskb);
                switch (errcode) {
                case CAPI_NOERROR:
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
                        return len;
                case CAPI_SENDQUEUEFULL:
-                       dev_kfree_skb(nskb, FREE_WRITE);
+                       dev_kfree_skb(nskb);
                        return 0;
                default:
                        return -1;
index a35d1c71f5597fa2eea832f1818c55c9e6d9e35e..e6c7755462cb4802703760a6766f583f5fbcfeb2 100644 (file)
@@ -277,7 +277,7 @@ hscx_interrupt(struct IsdnCardState *sp, u_char val, u_char hscx)
                                return;
                        } else {
                                SET_SKB_FREE(hsp->tx_skb);
-                               dev_kfree_skb(hsp->tx_skb, FREE_WRITE);
+                               dev_kfree_skb(hsp->tx_skb);
                                hsp->count = 0;
                                if (hsp->st->l4.l1writewakeup)
                                        hsp->st->l4.l1writewakeup(hsp->st);
@@ -439,7 +439,7 @@ isac_interrupt(struct IsdnCardState *sp, u_char val)
                                goto afterXPR;
                        } else {
                                SET_SKB_FREE(sp->tx_skb);
-                               dev_kfree_skb(sp->tx_skb, FREE_WRITE);
+                               dev_kfree_skb(sp->tx_skb);
                                sp->tx_cnt = 0;
                                sp->tx_skb = NULL;
                        }
index 91c8689420823f2459f7d2a61c8da45944637b84..fbf04557477475390a8e9d32c761a619dd2032bf 100644 (file)
@@ -1600,7 +1600,7 @@ lldata_handler(struct PStack *st, int pr, void *arg)
                                chanp->sp->iif.rcvcallb_skb(chanp->sp->myid, chanp->chan, skb);
                        else {
                                SET_SKB_FREE(skb);
-                               dev_kfree_skb(skb, FREE_READ);
+                               dev_kfree_skb(skb);
                        }
                        break;
                default:
@@ -1622,7 +1622,7 @@ lltrans_handler(struct PStack *st, int pr, void *arg)
                                chanp->sp->iif.rcvcallb_skb(chanp->sp->myid, chanp->chan, skb);
                        else {
                                SET_SKB_FREE(skb);
-                               dev_kfree_skb(skb, FREE_READ);
+                               dev_kfree_skb(skb);
                        }
                        break;
                default:
@@ -1966,7 +1966,7 @@ HiSax_writebuf_skb(int id, int chan, struct sk_buff *skb)
                                csta->hs[chanp->hscx].tx_cnt += len;
                                chanp->ds.l2.l2l1(&chanp->ds, PH_DATA, nskb);
                        }
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
                } else
                        len = 0;
                restore_flags(flags);
index 430d2409c5a7e31f3ed2b6f430afc13736b234c6..5cea59d9dd93a5f45dd8a6482b2c40a34467575d 100644 (file)
@@ -488,7 +488,7 @@ hscx_interrupt(struct IsdnCardState *sp, u_char val, u_char hscx)
                                return;
                        } else {
                                SET_SKB_FREE(hsp->tx_skb);
-                               dev_kfree_skb(hsp->tx_skb, FREE_WRITE);
+                               dev_kfree_skb(hsp->tx_skb);
                                hsp->count = 0;
                                if (hsp->st->l4.l1writewakeup)
                                        hsp->st->l4.l1writewakeup(hsp->st);
@@ -653,7 +653,7 @@ isac_interrupt(struct IsdnCardState *sp, u_char val)
                                goto afterXPR;
                        } else {
                                SET_SKB_FREE(sp->tx_skb);
-                               dev_kfree_skb(sp->tx_skb, FREE_WRITE);
+                               dev_kfree_skb(sp->tx_skb);
                                sp->tx_cnt = 0;
                                sp->tx_skb = NULL;
                        }
index 291f846aea6765fe99a97cb1dca1d9de6dfe02aa..655e6a41788046b7f9d69f802b99d1736b9b5adf 100644 (file)
@@ -453,7 +453,7 @@ process_rcv(struct IsdnCardState *sp)
                                stptr = stptr->next;
                        }
                        SET_SKB_FREE(skb);
-                       dev_kfree_skb(skb, FREE_READ);
+                       dev_kfree_skb(skb);
                } else {
                        found = 0;
                        while (stptr != NULL)
@@ -478,7 +478,7 @@ process_rcv(struct IsdnCardState *sp)
                                        dlogframe(sp, skb->data + 4, skb->len - 4, tmp);
                                }
                                SET_SKB_FREE(skb);
-                               dev_kfree_skb(skb, FREE_READ);
+                               dev_kfree_skb(skb);
                        }
                }
 
@@ -714,7 +714,7 @@ HiSax_l2l1discardq(struct PStack *st, int pr,
 
        while ((skb = skb_dequeue(&sp->sq))) {
                SET_SKB_FREE(skb);
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
        }
 }
 
@@ -798,15 +798,15 @@ close_hscxstate(struct HscxState *hs)
                }
                while ((skb = skb_dequeue(&hs->rqueue))) {
                        SET_SKB_FREE(skb);
-                       dev_kfree_skb(skb, FREE_READ);
+                       dev_kfree_skb(skb);
                }
                while ((skb = skb_dequeue(&hs->squeue))) {
                        SET_SKB_FREE(skb);
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
                }
                if (hs->tx_skb) {
                        SET_SKB_FREE(hs->tx_skb);
-                       dev_kfree_skb(hs->tx_skb, FREE_WRITE);
+                       dev_kfree_skb(hs->tx_skb);
                        hs->tx_skb = NULL;
                }
        }
@@ -828,15 +828,15 @@ closecard(int cardnr)
        }
        while ((skb = skb_dequeue(&csta->rq))) {
                SET_SKB_FREE(skb);
-               dev_kfree_skb(skb, FREE_READ);
+               dev_kfree_skb(skb);
        }
        while ((skb = skb_dequeue(&csta->sq))) {
                SET_SKB_FREE(skb);
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
        }
        if (csta->tx_skb) {
                SET_SKB_FREE(csta->tx_skb);
-               dev_kfree_skb(csta->tx_skb, FREE_WRITE);
+               dev_kfree_skb(csta->tx_skb);
                csta->tx_skb = NULL;
        }
        switch (csta->typ) {
@@ -1219,7 +1219,7 @@ hscx_l2l1discardq(struct PStack *st, int pr, void *heldby,
 
        while ((skb = skb_dequeue(&hsp->squeue))) {
                SET_SKB_FREE(skb);
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
        }
 }
 
index 118f0790e8907b370db1761432f7d0458e52fbd7..9c58eef90f16c979e903b07a8da73fa7d2712c74 100644 (file)
@@ -148,7 +148,7 @@ ReleaseWin(struct Layer2 *l2)
                if (l2->windowar[i]) {
                        cnt++;
                        SET_SKB_FREE(l2->windowar[i]);
-                       dev_kfree_skb(l2->windowar[i], FREE_WRITE);
+                       dev_kfree_skb(l2->windowar[i]);
                        l2->windowar[i] = NULL;
                }
        }
@@ -172,7 +172,7 @@ discard_i_queue(struct PStack *st)
 
        while ((skb = skb_dequeue(&st->l2.i_queue))) {
                SET_SKB_FREE(skb);
-               dev_kfree_skb(skb, FREE_READ);
+               dev_kfree_skb(skb);
        }
 }
 
@@ -248,7 +248,7 @@ setva(struct PStack *st, int nr)
                while (l2->va != nr) {
                        l2->va = (l2->va + 1) % (l2->extended ? 128 : 8);
                        SET_SKB_FREE(l2->windowar[l2->sow]);
-                       dev_kfree_skb(l2->windowar[l2->sow], FREE_WRITE);
+                       dev_kfree_skb(l2->windowar[l2->sow]);
                        l2->windowar[l2->sow] = NULL;
                        l2->sow = (l2->sow + 1) % l2->window;
                        if (st->l4.l2writewakeup)
@@ -369,7 +369,7 @@ l2_got_SABMX(struct FsmInst *fi, int event, void *arg)
        skb_pull(skb, l2addrsize(&(st->l2)));
        PollFlag = *skb->data & 0x10;
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
 
        if (ST_L2_4 != state)
                if (st->l2.vs != st->l2.va) {
@@ -414,7 +414,7 @@ l2_got_disconn(struct FsmInst *fi, int event, void *arg)
        skb_pull(skb, l2addrsize(&(st->l2)));
        PollFlag = *skb->data & 0x10;
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
 
        FsmChangeState(fi, ST_L2_4);
 
@@ -440,7 +440,7 @@ l2_got_st4_disc(struct FsmInst *fi, int event, void *arg)
        skb_pull(skb, l2addrsize(&(st->l2)));
        PollFlag = *skb->data & 0x10;
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
 
        if (!((chanp->impair == 1) && (st->l2.laptype == LAPB)))
                send_uframe(st, DM | (PollFlag ? 0x10 : 0x0), RSP);
@@ -457,7 +457,7 @@ l2_got_ua_establish(struct FsmInst *fi, int event, void *arg)
        skb_pull(skb, l2addrsize(&(st->l2)));
        f = *skb->data & 0x10;
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
        if (f) {
                st->l2.vs = 0;
                st->l2.va = 0;
@@ -484,7 +484,7 @@ l2_got_ua_disconn(struct FsmInst *fi, int event, void *arg)
        skb_pull(skb, l2addrsize(&(st->l2)));
        f = *skb->data & 0x10;
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
        if (f) {
                FsmDelTimer(&st->l2.t200_timer, 6);
                FsmChangeState(fi, ST_L2_4);
@@ -560,7 +560,7 @@ l2_got_st7_RR(struct FsmInst *fi, int event, void *arg)
                seq = (skb->data[0] >> 5) & 0x7;
        }
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
 
        if (!((chanp->impair == 4) && (st->l2.laptype == LAPB)))
                if ((!rsp) && PollFlag)
@@ -649,7 +649,7 @@ icommandreceived(struct FsmInst *fi, int event, void *arg, int *nr)
                /* n(s)!=v(r) */
                wasok = 0;
                SET_SKB_FREE(skb);
-               dev_kfree_skb(skb, FREE_READ);
+               dev_kfree_skb(skb);
                if (st->l2.rejexp) {
                        if (p)
                                if (!((chanp->impair == 3) && (st->l2.laptype == LAPB)))
@@ -779,7 +779,7 @@ l2_got_st7_rej(struct FsmInst *fi, int event, void *arg)
                seq = (skb->data[0] >> 5) & 0x7;
        }
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
 
        if ((!rsp) && PollFlag)
                enquiry_response(st, RR, PollFlag);
@@ -866,7 +866,7 @@ l2_pull_iqueue(struct FsmInst *fi, int event, void *arg)
                printk(KERN_WARNING "isdnl2 try overwrite ack queue entry %d\n",
                       p1);
                SET_SKB_FREE(l2->windowar[p1]);
-               dev_kfree_skb(l2->windowar[p1], FREE_WRITE);
+               dev_kfree_skb(l2->windowar[p1]);
        }
        l2->windowar[p1] = skb_clone(skb, GFP_ATOMIC);
 
@@ -944,7 +944,7 @@ l2_got_st8_rr_rej(struct FsmInst *fi, int event, void *arg)
                seq = (skb->data[0] >> 5) & 0x7;
        }
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
 
        if (rsp && PollFlag) {
                if (legalnr(st, seq)) {
@@ -1019,7 +1019,7 @@ l2_got_FRMR(struct FsmInst *fi, int event, void *arg)
                l2m_debug(&st->l2.l2m, tmp);
        }
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
 }
 
 static void
@@ -1193,7 +1193,7 @@ isdnl2_l1l2(struct PStack *st, int pr, void *arg)
 
                        if (ret) {
                                SET_SKB_FREE(skb);
-                               dev_kfree_skb(skb, FREE_READ);
+                               dev_kfree_skb(skb);
                        }
                        break;
                case (PH_PULL_ACK):
@@ -1209,13 +1209,13 @@ isdnl2_l3l2(struct PStack *st, int pr, void *arg)
                case (DL_DATA):
                        if (FsmEvent(&st->l2.l2m, EV_L2_DL_DATA, arg)) {
                                SET_SKB_FREE(((struct sk_buff *) arg));
-                               dev_kfree_skb((struct sk_buff *) arg, FREE_READ);
+                               dev_kfree_skb((struct sk_buff *) arg);
                        }
                        break;
                case (DL_UNIT_DATA):
                        if (FsmEvent(&st->l2.l2m, EV_L2_DL_UNIT_DATA, arg)) {
                                SET_SKB_FREE(((struct sk_buff *) arg));
-                               dev_kfree_skb((struct sk_buff *) arg, FREE_READ);
+                               dev_kfree_skb((struct sk_buff *) arg);
                        }
                        break;
        }
index d86efcc1a4a7c8f0f5ed3c91af3d1ff0ed3b9790..73b66c73b6b2e54ef4efbd8e235b26af985e1ff4 100644 (file)
@@ -135,7 +135,7 @@ no_l3_proto(struct PStack *st, int pr, void *arg)
        l3_debug(st, "no protocol");
        if (skb) {
                SET_SKB_FREE(skb);
-               dev_kfree_skb(skb, FREE_READ);
+               dev_kfree_skb(skb);
        }
 }
 
index bd595d0c8449f0567be0d005058e9f4752e24236..f5f5e857a0a0f3d7551daa1ddea5c90ed7df2fb3 100644 (file)
@@ -363,7 +363,7 @@ hscx_interrupt(struct IsdnCardState *sp, u_char val, u_char hscx)
                                return;
                        } else {
                                SET_SKB_FREE(hsp->tx_skb);
-                               dev_kfree_skb(hsp->tx_skb, FREE_WRITE);
+                               dev_kfree_skb(hsp->tx_skb);
                                hsp->count = 0;
                                if (hsp->st->l4.l1writewakeup)
                                        hsp->st->l4.l1writewakeup(hsp->st);
@@ -526,7 +526,7 @@ isac_interrupt(struct IsdnCardState *sp, u_char val)
                                goto afterXPR;
                        } else {
                                SET_SKB_FREE(sp->tx_skb);
-                               dev_kfree_skb(sp->tx_skb, FREE_WRITE);
+                               dev_kfree_skb(sp->tx_skb);
                                sp->tx_cnt = 0;
                                sp->tx_skb = NULL;
                        }
index 0af1b4534b123216f2cb72f097aba5313823adb9..c3ee6a73fa5ba1c439b72a3bd0b2697100466f5a 100644 (file)
@@ -209,7 +209,7 @@ l3_1tr6_setup(struct PStack *st, u_char pr, void *arg)
                        st->pa->spv = 1;
        }
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
 
        /* Signal all services, linklevel takes care of Service-Indicator */
        if (bcfound) {
@@ -238,7 +238,7 @@ l3_1tr6_setup_ack(struct PStack *st, u_char pr, void *arg)
        } else if (st->l3.debug & L3_DEB_WARN)
                l3_debug(st, "setup answer without bchannel");
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
        L3AddTimer(&st->l3.timer, st->l3.t304, CC_T304);
        st->l3.l3l4(st, CC_MORE_INFO, NULL);
 }
@@ -256,7 +256,7 @@ l3_1tr6_call_sent(struct PStack *st, u_char pr, void *arg)
        } else if (st->l3.debug & L3_DEB_WARN)
                l3_debug(st, "setup answer without bchannel");
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
        L3AddTimer(&st->l3.timer, st->l3.t310, CC_T310);
        newl3state(st, 3);
        st->l3.l3l4(st, CC_PROCEEDING_IND, NULL);
@@ -268,7 +268,7 @@ l3_1tr6_alert(struct PStack *st, u_char pr, void *arg)
        struct sk_buff *skb = arg;
 
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
        L3DelTimer(&st->l3.timer);      /* T304 */
        newl3state(st, 4);
        st->l3.l3l4(st, CC_ALERTING_IND, NULL);
@@ -300,7 +300,7 @@ l3_1tr6_info(struct PStack *st, u_char pr, void *arg)
        } else if (st->l3.debug & L3_DEB_CHARGE)
                l3_debug(st, "charging info not found");
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
 
 }
 
@@ -310,7 +310,7 @@ l3_1tr6_info_s2(struct PStack *st, u_char pr, void *arg)
        struct sk_buff *skb = arg;
 
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
 }
 
 static void
@@ -321,7 +321,7 @@ l3_1tr6_connect(struct PStack *st, u_char pr, void *arg)
        L3DelTimer(&st->l3.timer);      /* T310 */
        newl3state(st, 10);
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
        st->pa->chargeinfo = 0;
        st->l3.l3l4(st, CC_SETUP_CNF, NULL);
 }
@@ -347,7 +347,7 @@ l3_1tr6_rel(struct PStack *st, u_char pr, void *arg)
        } else
                st->pa->cause = -1;
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
        StopAllL3Timer(st);
        newl3state(st, 0);
        l3_1TR6_message(st, MT_N1_REL_ACK, PROTO_DIS_N1);
@@ -360,7 +360,7 @@ l3_1tr6_rel_ack(struct PStack *st, u_char pr, void *arg)
        struct sk_buff *skb = arg;
 
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
        StopAllL3Timer(st);
        newl3state(st, 0);
        st->pa->cause = -1;
@@ -413,7 +413,7 @@ l3_1tr6_disc(struct PStack *st, u_char pr, void *arg)
                st->pa->cause = -1;
        }
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
        newl3state(st, 12);
        st->l3.l3l4(st, CC_DISCONNECT_IND, NULL);
 }
@@ -425,7 +425,7 @@ l3_1tr6_connect_ack(struct PStack *st, u_char pr, void *arg)
        struct sk_buff *skb = arg;
 
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
        newl3state(st, 10);
        st->pa->chargeinfo = 0;
        L3DelTimer(&st->l3.timer);
@@ -706,13 +706,13 @@ up1tr6(struct PStack *st, int pr, void *arg)
                        l3_debug(st, tmp);
                }
                SET_SKB_FREE(skb);
-               dev_kfree_skb(skb, FREE_READ);
+               dev_kfree_skb(skb);
                return;
        }
        mt = skb->data[skb->data[1] + 2];
        if (skb->data[0] == PROTO_DIS_N0) {
                SET_SKB_FREE(skb);
-               dev_kfree_skb(skb, FREE_READ);
+               dev_kfree_skb(skb);
                if (st->l3.debug & L3_DEB_STATE) {
                        sprintf(tmp, "up1tr6%s N0 state %d mt %x unhandled",
                                (pr == DL_DATA) ? " " : "(broadcast) ",
@@ -726,7 +726,7 @@ up1tr6(struct PStack *st, int pr, void *arg)
                                break;
                if (i == datastln1_len) {
                        SET_SKB_FREE(skb);
-                       dev_kfree_skb(skb, FREE_READ);
+                       dev_kfree_skb(skb);
                        if (st->l3.debug & L3_DEB_STATE) {
                                sprintf(tmp, "up1tr6%sstate %d mt %x unhandled",
                                  (pr == DL_DATA) ? " " : "(broadcast) ",
index d79bd468e7a69b6ca42e58a9dbe7f25c45ce4c2b..d6089873464fe59c5e4d0fff95ac0a4fc0e4f303 100644 (file)
@@ -110,7 +110,7 @@ l3dss1_release_cmpl(struct PStack *st, u_char pr, void *arg)
                cause = *p & 0x7f;
        }
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
        StopAllL3Timer(st);
        st->pa->cause = cause;
        newl3state(st, 0);
@@ -238,7 +238,7 @@ l3dss1_call_proc(struct PStack *st, u_char pr, void *arg)
        } else if (st->l3.debug & L3_DEB_WARN)
                l3_debug(st, "setup answer without bchannel");
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
        newl3state(st, 3);
        L3AddTimer(&st->l3.timer, st->l3.t310, CC_T310);
        st->l3.l3l4(st, CC_PROCEEDING_IND, NULL);
@@ -259,7 +259,7 @@ l3dss1_setup_ack(struct PStack *st, u_char pr, void *arg)
        } else if (st->l3.debug & L3_DEB_WARN)
                l3_debug(st, "setup answer without bchannel");
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
        newl3state(st, 2);
        L3AddTimer(&st->l3.timer, st->l3.t304, CC_T304);
        st->l3.l3l4(st, CC_MORE_INFO, NULL);
@@ -282,7 +282,7 @@ l3dss1_disconnect(struct PStack *st, u_char pr, void *arg)
                cause = *p & 0x7f;
        }
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
        newl3state(st, 12);
        st->pa->cause = cause;
        st->l3.l3l4(st, CC_DISCONNECT_IND, NULL);
@@ -294,7 +294,7 @@ l3dss1_connect(struct PStack *st, u_char pr, void *arg)
        struct sk_buff *skb = arg;
 
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
        L3DelTimer(&st->l3.timer);      /* T310 */
        newl3state(st, 10);
        st->l3.l3l4(st, CC_SETUP_CNF, NULL);
@@ -306,7 +306,7 @@ l3dss1_alerting(struct PStack *st, u_char pr, void *arg)
        struct sk_buff *skb = arg;
 
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
        L3DelTimer(&st->l3.timer);      /* T304 */
        newl3state(st, 4);
        st->l3.l3l4(st, CC_ALERTING_IND, NULL);
@@ -394,7 +394,7 @@ l3dss1_setup(struct PStack *st, u_char pr, void *arg)
                st->pa->setup.screen = 0;
        }
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
 
        if (bcfound) {
                if ((st->pa->setup.si1 != 7) && (st->l3.debug & L3_DEB_WARN)) {
@@ -431,7 +431,7 @@ l3dss1_connect_ack(struct PStack *st, u_char pr, void *arg)
        struct sk_buff *skb = arg;
 
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
        newl3state(st, 10);
        L3DelTimer(&st->l3.timer);
        st->l3.l3l4(st, CC_SETUP_COMPLETE_IND, NULL);
@@ -510,7 +510,7 @@ l3dss1_release(struct PStack *st, u_char pr, void *arg)
                cause = *p & 0x7f;
        }
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
        StopAllL3Timer(st);
        st->pa->cause = cause;
        newl3state(st, 0);
@@ -535,7 +535,7 @@ l3dss1_status_enq(struct PStack *st, u_char pr, void *arg)
        struct sk_buff *skb = arg;
 
        SET_SKB_FREE(skb);
-       dev_kfree_skb(skb, FREE_READ);
+       dev_kfree_skb(skb);
 
        MsgHead(p, st->l3.callref, MT_STATUS);
 
@@ -727,7 +727,7 @@ dss1up(struct PStack *st, int pr, void *arg)
                        l3_debug(st, tmp);
                }
                SET_SKB_FREE(skb);
-               dev_kfree_skb(skb, FREE_READ);
+               dev_kfree_skb(skb);
                return;
        }
        mt = skb->data[skb->data[1] + 2];
@@ -737,7 +737,7 @@ dss1up(struct PStack *st, int pr, void *arg)
                        break;
        if (i == datasllen) {
                SET_SKB_FREE(skb);
-               dev_kfree_skb(skb, FREE_READ);
+               dev_kfree_skb(skb);
                if (st->l3.debug & L3_DEB_STATE) {
                        sprintf(tmp, "dss1up%sstate %d mt %x unhandled",
                                (pr == DL_DATA) ? " " : "(broadcast) ",
index f8a149234461d8c388dcaaddcc42e0c1ff238032..d97595938536cee2df86e836980434c688222d38 100644 (file)
@@ -233,7 +233,7 @@ tei_handler(struct PStack *st,
                        } else
                                mdl_unit_data_ind(st, (bp[1] << 8) | bp[2], bp[3], bp[4] >> 1);
                        SET_SKB_FREE(skb);
-                       dev_kfree_skb(skb, FREE_READ);
+                       dev_kfree_skb(skb);
                        break;
                default:
                        break;
index e14c01c09fb80adfeec028c66116f7575cb5ba3f..6aaba70d3918130d2d708b004a9be920161fbc9c 100644 (file)
@@ -327,7 +327,7 @@ hscx_interrupt(struct IsdnCardState *sp, u_char val, u_char hscx)
                                return;
                        } else {
                                SET_SKB_FREE(hsp->tx_skb);
-                               dev_kfree_skb(hsp->tx_skb, FREE_WRITE);
+                               dev_kfree_skb(hsp->tx_skb);
                                hsp->count = 0;
                                if (hsp->st->l4.l1writewakeup)
                                        hsp->st->l4.l1writewakeup(hsp->st);
@@ -487,7 +487,7 @@ isac_interrupt(struct IsdnCardState *sp, u_char val)
                                goto afterXPR;
                        } else {
                                SET_SKB_FREE(sp->tx_skb);
-                               dev_kfree_skb(sp->tx_skb, FREE_WRITE);
+                               dev_kfree_skb(sp->tx_skb);
                                sp->tx_cnt = 0;
                                sp->tx_skb = NULL;
                        }
index 22254604c96fffb88a405734cc33a0b4ac59a8c7..4b92e5ab7b7fc2d56695f8c3103e467dbca1bf5e 100644 (file)
@@ -303,7 +303,7 @@ hscx_interrupt(struct IsdnCardState *sp, u_char val, u_char hscx)
                                return;
                        } else {
                                SET_SKB_FREE(hsp->tx_skb);
-                               dev_kfree_skb(hsp->tx_skb, FREE_WRITE);
+                               dev_kfree_skb(hsp->tx_skb);
                                hsp->count = 0;
                                if (hsp->st->l4.l1writewakeup)
                                        hsp->st->l4.l1writewakeup(hsp->st);
@@ -465,7 +465,7 @@ isac_interrupt(struct IsdnCardState *sp, u_char val)
                                goto afterXPR;
                        } else {
                                SET_SKB_FREE(sp->tx_skb);
-                               dev_kfree_skb(sp->tx_skb, FREE_WRITE);
+                               dev_kfree_skb(sp->tx_skb);
                                sp->tx_cnt = 0;
                                sp->tx_skb = NULL;
                        }
index f51ae3d7db04300c3f5cb6e9a7277d77f01a2314..0d839512d00eb1e84535fbcedf74eb5ddf12ab7e 100644 (file)
@@ -207,7 +207,7 @@ icn_free_queue(icn_card * card, int channel)
        struct sk_buff *skb;
 
        while ((skb = skb_dequeue(queue)))
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
        card->sndcount[channel] = 0;
 }
 
@@ -471,7 +471,7 @@ icn_pollbchan_send(int channel, icn_card * card)
                        sbnext; /* switch to next buffer        */
                        icn_maprelease_channel(card, mch & 2);
                        if (!skb->len) {
-                               dev_kfree_skb(skb, FREE_WRITE);
+                               dev_kfree_skb(skb);
                                cmd.command = ISDN_STAT_BSENT;
                                cmd.driver = card->myid;
                                cmd.arg = channel;
@@ -828,7 +828,7 @@ icn_sendbuf(int channel, struct sk_buff *skb, icn_card * card)
                nskb = skb_clone(skb, GFP_ATOMIC);
                if (nskb) {
                        skb_queue_tail(&card->spqueue[channel], nskb);
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
                } else
                        len = 0;
                card->sndcount[channel] += len;
index 89446a4fa216daafdf0fe63c3d7135c241217cc1..84da942941c559ecd453ab7526461ce09ae8e1f8 100644 (file)
@@ -596,7 +596,7 @@ isdn_audio_eval_dtmf(modem_info * info)
                        if (skb_headroom(skb) < sizeof(isdn_audio_skb)) {
                                printk(KERN_WARNING
                                       "isdn_audio: insufficient skb_headroom, dropping\n");
-                               kfree_skb(skb, FREE_READ);
+                               kfree_skb(skb);
                                return;
                        }
                        ISDN_AUDIO_SKB_DLECOUNT(skb) = 0;
@@ -613,7 +613,7 @@ isdn_audio_eval_dtmf(modem_info * info)
                                isdn_timer_ctrl(ISDN_TIMER_MODEMREAD, 1);
                        wake_up_interruptible(&dev->drv[di]->rcv_waitq[ch]);
                } else
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                s->last = what;
        }
 }
index 1b23464964bf2a8a411eeeb01f09e6019fb6fb1c..5687fdc2dc9d666cd7beb52fff59c87756e54fbb 100644 (file)
@@ -277,7 +277,7 @@ isdn_free_queue(struct sk_buff_head *queue)
        cli();
        if (skb_queue_len(queue))
                while ((skb = skb_dequeue(queue)))
-                       isdn_trash_skb(skb, FREE_READ);
+                       isdn_trash_skb(skb);
        restore_flags(flags);
 }
 
@@ -374,7 +374,7 @@ isdn_receive_skb_callback(int di, int channel, struct sk_buff *skb)
        int i;
 
        if ((i = isdn_dc2minor(di, channel)) == -1) {
-               isdn_trash_skb(skb, FREE_READ);
+               isdn_trash_skb(skb);
                return;
        }
        /* Update statistics */
@@ -389,7 +389,7 @@ isdn_receive_skb_callback(int di, int channel, struct sk_buff *skb)
                        return;
                wake_up_interruptible(&dev->drv[di]->rcv_waitq[channel]);
        } else
-               isdn_trash_skb(skb, FREE_READ);
+               isdn_trash_skb(skb);
 }
 
 void
@@ -752,7 +752,7 @@ isdn_readbchan(int di, int channel, u_char * buf, u_char * fp, int len, int user
                        ISDN_AUDIO_SKB_LOCK(skb) = 0;
 #endif
                        skb = skb_dequeue(&dev->drv[di]->rpqueue[channel]);
-                       isdn_trash_skb(skb, FREE_READ);
+                       isdn_trash_skb(skb);
                } else {
                        /* Not yet emptied this buff, so it
                         * must stay in the queue, for further calls
@@ -1892,7 +1892,7 @@ isdn_writebuf_stub(int drvidx, int chan, const u_char * buf, int len,
                ret = dev->drv[drvidx]->interface->writebuf_skb(drvidx,
                                                              chan, skb);
                if (ret <= 0)
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
        }
        if (ret > 0)
                dev->obytes[isdn_dc2minor(drvidx, chan)] += ret;
@@ -1919,7 +1919,7 @@ isdn_writebuf_skb_stub(int drvidx, int chan, struct sk_buff *skb)
        else {
                if ((ret = dev->drv[drvidx]->interface->
                  writebuf(drvidx, chan, skb->data, skb->len, 0)) == len)
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
        }
        if (ret > 0)
                dev->obytes[isdn_dc2minor(drvidx, chan)] += len;
index 8a4e5e72f2527276ea11a6b9eab120f806bba63a..c44fcc74a7549d77b8c22f6f22af55b58ee4331d 100644 (file)
@@ -303,11 +303,11 @@ isdn_net_unbind_channel(isdn_net_local * lp)
        save_flags(flags);
        cli();
        if (lp->first_skb) {
-               dev_kfree_skb(lp->first_skb, FREE_WRITE);
+               dev_kfree_skb(lp->first_skb);
                lp->first_skb = NULL;
        }
        if (lp->sav_skb) {
-               dev_kfree_skb(lp->sav_skb, FREE_WRITE);
+               dev_kfree_skb(lp->sav_skb);
                lp->sav_skb = NULL;
        }
 #ifdef DEV_NUMBUFFS
@@ -452,11 +452,11 @@ isdn_net_stat_callback(int idx, int cmd)
                                if ((!lp->dialstate) && (lp->flags & ISDN_NET_CONNECTED)) {
                                        lp->flags &= ~ISDN_NET_CONNECTED;
                                        if (lp->first_skb) {
-                                               dev_kfree_skb(lp->first_skb, FREE_WRITE);
+                                               dev_kfree_skb(lp->first_skb);
                                                lp->first_skb = NULL;
                                        }
                                        if (lp->sav_skb) {
-                                               dev_kfree_skb(lp->sav_skb, FREE_WRITE);
+                                               dev_kfree_skb(lp->sav_skb);
                                                lp->sav_skb = NULL;
                                        }
                                        isdn_free_channel(lp->isdn_device, lp->isdn_channel,
@@ -912,7 +912,7 @@ isdn_net_send_skb(struct device *ndev, isdn_net_local * lp,
        }
        if (ret < 0) {
                SET_SKB_FREE(skb);
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                lp->stats.tx_errors++;
                clear_bit(0, (void *) &(ndev->tbusy));
                return 0;
@@ -1043,7 +1043,7 @@ isdn_net_start_xmit(struct sk_buff *skb, struct device *ndev)
 #else
                                        isdn_net_unreachable(ndev, skb,
                                                           "No channel");
-                                       dev_kfree_skb(skb, FREE_WRITE);
+                                       dev_kfree_skb(skb);
                                        ndev->tbusy = 0;
                                        return 0;
 #endif
@@ -1059,7 +1059,7 @@ isdn_net_start_xmit(struct sk_buff *skb, struct device *ndev)
                                if (lp->p_encap == ISDN_NET_ENCAP_SYNCPPP) {
                                        /* no 'first_skb' handling for syncPPP */
                                        if (isdn_ppp_bind(lp) < 0) {
-                                               dev_kfree_skb(skb, FREE_WRITE);
+                                               dev_kfree_skb(skb);
                                                isdn_net_unbind_channel(lp);
                                                restore_flags(flags);
                                                return 0;       /* STN (skb to nirvana) ;) */
@@ -1074,7 +1074,7 @@ isdn_net_start_xmit(struct sk_buff *skb, struct device *ndev)
                                 */
                                if (lp->first_skb) {
                                        printk(KERN_WARNING "isdn_net_start_xmit: First skb already set!\n");
-                                       dev_kfree_skb(lp->first_skb, FREE_WRITE);
+                                       dev_kfree_skb(lp->first_skb);
                                        lp->first_skb = NULL;
                                }
                                lp->first_skb = skb;
@@ -1086,7 +1086,7 @@ isdn_net_start_xmit(struct sk_buff *skb, struct device *ndev)
                        } else {
                                isdn_net_unreachable(ndev, skb,
                                                     "No phone number");
-                               dev_kfree_skb(skb, FREE_WRITE);
+                               dev_kfree_skb(skb);
                                ndev->tbusy = 0;
                                return 0;
                        }
@@ -1272,7 +1272,7 @@ isdn_net_receive(struct device *ndev, struct sk_buff *skb)
                default:
                        printk(KERN_WARNING "%s: unknown encapsulation, dropping\n",
                               lp->name);
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        return;
        }
        netif_rx(skb);
@@ -2610,7 +2610,7 @@ dev_purge_queues(struct device *dev)
        for (i = 0; i < DEV_NUMBUFFS; i++) {
                struct sk_buff *skb;
                while ((skb = skb_dequeue(&dev->buffs[i])))
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
        }
 
 }
index 1cfcd07abfbcfb1e39bb13e2d8b3c632ea9224d1..8d429893112593690152677f12173c414241a84a 100644 (file)
@@ -881,7 +881,7 @@ isdn_ppp_write(int min, struct file *file, const char *buf, int count)
                        }
                        if ((cnt = isdn_writebuf_skb_stub(lp->isdn_device, lp->isdn_channel, skb)) != count) {
                                if (lp->sav_skb) {
-                                       dev_kfree_skb(lp->sav_skb, FREE_WRITE);
+                                       dev_kfree_skb(lp->sav_skb);
                                        printk(KERN_INFO "isdn_ppp_write: freeing sav_skb (%d,%d)!\n", cnt, count);
                                } else
                                        printk(KERN_INFO "isdn_ppp_write: Can't write PPP frame to LL (%d,%d)!\n", cnt, count);
@@ -955,7 +955,7 @@ isdn_ppp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buff *sk
                skb_pull(skb, 2);
        else if (is->pppcfg & SC_REJ_COMP_AC) {
                SET_SKB_FREE(skb);
-               dev_kfree_skb(skb, 0 /* FREE_READ */ );
+               dev_kfree_skb(skb);
                return;         /* discard it silently */
        }
 #ifdef CONFIG_ISDN_MPP
@@ -1065,7 +1065,7 @@ isdn_ppp_receive(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buff *sk
                                        net_dev->ib.modify = 0;
                                        printk(KERN_WARNING "ippp/MPPP: Bad! Can't alloc sq node!\n");
                                        SET_SKB_FREE(skb);
-                                       dev_kfree_skb(skb, 0 /* FREE_READ */ );
+                                       dev_kfree_skb(skb);
                                        return; /* discard */
                                }
                                q->skb = skb;
@@ -1144,7 +1144,7 @@ isdn_ppp_push_higher(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buff
                                printk(KERN_WARNING "isdn_ppp: received illegal VJC_UNCOMP frame!\n");
                                net_dev->local.stats.rx_dropped++;
                                SET_SKB_FREE(skb);
-                               dev_kfree_skb(skb, 0 /* FREE_READ */ );
+                               dev_kfree_skb(skb);
                                return;
                        }
 #endif
@@ -1169,7 +1169,7 @@ isdn_ppp_push_higher(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buff
                                if (!skb) {
                                        printk(KERN_WARNING "%s: Memory squeeze, dropping packet.\n", dev->name);
                                        net_dev->local.stats.rx_dropped++;
-                                       dev_kfree_skb(skb_old, 0 /* FREE_READ */ );
+                                       dev_kfree_skb(skb_old);
                                        return;
                                }
                                skb->dev = dev;
@@ -1178,10 +1178,10 @@ isdn_ppp_push_higher(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buff
                                skb->mac.raw = skb->data;
                                pkt_len = slhc_uncompress(ippp_table[net_dev->local.ppp_slot]->slcomp,
                                                skb->data, skb_old->len);
-                               dev_kfree_skb(skb_old, 0 /* FREE_READ */ );
+                               dev_kfree_skb(skb_old);
                                if (pkt_len < 0) {
                                        SET_SKB_FREE(skb);
-                                       dev_kfree_skb(skb, 0 /* FREE_READ */ );
+                                       dev_kfree_skb(skb);
                                        lp->stats.rx_dropped++;
                                        return;
                                }
@@ -1192,14 +1192,14 @@ isdn_ppp_push_higher(isdn_net_dev * net_dev, isdn_net_local * lp, struct sk_buff
                        printk(KERN_INFO "isdn: Ooopsa .. VJ-Compression support not compiled into isdn driver.\n");
                        lp->stats.rx_dropped++;
                        SET_SKB_FREE(skb);
-                       dev_kfree_skb(skb, 0 /* FREE_READ */ );
+                       dev_kfree_skb(skb);
                        return;
 #endif
                        break;
                default:
                        isdn_ppp_fill_rq(skb->data, skb->len, proto, lp->ppp_slot);     /* push data to pppd device */
                        SET_SKB_FREE(skb);
-                       dev_kfree_skb(skb, 0 /* FREE_READ */ );
+                       dev_kfree_skb(skb);
                        return;
        }
 
@@ -1273,7 +1273,7 @@ isdn_ppp_xmit(struct sk_buff *skb, struct device *dev)
                        proto = PPP_IPX;        /* untested */
                        break;
                default:
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
                        printk(KERN_ERR "isdn_ppp: skipped frame with unsupported protocoll: %#x.\n", skb->protocol);
                        return 0;
        }
@@ -1320,10 +1320,10 @@ isdn_ppp_xmit(struct sk_buff *skb, struct device *dev)
                        if (buf != skb->data) { /* copied to new buffer ??? (btw: WHY must slhc copy it?? *sigh*)  */
                                if (new_skb->data != buf)
                                        printk(KERN_ERR "isdn_ppp: FATAL error after slhc_compress!!\n");
-                               dev_kfree_skb(skb, FREE_WRITE);
+                               dev_kfree_skb(skb);
                                skb = new_skb;
                        } else {
-                               dev_kfree_skb(new_skb, 0 /* FREE_WRITE */ );
+                               dev_kfree_skb(new_skb);
                        }
 
                        skb_trim(skb, pktlen);
@@ -1389,7 +1389,7 @@ isdn_ppp_xmit(struct sk_buff *skb, struct device *dev)
        if (isdn_net_send_skb(dev, lp, skb)) {
                if (lp->sav_skb) {      /* whole sav_skb processing with disabled IRQs ?? */
                        printk(KERN_ERR "%s: whoops .. there is another stored skb!\n", dev->name);
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
                } else
                        lp->sav_skb = skb;
        }
@@ -1408,7 +1408,7 @@ isdn_ppp_free_sqqueue(isdn_net_dev * p)
                struct sqqueue *qn = q->next;
                if (q->skb) {
                        SET_SKB_FREE(q->skb);
-                       dev_kfree_skb(q->skb, 0 /* FREE_READ */ );
+                       dev_kfree_skb(q->skb);
                }
                kfree(q);
                q = qn;
@@ -1425,7 +1425,7 @@ isdn_ppp_free_mpqueue(isdn_net_dev * p)
        while (q) {
                struct mpqueue *ql = q->next;
                SET_SKB_FREE(q->skb);
-               dev_kfree_skb(q->skb, 0 /* FREE_READ */ );
+               dev_kfree_skb(q->skb);
                kfree(q);
                q = ql;
        }
@@ -1600,7 +1600,7 @@ isdn_ppp_fill_mpqueue(isdn_net_dev * dev, struct sk_buff **skb, int BEbyte, long
                while (q) {
                        struct mpqueue *ql = q->next;
                        SET_SKB_FREE(q->skb);
-                       dev_kfree_skb(q->skb, 0 /* FREE_READ */ );
+                       dev_kfree_skb(q->skb);
                        kfree(q);
                        q = ql;
                }
@@ -1613,7 +1613,7 @@ isdn_ppp_fill_mpqueue(isdn_net_dev * dev, struct sk_buff **skb, int BEbyte, long
                memcpy((*skb)->data + cnt, q->skb->data, q->skb->len);
                cnt += q->skb->len;
                SET_SKB_FREE(q->skb);
-               dev_kfree_skb(q->skb, 0 /* FREE_READ */ );
+               dev_kfree_skb(q->skb);
                kfree(q);
                q = ql;
        }
@@ -1672,7 +1672,7 @@ isdn_ppp_cleanup_mpqueue(isdn_net_dev * dev, long min_sqno)
                                while (q) {
                                        ql = q->last;
                                        SET_SKB_FREE(q->skb);
-                                       dev_kfree_skb(q->skb, 0 /* FREE_READ */ );
+                                       dev_kfree_skb(q->skb);
                                        kfree(q);
 #ifdef CONFIG_ISDN_PPP_VJ
                                        toss = 1;
index 8ba0d197d608ff9bbea730dd81ce49f5c33ea027..0929dbc26967307ff0ce66b1906d0ab2eca4db45 100644 (file)
@@ -276,7 +276,7 @@ isdn_tty_try_read(modem_info * info, struct sk_buff *skb)
                                                tty->flip.flag_buf_ptr[len - 1] = 0xff;
                                        queue_task(&tty->flip.tqueue, &tq_timer);
                                        SET_SKB_FREE(skb);
-                                       kfree_skb(skb, FREE_READ);
+                                       kfree_skb(skb);
                                        return 1;
                                }
                        }
@@ -372,7 +372,7 @@ isdn_tty_rcv_skb(int i, int di, int channel, struct sk_buff *skb)
                ) {
                /* If Modem not listening, drop data */
                SET_SKB_FREE(skb);
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 1;
        }
        if (info->emu.mdmreg[13] & 2)
@@ -384,7 +384,7 @@ isdn_tty_rcv_skb(int i, int di, int channel, struct sk_buff *skb)
                printk(KERN_WARNING
                       "isdn_audio: insufficient skb_headroom, dropping\n");
                SET_SKB_FREE(skb);
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 1;
        }
        ISDN_AUDIO_SKB_DLECOUNT(skb) = 0;
@@ -456,13 +456,13 @@ isdn_tty_cleanup_xmit(modem_info * info)
        if (skb_queue_len(&info->xmit_queue))
                while ((skb = skb_dequeue(&info->xmit_queue))) {
                        SET_SKB_FREE(skb);
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                }
 #ifdef CONFIG_ISDN_AUDIO
        if (skb_queue_len(&info->dtmf_queue))
                while ((skb = skb_dequeue(&info->dtmf_queue))) {
                        SET_SKB_FREE(skb);
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                }
 #endif
        restore_flags(flags);
@@ -493,7 +493,7 @@ isdn_tty_tint(modem_info * info)
        if (slen < 0) {
                /* Error: no channel, already shutdown, or wrong parameter */
                SET_SKB_FREE(skb);
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                return;
        }
        if (slen)
index e7d765a95c87cf51edd3e4e5230fbddaf80dd098..cacb714bee82262f799aaac8ecabd662ca04be5f 100644 (file)
@@ -733,7 +733,7 @@ void pcbit_l3_receive(struct pcbit_dev * dev, ulong msg,
 
        SET_SKB_FREE(skb);
 
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
 
 }
 
index 96e47976149969e5711f05348d09305ec8ba4879..0ccb2b7c90a71fd7eb9d563b3eed22195318010b 100644 (file)
@@ -106,13 +106,13 @@ pcbit_l2_write(struct pcbit_dev *dev, ulong msg, ushort refnum,
        unsigned long flags;
 
        if (dev->l2_state != L2_RUNNING && dev->l2_state != L2_LOADING) {
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                return -1;
        }
        if ((frame = (struct frame_buf *) kmalloc(sizeof(struct frame_buf),
                                                  GFP_ATOMIC)) == NULL) {
                printk(KERN_WARNING "pcbit_2_write: kmalloc failed\n");
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                return -1;
        }
        frame->msg = msg;
@@ -287,7 +287,7 @@ pcbit_transmit(struct pcbit_dev *dev)
 
                        if (frame->skb != NULL) {
                                /* free frame */
-                               dev_kfree_skb(frame->skb, FREE_WRITE);
+                               dev_kfree_skb(frame->skb);
                        }
                        kfree(frame);
                }
@@ -382,7 +382,7 @@ pcbit_receive(struct pcbit_dev *dev)
                        /* discard previous queued frame */
                        if (dev->read_frame->skb) {
                                SET_SKB_FREE(dev->read_frame->skb);
-                               kfree_skb(dev->read_frame->skb, FREE_READ);
+                               kfree_skb(dev->read_frame->skb);
                        }
                        kfree(dev->read_frame);
                        dev->read_frame = NULL;
@@ -650,7 +650,7 @@ pcbit_l2_err_recover(unsigned long data)
        if (dev->read_frame) {
                if (dev->read_frame->skb) {
                        SET_SKB_FREE(dev->read_frame->skb);
-                       kfree_skb(dev->read_frame->skb, FREE_READ);
+                       kfree_skb(dev->read_frame->skb);
                }
                kfree(dev->read_frame);
                dev->read_frame = NULL;
@@ -661,7 +661,7 @@ pcbit_l2_err_recover(unsigned long data)
                dev->write_queue = dev->write_queue->next;
 
                if (frame->skb) {
-                       dev_kfree_skb(frame->skb, FREE_WRITE);
+                       dev_kfree_skb(frame->skb);
                }
                kfree(frame);
 #else
index ccd3b20fc798f232b7c8d95748b77afce8c7e7fa..563d1821db1518ece402c6d681d8cb5ff9c08e98 100644 (file)
@@ -100,7 +100,7 @@ int sndpkt(int devId, int channel, struct sk_buff *data)
                        adapter[card]->channel[channel].num_sendbufs ? 0 :
                        adapter[card]->channel[channel].next_sendbuf;
                        pr_debug("%s: Packet sent successfully\n", adapter[card]->devicename);
-               dev_kfree_skb(data, FREE_WRITE);
+               dev_kfree_skb(data);
                indicate_status(card,ISDN_STAT_BSENT,channel,NULL);
        }
        return data->len;
index 3d9fabf1dc096ae92b91e50a6ed179edccbd84de..94f4a5503562dd14e6b6baa28b48a440f40a498a 100644 (file)
@@ -27,7 +27,8 @@
  *
  * All registers are 8 bits wide and read/write.  If your hardware differs
  * only in register addresses (eg because your registers are on 32-bit
- * word boundaries) then you can alter the constants below to accomodate this.
+ * word boundaries) then you can alter the constants in parport_pc.h to
+ * accomodate this.
  */
 
 #include <linux/stddef.h>
index 1817f876c5f1ff5cc588ea78fabb4d743098b81a..faecf3ecbfe39fbe2e006c51cf8ada08bd09dd3f 100644 (file)
@@ -3,6 +3,7 @@
  * Authors: David Campbell <campbell@torque.net>
  *          Tim Waugh <tim@cyberelk.demon.co.uk>
  *          Philip Blundell <philb@gnu.org>
+ *          Andrea Arcangeli <arcangeli@mbox.queen.it>
  *
  * based on work by Grant Guenther <grant@torque.net>
  *              and Philip Blundell
@@ -13,6 +14,7 @@
 #include <asm/ptrace.h>
 #include <asm/io.h>
 #include <asm/dma.h>
+#include <asm/irq.h>
 
 #include <linux/delay.h>
 #include <linux/errno.h>
@@ -30,7 +32,7 @@ extern void parport_null_intr_func(int irq, void *dev_id, struct pt_regs *regs);
 static int irq_write_proc(struct file *file, const char *buffer,
                                          unsigned long count, void *data)
 {
-       int newirq;
+       unsigned int newirq, oldirq;
        struct parport *pp = (struct parport *)data;
        
        if (count > 5 )  /* more than 4 digits + \n for a irq 0x?? 0?? ??  */
@@ -49,33 +51,35 @@ static int irq_write_proc(struct file *file, const char *buffer,
                }
        }
 
+       if (newirq >= NR_IRQS)
+               return -EOVERFLOW;
+
        if (pp->irq != PARPORT_IRQ_NONE && !(pp->flags & PARPORT_FLAG_COMA)) {
-               if (pp->cad->irq_func)
+               if (pp->cad != NULL && pp->cad->irq_func != NULL)
                        free_irq(pp->irq, pp->cad->private);
                else
                        free_irq(pp->irq, NULL);
        }
 
+       oldirq = pp->irq;
        pp->irq = newirq;
 
        if (pp->irq != PARPORT_IRQ_NONE && !(pp->flags & PARPORT_FLAG_COMA)) { 
-               struct pardevice *pd = pp->cad;
-
-               if (pd == NULL) {
-                       pd = pp->devices;
-                       if (pd != NULL) 
-                               request_irq(pp->irq, pd->irq_func ? 
-                                           pd->irq_func :
-                                           parport_null_intr_func,
-                                           SA_INTERRUPT, pd->name,
-                                           pd->private);
-               } else {
-                       request_irq(pp->irq, pd->irq_func ? pd->irq_func :
-                                   parport_null_intr_func,
+               struct pardevice *cad = pp->cad;
+
+               if (cad == NULL)
+                       request_irq(pp->irq, parport_null_intr_func,
                                    SA_INTERRUPT, pp->name, NULL);
-               }
+               else
+                       request_irq(pp->irq, cad->irq_func ? cad->irq_func :
+                                   parport_null_intr_func, SA_INTERRUPT,
+                                   cad->name, cad->private);
        }
 
+       if (oldirq != PARPORT_IRQ_NONE && newirq == PARPORT_IRQ_NONE &&
+           pp->cad != NULL && pp->cad->irq_func != NULL)
+               pp->cad->irq_func(pp->irq, pp->cad->private, NULL);
+
        return count;
 }
 
index d5cb133d681b1d36b2daeef2d5b0fe874205d900..dd1b4a6ae5e8a959b4ddc76b0224c3685399b582 100644 (file)
@@ -470,7 +470,7 @@ load_it_again_sam:
 
        if (el_debug > 2)
                printk(" queued xmit.\n");
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
        return 0;
 }
 \f
index d645ce16589f33faec9c8cff864e35132baacc85..f83c6c5ba21eb97557a1f95e7d6720dfceb707d3 100644 (file)
@@ -698,7 +698,7 @@ static void elp_interrupt(int irq, void *dev_id, struct pt_regs *reg_ptr)
                        outb_control(adapter->hcr_val & ~(DMAE | TCEN | DIR),
                                     dev);
                        if (adapter->current_dma.direction) {
-                               dev_kfree_skb(adapter->current_dma.skb, FREE_WRITE);
+                               dev_kfree_skb(adapter->current_dma.skb);
                        } else {
                                struct sk_buff *skb = adapter->current_dma.skb;
                                if (skb) {
index a331f72d6e2f57d71f0cde421f0974cc06bdbb4e..f6332d9527274bba1ed2c927faf4294c7ae8dab7 100644 (file)
@@ -493,7 +493,7 @@ static int el16_send_packet(struct sk_buff *skb, struct device *dev)
                outb(0x84, ioaddr + MISC_CTRL);
        }
 
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
 
        /* You might need to clean up and record Tx statistics here. */
 
index febe4b514139ba53de87a7764e3cd3ccb1f9c936..f9b183fd8b535d34088da6341db46323c20abd44 100644 (file)
@@ -548,7 +548,7 @@ static int el3_start_xmit(struct sk_buff *skb, struct device *dev)
                        outw(SetTxThreshold + 1536, ioaddr + EL3_CMD);
        }
 
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
 
        /* Clear the Tx status stack. */
        {
index 39750860ee278d6de130c6d1e8fd9fb7ccf5afde..e0f47e7125c0d455fffe80fdec744704ddf738fd 100644 (file)
@@ -1154,7 +1154,7 @@ elmc_send_packet(struct sk_buff *skb, struct device *dev)
       elmc_attn586();
       dev->trans_start = jiffies;
       if(!i) {
-        dev_kfree_skb(skb,FREE_WRITE);
+        dev_kfree_skb(skb);
          }
       WAIT_4_SCB_CMD();
       if( (p->scb->status & CU_ACTIVE)) /* test it, because CU sometimes doesn't start immediately */
@@ -1179,7 +1179,7 @@ elmc_send_packet(struct sk_buff *skb, struct device *dev)
     p->nop_cmds[p->nop_point]->cmd_link = make16((p->xmit_cmds[0]));
     dev->trans_start = jiffies;
     p->nop_point = next_nop;
-    dev_kfree_skb(skb,FREE_WRITE);
+    dev_kfree_skb(skb);
 #  endif
 #else
     p->xmit_buffs[p->xmit_count]->size = TBD_LAST | len;
@@ -1201,7 +1201,7 @@ elmc_send_packet(struct sk_buff *skb, struct device *dev)
       dev->tbusy = 0;
     }
     sti();
-    dev_kfree_skb(skb,FREE_WRITE);
+    dev_kfree_skb(skb);
 #endif
   }
   return 0;
index 65d6f8b6b494713fb474979d396d6191a1f23d02..21a0324ee3d6444482e44601aa3b79cb270cf548 100644 (file)
@@ -1279,7 +1279,7 @@ static void vortex_tx_timeout(struct device *dev)
                if (vp->tx_skbuff[entry]) {
                        if (vortex_debug > 0)
                                printk(" %d\n", entry);
-                       dev_kfree_skb(vp->tx_skbuff[entry], FREE_WRITE);
+                       dev_kfree_skb(vp->tx_skbuff[entry]);
                        vp->tx_skbuff[entry] = 0;
                        vp->stats.tx_dropped++;
                }
@@ -1340,7 +1340,7 @@ vortex_start_xmit(struct sk_buff *skb, struct device *dev)
        } else {
                /* ... and the packet rounded to a doubleword. */
                outsl(ioaddr + TX_FIFO, skb->data, (skb->len + 3) >> 2);
-               dev_kfree_skb (skb, FREE_WRITE);
+               dev_kfree_skb (skb);
                if (inw(ioaddr + TxFree) > 1536) {
                        dev->tbusy = 0;
                } else
@@ -1350,7 +1350,7 @@ vortex_start_xmit(struct sk_buff *skb, struct device *dev)
 #else
        /* ... and the packet rounded to a doubleword. */
        outsl(ioaddr + TX_FIFO, skb->data, (skb->len + 3) >> 2);
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
        if (inw(ioaddr + TxFree) > 1536) {
                dev->tbusy = 0;
        } else
@@ -1527,7 +1527,7 @@ static void vortex_interrupt IRQ(int irq, void *dev_id, struct pt_regs *regs)
                                        virt_to_bus(&lp->tx_ring[entry]))
                                        break;                  /* It still hasn't been processed. */
                                if (lp->tx_skbuff[entry]) {
-                                       dev_kfree_skb(lp->tx_skbuff[entry], FREE_WRITE);
+                                       dev_kfree_skb(lp->tx_skbuff[entry]);
                                        lp->tx_skbuff[entry] = 0;
                                }
                                /* lp->stats.tx_packets++;  Counted below. */
@@ -1545,7 +1545,7 @@ static void vortex_interrupt IRQ(int irq, void *dev_id, struct pt_regs *regs)
                if (status & DMADone) {
                        outw(0x1000, ioaddr + Wn7_MasterStatus); /* Ack the event. */
                        dev->tbusy = 0;
-                       dev_kfree_skb (lp->tx_skb, FREE_WRITE); /* Release the transfered buffer */
+                       dev_kfree_skb (lp->tx_skb); /* Release the transfered buffer */
                        mark_bh(NET_BH);
                }
 #endif
@@ -1854,7 +1854,7 @@ vortex_close(struct device *dev)
 #if LINUX_VERSION_CODE < 0x20100
                                vp->rx_skbuff[i]->free = 1;
 #endif
-                               dev_kfree_skb (vp->rx_skbuff[i], FREE_WRITE);
+                               dev_kfree_skb (vp->rx_skbuff[i]);
                                vp->rx_skbuff[i] = 0;
                        }
        }
@@ -1862,7 +1862,7 @@ vortex_close(struct device *dev)
                outl(0, ioaddr + DownListPtr);
                for (i = 0; i < TX_RING_SIZE; i++)
                        if (vp->tx_skbuff[i]) {
-                               dev_kfree_skb(vp->tx_skbuff[i], FREE_WRITE);
+                               dev_kfree_skb(vp->tx_skbuff[i]);
                                vp->tx_skbuff[i] = 0;
                        }
        }
index 33d7028f1fdb2ca3f9efa2d1348a6b67d2f349b8..23bd0883f5602919e5ea1d96d6841472eebd12e3 100644 (file)
@@ -194,7 +194,7 @@ static int ei_start_xmit(struct sk_buff *skb, struct device *dev)
        outb_p(ENISR_ALL, e8390_base + EN0_IMR);
        enable_irq(dev->irq);
        ei_local->stat.tx_errors++;
-       dev_kfree_skb(skb, FREE_WRITE);
+       dev_kfree_skb(skb);
        return 0;
     }
     ei_local->irqlock = 1;
@@ -279,7 +279,7 @@ static int ei_start_xmit(struct sk_buff *skb, struct device *dev)
     outb_p(ENISR_ALL, e8390_base + EN0_IMR);
     enable_irq(dev->irq);
 
-    dev_kfree_skb (skb, FREE_WRITE);
+    dev_kfree_skb (skb);
     ei_local->stat.tx_bytes += send_length;
     
     return 0;
index 66e784b6f2020e21056d65dd2f0a13106fa9adc4..c9d2d5eca3f6bb42e44111e78a5027ce68b261ec 100644 (file)
@@ -630,7 +630,7 @@ static int lance_start_xmit (struct sk_buff *skb, struct device *dev)
        /* Kick the lance: transmit now */
        ll->rdp = LE_C0_INEA | LE_C0_TDMD;
        dev->trans_start = jiffies;
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
     
        if (TX_BUFFS_AVAIL)
                dev->tbusy = 0;
index 9ddc79ba748d47cd4c79a295e3c62a2fd1ec7206..94188da73dcf9c005dff174b90f10e3d8143696f 100644 (file)
@@ -407,7 +407,7 @@ i596_cleanup_cmd(struct i596_private *lp)
                struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr;
                struct sk_buff *skb = ((struct sk_buff *)(tx_cmd->tbd->data)) -1;
 
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
 
                lp->stats.tx_errors++;
                lp->stats.tx_aborted_errors++;
@@ -615,7 +615,7 @@ i596_start_xmit(struct sk_buff *skb, struct device *dev)
            printk ("%s: i596_xmit Memory squeeze, dropping packet.\n", dev->name);
            lp->stats.tx_dropped++;
 
-           dev_kfree_skb(skb, FREE_WRITE);
+           dev_kfree_skb(skb);
        }
        else
        {
@@ -790,7 +790,7 @@ i596_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                    struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr;
                    struct sk_buff *skb = ((struct sk_buff *)(tx_cmd->tbd->data)) -1;
 
-                   dev_kfree_skb(skb, FREE_WRITE);
+                   dev_kfree_skb(skb);
 
                    if ((ptr->status) & STAT_OK)
                    {
index c4ce91c4fbc834f47ee7e809ff82ce12958d4547..4c27150a48edf16e8dd816e68c9148d3b381802d 100644 (file)
@@ -479,7 +479,7 @@ arcrimi_inthandler(struct device *dev)
              if (out->skb)
                {
                  lp->stats.tx_bytes += out->skb->len;
-                 dev_kfree_skb(out->skb,FREE_WRITE);
+                 dev_kfree_skb(out->skb);
                }
              out->skb=NULL;
 
index c4c14d1ccfd7fc801354027efd4089f9f21547c6..8a731a6e35aa8fe0c0aadd676516779793f28d06 100644 (file)
@@ -636,7 +636,7 @@ arcnet_send_packet_bad(struct sk_buff *skb, struct device *dev)
 
       if (lp->outgoing.skb)
        {
-         dev_kfree_skb(lp->outgoing.skb,FREE_WRITE);
+         dev_kfree_skb(lp->outgoing.skb);
          lp->stats.tx_dropped++;
        }
       lp->outgoing.skb=NULL;
@@ -748,7 +748,7 @@ arcnetA_send_packet(struct sk_buff *skb, struct device *dev)
 
       /* done right away */
       lp->stats.tx_bytes += out->skb->len;
-      dev_kfree_skb(out->skb,FREE_WRITE);
+      dev_kfree_skb(out->skb);
       out->skb=NULL;
 
       if (arcnet_go_tx(dev,1))
@@ -797,7 +797,7 @@ arcnetA_send_packet(struct sk_buff *skb, struct device *dev)
          if (out->skb)
            {
              lp->stats.tx_bytes += skb->len;
-             dev_kfree_skb(out->skb,FREE_WRITE);
+             dev_kfree_skb(out->skb);
            }
          out->skb=NULL;
        }
@@ -1101,7 +1101,7 @@ arcnetA_rx(struct device *dev,u_char *buf,
                 in->sequence,arcsoft->split_flag,
                 arcsoft->sequence);
          lp->aborted_seq=arcsoft->sequence;
-         kfree_skb(in->skb,FREE_WRITE);
+         kfree_skb(in->skb);
          lp->stats.rx_errors++;
          lp->stats.rx_missed_errors++;
          in->skb=NULL;
@@ -1198,7 +1198,7 @@ arcnetA_rx(struct device *dev,u_char *buf,
          BUGMSG(D_EXTRA,"wrong seq number (saddr=%d, expected=%d, seq=%d, splitflag=%d)\n",
                 saddr,in->sequence,arcsoft->sequence,
                 arcsoft->split_flag);
-         kfree_skb(in->skb,FREE_WRITE);
+         kfree_skb(in->skb);
          in->skb=NULL;
          lp->stats.rx_errors++;
          lp->stats.rx_missed_errors++;
@@ -1216,7 +1216,7 @@ arcnetA_rx(struct device *dev,u_char *buf,
                     arcsoft->sequence);
              lp->stats.rx_errors++;
              lp->stats.rx_missed_errors++;
-             kfree_skb(in->skb,FREE_WRITE);
+             kfree_skb(in->skb);
            }
 
          in->sequence=arcsoft->sequence;
@@ -1288,7 +1288,7 @@ arcnetA_rx(struct device *dev,u_char *buf,
                     in->sequence,arcsoft->split_flag,
                     arcsoft->sequence);
              lp->aborted_seq=arcsoft->sequence;
-             kfree_skb(in->skb,FREE_WRITE);
+             kfree_skb(in->skb);
              in->skb=NULL;
              lp->stats.rx_errors++;
              lp->stats.rx_missed_errors++;
@@ -1434,7 +1434,9 @@ static int arcnetA_rebuild_header(struct sk_buff *skb)
   struct ClientData *head = (struct ClientData *)skb->data;
   struct device *dev=skb->dev;
   struct arcnet_local *lp=(struct arcnet_local *)(dev->priv);
+#ifdef CONFIG_INET
   int status;
+#endif
 
   /*
    * Only ARP and IP are currently supported
@@ -1583,7 +1585,7 @@ arcnetE_send_packet(struct sk_buff *skb, struct device *dev)
             length);
       BUGMSG(D_NORMAL,"transmit aborted.\n");
 
-      dev_kfree_skb(skb,FREE_WRITE);
+      dev_kfree_skb(skb);
       lp->intx--;
       return 0;
     }
@@ -1613,7 +1615,7 @@ arcnetE_send_packet(struct sk_buff *skb, struct device *dev)
   (*lp->prepare_tx)(dev, &proto, 1, skb->data, length-1, daddr, 0,
                           offset);
 
-  dev_kfree_skb(skb,FREE_WRITE);
+  dev_kfree_skb(skb);
 
   if (arcnet_go_tx(dev,1))
     {
@@ -1740,7 +1742,7 @@ arcnetS_send_packet(struct sk_buff *skb, struct device *dev)
                        hdr->daddr,0,0);
 
       /* done right away */
-      dev_kfree_skb(skb,FREE_WRITE);
+      dev_kfree_skb(skb);
 
       if (arcnet_go_tx(dev,1))
        {
@@ -1752,7 +1754,7 @@ arcnetS_send_packet(struct sk_buff *skb, struct device *dev)
     {
       BUGMSG(D_NORMAL,"packet too long (length=%d)\n",
             length);
-      dev_kfree_skb(skb,FREE_WRITE);
+      dev_kfree_skb(skb);
       lp->stats.tx_dropped++;
       arcnet_tx_done(lp->adev, lp);
     }
index 667bd75fc28aa3ded344f3413c08ba4902b26349..232b714a8822b7be41ec55cbd8728b0aa71f30bf 100644 (file)
@@ -655,7 +655,7 @@ static int ariadne_start_xmit(struct sk_buff *skb, struct device *dev)
 
     priv->tx_ring[entry]->TMD1 = (priv->tx_ring[entry]->TMD1&0xff00)|TF_OWN|TF_STP|TF_ENP;
 
-    dev_kfree_skb(skb, FREE_WRITE);
+    dev_kfree_skb(skb);
 
     priv->cur_tx++;
     if ((priv->cur_tx >= TX_RING_SIZE) && (priv->dirty_tx >= TX_RING_SIZE)) {
index 19b0dc7ed67213de50cdb2c4757c71acd3a88acf..3751b43368bd714415d4a785a335585edc3fe1d9 100644 (file)
@@ -424,7 +424,7 @@ net_send_packet(struct sk_buff *skb, struct device *dev)
                /* Turn on Tx interrupts back on. */
                outb(0x82, ioaddr + TX_INTR);
        }
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
 
        return 0;
 }
index dc761ab7cd93e7a8768d5093e33dbe90033079ec..23c8054e3a8de5bd31d7da9a9d1ea31b812b8bb9 100644 (file)
@@ -465,7 +465,7 @@ bionet_send_packet(struct sk_buff *skb, struct device *dev) {
                lp->stats.tx_packets++;
                lp->stats.tx_bytes+=length;
        }
-       dev_kfree_skb(skb, FREE_WRITE);
+       dev_kfree_skb(skb);
 
        return 0;
 }
index bcf91beda56e0a64882b356ad646b17e8b5c0b01..794b4e4d5e7f05fa46e4687415c4c8fd807cb42d 100644 (file)
@@ -730,7 +730,7 @@ pamsnet_send_packet(struct sk_buff *skb, struct device *dev) {
                lp->stats.tx_packets++;
                lp->stats.tx_bytes+=length;
        }
-       dev_kfree_skb(skb, FREE_WRITE);
+       dev_kfree_skb(skb);
 
        return 0;
 }
index 3d7b5d28887f857971ad4ada90d7643f116c1c5e..4415c7ea4e2b36fd33a39b8423e6448f5b9e9470 100644 (file)
@@ -817,7 +817,7 @@ static int lance_start_xmit( struct sk_buff *skb, struct device *dev )
        head->misc = 0;
        lp->memcpy_f( PKTBUF_ADDR(head), (void *)skb->data, skb->len );
        head->flag = TMD1_OWN_CHIP | TMD1_ENP | TMD1_STP;
-       dev_kfree_skb( skb, FREE_WRITE );
+       dev_kfree_skb( skb );
        lp->cur_tx++;
        while( lp->cur_tx >= TX_RING_SIZE && lp->dirty_tx >= TX_RING_SIZE ) {
                lp->cur_tx -= TX_RING_SIZE;
index 578a5253a5471d7af223704c82f0fc676e2bdaa7..0e5b92b7f42cdd21608ad9e6e69c9c2d10d60e14 100644 (file)
@@ -467,7 +467,7 @@ net_send_packet(struct sk_buff *skb, struct device *dev)
                write_reg_high(ioaddr, IMR, ISRh_RxErr);
        }
 
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
 
        return 0;
 }
index cd02f003548e733a5e2f6dfbb11b51e5f367ae87..299f90c318f9869c090b2b263b83c8817111696b 100644 (file)
@@ -720,7 +720,7 @@ arc20020_inthandler(struct device *dev)
              if (out->skb)
                {
                  lp->stats.tx_bytes += out->skb->len;
-                 dev_kfree_skb(out->skb,FREE_WRITE);
+                 dev_kfree_skb(out->skb);
                }
              out->skb=NULL;
 
index bb88552b170c8a6e7cb6ac5d5d585372d9ef3dd9..bf67a27354428b5944b6e4819023ca31c66dd24a 100644 (file)
@@ -611,7 +611,7 @@ arc90io_inthandler(struct device *dev)
              if (out->skb)
                {
                  lp->stats.tx_bytes += out->skb->len;
-                 dev_kfree_skb(out->skb,FREE_WRITE);
+                 dev_kfree_skb(out->skb);
                }
              out->skb=NULL;
 
index 4a5b0d70c1eb2767d85c37c10740d30302c37daa..bc17467c366020495edfba5d08aaa086745803a4 100644 (file)
@@ -886,7 +886,7 @@ arc90xx_inthandler(struct device *dev)
              if (out->skb)
                {
                  lp->stats.tx_bytes += out->skb->len;
-                 dev_kfree_skb(out->skb,FREE_WRITE);
+                 dev_kfree_skb(out->skb);
                }
              out->skb=NULL;
 
index 2560139b982b85bb769ca3c740f9589bd26608d3..3c31d4741339e27fe298c65f04fd8aedea98d4b9 100644 (file)
@@ -747,7 +747,7 @@ static void cops_rx(struct device *dev)
         {
                 printk(KERN_NOTICE "%s: Bad packet length of %d bytes.\n", dev->name, pkt_len);
                 lp->stats.tx_errors++;
-                kfree_skb(skb, FREE_READ);
+                kfree_skb(skb);
                 return;
         }
 
@@ -755,7 +755,7 @@ static void cops_rx(struct device *dev)
         if(rsp_type == LAP_INIT_RSP)
         {
                 lp->node_acquire = skb->data[0];        /* Nodeid taken from received packet. */
-                kfree_skb(skb, FREE_READ);
+                kfree_skb(skb);
                 return;
         }
 
@@ -764,7 +764,7 @@ static void cops_rx(struct device *dev)
         {
                 printk("%s: Bad packet type %d.\n", dev->name, rsp_type);
                 lp->stats.tx_errors++;
-                kfree_skb(skb, FREE_READ);
+                kfree_skb(skb);
                 return;
         }
 
@@ -856,7 +856,7 @@ static int cops_send_packet(struct sk_buff *skb, struct device *dev)
                dev->trans_start = jiffies;
        }
 
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
        dev->tbusy = 0;
 
         return 0;
index 14224bff03a3b53f3068e3559847a6f1fa588b8e..ba12e9f4b9610c731314209ad9d083be3f8d6b75 100644 (file)
@@ -782,7 +782,7 @@ net_send_packet(struct sk_buff *skb, struct device *dev)
                restore_flags(flags);
                dev->trans_start = jiffies;
        }
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
 
        return 0;
 }
index 54476ebff67281fcd434694ac32639a2d663c567..c66e5e2b03368004a6aa1370483e9b0a88251e45 100644 (file)
@@ -1721,7 +1721,7 @@ de4x5_tx(struct device *dev)
 
            /* Free the buffer. */
            if (lp->tx_skb[entry] != NULL) {
-               dev_kfree_skb(lp->tx_skb[entry], FREE_WRITE);
+               dev_kfree_skb(lp->tx_skb[entry]);
                lp->tx_skb[entry] = NULL;
            }
        }
@@ -3594,7 +3594,7 @@ de4x5_free_rx_buffs(struct device *dev)
 
     for (i=0; i<lp->rxRingSize; i++) {
        if ((u_long) lp->rx_skb[i] > 1) {
-           dev_kfree_skb(lp->rx_skb[i], FREE_WRITE);
+           dev_kfree_skb(lp->rx_skb[i]);
        }
        lp->rx_ring[i].status = 0;
        lp->rx_skb[i] = (struct sk_buff *)1;    /* Dummy entry */
@@ -3611,7 +3611,7 @@ de4x5_free_tx_buffs(struct device *dev)
 
     for (i=0; i<lp->txRingSize; i++) {
        if (lp->tx_skb[i]) {
-           dev_kfree_skb(lp->tx_skb[i], FREE_WRITE);
+           dev_kfree_skb(lp->tx_skb[i]);
            lp->tx_skb[i] = NULL;
        }
        lp->tx_ring[i].status = 0;
@@ -3619,7 +3619,7 @@ de4x5_free_tx_buffs(struct device *dev)
 
     /* Unload the locally queued packets */
     while (lp->cache.skb) {
-       dev_kfree_skb(de4x5_get_cache(dev), FREE_WRITE);
+       dev_kfree_skb(de4x5_get_cache(dev));
     }
 
     return;
index 2bdddc546d5d2dd79a2c4e415930be5232ed494d..03a3205ed8a45a84dcc60b9767dedf7b39bfe17f 100644 (file)
@@ -471,7 +471,7 @@ de600_start_xmit(struct sk_buff *skb, struct device *dev)
                skb->sk->prot->rspace = de600_rspace; /* Ugh! */
 #endif
 
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
 
        return 0;
 }
index ff2251c5fe67ecbfa6b05ac181f18aaf35e9b5a4..028836f2d1700ed4a9e82ec7da202dcec8fdec62 100644 (file)
@@ -580,7 +580,7 @@ de620_start_xmit(struct sk_buff *skb, struct device *dev)
 
        restore_flags(flags); /* interrupts maybe back on */
 
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
 
        return 0;
 }
index 4ecb8a5f36ac78d56ddee0eb74414ece0a297b04..8c2cbd2780ab2ede3fcaba0c7cbacc053c899c0b 100644 (file)
@@ -3209,7 +3209,7 @@ int dfx_xmt_queue_pkt(
                        dev->name, skb->len);
                bp->xmt_length_errors++;                /* bump error counter */
                mark_bh(NET_BH);
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                return(0);                              /* return "success" */
        }
        /*
@@ -3231,7 +3231,7 @@ int dfx_xmt_queue_pkt(
                else
                        {
                        bp->xmt_discards++;                                     /* bump error counter */
-                       dev_kfree_skb(skb, FREE_WRITE);         /* free sk_buff now */
+                       dev_kfree_skb(skb);             /* free sk_buff now */
                        return(0);                                                      /* return "success" */
                        }
                }
@@ -3381,7 +3381,7 @@ void dfx_xmt_done(
 
                /* Return skb to operating system */
 
-               dev_kfree_skb(p_xmt_drv_descr->p_skb, FREE_WRITE);
+               dev_kfree_skb(p_xmt_drv_descr->p_skb);
 
                /* Increment transmit counters */
 
@@ -3458,7 +3458,7 @@ void dfx_xmt_flush(
 
                /* Return skb to operating system */
 
-               dev_kfree_skb(p_xmt_drv_descr->p_skb, FREE_WRITE);
+               dev_kfree_skb(p_xmt_drv_descr->p_skb);
 
                /* Increment transmit error counter */
 
index fa24352194678b621ffd8f8069f34fa37f40d6b8..56578f58ead0d06c5367d32a9c4fb11ad98bb9da 100644 (file)
@@ -818,7 +818,7 @@ static int depca_start_xmit(struct sk_buff *skb, struct device *dev)
                                        outw(INEA | TDMD, DEPCA_DATA);
 
                                        dev->trans_start = jiffies;
-                                       dev_kfree_skb(skb, FREE_WRITE);
+                                       dev_kfree_skb(skb);
                                }
                                if (TX_BUFFS_AVAIL) {
                                        dev->tbusy = 0;
index 7c8c3b20fe7fdf77c8244d76c308477ed40896a8..fc3868f7aa277244fc9e51bf089b088482f530b0 100644 (file)
@@ -776,7 +776,7 @@ frame_done:
 
        ++privN->stats.tx_packets;
 
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
        return (0);
 
 no_resources:
index c623dbd91f4ed8cd567eed83f564f0c2b85fe958..caed78fe7b59dd97ec8aac15fb6b0d45572d37c4 100644 (file)
@@ -230,7 +230,7 @@ static void dlci_receive(struct sk_buff *skb, struct device *dev)
                dlp->stats.rx_packets++;
        }
        else
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
 }
 
 static int dlci_transmit(struct sk_buff *skb, struct device *dev)
@@ -275,7 +275,7 @@ static int dlci_transmit(struct sk_buff *skb, struct device *dev)
                /* experience suggest a slightly more conservative approach */
 
                if (!ret)
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
 
                dev->tbusy = 0;
        }
index 40884cf9e8b0508142c3d8f1db1157109d34579b..4367f476fa3c4d614b7e54c2658f352d08752057 100644 (file)
@@ -110,7 +110,7 @@ __initfunc(int dummy_init(struct device *dev))
 static int dummy_xmit(struct sk_buff *skb, struct device *dev)
 {
        struct net_device_stats *stats;
-       dev_kfree_skb(skb, FREE_WRITE);
+       dev_kfree_skb(skb);
 
        stats = (struct net_device_stats *)dev->priv;
        stats->tx_packets++;
index 1b1ac98d22fe39c7da2a9868dcf42de7071a662c..54a7ac5ef447d1e74008cb8bca004bbca82db4c1 100644 (file)
@@ -720,7 +720,7 @@ eepro_send_packet(struct sk_buff *skb, struct device *dev)
                dev->trans_start = jiffies;
        }
 
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
 
        /* You might need to clean up and record Tx statistics here. */
        /* lp->stats.tx_aborted_errors++; */
index bd75b19f5fea35da5c4c4991d63a840c4cb24e5d..54166743252e189d4761ca6b2967d4593b4482ec 100644 (file)
@@ -1186,7 +1186,7 @@ static void speedo_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
                                /* Free the original skb. */
                                if (sp->tx_skbuff[entry]) {
                                        sp->stats.tx_packets++; /* Count only user packets. */
-                                       dev_kfree_skb(sp->tx_skbuff[entry], FREE_WRITE);
+                                       dev_kfree_skb(sp->tx_skbuff[entry]);
                                        sp->tx_skbuff[entry] = 0;
                                }
                                dirty_tx++;
@@ -1426,7 +1426,7 @@ speedo_close(struct device *dev)
                sp->rx_skbuff[i] = 0;
                /* Clear the Rx descriptors. */
                if (skb)
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
        }
 
        for (i = 0; i < TX_RING_SIZE; i++) {
@@ -1434,7 +1434,7 @@ speedo_close(struct device *dev)
                sp->tx_skbuff[i] = 0;
                /* Clear the Tx descriptors. */
                if (skb)
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
        }
        if (sp->mc_setup_frm) {
                kfree(sp->mc_setup_frm);
index c78e798dd4018f5e208e0a958f7e7e0f0145e07c..272479dfe4422eaf06f47d0ca7f04ff606bcc19f 100644 (file)
@@ -537,7 +537,7 @@ static int eexp_xmit(struct sk_buff *buf, struct device *dev)
 
                eexp_hw_tx_pio(dev,data,length);
        }
-       dev_kfree_skb(buf, FREE_WRITE);
+       dev_kfree_skb(buf);
        outb(SIRQ_en|irqrmap[dev->irq],dev->base_addr+SET_IRQ);
        return 0;
 }
index 685b1f850d163e254dfc352b76d8768f6878adcf..f654b2cdd0961cdbcb0fae7c73c42ba2c14f6286 100644 (file)
@@ -387,7 +387,7 @@ static int eql_slave_xmit(struct sk_buff *skb, struct device *dev)
                 */
 
                eql->stats->tx_dropped++;
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
        }         
        return 0;
 }
index bff7f6d96c1fc293fa657bdd2351ac47caa6d23e..e68c0d64dba5fcc9c609f044b58f97732d984e33 100644 (file)
@@ -977,7 +977,7 @@ static int eth16i_tx(struct sk_buff *skb, struct device *dev)
                /* Turn TX interrupts back on */
                /* outb(TX_INTR_DONE | TX_INTR_16_COL, ioaddr + TX_INTR_REG); */
        }
-       dev_kfree_skb(skb, FREE_WRITE);
+       dev_kfree_skb(skb);
 
        return 0;
 }
index b9bc5253ab64e1b489836a2ced4040b515eba2db..ec25ffb9aa0c82ee3ccd114355a133a823560fa1 100644 (file)
@@ -136,11 +136,11 @@ static int ethertap_start_xmit(struct sk_buff *skb, struct device *dev)
        if(tmp)
        {
                if(netlink_post(dev->base_addr, tmp)<0)
-                       kfree_skb(tmp, FREE_WRITE);
+                       kfree_skb(tmp);
                lp->stats.tx_bytes+=skb->len;
                lp->stats.tx_packets++;
        }
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
        return 0;
 }
 
@@ -160,7 +160,7 @@ static int ethertap_rx(int id, struct sk_buff *skb)
        if(dev==NULL)
        {
                printk("ethertap: bad unit!\n");
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return -ENXIO;
        }
        lp = (struct net_local *)dev->priv;
index ee0581e1d2c896bdcefc44963df20af7fefecb3a..463d9f928f3976c263542396ea7fc2e87b52c4b2 100644 (file)
@@ -847,7 +847,7 @@ static int ewrk3_queue_pkt(struct sk_buff *skb, struct device *dev)
                                        }
 
                                        dev->trans_start = jiffies;
-                                       dev_kfree_skb(skb, FREE_WRITE);
+                                       dev_kfree_skb(skb);
 
                                } else {        /* return unused page to the free memory queue */
                                        outb(page, EWRK3_FMQ);
index 78bf20a07e6138c72a8ef293d87dc6e2a0e04d90..3350d0d5c610d4c5ee924731a21625ea8929eb1e 100644 (file)
@@ -388,7 +388,7 @@ net_send_packet(struct sk_buff *skb, struct device *dev)
                /* Re-enable interrupts */
                outw(0x8182, ioaddr + TX_INTR);
        }
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
 
        return 0;
 }
index ec9ff47284e019c871b2fdcbf4b2abedb85095fb..fcc9ed7cca81ff08801afaff19896e3704fd6650 100644 (file)
@@ -223,7 +223,7 @@ static int bpq_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *
        dev = bpq_get_ax25_dev(dev);
 
        if (dev == NULL || dev->start == 0) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -236,7 +236,7 @@ static int bpq_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *
 
        if (!(bpq->acpt_addr[0] & 0x01) && memcmp(eth->h_source, bpq->acpt_addr, ETH_ALEN)) {
                printk(KERN_DEBUG "bpqether: wrong dest %s\n", bpq_print_ethaddr(eth->h_source));
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -277,7 +277,7 @@ static int bpq_xmit(struct sk_buff *skb, struct device *dev)
         */
        if (!dev->start) {
                bpq_check_devices(dev);
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return -ENODEV;
        }
 
@@ -291,14 +291,14 @@ static int bpq_xmit(struct sk_buff *skb, struct device *dev)
        if (skb_headroom(skb) < AX25_BPQ_HEADER_LEN) {  /* Ough! */
                if ((newskb = skb_realloc_headroom(skb, AX25_BPQ_HEADER_LEN)) == NULL) {
                        printk(KERN_WARNING "bpqether: out of memory\n");
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return -ENOMEM;
                }
 
                if (skb->sk != NULL)
                        skb_set_owner_w(newskb, skb->sk);
 
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                skb = newskb;
        }
 
@@ -313,7 +313,7 @@ static int bpq_xmit(struct sk_buff *skb, struct device *dev)
 
        if ((dev = bpq_get_ether_dev(dev)) == NULL) {
                bpq->stats.tx_dropped++;
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return -ENODEV;
        }
 
index 7f024f7ecc8ce13176850bb1e523701201692e2b..c07f9024991afe0f134a48ada6c1c03e55bd9377 100644 (file)
@@ -800,7 +800,7 @@ static int scc_send_packet(struct sk_buff *skb, struct device *dev)
   /* Block a timer-based transmit from overlapping */
   if (test_and_set_bit(0, (void *) &priv->tx_sem) != 0) {
     atomic_inc((void *) &priv->stats.tx_dropped);
-    dev_kfree_skb(skb, FREE_WRITE);
+    dev_kfree_skb(skb);
     return 0;
   }
 
@@ -836,7 +836,7 @@ static int scc_send_packet(struct sk_buff *skb, struct device *dev)
 
   restore_flags(flags);
 
-  dev_kfree_skb(skb, FREE_WRITE);
+  dev_kfree_skb(skb);
 
   priv->tx_sem = 0;
   return 0;
index 148ed14f420280ae45efb67071c84f837ef3cf6f..f4fb73844440ebbf12e200ae241749e7cb9175ef 100644 (file)
@@ -446,18 +446,18 @@ void hdlcdrv_transmitter(struct device *dev, struct hdlcdrv_state *s)
                        }
                        if (skb->data[0] != 0) {
                                do_kiss_params(s, skb->data, skb->len);
-                               dev_kfree_skb(skb, FREE_WRITE);
+                               dev_kfree_skb(skb);
                                break;
                        }
                        pkt_len = skb->len-1; /* strip KISS byte */
                        if (pkt_len >= HDLCDRV_MAXFLEN || pkt_len < 2) {
                                s->hdlctx.tx_state = 0;
                                s->hdlctx.numflags = 1;
-                               dev_kfree_skb(skb, FREE_WRITE);
+                               dev_kfree_skb(skb);
                                break;
                        }
                        memcpy(s->hdlctx.buffer, skb->data+1, pkt_len);
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
                        s->hdlctx.bp = s->hdlctx.buffer;
                        append_crc_ccitt(s->hdlctx.buffer, pkt_len);
                        s->hdlctx.len = pkt_len+2; /* the appended CRC */
@@ -681,7 +681,7 @@ static int hdlcdrv_close(struct device *dev)
                i = s->ops->close(dev);
         /* Free any buffers left in the hardware transmit queue */
         while ((skb = skb_dequeue(&s->send_queue)))
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
        return i;
 }
 
index 562a27681ec5ca3b0ca98e004b26e8ce3b62e504..21cdbf5c69de76494ae302926f981fa18f72737f 100644 (file)
@@ -420,7 +420,7 @@ static int ax_xmit(struct sk_buff *skb, struct device *dev)
                if (tmp_ax != NULL)
                        ax_lock(tmp_ax);
                ax_encaps(ax, skb->data, skb->len);
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
        }
 
        return 0;
index 3eb3a9223977c8aa0a9671de9fcf3c591a973bb1..8de3251756927c86369878c4e5ec84bb8303d6a5 100644 (file)
@@ -408,7 +408,7 @@ static void a_exint(struct pi_local *lp)
     }
     switch (lp->tstate) {
     case ACTIVE:
-       kfree_skb(lp->sndbuf, FREE_WRITE);
+       kfree_skb(lp->sndbuf);
        lp->sndbuf = NULL;
        lp->tstate = FLAGOUT;
        tdelay(lp, lp->squeldelay);
@@ -726,7 +726,7 @@ static void b_txint(struct pi_local *lp)
            /* stuffing a char satisfies Interrupt condition */
        } else {
            /* No more to send */
-           kfree_skb(lp->sndbuf, FREE_WRITE);
+           kfree_skb(lp->sndbuf);
            lp->sndbuf = NULL;
            if ((rdscc(lp->cardbase, cmd, R0) & 0x40)) {
                /* Did we underrun? */
@@ -778,7 +778,7 @@ static void b_exint(struct pi_local *lp)
 
     switch (lp->tstate) {
     case ACTIVE:               /* Unexpected underrun */
-       kfree_skb(lp->sndbuf, FREE_WRITE);
+       kfree_skb(lp->sndbuf);
        lp->sndbuf = NULL;
        wrtscc(lp->cardbase, cmd, R0, SEND_ABORT);
        lp->tstate = FLAGOUT;
@@ -1553,7 +1553,7 @@ static int pi_close(struct device *dev)
 
     /* Free any buffers left in the hardware transmit queue */
     while ((ptr = skb_dequeue(&lp->sndq)) != NULL)
-       kfree_skb(ptr, FREE_WRITE);
+       kfree_skb(ptr);
 
     restore_flags(flags);
 
index 11bef1d6ff7bc96216a8662132c46b98e3e0761f..86ed83d3bfb4019012fb0b89d790f45ce98d784d 100644 (file)
@@ -967,7 +967,7 @@ static int pt_close(struct device *dev)
 
        /* Free any buffers left in the hardware transmit queue */
        while ((ptr = skb_dequeue(&lp->sndq)) != NULL)
-               kfree_skb(ptr, FREE_WRITE);
+               kfree_skb(ptr);
 
        restore_flags(flags);
 
@@ -1185,7 +1185,7 @@ static void pt_txisr(struct pt_local *lp)
                /* stuffing a char satisfies interrupt condition */
            } else {
                /* No more to send */
-               kfree_skb(lp->sndbuf, FREE_WRITE);
+               kfree_skb(lp->sndbuf);
                lp->sndbuf = NULL;
                if ((rdscc(lp->cardbase, cmd, R0) & TxEOM))
                {
@@ -1540,7 +1540,7 @@ static void pt_exisr(struct pt_local *lp)
 #ifdef PT_DEBUG
        printk(KERN_DEBUG "PT: exisr(): unexpected underrun detected.\n");
 #endif
-        kfree_skb(lp->sndbuf, FREE_WRITE);
+        kfree_skb(lp->sndbuf);
         lp->sndbuf = NULL;
         if (!lp->dmachan)
         {
index 1ca131ba031bf3b19f226329923f51153fe0f93a..736d6b26bb0802c2e3f2dde33b179dedc5bc67c8 100644 (file)
@@ -324,12 +324,12 @@ extern __inline__ void scc_discard_buffers(struct scc_channel *scc)
        
        if (scc->tx_buff != NULL)
        {
-               dev_kfree_skb(scc->tx_buff, FREE_WRITE);
+               dev_kfree_skb(scc->tx_buff);
                scc->tx_buff = NULL;
        }
        
        while (skb_queue_len(&scc->tx_queue))
-               dev_kfree_skb(skb_dequeue(&scc->tx_queue), FREE_WRITE);
+               dev_kfree_skb(skb_dequeue(&scc->tx_queue));
 
        restore_flags(flags);
 }
@@ -372,7 +372,7 @@ extern __inline__ void flush_rx_FIFO(struct scc_channel *scc)
        if(scc->rx_buff != NULL)                /* did we receive something? */
        {
                scc->stat.rxerrs++;  /* then count it as an error */
-               kfree_skb(scc->rx_buff, FREE_READ);
+               kfree_skb(scc->rx_buff);
                scc->rx_buff = NULL;
        }
 }
@@ -406,7 +406,7 @@ extern __inline__ void scc_txint(struct scc_channel *scc)
                
                if (skb->len == 0)              /* Paranoia... */
                {
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
                        scc->tx_buff = NULL;
                        scc_tx_done(scc);
                        Outb(scc->ctrl, RES_Tx_P);
@@ -432,7 +432,7 @@ extern __inline__ void scc_txint(struct scc_channel *scc)
        {
                Outb(scc->ctrl, RES_Tx_P);      /* reset pending int */
                cl(scc, R10, ABUNDER);          /* send CRC */
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                scc->tx_buff = NULL;
                scc->stat.tx_state = TXS_NEWFRAME; /* next frame... */
                return;
@@ -513,7 +513,7 @@ extern __inline__ void scc_exint(struct scc_channel *scc)
 
                if (scc->tx_buff != NULL)
                {
-                       dev_kfree_skb(scc->tx_buff, FREE_WRITE);
+                       dev_kfree_skb(scc->tx_buff);
                        scc->tx_buff = NULL;
                }
                
@@ -563,7 +563,7 @@ extern __inline__ void scc_rxint(struct scc_channel *scc)
 #ifdef notdef
                printk(KERN_DEBUG "z8530drv: oops, scc_rxint() received huge frame...\n");
 #endif
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                scc->rx_buff = NULL;
                Inb(scc->data);
                or(scc, R3, ENT_HM);
@@ -593,7 +593,7 @@ extern __inline__ void scc_spint(struct scc_channel *scc)
                or(scc,R3,ENT_HM);               /* enter hunt mode for next flag */
                
                if (skb != NULL) 
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                scc->rx_buff = NULL;
        }
 
@@ -609,7 +609,7 @@ extern __inline__ void scc_spint(struct scc_channel *scc)
                        scc->rx_buff = NULL;
                        scc->stat.rxframes++;
                } else {                                /* a bad frame */
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        scc->rx_buff = NULL;
                        scc->stat.rxerrs++;
                }
@@ -1671,7 +1671,7 @@ static void scc_net_rx(struct scc_channel *scc, struct sk_buff *skb)
 {
        if (skb->len == 0)
        {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return;
        }
                
@@ -1695,14 +1695,14 @@ static int scc_net_tx(struct sk_buff *skb, struct device *dev)
        
        if (scc == NULL || scc->magic != SCC_MAGIC || dev->tbusy)
        {
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                return 0;
        }
 
        if (skb->len > scc->stat.bufsize || skb->len < 2)
        {
                scc->dev_stat.tx_dropped++;     /* bogus frame */
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                return 0;
        }
        
@@ -1715,7 +1715,7 @@ static int scc_net_tx(struct sk_buff *skb, struct device *dev)
        if (kisscmd)
        {
                scc_set_param(scc, kisscmd, *skb->data);
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                return 0;
        }
 
@@ -1726,7 +1726,7 @@ static int scc_net_tx(struct sk_buff *skb, struct device *dev)
        {
                struct sk_buff *skb_del;
                skb_del = __skb_dequeue(&scc->tx_queue);
-               dev_kfree_skb(skb_del, FREE_WRITE);
+               dev_kfree_skb(skb_del);
        }
        __skb_queue_tail(&scc->tx_queue, skb);
 
index b5eaec24f48ef4166f72f81f8ad62157a280aa94..cb6b1bb69c0551e435698f7b150869fb0347703a 100644 (file)
@@ -1474,7 +1474,7 @@ static void hp100_clean_txring(struct device *dev)
                       hp100_inb(TX_PDL),
                       donecount);
 #endif
-               dev_kfree_skb(lp->txrhead->skb, FREE_WRITE);
+               dev_kfree_skb(lp->txrhead->skb);
                lp->txrhead->skb = (void *) NULL;
                lp->txrhead = lp->txrhead->next;
                lp->txrcommit--;
@@ -1599,7 +1599,7 @@ static int hp100_start_xmit(struct sk_buff *skb, struct device *dev)
        dev->trans_start = jiffies;
        hp100_ints_on();
 
-       dev_kfree_skb(skb, FREE_WRITE);
+       dev_kfree_skb(skb);
 
 #ifdef HP100_DEBUG_TX
        printk("hp100_start_xmit: end\n");
@@ -1815,7 +1815,7 @@ static void hp100_rx_bm(struct device *dev)
                        printk("hp100: rx_bm: Received bad packet (length=%d)\n", pkt_len);
 #endif
                        if (ptr->skb != NULL)
-                               dev_kfree_skb(ptr->skb, FREE_READ);
+                               dev_kfree_skb(ptr->skb);
                        lp->stats.rx_errors++;
                }
 
index b7dbeb815be936574562f5a00a4a9de911a72a42..00549b6b9d7724444b632f751e79aacc710a174a 100644 (file)
@@ -500,7 +500,7 @@ static int hydra_start_xmit(struct sk_buff *skb, struct device *dev)
        /* clear the unused space */
        for(; len1<len; len1++)
                (u16)*(priv->hydra_base + (priv->tx_page_start<<8) + len1) = 0;
-       dev_kfree_skb(skb, FREE_WRITE);
+       dev_kfree_skb(skb);
 
        priv->stats.tx_packets++;
 
index 4fe7aefcd9fd6ff62a89ac18aaad44dcf4b5fae0..dad41c2dd7333a4ed000c1129d68e053a3bfab8b 100644 (file)
@@ -790,7 +790,7 @@ void tok_interrupt (int irq, void *dev_id, struct pt_regs *regs)
                                                      DPRINTK("error on xmit_dir_frame request: %02X\n",
                                                              xmit_ret_code);
                                                      if (ti->current_skb) {
-                                                             dev_kfree_skb(ti->current_skb, FREE_WRITE);
+                                                             dev_kfree_skb(ti->current_skb);
                                                              ti->current_skb=NULL;
                                                      }
                                                      dev->tbusy=0;
@@ -807,7 +807,7 @@ void tok_interrupt (int irq, void *dev_id, struct pt_regs *regs)
                                                      DPRINTK("error on xmit_ui_frame request: %02X\n",
                                                              xmit_ret_code);
                                                      if (ti->current_skb) {
-                                                             dev_kfree_skb(ti->current_skb, FREE_WRITE);
+                                                             dev_kfree_skb(ti->current_skb);
                                                              ti->current_skb=NULL;
                                                      }
                                                      dev->tbusy=0;
@@ -1305,7 +1305,7 @@ static void tr_tx(struct device *dev)
 
        writeb(RESP_IN_ASB, ti->mmio + ACA_OFFSET + ACA_SET + ISRA_ODD);
        dev->tbusy=0;
-       dev_kfree_skb(ti->current_skb,FREE_WRITE);
+       dev_kfree_skb(ti->current_skb);
        ti->current_skb=NULL;
        mark_bh(NET_BH);
        if (ti->readlog_pending) ibmtr_readlog(dev);
index 7029289fb0ae260bba8e454984fb020789e26805..1413495765e7462916efe337cae4e5c1ed601afb 100644 (file)
@@ -170,7 +170,7 @@ static int ipddp_xmit(struct sk_buff *skb, struct device *dev)
         ((struct net_device_stats *) dev->priv)->tx_bytes+=skb->len;
 
         if(aarp_send_ddp(skb->dev, skb, at, NULL) < 0)
-                dev_kfree_skb(skb,FREE_WRITE);
+                dev_kfree_skb(skb);
 
         return 0;
 }
index f7df41bb52242b1dde5bc7960357cc816ff49caf..423b4a7acbe2bfe1778bc049480503be3bba419e 100644 (file)
@@ -730,7 +730,7 @@ lance_purge_tx_ring(struct device *dev)
 
        for (i = 0; i < TX_RING_SIZE; i++) {
                if (lp->tx_skbuff[i]) {
-                       dev_kfree_skb(lp->tx_skbuff[i],FREE_WRITE);
+                       dev_kfree_skb(lp->tx_skbuff[i]);
                        lp->tx_skbuff[i] = NULL;
                }
        }
@@ -870,7 +870,7 @@ static int lance_start_xmit(struct sk_buff *skb, struct device *dev)
                memcpy(&lp->tx_bounce_buffs[entry], skb->data, skb->len);
                lp->tx_ring[entry].base =
                        ((u32)virt_to_bus((lp->tx_bounce_buffs + entry)) & 0xffffff) | 0x83000000;
-               dev_kfree_skb (skb, FREE_WRITE);
+               dev_kfree_skb (skb);
        } else {
                lp->tx_skbuff[entry] = skb;
                lp->tx_ring[entry].base = ((u32)virt_to_bus(skb->data) & 0xffffff) | 0x83000000;
@@ -969,7 +969,7 @@ lance_interrupt(int irq, void *dev_id, struct pt_regs * regs)
                                /* We must free the original skb if it's not a data-only copy
                                   in the bounce buffer. */
                                if (lp->tx_skbuff[entry]) {
-                                       dev_kfree_skb(lp->tx_skbuff[entry],FREE_WRITE);
+                                       dev_kfree_skb(lp->tx_skbuff[entry]);
                                        lp->tx_skbuff[entry] = 0;
                                }
                                dirty_tx++;
index bee5d50bfc8a721db4d8fd125c39ba9e9f64db36..0f393aa3e650f72372b8f567c2c164cdde48703a 100644 (file)
@@ -165,7 +165,7 @@ static int lapbeth_rcv(struct sk_buff *skb, struct device *dev, struct packet_ty
        dev = lapbeth_get_x25_dev(dev);
 
        if (dev == NULL || dev->start == 0) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -179,7 +179,7 @@ static int lapbeth_rcv(struct sk_buff *skb, struct device *dev, struct packet_ty
        skb_trim(skb, len);     /* Set the length of the data */
 
        if ((err = lapb_data_received(lapbeth, skb)) != LAPB_OK) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                printk(KERN_DEBUG "lapbether: lapb_data_received err - %d\n", err);
        }
 
@@ -218,7 +218,7 @@ static int lapbeth_xmit(struct sk_buff *skb, struct device *dev)
         */
        if (!dev->start) {
                lapbeth_check_devices(dev);
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return -ENODEV;
        }
 
@@ -228,15 +228,15 @@ static int lapbeth_xmit(struct sk_buff *skb, struct device *dev)
                case 0x01:
                        if ((err = lapb_connect_request(lapbeth)) != LAPB_OK)
                                printk(KERN_ERR "lapbeth: lapb_connect_request error - %d\n", err);
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return 0;
                case 0x02:
                        if ((err = lapb_disconnect_request(lapbeth)) != LAPB_OK)
                                printk(KERN_ERR "lapbeth: lapb_disconnect_request err - %d\n", err);
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return 0;
                default:
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return 0;
        }
 
@@ -244,7 +244,7 @@ static int lapbeth_xmit(struct sk_buff *skb, struct device *dev)
 
        if ((err = lapb_data_request(lapbeth, skb)) != LAPB_OK) {
                printk(KERN_ERR "lapbeth: lapb_data_request error - %d\n", err);
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return -ENOMEM;
        }
 
index 075304deff783c1ade11204686ad16e0a84e1029..63723afb5ad44fee187d97757a920c2f95c1974f 100644 (file)
@@ -79,10 +79,10 @@ static int loopback_xmit(struct sk_buff *skb, struct device *dev)
                struct sk_buff *skb2=skb;
                skb=skb_clone(skb, GFP_ATOMIC);         /* Clone the buffer */
                if(skb==NULL) {
-                       kfree_skb(skb2, FREE_WRITE);
+                       kfree_skb(skb2);
                        return 0;
                }
-               kfree_skb(skb2, FREE_WRITE);
+               kfree_skb(skb2);
        }
        else
                skb_orphan(skb);
index 8626b8406c905b186261f43134f5e915554181ca..086e4576e71c134ee2c06d54fe3d0ca7d311a8f6 100644 (file)
@@ -951,7 +951,7 @@ static int ltpc_xmit(struct sk_buff *skb, struct device *dev)
        stats->tx_packets++;
        stats->tx_bytes+=skb->len;
 
-       dev_kfree_skb(skb, FREE_WRITE);
+       dev_kfree_skb(skb);
        return 0;
 }
 
index 74bc0a5e48332dc4892766aef014bc11212ab985..cf1e9e903d336d43539ef16e348ab2357dc683c1 100644 (file)
@@ -333,12 +333,12 @@ static int mace_close(struct device *dev)
     /* free some skb's */
     for (i = 0; i < N_RX_RING; ++i) {
        if (mp->rx_bufs[i] != 0) {
-           dev_kfree_skb(mp->rx_bufs[i], FREE_READ);
+           dev_kfree_skb(mp->rx_bufs[i]);
            mp->rx_bufs[i] = 0;
        }
     }
     for (i = mp->tx_empty; i != mp->tx_fill; ) {
-       dev_kfree_skb(mp->tx_bufs[i], FREE_WRITE);
+       dev_kfree_skb(mp->tx_bufs[i]);
        if (++i >= N_TX_RING)
            i = 0;
     }
@@ -601,7 +601,7 @@ static void mace_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                ++mp->stats.tx_aborted_errors;
        } else
            ++mp->stats.tx_packets;
-       dev_kfree_skb(mp->tx_bufs[i], FREE_WRITE);
+       dev_kfree_skb(mp->tx_bufs[i]);
        --mp->tx_active;
        if (++i >= N_TX_RING)
            i = 0;
@@ -680,7 +680,7 @@ static void mace_tx_timeout(unsigned long data)
     if (mp->tx_bad_runt) {
        mp->tx_bad_runt = 0;
     } else if (i != mp->tx_fill) {
-       dev_kfree_skb(mp->tx_bufs[i], FREE_WRITE);
+       dev_kfree_skb(mp->tx_bufs[i]);
        if (++i >= N_TX_RING)
            i = 0;
        mp->tx_empty = i;
index af4ad701f551ebdcd0ff57de268e6bf53608f3b3..52d3a5089b3006779692b3ce462b32487bec8cbd 100644 (file)
@@ -244,7 +244,7 @@ static void myri_clean_rings(struct myri_eth *mp)
        rq->tail = rq->head = 0;
        for(i = 0; i < (RX_RING_SIZE+1); i++) {
                if(mp->rx_skbs[i] != NULL) {
-                       dev_kfree_skb(mp->rx_skbs[i], FREE_READ);
+                       dev_kfree_skb(mp->rx_skbs[i]);
                        mp->rx_skbs[i] = NULL;
                }
        }
@@ -252,7 +252,7 @@ static void myri_clean_rings(struct myri_eth *mp)
        mp->tx_old = sq->tail = sq->head = 0;
        for(i = 0; i < TX_RING_SIZE; i++) {
                if(mp->tx_skbs[i] != NULL) {
-                       dev_kfree_skb(mp->tx_skbs[i], FREE_WRITE);
+                       dev_kfree_skb(mp->tx_skbs[i]);
                        mp->tx_skbs[i] = NULL;
                }
        }
@@ -337,7 +337,7 @@ static inline void myri_tx(struct myri_eth *mp, struct device *dev)
                struct sk_buff *skb = mp->tx_skbs[entry];
 
                DTX(("SKB[%d] ", entry));
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                mp->tx_skbs[entry] = NULL;
                mp->enet_stats.tx_packets++;
 
index 9a853e9c9642c9d7ae1f40f35e0497338d0cd761..9eea1b7ac7d836eaa5f1b60c2fc9b7f400be9ae8 100644 (file)
@@ -460,7 +460,7 @@ static int ni5010_send_packet(struct sk_buff *skb, struct device *dev)
                hardware_send_packet(dev, (unsigned char *)skb->data, length);
                dev->trans_start = jiffies;
        }
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
 
        return 0;
 }
index 80fbd9d8a6d5761acf7e16aa4b34c0f09036ee14..24700f09cde16253a4097a94fcadd920f4ae944b 100644 (file)
@@ -1203,7 +1203,7 @@ static int ni52_send_packet(struct sk_buff *skb, struct device *dev)
                        ni_attn586();
                        dev->trans_start = jiffies;
                        if(!i)
-                               dev_kfree_skb(skb,FREE_WRITE);
+                               dev_kfree_skb(skb);
                        WAIT_4_SCB_CMD();
                        if( (p->scb->cus & CU_ACTIVE)) /* test it, because CU sometimes doesn't start immediately */
                                break;
@@ -1223,7 +1223,7 @@ static int ni52_send_packet(struct sk_buff *skb, struct device *dev)
                p->nop_cmds[p->nop_point]->cmd_link = make16((p->xmit_cmds[0]));
                dev->trans_start = jiffies;
                p->nop_point = next_nop;
-               dev_kfree_skb(skb,FREE_WRITE);
+               dev_kfree_skb(skb);
 #      endif
 #else
                p->xmit_buffs[p->xmit_count]->size = TBD_LAST | len;
@@ -1248,7 +1248,7 @@ static int ni52_send_packet(struct sk_buff *skb, struct device *dev)
                        p->lock = 0;
                        restore_flags(flags);
                }
-               dev_kfree_skb(skb,FREE_WRITE);
+               dev_kfree_skb(skb);
 #endif
        }
        return 0;
index e0812c6d63c87b54ec7f817e93b12229531f0f4a..c96d98374c5c2cbd6926e6d4ff8f23a8e6615b42 100644 (file)
@@ -306,7 +306,7 @@ static int ni65_close(struct device *dev)
                for(i=0;i<TMDNUM;i++)
                {
                        if(p->tmd_skb[i]) {
-                               dev_kfree_skb(p->tmd_skb[i],FREE_WRITE);
+                               dev_kfree_skb(p->tmd_skb[i]);
                                p->tmd_skb[i] = NULL;
                        }
                }
@@ -548,7 +548,7 @@ static void *ni65_alloc_mem(struct device *dev,char *what,int size,int type)
        if( (u32) virt_to_bus(ptr+size) > 0x1000000) {
                printk("%s: unable to allocate %s memory in lower 16MB!\n",dev->name,what);
                if(type)
-                       kfree_skb(skb,FREE_WRITE);
+                       kfree_skb(skb);
                else
                        kfree(ptr);
                return NULL;
@@ -623,7 +623,7 @@ static void ni65_free_buffer(struct priv *p)
                        kfree(p->tmdbounce[i]);
 #ifdef XMT_VIA_SKB
                if(p->tmd_skb[i])
-                       dev_kfree_skb(p->tmd_skb[i],FREE_WRITE);
+                       dev_kfree_skb(p->tmd_skb[i]);
 #endif
        }
 
@@ -631,7 +631,7 @@ static void ni65_free_buffer(struct priv *p)
        {
 #ifdef RCV_VIA_SKB
                if(p->recv_skb[i])
-                       dev_kfree_skb(p->recv_skb[i],FREE_WRITE);
+                       dev_kfree_skb(p->recv_skb[i]);
 #else
                if(p->recvbounce[i])
                        kfree(p->recvbounce[i]);
@@ -741,7 +741,7 @@ static int ni65_lance_reinit(struct device *dev)
                 struct tmd *tmdp = p->tmdhead + i;
 #ifdef XMT_VIA_SKB
                 if(p->tmd_skb[i]) {
-                        dev_kfree_skb(p->tmd_skb[i],FREE_WRITE);
+                        dev_kfree_skb(p->tmd_skb[i]);
                         p->tmd_skb[i] = NULL;
                 }
 #endif
@@ -955,7 +955,7 @@ static void ni65_xmit_intr(struct device *dev,int csr0)
 
 #ifdef XMT_VIA_SKB
                if(p->tmd_skb[p->tmdlast]) {
-                        dev_kfree_skb(p->tmd_skb[p->tmdlast],FREE_WRITE);
+                        dev_kfree_skb(p->tmd_skb[p->tmdlast]);
                         p->tmd_skb[p->tmdlast] = NULL;
                }
 #endif
@@ -1104,7 +1104,7 @@ static int ni65_send_packet(struct sk_buff *skb, struct device *dev)
 
                        memcpy((char *) p->tmdbounce[p->tmdbouncenum] ,(char *)skb->data,
                                                         (skb->len > T_BUF_SIZE) ? T_BUF_SIZE : skb->len);
-                       dev_kfree_skb (skb, FREE_WRITE);
+                       dev_kfree_skb (skb);
 
                        save_flags(flags);
                        cli();
index ccb52acb887c2ddd934f9ecb50fc326b38a18aff..313e4f5c63c1c6460f1ab5520a01a41dd6bc8c15 100644 (file)
@@ -477,7 +477,7 @@ pcnet32_purge_tx_ring(struct device *dev)
 
        for (i = 0; i < TX_RING_SIZE; i++) {
                if (lp->tx_skbuff[i]) {
-                       dev_kfree_skb(lp->tx_skbuff[i],FREE_WRITE);
+                       dev_kfree_skb(lp->tx_skbuff[i]);
                        lp->tx_skbuff[i] = NULL;
                }
        }
@@ -707,7 +707,7 @@ pcnet32_interrupt(int irq, void *dev_id, struct pt_regs * regs)
 
                                /* We must free the original skb */
                                if (lp->tx_skbuff[entry]) {
-                                       dev_kfree_skb(lp->tx_skbuff[entry],FREE_WRITE);
+                                       dev_kfree_skb(lp->tx_skbuff[entry]);
                                        lp->tx_skbuff[entry] = 0;
                                }
                                dirty_tx++;
index 52e27fe3134376a3f7e9b1f875d6a395352676c1..a7e27c002c42948a93a29e9f00b3e5e7e20d8bd3 100644 (file)
@@ -408,12 +408,12 @@ plip_bh_timeout_error(struct device *dev, struct net_local *nl,
        }
        rcv->state = PLIP_PK_DONE;
        if (rcv->skb) {
-               kfree_skb(rcv->skb, FREE_READ);
+               kfree_skb(rcv->skb);
                rcv->skb = NULL;
        }
        snd->state = PLIP_PK_DONE;
        if (snd->skb) {
-               dev_kfree_skb(snd->skb, FREE_WRITE);
+               dev_kfree_skb(snd->skb);
                snd->skb = NULL;
        }
        spin_unlock_irq(&nl->lock);
@@ -742,7 +742,7 @@ plip_send_packet(struct device *dev, struct net_local *nl,
                              &snd->nibble, snd->checksum))
                        return TIMEOUT;
 
-               dev_kfree_skb(snd->skb, FREE_WRITE);
+               dev_kfree_skb(snd->skb);
                nl->enet_stats.tx_packets++;
                snd->state = PLIP_PK_DONE;
 
@@ -1011,12 +1011,12 @@ plip_close(struct device *dev)
 
        snd->state = PLIP_PK_DONE;
        if (snd->skb) {
-               dev_kfree_skb(snd->skb, FREE_WRITE);
+               dev_kfree_skb(snd->skb);
                snd->skb = NULL;
        }
        rcv->state = PLIP_PK_DONE;
        if (rcv->skb) {
-               kfree_skb(rcv->skb, FREE_READ);
+               kfree_skb(rcv->skb);
                rcv->skb = NULL;
        }
 
index 1fef280d25c4c44af027f3aff7d5f579496fcca4..204e24867f2d971c6863e87f3d520c9ee2e90cb5 100644 (file)
@@ -2892,7 +2892,7 @@ ppp_dev_xmit (sk_buff *skb, struct device *dev)
  * Avoid timing problem should tty hangup while data is queued to be sent
  */
        if (!ppp->inuse) {
-               dev_kfree_skb (skb, FREE_WRITE);
+               dev_kfree_skb (skb);
                return 0;
        }
 /*
@@ -2903,7 +2903,7 @@ ppp_dev_xmit (sk_buff *skb, struct device *dev)
                        printk (KERN_ERR
                                "ppp_dev_xmit: %s not connected to a TTY!\n",
                                dev->name);
-               dev_kfree_skb (skb, FREE_WRITE);
+               dev_kfree_skb (skb);
                return 0;
        }
 /*
@@ -2916,7 +2916,7 @@ ppp_dev_xmit (sk_buff *skb, struct device *dev)
                if (ppp->flags & SC_DEBUG)
                        printk (KERN_CRIT "ppp_dev_xmit: %s Null skb data\n",
                                dev->name);
-               dev_kfree_skb (skb, FREE_WRITE);
+               dev_kfree_skb (skb);
                return 0;
        }
 /*
@@ -2957,7 +2957,7 @@ ppp_dev_xmit (sk_buff *skb, struct device *dev)
                break;
 
        default: /* All others have no support at this time. */
-               dev_kfree_skb (skb, FREE_WRITE);
+               dev_kfree_skb (skb);
                return 0;
        }
 /*
@@ -2965,12 +2965,12 @@ ppp_dev_xmit (sk_buff *skb, struct device *dev)
  */
        if (answer == 0) {
                /* packet queued OK */
-               dev_kfree_skb (skb, FREE_WRITE);
+               dev_kfree_skb (skb);
        } else {
                ppp->wbuf->locked = 0;
                if (answer < 0) {
                        /* packet should be dropped */
-                       dev_kfree_skb (skb, FREE_WRITE);
+                       dev_kfree_skb (skb);
                        answer = 0;
                } else {
                        /* packet should be queued for later */
index 77e338537518f428cf2c08b721b5dc96acc4c9de..e30bede48f7986f7822a1fc4c066c438c157a8a3 100644 (file)
@@ -965,7 +965,7 @@ static int if_send(struct sk_buff *skb, struct device *dev)
                printk(KERN_INFO "%s: if_send() hit critical section!\n",
                       card->devname);
 #endif
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                return 0;
        }
        disable_irq(card->hw.irq);
@@ -1020,7 +1020,7 @@ static int if_send(struct sk_buff *skb, struct device *dev)
 
                ++chan->if_send_critical_non_ISR;
                ++chan->ifstats.tx_dropped;
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                save_flags(host_cpu_flags);
                cli();
                 if ((!(--card->irq_dis_if_send_count)) &&
@@ -1112,7 +1112,7 @@ static int if_send(struct sk_buff *skb, struct device *dev)
        }
 
        if (!retry)
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
 
        card->wandev.critical = 0;
        save_flags(host_cpu_flags);
@@ -1447,7 +1447,7 @@ static void fr502_rx_intr(sdla_t * card)
        buf = skb_pull(skb, 1); /* remove hardware header */
        if (!wan_type_trans(skb, dev)) {
                /* can't decapsulate packet */
-               dev_kfree_skb(skb, FREE_READ);
+               dev_kfree_skb(skb);
                ++chan->ifstats.rx_errors;
                ++card->wandev.stats.rx_errors;
        } else {
@@ -1564,7 +1564,7 @@ static void fr508_rx_intr(sdla_t * card)
                                        if (!wan_type_trans(skb, dev)) 
                                        {
                                                /* can't decapsulate packet */
-                                               dev_kfree_skb(skb, FREE_READ);
+                                               dev_kfree_skb(skb);
                                                ++chan->rx_intr_bfr_not_passed_to_stack;
                                                ++chan->ifstats.rx_errors;
                                                ++card->wandev.stats.rx_errors;
index c4293a094659eca17819cf9374ab8fbd2ff16ee3..f52a6d4c0fdf1aaf377cad12f45b675310691974 100644 (file)
@@ -697,7 +697,7 @@ static int if_send (struct sk_buff* skb, struct device* dev)
 #ifdef CONFIG_SANGOMA_MANAGER
        if(sangoma_ppp_manager(skb,card))
        {
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                return 0;
        }
 #endif
@@ -732,7 +732,7 @@ static int if_send (struct sk_buff* skb, struct device* dev)
 
                }
 
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                ++ppp_priv_area->if_send_critical_non_ISR;
                
                save_flags(host_cpu_flags);
@@ -786,7 +786,7 @@ static int if_send (struct sk_buff* skb, struct device* dev)
        
 tx_done:       
        if (!retry){
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
        }
 
        card->wandev.critical = 0;
@@ -1280,21 +1280,21 @@ static void rx_intr (sdla_t* card)
                                process_udp_driver_call(
                                        UDP_PKT_FRM_NETWORK, card, skb,
                                        dev, ppp_priv_area);
-                                 dev_kfree_skb(skb, FREE_READ);
+                                 dev_kfree_skb(skb);
 
                        } else if (udp_type == UDP_PTPIPE_TYPE){
                                ++ppp_priv_area->rx_intr_PTPIPE_request;
                                err = process_udp_mgmt_pkt(
                                        UDP_PKT_FRM_NETWORK, card, 
                                        skb, dev, ppp_priv_area);
-                               dev_kfree_skb(skb, FREE_READ);
+                               dev_kfree_skb(skb);
                        } else
 #endif
                                if (handle_IPXWAN(skb->data,card->devname, card->wandev.enable_IPX, card->wandev.network_number, skb->protocol)) {
                                
                                if( card->wandev.enable_IPX) {
                                        ppp_send(card, skb->data, skb->len, ETH_P_IPX);
-                                       dev_kfree_skb(skb, FREE_READ);
+                                       dev_kfree_skb(skb);
 
                                } else {
                                        ++card->wandev.stats.rx_dropped;
index c5afcdbd21c76de04afb7f04ba0082b1de979328..15844a3abe2c856def83d0a385f0991792e30849 100644 (file)
@@ -759,7 +759,7 @@ static int if_send (struct sk_buff* skb, struct device* dev)
                        
                        return dev->tbusy;
                }
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                
                save_flags(host_cpu_flags);
                 cli();
@@ -832,7 +832,7 @@ static int if_send (struct sk_buff* skb, struct device* dev)
 tx_done:
        if (!dev->tbusy)
        {
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
        }
        card->wandev.critical = 0;
        save_flags(host_cpu_flags);
@@ -1000,7 +1000,7 @@ static void rx_intr (sdla_t* card)
        if (skb_tailroom(skb) < len)
        {
                /* No room for the packet. Call off the whole thing! */
-               dev_kfree_skb(skb, FREE_READ);
+               dev_kfree_skb(skb);
                chan->rx_skb = NULL;
                if (qdm & 0x01) chan->drop_sequence = 1;
 
@@ -1023,7 +1023,7 @@ static void rx_intr (sdla_t* card)
        if (!skb->protocol && !wan_type_trans(skb, dev))
        {
                /* can't decapsulate packet */
-               dev_kfree_skb(skb, FREE_READ);
+               dev_kfree_skb(skb);
                ++chan->ifstats.rx_errors;
        }
        else
@@ -1038,7 +1038,7 @@ static void rx_intr (sdla_t* card)
                                }
                                else
                                {
-                                       dev_kfree_skb(skb, FREE_WRITE);
+                                       dev_kfree_skb(skb);
                                }
                        }
                        else
@@ -1211,7 +1211,7 @@ static void poll_active (sdla_t* card)
                {
                        chan->tx_skb = NULL;
                        dev->tbusy = 0;
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
                }
 
                /* If SVC has been idle long enough, close virtual circuit */
index d8372bf52a3814fc5c55810c814a00796df0aa2e..a7298bc2236514954deaf76863bea4f326f81749 100644 (file)
@@ -400,7 +400,7 @@ seeq8005_send_packet(struct sk_buff *skb, struct device *dev)
                hardware_send_packet(dev, buf, length); 
                dev->trans_start = jiffies;
        }
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
 
        /* You might need to clean up and record Tx statistics here. */
 
index 3c24fbc22e8b525635335080ad170509ec95d7c3..7963b9c9933973d5f82e614ddc5a51a700736eec 100644 (file)
@@ -570,7 +570,7 @@ static int sgiseeq_start_xmit(struct sk_buff *skb, struct device *dev)
                hregs->tx_ctrl = HPC3_ETXCTRL_ACTIVE;
        }
        dev->trans_start = jiffies;
-       dev_kfree_skb(skb, FREE_WRITE);
+       dev_kfree_skb(skb);
 
        if(TX_BUFFS_AVAIL(sp))
                dev->tbusy = 0;
index 4596441433161d842aa3b4d87bd8a5d87347ee93..8eb733f841d89be40554606e5ff0e36c9d65f1f7 100644 (file)
@@ -190,7 +190,7 @@ static int shaper_qframe(struct shaper *shaper, struct sk_buff *skb)
                        if(ptr->shapelatency > SHAPER_LATENCY)
                        {
                                skb_unlink(ptr);
-                               dev_kfree_skb(ptr, FREE_WRITE);
+                               dev_kfree_skb(ptr);
                        }
                        ptr=tmp;
                }
@@ -225,7 +225,7 @@ static int shaper_qframe(struct shaper *shaper, struct sk_buff *skb)
                 *      Queue over time. Spill packet.
                 */
                if(skb->shapeclock-jiffies > SHAPER_LATENCY)
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
                else
                        skb_queue_tail(&shaper->sendq, skb);
        }
@@ -235,7 +235,7 @@ static int shaper_qframe(struct shaper *shaper, struct sk_buff *skb)
        if(skb_queue_len(&shaper->sendq)>SHAPER_QLEN)
        {
                ptr=skb_dequeue(&shaper->sendq);
-               dev_kfree_skb(ptr, FREE_WRITE);
+               dev_kfree_skb(ptr);
        }
        shaper_unlock(shaper);
        shaper_kick(shaper);
@@ -261,7 +261,7 @@ static void shaper_queue_xmit(struct shaper *shaper, struct sk_buff *skb)
                dev_queue_xmit(newskb);
                if(sh_debug)
                        printk("Kicked new frame out.\n");
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
        }
 }
 
@@ -368,7 +368,7 @@ static void shaper_flush(struct shaper *shaper)
 {
        struct sk_buff *skb;
        while((skb=skb_dequeue(&shaper->sendq))!=NULL)
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
 }
 
 /*
index c33e033e89c29d637d883eec2d26eddd694aaa3f..6ef0a66f81db0c770c2e37a0b6eac08e82021ac8 100644 (file)
@@ -1251,7 +1251,7 @@ static int SK_send_packet(struct sk_buff *skb, struct device *dev)
           dev->tbusy = 0;
        }
     }
-    dev_kfree_skb(skb, FREE_WRITE);
+    dev_kfree_skb(skb);
     return 0;  
 } /* End of SK_send_packet */
 
index b30e62b329f44b96e8e5a986aacd66cc33ab1fa3..1ba46069128bb848d8e7f89332955836f27f1dfd 100644 (file)
@@ -374,7 +374,7 @@ static int net_send_packet(struct sk_buff *skb, struct device *dev)
                hardware_send_packet(ioaddr, buf, length);
                dev->trans_start = jiffies;
        }
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
 
        /* You might need to clean up and record Tx statistics here. */
        if (inw(ioaddr) == /*RU*/81)
index 9493fe3715708c030cbc6eefdd0c691da87f27e0..32343b758dc5af8973e5ab2613ed8858c428dc7d 100644 (file)
@@ -518,7 +518,7 @@ sl_xmit(struct sk_buff *skb, struct device *dev)
                sl_lock(sl);
                sl->tx_bytes+=skb->len;
                sl_encaps(sl, skb->data, skb->len);
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
        }
        return 0;
 }
index 3db278b389ef313ac532a93d46d9a5c75589337d..43cc5464083a12a3416f6404846366a7eaa2eade 100644 (file)
@@ -573,7 +573,7 @@ static int smc_wait_to_send_packet( struct sk_buff * skb, struct device * dev )
                printk(CARDNAME": Far too big packet error. \n");
                /* freeing the packet is a good thing here... but should
                 . any packets of this size get down here?   */
-               dev_kfree_skb (skb, FREE_WRITE);
+               dev_kfree_skb (skb);
                lp->saved_skb = NULL;
                /* this IS an error, but, i don't want the skb saved */
                return 0;
@@ -725,7 +725,7 @@ static void smc_hardware_send_packet( struct device * dev )
        PRINTK2((CARDNAME": Sent packet of length %d \n",length));
 
        lp->saved_skb = NULL;
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
 
        dev->trans_start = jiffies;
 
@@ -1246,7 +1246,7 @@ static int smc_send_packet(struct sk_buff *skb, struct device *dev)
           done with atomic_swap(1, dev->tbusy), but set_bit() works as well. */
        if (test_and_set_bit(0, (void*)&dev->tbusy) != 0) {
                printk(KERN_WARNING CARDNAME": Transmitter access conflict.\n");
-               dev_kfree_skb (skb, FREE_WRITE);
+               dev_kfree_skb (skb);
        } else {
                /* Well, I want to send the packet.. but I don't know
                   if I can send it right now...  */
index dd87c58edd060fdca16761985a72f9957aa86c8f..8edb8706cb0c00ad10054e5d4875bd259d747c89 100644 (file)
@@ -404,7 +404,7 @@ static int sonic_send_packet(struct sk_buff *skb, struct device *dev)
      */
     if ((laddr = vdma_alloc(PHYSADDR(skb->data),skb->len)) == ~0UL) {
        printk("%s: no VDMA entry for transmit available.\n",dev->name);
-       dev_kfree_skb(skb,FREE_WRITE);
+       dev_kfree_skb(skb);
        dev->tbusy = 0;
        return 1;
     }
@@ -506,7 +506,7 @@ sonic_interrupt(int irq, void *dev_id, struct pt_regs * regs)
 
            /* We must free the original skb */
            if (lp->tx_skb[entry]) {
-               dev_kfree_skb(lp->tx_skb[entry],FREE_WRITE);
+               dev_kfree_skb(lp->tx_skb[entry]);
                lp->tx_skb[entry] = 0;
            }
            /* and the VDMA address */
index b283ec9f674d0ea4e9230033990799ab8a9d297e..fc318b4a57f9743d1b4d3a16e309dcfa42f9fde6 100644 (file)
@@ -1574,7 +1574,7 @@ static int strip_xmit(struct sk_buff *skb, struct device *dev)
 
     strip_send(strip_info, skb);
 
-    if (skb) dev_kfree_skb(skb, FREE_WRITE);
+    if (skb) dev_kfree_skb(skb);
     return(0);
 }
 
@@ -1630,11 +1630,9 @@ static int strip_header(struct sk_buff *skb, struct device *dev,
 
 static int strip_rebuild_header(struct sk_buff *skb)
 {
+#ifdef CONFIG_INET
     STRIP_Header *header = (STRIP_Header *)skb->data;
 
-    /*printk(KERN_INFO "%s: strip_rebuild_header\n", skb->dev->name);*/
-
-#ifdef CONFIG_INET
     /* Arp find returns zero if if knows the address, */
     /* or if it doesn't know the address it sends an ARP packet and returns non-zero */
     return arp_find(header->dst_addr.c, skb)? 1 : 0;
index 4e299218e1758f0f7977fb3a882ac0527f72160d..9ff5a4f110b8cab59cf3a48b2bf69a746faa1ab0 100644 (file)
@@ -931,14 +931,14 @@ static inline void happy_meal_clean_rings(struct happy_meal *hp)
 
        for(i = 0; i < RX_RING_SIZE; i++) {
                if(hp->rx_skbs[i] != NULL) {
-                       dev_kfree_skb(hp->rx_skbs[i], FREE_READ);
+                       dev_kfree_skb(hp->rx_skbs[i]);
                        hp->rx_skbs[i] = NULL;
                }
        }
 
        for(i = 0; i < TX_RING_SIZE; i++) {
                if(hp->tx_skbs[i] != NULL) {
-                       dev_kfree_skb(hp->tx_skbs[i], FREE_WRITE);
+                       dev_kfree_skb(hp->tx_skbs[i]);
                        hp->tx_skbs[i] = NULL;
                }
        }
@@ -1612,7 +1612,7 @@ static inline void happy_meal_tx(struct happy_meal *hp)
                        mmu_sync_dma(kva_to_hva(hp, skb->data),
                                     skb->len, hp->happy_sbus_dev->my_bus);
 #endif
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
 
                hp->net_stats.tx_packets++;
                elem = NEXT_TX(elem);
@@ -1644,7 +1644,7 @@ static inline void pci_happy_meal_tx(struct happy_meal *hp)
                hp->tx_skbs[elem] = NULL;
                hp->net_stats.tx_bytes+=skb->len;
                
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
 
                hp->net_stats.tx_packets++;
                elem = NEXT_TX(elem);
@@ -2330,7 +2330,7 @@ static int sun4c_happy_meal_start_xmit(struct sk_buff *skb, struct device *dev)
        dev->trans_start = jiffies;
        hp->etxregs->tx_pnding = ETX_TP_DMAWAKEUP;
 
-       dev_kfree_skb(skb, FREE_WRITE);
+       dev_kfree_skb(skb);
 
        if(TX_BUFFS_AVAIL(hp))
                dev->tbusy = 0;
index 56177d72f9f66b3d5f535f975c11c82bf9158177..093f7a181566d9264d7939bef798e3ee32926b0e 100644 (file)
@@ -870,7 +870,7 @@ static int lance_start_xmit (struct sk_buff *skb, struct device *dev)
        /* Kick the lance: transmit now */
        ll->rdp = LE_C0_INEA | LE_C0_TDMD;
        dev->trans_start = jiffies;
-       dev_kfree_skb (skb, FREE_WRITE);
+       dev_kfree_skb (skb);
     
        if (TX_BUFFS_AVAIL)
                dev->tbusy = 0;
index b17db5de07cd68b31bf3d3f67f47a44bb8764222..b1b19a3c8da03cf01e4d3fba5eb5d3d9d46ef83f 100644 (file)
@@ -116,14 +116,14 @@ static inline void qe_clean_rings(struct sunqe *qep)
 
        for(i = 0; i < RX_RING_SIZE; i++) {
                if(qep->rx_skbs[i] != NULL) {
-                       dev_kfree_skb(qep->rx_skbs[i], FREE_READ);
+                       dev_kfree_skb(qep->rx_skbs[i]);
                        qep->rx_skbs[i] = NULL;
                }
        }
 
        for(i = 0; i < TX_RING_SIZE; i++) {
                if(qep->tx_skbs[i] != NULL) {
-                       dev_kfree_skb(qep->tx_skbs[i], FREE_WRITE);
+                       dev_kfree_skb(qep->tx_skbs[i]);
                        qep->tx_skbs[i] = NULL;
                }
        }
@@ -451,7 +451,7 @@ static inline void qe_tx(struct sunqe *qep)
                mmu_sync_dma(((u32)((unsigned long)skb->data)),
                             skb->len, qep->qe_sbusdev->my_bus);
 #endif
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
 
                qep->net_stats.tx_packets++;
                elem = NEXT_TX(elem);
@@ -804,7 +804,7 @@ static int sun4c_qe_start_xmit(struct sk_buff *skb, struct device *dev)
 
        qep->net_stats.tx_bytes+=skb->len;
        
-       dev_kfree_skb(skb, FREE_WRITE);
+       dev_kfree_skb(skb);
 
        if(SUN4C_TX_BUFFS_AVAIL(qep))
                dev->tbusy = 0;
index 52adafbf070803a53a7712e7ffe5b2a78d179d23..cef3f54a4e3ce5c9e4d193af3a7442d28bdfe1bd 100644 (file)
@@ -663,7 +663,7 @@ int TLan_StartTx( struct sk_buff *skb, struct device *dev )
 
        if ( ! priv->phyOnline ) {
                TLAN_DBG( TLAN_DEBUG_TX, "TLAN TRANSMIT:  %s PHY is not ready\n", dev->name );
-               dev_kfree_skb( skb, FREE_WRITE );
+               dev_kfree_skb( skb );
                return 0;
        }
 
@@ -710,7 +710,7 @@ int TLan_StartTx( struct sk_buff *skb, struct device *dev )
        if ( priv->txTail >= TLAN_NUM_TX_LISTS )
                priv->txTail = 0;
 
-       dev_kfree_skb( skb, FREE_WRITE );
+       dev_kfree_skb( skb );
                
        dev->trans_start = jiffies;
        return 0;
index f7f6151cba35c803ea47ff800f6304239902fcdf..f4484e225ce3bc1724fb90b582f351590224d275 100644 (file)
@@ -1895,7 +1895,7 @@ static void tulip_interrupt IRQ(int irq, void *dev_instance, struct pt_regs *reg
                                }
 
                                /* Free the original skb. */
-                               dev_kfree_skb(lp->tx_skbuff[entry], FREE_WRITE);
+                               dev_kfree_skb(lp->tx_skbuff[entry]);
                                lp->tx_skbuff[entry] = 0;
                        }
 
@@ -2309,12 +2309,12 @@ tulip_close(struct device *dev)
 #if LINUX_VERSION_CODE < 0x20100
                        skb->free = 1;
 #endif
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
                }
        }
        for (i = 0; i < TX_RING_SIZE; i++) {
                if (tp->tx_skbuff[i])
-                       dev_kfree_skb(tp->tx_skbuff[i], FREE_WRITE);
+                       dev_kfree_skb(tp->tx_skbuff[i]);
                tp->tx_skbuff[i] = 0;
        }
 
index a7a34551dc8a9bc83840ed03df27635f826a11a3..d49388b2899f2d95010ce9cfbae8f98f56e6fe6f 100644 (file)
@@ -2821,7 +2821,7 @@ wavelan_packet_xmit(struct sk_buff *      skb,
       wv_packet_write(dev, skb->data, skb->len);
     }
 
-  dev_kfree_skb(skb, FREE_WRITE);
+  dev_kfree_skb(skb);
 
 #ifdef DEBUG_TX_TRACE
   printk(KERN_DEBUG "%s: <-wavelan_packet_xmit()\n", dev->name);
index 275235ea780c9e95c5d5c2f124fc2fe0f365730f..76826a9834f0610dc10a444b34f66534cfd4c1ef 100644 (file)
@@ -244,7 +244,7 @@ static void x25_asy_bump(struct x25_asy *sl)
        skb->protocol=htons(ETH_P_X25);
        if((err=lapb_data_received(sl,skb))!=LAPB_OK)
        {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                printk(KERN_DEBUG "x25_asy: data received err - %d\n",err);
        }
        else
@@ -342,13 +342,13 @@ static int x25_asy_xmit(struct sk_buff *skb, struct device *dev)
                case 0x01: /* Connection request .. do nothing */
                        if((err=lapb_connect_request(sl))!=LAPB_OK)
                                printk(KERN_ERR "x25_asy: lapb_connect_request error - %d\n", err);
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return 0;
                case 0x02: /* Disconnect request .. do nothing - hang up ?? */
                        if((err=lapb_disconnect_request(sl))!=LAPB_OK)
                                printk(KERN_ERR "x25_asy: lapb_disconnect_request error - %d\n", err);
                default:
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return  0;
        }
        skb_pull(skb,1);        /* Remove control byte */
@@ -385,7 +385,7 @@ static int x25_asy_xmit(struct sk_buff *skb, struct device *dev)
        if((err=lapb_data_request(sl,skb))!=LAPB_OK)
        {
                printk(KERN_ERR "lapbeth: lapb_data_request error - %d\n", err);
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return 0;
        }
        return 0;
@@ -418,7 +418,7 @@ static void x25_asy_data_transmit(void *token, struct sk_buff *skb)
        if(sl->dev->tbusy)
        {
                printk(KERN_ERR "x25_asy: tbusy drop\n");
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return;
        }
        /* We were not busy, so we are now... :-) */
@@ -427,7 +427,7 @@ static void x25_asy_data_transmit(void *token, struct sk_buff *skb)
                x25_asy_lock(sl);
                sl->tx_bytes+=skb->len;
                x25_asy_encaps(sl, skb->data, skb->len);
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
        }
 }
 
index 8c11e3d9f127d30cf9cbe87110eb460c51e95222..da6d30a53efa0bb0433a6213a326cfc0874726bf 100644 (file)
@@ -395,7 +395,7 @@ static int znet_send_packet(struct sk_buff *skb, struct device *dev)
                if (znet_debug > 4)
                  printk(KERN_DEBUG "%s: Transmitter queued, length %d.\n", dev->name, length);
        }
-       dev_kfree_skb(skb, FREE_WRITE); 
+       dev_kfree_skb(skb); 
        return 0;
 }
 
index d70bf55b4416fcc12daad6b3c2b47084bcaff8d4..9f0743d9db26af1a597c1d43477309771c56a9ad 100644 (file)
@@ -4,7 +4,7 @@ dep_tristate 'SCSI disk support' CONFIG_BLK_DEV_SD $CONFIG_SCSI
 dep_tristate 'SCSI tape support' CONFIG_CHR_DEV_ST $CONFIG_SCSI
 dep_tristate 'SCSI CD-ROM support' CONFIG_BLK_DEV_SR $CONFIG_SCSI
 if [ "$CONFIG_BLK_DEV_SR" != "n" ]; then
-  bool '  Enable vendor-specific extentions (for SCSI CDROM)' CONFIG_BLK_DEV_SR_VENDOR
+  bool '  Enable vendor-specific extensions (for SCSI CDROM)' CONFIG_BLK_DEV_SR_VENDOR
 fi
 dep_tristate 'SCSI generic support' CONFIG_CHR_DEV_SG $CONFIG_SCSI
 
@@ -84,8 +84,8 @@ if [ "$CONFIG_PCI" = "y" -a "$CONFIG_SCSI_NCR53C7xx" != "y" ]; then
   fi
 fi
 if [ "$CONFIG_MCA" = "y" ]; then
-  bool 'IBMMCA SCSI support' CONFIG_SCSI_IBMMCA
-  if [ "$CONFIG_SCSI_IBMMCA" = "y" ]; then
+  dep_tristate 'IBMMCA SCSI support' CONFIG_SCSI_IBMMCA $CONFIG_SCSI
+  if [ "$CONFIG_SCSI_IBMMCA" != "n" ]; then
      bool '  Standard SCSI-order' CONFIG_IBMMCA_SCSI_ORDER_STANDARD
      bool '  Reset SCSI-devices at boottime' CONFIG_IBMMCA_SCSI_DEV_RESET
   fi
index ff07954d8c352af5acfa91d254ee075dbc992078..315de3935946236737dce63564ad763fe4ceaf07 100644 (file)
 #include "sd.h"
 #include "advansys.h"
 
+#include <linux/bios32.h>
+
 /*
  * If Linux eventually defines a DID_UNDERRUN, the constant here can be
  * removed. The current value of zero for DID_UNDERRUN results in underrun
@@ -7612,74 +7614,8 @@ asc_get_cfg_byte(PCI_DATA *pciData)
 )
 {
     uchar tmp;
-    ulong address;
-    ulong lbus = pciData->bus, lslot = pciData->slot, lfunc = pciData->func;
-    uchar t2CFA, t2CF8;
-    ulong t1CF8, t1CFC;
-
-    ASC_DBG1(4, "asc_get_cfg_byte: type: %d\n", pciData->type);
-
-    /*
-     * Check type of configuration mechanism.
-     */
-    if (pciData->type == 2) {
-        /*
-         * Save registers to be restored later.
-         */
-        t2CFA = inp(0xCFA);    /* save PCI bus register */
-        t2CF8 = inp(0xCF8);    /* save config space enable register */
 
-        /*
-         * Write the bus and enable registers.
-         */
-        /* set for type 1 cycle, if needed */
-        outp(0xCFA, pciData->bus);
-        /* set the function number */
-        outp(0xCF8, 0x10 | (pciData->func << 1));
-
-        /*
-         * Read configuration space type 2 locations.
-         */
-        tmp = inp(0xC000 | ((pciData->slot << 8) + pciData->offset));
-
-        /*
-         * Restore registers.
-         */
-        outp(0xCF8, t2CF8);    /* restore the enable register */
-        outp(0xCFA, t2CFA);    /* restore PCI bus register */
-    } else {
-        /*
-         * Type 1 or 3 configuration mechanism.
-         *
-         * Save CONFIG_ADDRESS and CONFIG_DATA register values.
-         */
-        t1CF8 = inpl(0xCF8);
-        t1CFC = inpl(0xCFC);
-
-        /*
-         * enable <31>, bus = <23:16>, slot = <15:11>, func = <10:8>,
-         * reg = <7:2>
-         */
-        address = (ulong) ((lbus << 16) | (lslot << 11) |
-            (lfunc << 8) | (pciData->offset & 0xFC) | 0x80000000L);
-
-        /*
-         * Write out address to CONFIG_ADDRESS.
-         */
-        outpl(0xCF8, address);
-
-        /*
-         * Read in word from CONFIG_DATA.
-         */
-        tmp = (uchar) ((inpl(0xCFC) >> ((pciData->offset & 3) * 8)) & 0xFF);
-
-        /*
-         * Restore registers.
-         */
-        outpl(0xCF8, t1CF8);
-        outpl(0xCFC, t1CFC);
-    }
-    ASC_DBG1(4, "asc_get_cfg_byte: config data: %x\n", tmp);
+    pcibios_read_config_byte(pciData->bus, pciData->slot * 8 + pciData->func, pciData->offset, &tmp);
     return tmp;
 }
 
index 3973e866a8beca30fedaec349b6de2893c7b7da3..e864582b3f9dd21fd416e8f56e7a882f41952060 100644 (file)
@@ -803,6 +803,15 @@ int sr_dev_ioctl(struct cdrom_device_info *cdi,
 
     RO_IOCTLS(cdi->dev,arg);
 
+    case BLKFLSBUF:
+       if(!suser())
+               return -EACCES;
+       if(!(cdi->dev))
+               return -EINVAL;
+       fsync_dev(cdi->dev);
+       invalidate_buffers(cdi->dev);
+       return 0;
+
     default:
        return scsi_ioctl(scsi_CDs[target].device,cmd,(void *) arg);
     }
index 943c682bfcbe3cabfe1d113dfc483890533de3e2..34220ca4d0c6d739e3f076f3d9ffcc89807a975b 100644 (file)
@@ -3,7 +3,7 @@
  * vendor-specific code for SCSI CD-ROM's goes here.
  *
  * This is needed becauce most of the new features (multisession and
- * the like) are to new to be included into the SCSI-II standard (to
+ * the like) are too new to be included into the SCSI-II standard (to
  * be exact: there is'nt anything in my draft copy).
  *
  * Aug 1997: Ha! Got a SCSI-3 cdrom spec across my fingers. SCSI-3 does
@@ -83,7 +83,13 @@ sr_vendor_init(int minor)
                if (!strncmp (model,"CD-ROM DRIVE:25", 15)  ||
                    !strncmp (model,"CD-ROM DRIVE:36", 15)  ||
                    !strncmp (model,"CD-ROM DRIVE:83", 15)  ||
-                   !strncmp (model,"CD-ROM DRIVE:84 ",16))
+                   !strncmp (model,"CD-ROM DRIVE:84 ",16)
+#if 0
+                       /* my NEC 3x returns the read-raw data if a read-raw
+                          is followed by a read for the same sector - aeb */
+                   || !strncmp (model,"CD-ROM DRIVE:500",16)
+#endif
+                  )
                        /* these can't handle multisession, may hang */
                        scsi_CDs[minor].cdi.mask |= CDC_MULTI_SESSION;
 
@@ -145,10 +151,10 @@ sr_set_blocklength(int minor, int blocklength)
 
 int sr_cd_check(struct cdrom_device_info *cdi)
 {
-       unsigned long   sector,min,sec,frame;
+       unsigned long   sector;
        unsigned char   *buffer;     /* the buffer for the ioctl */
        unsigned char   cmd[12];     /* the scsi-command */
-       int             rc,is_xa,no_multi,minor;
+       int             rc,no_multi,minor;
 
        minor = MINOR(cdi->dev);
        if (scsi_CDs[minor].cdi.mask & CDC_MULTI_SESSION)
@@ -158,7 +164,6 @@ int sr_cd_check(struct cdrom_device_info *cdi)
        if(!buffer) return -ENOMEM;
        
        sector   = 0;         /* the multisession sector offset goes here  */
-       is_xa    = 0;         /* flag: the CD uses XA-Sectors              */
        no_multi = 0;         /* flag: the drive can't handle multisession */
        rc       = 0;
     
@@ -188,7 +193,8 @@ int sr_cd_check(struct cdrom_device_info *cdi)
                break;
                
 #ifdef CONFIG_BLK_DEV_SR_VENDOR
-       case VENDOR_NEC:
+       case VENDOR_NEC: {
+               unsigned long min,sec,frame;
                memset(cmd,0,12);
                cmd[0] = 0xde;
                cmd[1] = (scsi_CDs[minor].device->lun << 5) | 0x03;
@@ -207,8 +213,11 @@ int sr_cd_check(struct cdrom_device_info *cdi)
                frame  = BCD_TO_BIN(buffer[17]);
                sector = min*CD_SECS*CD_FRAMES + sec*CD_FRAMES + frame;
                break;
+       }
+
+       case VENDOR_TOSHIBA: {
+               unsigned long min,sec,frame;
 
-       case VENDOR_TOSHIBA:
                /* we request some disc information (is it a XA-CD ?,
                 * where starts the last session ?) */
                memset(cmd,0,12);
@@ -230,6 +239,7 @@ int sr_cd_check(struct cdrom_device_info *cdi)
                if (sector)
                        sector -= CD_MSF_OFFSET;
                break;
+       }
 
        case VENDOR_WRITER:
                memset(cmd,0,12);
index 901ae12ef65cb707de84f4ae0638000eb200e169..d895b4d69a4eb35134df5c2445197f9166b7357d 100644 (file)
@@ -138,6 +138,7 @@ fi
 dep_tristate 'FM synthesizer (YM3812/OPL-3) support' CONFIG_YM3812 $CONFIG_SOUND
 dep_tristate 'Loopback MIDI device support' CONFIG_VMIDI $CONFIG_SOUND
 
+dep_tristate '6850 UART support' CONFIG_UART6850 $CONFIG_SOUND
 if [ "$CONFIG_UART6850" = "y" ]; then
     hex 'I/O base for UART 6850 MIDI port (Unknown)' U6850_BASE 0
     int 'UART6850 IRQ (Unknown)' U6850_IRQ -1
index c8a349a3bb5044b4eb870bad8c1fccbc316fa397..e4b80d8eb6752041b5b60bb61af24700aa49b17a 100644 (file)
@@ -52,16 +52,23 @@ static int      max_synthdev = 0;
 static int      seq_mode = SEQ_1;
 
 static struct wait_queue *seq_sleeper = NULL;
-static volatile struct snd_wait seq_sleep_flag =
-{0};
+
+static volatile struct snd_wait seq_sleep_flag = {
+       0
+};
+
 static struct wait_queue *midi_sleeper = NULL;
-static volatile struct snd_wait midi_sleep_flag =
-{0};
+static volatile struct snd_wait midi_sleep_flag = {
+       0
+};
 
-static int      midi_opened[MAX_MIDI_DEV] =
-{0};
-static int      midi_written[MAX_MIDI_DEV] =
-{0};
+static int      midi_opened[MAX_MIDI_DEV] = {
+       0
+};
+
+static int      midi_written[MAX_MIDI_DEV] = {
+       0
+};
 
 static unsigned long prev_input_time = 0;
 static int      prev_event_time;
@@ -70,6 +77,7 @@ static int      prev_event_time;
 
 #define EV_SZ  8
 #define IEV_SZ 8
+
 static unsigned char *queue = NULL;
 static unsigned char *iqueue = NULL;
 
@@ -102,29 +110,27 @@ int sequencer_read(int dev, struct fileinfo *file, char *buf, int count)
 
        save_flags(flags);
        cli();
+
        if (!iqlen)
        {
+               unsigned long   tlimit;
                if ((file->flags & (O_NONBLOCK) ? 1 : 0))
                {
                        restore_flags(flags);
                        return -EAGAIN;
                }
+               if (pre_event_timeout)
+                       current->timeout = tlimit = jiffies + (pre_event_timeout);
+               else
+                       tlimit = (unsigned long) -1;
+               midi_sleep_flag.opts = WK_SLEEP;
+               interruptible_sleep_on(&midi_sleeper);
+               if (!(midi_sleep_flag.opts & WK_WAKEUP))
                {
-                       unsigned long   tlimit;
-
-                       if (pre_event_timeout)
-                               current->timeout = tlimit = jiffies + (pre_event_timeout);
-                       else
-                               tlimit = (unsigned long) -1;
-                       midi_sleep_flag.opts = WK_SLEEP;
-                       interruptible_sleep_on(&midi_sleeper);
-                       if (!(midi_sleep_flag.opts & WK_WAKEUP))
-                       {
-                               if (jiffies >= tlimit)
-                                       midi_sleep_flag.opts |= WK_TIMEOUT;
-                       }
-                       midi_sleep_flag.opts &= ~WK_SLEEP;
-               };
+                       if (jiffies >= tlimit)
+                               midi_sleep_flag.opts |= WK_TIMEOUT;
+               }
+               midi_sleep_flag.opts &= ~WK_SLEEP;
 
                if (!iqlen)
                {
@@ -134,10 +140,8 @@ int sequencer_read(int dev, struct fileinfo *file, char *buf, int count)
        }
        while (iqlen && c >= ev_len)
        {
-               {
-                       char *fixit = (char *) &iqueue[iqhead * IEV_SZ];
-                       copy_to_user(&(buf)[p], fixit, ev_len);
-               };
+               char *fixit = (char *) &iqueue[iqhead * IEV_SZ];
+               copy_to_user(&(buf)[p], fixit, ev_len);
                p += ev_len;
                c -= ev_len;
 
@@ -145,7 +149,6 @@ int sequencer_read(int dev, struct fileinfo *file, char *buf, int count)
                iqlen--;
        }
        restore_flags(flags);
-
        return count - c;
 }
 
@@ -158,7 +161,7 @@ static void sequencer_midi_output(int dev)
 
 void seq_copy_to_input(unsigned char *event_rec, int len)
 {
-       unsigned long   flags;
+       unsigned long flags;
 
        /*
         * Verify that the len is valid for the current mode.
@@ -202,7 +205,6 @@ static void sequencer_midi_input(int dev, unsigned char data)
        if (tstamp != prev_input_time)
        {
                tstamp = (tstamp << 8) | SEQ_WAIT;
-
                seq_copy_to_input((unsigned char *) &tstamp, 4);
                prev_input_time = tstamp;
        }
@@ -396,7 +398,7 @@ static int seq_queue(unsigned char *note, char nonblock)
 
 static int extended_event(unsigned char *q)
 {
-       int             dev = q[2];
+       int dev = q[2];
 
        if (dev < 0 || dev >= max_synthdev)
                return -ENXIO;
@@ -451,22 +453,20 @@ static int extended_event(unsigned char *q)
 
 static int find_voice(int dev, int chn, int note)
 {
-       unsigned short  key;
-       int             i;
+       unsigned short key;
+       int i;
 
        key = (chn << 8) | (note + 1);
-
        for (i = 0; i < synth_devs[dev]->alloc.max_voice; i++)
                if (synth_devs[dev]->alloc.map[i] == key)
                        return i;
-
        return -1;
 }
 
 static int alloc_voice(int dev, int chn, int note)
 {
        unsigned short  key;
-       int             voice;
+       int voice;
 
        key = (chn << 8) | (note + 1);
 
@@ -474,7 +474,7 @@ static int alloc_voice(int dev, int chn, int note)
                                             &synth_devs[dev]->alloc);
        synth_devs[dev]->alloc.map[voice] = key;
        synth_devs[dev]->alloc.alloc_times[voice] =
-           synth_devs[dev]->alloc.timestamp++;
+                       synth_devs[dev]->alloc.timestamp++;
        return voice;
 }
 
@@ -562,13 +562,13 @@ static void seq_chn_voice_event(unsigned char *event_rec)
 
 static void seq_chn_common_event(unsigned char *event_rec)
 {
-       unsigned char   dev = event_rec[1];
-       unsigned char   cmd = event_rec[2];
-       unsigned char   chn = event_rec[3];
-       unsigned char   p1 = event_rec[4];
+       unsigned char dev = event_rec[1];
+       unsigned char cmd = event_rec[2];
+       unsigned char chn = event_rec[3];
+       unsigned char p1 = event_rec[4];
 
-       /* unsigned char   p2 = event_rec[5]; */
-       unsigned short  w14 = *(short *) &event_rec[6];
+       /* unsigned char p2 = event_rec[5]; */
+       unsigned short w14 = *(short *) &event_rec[6];
 
        if ((int) dev > max_synthdev || synth_devs[dev] == NULL)
                return;
@@ -659,8 +659,8 @@ static void seq_chn_common_event(unsigned char *event_rec)
 
 static int seq_timing_event(unsigned char *event_rec)
 {
-       unsigned char   cmd = event_rec[1];
-       unsigned int    parm = *(int *) &event_rec[4];
+       unsigned char cmd = event_rec[1];
+       unsigned int parm = *(int *) &event_rec[4];
 
        if (seq_mode == SEQ_2)
        {
@@ -671,7 +671,6 @@ static int seq_timing_event(unsigned char *event_rec)
                        if ((SEQ_MAX_QUEUE - qlen) >= output_threshold)
                        {
                                unsigned long   flags;
-
                                save_flags(flags);
                                cli();
                                if ((seq_sleep_flag.opts & WK_SLEEP))
@@ -781,8 +780,8 @@ static void seq_local_event(unsigned char *event_rec)
 
 static void seq_sysex_message(unsigned char *event_rec)
 {
-       int             dev = event_rec[1];
-       int             i, l = 0;
+       int dev = event_rec[1];
+       int i, l = 0;
        unsigned char  *buf = &event_rec[2];
 
        if ((int) dev > max_synthdev)
@@ -957,9 +956,8 @@ static int play_event(unsigned char *q)
                        seq_sysex_message(q);
                        break;
 
-               default:;
+               default:
        }
-
        return 0;
 }
 
@@ -1009,12 +1007,9 @@ static void seq_startplay(void)
        }
 }
 
-static void
-reset_controllers(int dev, unsigned char *controller, int update_dev)
+static void reset_controllers(int dev, unsigned char *controller, int update_dev)
 {
-
        int i;
-
        for (i = 0; i < 128; i++)
                controller[i] = ctrl_def_values[i];
 }
@@ -1049,16 +1044,15 @@ static void setup_mode2(void)
                        synth_devs[dev]->chn_info[chn].bender_range = 200;
                }
        }
-
        max_mididev = 0;
        seq_mode = SEQ_2;
 }
 
 int sequencer_open(int dev, struct fileinfo *file)
 {
-       int             retval, mode, i;
-       int             level, tmp;
-       unsigned long   flags;
+       int retval, mode, i;
+       int level, tmp;
+       unsigned long flags;
 
        if (!sequencer_ok)
                sequencer_init();
@@ -1076,9 +1070,8 @@ int sequencer_open(int dev, struct fileinfo *file)
                return -ENXIO;
        }
        if (dev)                /* Patch manager device (obsolete) */
-       {
                  return -ENXIO;
-       }
+
        if (mode == OPEN_READ)
        {
                if (!num_midis)
@@ -1192,9 +1185,8 @@ int sequencer_open(int dev, struct fileinfo *file)
                        }
        }
        if (seq_mode == SEQ_2)
-       {
                tmr->open(tmr_no, seq_mode);
-       }
+
        seq_sleep_flag.opts = WK_NONE;
        midi_sleep_flag.opts = WK_NONE;
        output_threshold = SEQ_MAX_QUEUE / 2;
@@ -1204,7 +1196,7 @@ int sequencer_open(int dev, struct fileinfo *file)
 
 void seq_drain_midi_queues(void)
 {
-       int             i, n;
+       int i, n;
 
        /*
         * Give the Midi drivers time to drain their output queues
@@ -1228,30 +1220,25 @@ void seq_drain_midi_queues(void)
                
                if (n)
                {
-                       {
-                               unsigned long   tlimit;
+                       unsigned long   tlimit;
 
-                               if (HZ / 10)
-                                       current->timeout = tlimit = jiffies + (HZ / 10);
-                               else
-                                       tlimit = (unsigned long) -1;
-                               seq_sleep_flag.opts = WK_SLEEP;
-                               interruptible_sleep_on(&seq_sleeper);
-                               if (!(seq_sleep_flag.opts & WK_WAKEUP))
-                               {
-                                       if (jiffies >= tlimit)
-                                               seq_sleep_flag.opts |= WK_TIMEOUT;
-                               }
-                               seq_sleep_flag.opts &= ~WK_SLEEP;
-                       };
+                       current->timeout = tlimit = jiffies + (HZ / 10);
+                       seq_sleep_flag.opts = WK_SLEEP;
+                       interruptible_sleep_on(&seq_sleeper);
+                       if (!(seq_sleep_flag.opts & WK_WAKEUP))
+                       {
+                               if (jiffies >= tlimit)
+                                       seq_sleep_flag.opts |= WK_TIMEOUT;
+                       }
+                       seq_sleep_flag.opts &= ~WK_SLEEP;
                }
        }
 }
 
 void sequencer_release(int dev, struct fileinfo *file)
 {
-       int             i;
-       int             mode = file->mode & O_ACCMODE;
+       int i;
+       int mode = file->mode & O_ACCMODE;
 
        dev = dev >> 4;
 
@@ -1261,29 +1248,21 @@ void sequencer_release(int dev, struct fileinfo *file)
         * Wait until the queue is empty (if we don't have nonblock)
         */
 
-       if (mode != OPEN_READ && !(file->flags & (O_NONBLOCK) ?
-                                  1 : 0))
+       if (mode != OPEN_READ && !(file->flags & (O_NONBLOCK) ? 1 : 0))
        {
                while (!signal_pending(current) && qlen > 0)
                {
+                       unsigned long   tlimit;
                        seq_sync();
-
+                       current->timeout = tlimit = jiffies + (3 * HZ);
+                       seq_sleep_flag.opts = WK_SLEEP;
+                       interruptible_sleep_on(&seq_sleeper);
+                       if (!(seq_sleep_flag.opts & WK_WAKEUP))
                        {
-                               unsigned long   tlimit;
-
-                               if (3 * HZ)
-                                       current->timeout = tlimit = jiffies + (3 * HZ);
-                               else
-                                       tlimit = (unsigned long) -1;
-                               seq_sleep_flag.opts = WK_SLEEP;
-                               interruptible_sleep_on(&seq_sleeper);
-                               if (!(seq_sleep_flag.opts & WK_WAKEUP))
-                               {
-                                       if (jiffies >= tlimit)
-                                               seq_sleep_flag.opts |= WK_TIMEOUT;
-                               }
-                               seq_sleep_flag.opts &= ~WK_SLEEP;
-                       };      /* Extra delay */
+                               if (jiffies >= tlimit)
+                                       seq_sleep_flag.opts |= WK_TIMEOUT;
+                       }
+                       seq_sleep_flag.opts &= ~WK_SLEEP;
                }
        }
                  
@@ -1327,7 +1306,7 @@ void sequencer_release(int dev, struct fileinfo *file)
 
 static int seq_sync(void)
 {
-       unsigned long   flags;
+       unsigned long flags;
 
        if (qlen && !seq_playing && !signal_pending(current))
                seq_startplay();
@@ -1336,25 +1315,20 @@ static int seq_sync(void)
        cli();
        if (qlen > 0)
        {
-               {
-                       unsigned long   tlimit;
+               unsigned long   tlimit;
 
-                       if (HZ)
-                               current->timeout = tlimit = jiffies + (HZ);
-                       else
-                               tlimit = (unsigned long) -1;
-                       seq_sleep_flag.opts = WK_SLEEP;
-                       interruptible_sleep_on(&seq_sleeper);
-                       if (!(seq_sleep_flag.opts & WK_WAKEUP))
-                       {
-                               if (jiffies >= tlimit)
-                                       seq_sleep_flag.opts |= WK_TIMEOUT;
-                       }
-                       seq_sleep_flag.opts &= ~WK_SLEEP;
-               };
+               if (HZ)
+                       current->timeout = tlimit = jiffies + (HZ);
+               seq_sleep_flag.opts = WK_SLEEP;
+               interruptible_sleep_on(&seq_sleeper);
+               if (!(seq_sleep_flag.opts & WK_WAKEUP))
+               {
+                       if (jiffies >= tlimit)
+                               seq_sleep_flag.opts |= WK_TIMEOUT;
+               }
+               seq_sleep_flag.opts &= ~WK_SLEEP;
        }
        restore_flags(flags);
-
        return qlen;
 }
 
@@ -1364,8 +1338,8 @@ static void midi_outc(int dev, unsigned char data)
         * NOTE! Calls sleep(). Don't call this from interrupt.
         */
 
-       int             n;
-       unsigned long   flags;
+       int n;
+       unsigned long flags;
 
        /*
         * This routine sends one byte to the Midi channel.
@@ -1379,22 +1353,17 @@ static void midi_outc(int dev, unsigned char data)
        cli();
        while (n && !midi_devs[dev]->outputc(dev, data))
        {
-               {
-                       unsigned long   tlimit;
+               unsigned long   tlimit;
 
-                       if (4)
-                               current->timeout = tlimit = jiffies + (4);
-                       else
-                               tlimit = (unsigned long) -1;
-                       seq_sleep_flag.opts = WK_SLEEP;
-                       interruptible_sleep_on(&seq_sleeper);
-                       if (!(seq_sleep_flag.opts & WK_WAKEUP))
-                       {
-                               if (jiffies >= tlimit)
-                                       seq_sleep_flag.opts |= WK_TIMEOUT;
-                       }
-                       seq_sleep_flag.opts &= ~WK_SLEEP;
-               };
+               current->timeout = tlimit = jiffies + (4);
+               seq_sleep_flag.opts = WK_SLEEP;
+               interruptible_sleep_on(&seq_sleeper);
+               if (!(seq_sleep_flag.opts & WK_WAKEUP))
+               {
+                       if (jiffies >= tlimit)
+                               seq_sleep_flag.opts |= WK_TIMEOUT;
+               }
+               seq_sleep_flag.opts &= ~WK_SLEEP;
                n--;
        }
        restore_flags(flags);
@@ -1406,9 +1375,9 @@ static void seq_reset(void)
         * NOTE! Calls sleep(). Don't call this from interrupt.
         */
 
-       int             i;
-       int             chn;
-       unsigned long   flags;
+       int i;
+       int chn;
+       unsigned long flags;
 
        if (softsynthp != NULL)
                softsynthp(SSYN_STOP, 0, 0, 0);
@@ -1515,197 +1484,204 @@ int sequencer_ioctl(int dev, struct fileinfo *file,
 
        orig_dev = dev = dev >> 4;
 
-       switch (cmd) {
-       case SNDCTL_TMR_TIMEBASE:
-       case SNDCTL_TMR_TEMPO:
-       case SNDCTL_TMR_START:
-       case SNDCTL_TMR_STOP:
-       case SNDCTL_TMR_CONTINUE:
-       case SNDCTL_TMR_METRONOME:
-       case SNDCTL_TMR_SOURCE:
-               if (seq_mode != SEQ_2)
-                       return -EINVAL;
-               return tmr->ioctl(tmr_no, cmd, arg);
+       switch (cmd) 
+       {
+               case SNDCTL_TMR_TIMEBASE:
+               case SNDCTL_TMR_TEMPO:
+               case SNDCTL_TMR_START:
+               case SNDCTL_TMR_STOP:
+               case SNDCTL_TMR_CONTINUE:
+               case SNDCTL_TMR_METRONOME:
+               case SNDCTL_TMR_SOURCE:
+                       if (seq_mode != SEQ_2)
+                               return -EINVAL;
+                       return tmr->ioctl(tmr_no, cmd, arg);
                
-       case SNDCTL_TMR_SELECT:
-               if (seq_mode != SEQ_2)
-                       return -EINVAL;
-               if (__get_user(pending_timer, (int *)arg))
-                       return -EFAULT;
-               if (pending_timer < 0 || pending_timer >= num_sound_timers || sound_timer_devs[pending_timer] == NULL) {
-                       pending_timer = -1;
-                       return -EINVAL;
-               }
-               return __put_user(pending_timer, (int *)arg);
+               case SNDCTL_TMR_SELECT:
+                       if (seq_mode != SEQ_2)
+                               return -EINVAL;
+                       if (get_user(pending_timer, (int *)arg))
+                               return -EFAULT;
+                       if (pending_timer < 0 || pending_timer >= num_sound_timers || sound_timer_devs[pending_timer] == NULL) 
+                       {
+                               pending_timer = -1;
+                               return -EINVAL;
+                       }
+                       val = pending_timer;
+                       break;
 
-       case SNDCTL_SEQ_PANIC:
-               seq_panic();
-               break;
+               case SNDCTL_SEQ_PANIC:
+                       seq_panic();
+                       return -EINVAL;
                
-       case SNDCTL_SEQ_SYNC:
-               if (mode == OPEN_READ)
-                       return 0;
-               while (qlen > 0 && !signal_pending(current))
-                       seq_sync();
-               return qlen ? -EINTR : 0;
+               case SNDCTL_SEQ_SYNC:
+                       if (mode == OPEN_READ)
+                               return 0;
+                       while (qlen > 0 && !signal_pending(current))
+                               seq_sync();
+                       return qlen ? -EINTR : 0;
                
-       case SNDCTL_SEQ_RESET:
-               seq_reset();
-               return 0;
-
-       case SNDCTL_SEQ_TESTMIDI:
-               if (__get_user(midi_dev, (int *)arg))
-                       return -EFAULT;
-               if (midi_dev < 0 || midi_dev >= max_mididev)
-                       return -ENXIO;
+               case SNDCTL_SEQ_RESET:
+                       seq_reset();
+                       return 0;
+
+               case SNDCTL_SEQ_TESTMIDI:
+                       if (__get_user(midi_dev, (int *)arg))
+                               return -EFAULT;
+                       if (midi_dev < 0 || midi_dev >= max_mididev)
+                               return -ENXIO;
                
-               if (!midi_opened[midi_dev] && 
-                   (err = midi_devs[midi_dev]->open(midi_dev, mode, sequencer_midi_input,
+                       if (!midi_opened[midi_dev] && 
+                               (err = midi_devs[midi_dev]->open(midi_dev, mode, sequencer_midi_input,
                                                     sequencer_midi_output)) < 0)
-                       return err;
-               midi_opened[midi_dev] = 1;
-               return 0;
-
-       case SNDCTL_SEQ_GETINCOUNT:
-               if (mode == OPEN_WRITE)
+                               return err;
+                       midi_opened[midi_dev] = 1;
                        return 0;
-               return __put_user(iqlen,  (int *)arg);
+
+               case SNDCTL_SEQ_GETINCOUNT:
+                       if (mode == OPEN_WRITE)
+                               return 0;
+                       val = iqlen;
+                       break;
                
-       case SNDCTL_SEQ_GETOUTCOUNT:
-               if (mode == OPEN_READ)
-                         return 0;
-               val = SEQ_MAX_QUEUE - qlen;
-               return __put_user(val, (int *)arg);
+               case SNDCTL_SEQ_GETOUTCOUNT:
+                       if (mode == OPEN_READ)
+                               return 0;
+                       val = SEQ_MAX_QUEUE - qlen;
+                       break;
                
-       case SNDCTL_SEQ_GETTIME:
-               if (seq_mode == SEQ_2)
-                       return tmr->ioctl(tmr_no, cmd, arg);
-               if (softsynthp != NULL)
-                       val = softsynthp(SSYN_GETTIME, 0, 0, 0);
-               else
-                       val = jiffies - seq_time;
-               return __put_user(val, (int *)arg);
+               case SNDCTL_SEQ_GETTIME:
+                       if (seq_mode == SEQ_2)
+                               return tmr->ioctl(tmr_no, cmd, arg);
+                       if (softsynthp != NULL)
+                               val = softsynthp(SSYN_GETTIME, 0, 0, 0);
+                       else
+                               val = jiffies - seq_time;
+                       break;
                
-       case SNDCTL_SEQ_CTRLRATE:
-               /*
-                * If *arg == 0, just return the current rate
-                */
-               if (seq_mode == SEQ_2)
-                       return tmr->ioctl(tmr_no, cmd, arg);
+               case SNDCTL_SEQ_CTRLRATE:
+                       /*
+                        * If *arg == 0, just return the current rate
+                        */
+                       if (seq_mode == SEQ_2)
+                               return tmr->ioctl(tmr_no, cmd, arg);
                
-               if (__get_user(val, (int *)arg))
-                       return -EFAULT;
-               if (val != 0)
-                       return -EINVAL;
-               return __put_user(HZ, (int *)arg);
-
-       case SNDCTL_SEQ_RESETSAMPLES:
-       case SNDCTL_SYNTH_REMOVESAMPLE:
-       case SNDCTL_SYNTH_CONTROL:
-               if (__get_user(dev, (int *)arg))
-                       return -EFAULT;
-               if (dev < 0 || dev >= num_synths || synth_devs[dev] == NULL)
-                       return -ENXIO;
-               if (!(synth_open_mask & (1 << dev)) && !orig_dev)
-                       return -EBUSY;
-               return synth_devs[dev]->ioctl(dev, cmd, arg);
+                       if (get_user(val, (int *)arg))
+                               return -EFAULT;
+                       if (val != 0)
+                               return -EINVAL;
+                       val = HZ;
+                       break;
 
-       case SNDCTL_SEQ_NRSYNTHS:
-               return __put_user(max_synthdev, (int *)arg);
+               case SNDCTL_SEQ_RESETSAMPLES:
+               case SNDCTL_SYNTH_REMOVESAMPLE:
+               case SNDCTL_SYNTH_CONTROL:
+                       if (get_user(dev, (int *)arg))
+                               return -EFAULT;
+                       if (dev < 0 || dev >= num_synths || synth_devs[dev] == NULL)
+                               return -ENXIO;
+                       if (!(synth_open_mask & (1 << dev)) && !orig_dev)
+                               return -EBUSY;
+                       return synth_devs[dev]->ioctl(dev, cmd, arg);
 
-       case SNDCTL_SEQ_NRMIDIS:
-               return __put_user(max_mididev, (int *)arg);
+               case SNDCTL_SEQ_NRSYNTHS:
+                       val = max_synthdev;
+                       break;
 
-       case SNDCTL_SYNTH_MEMAVL:
-               if (__get_user(dev, (int *)arg))
-                       return -EFAULT;
-               if (dev < 0 || dev >= num_synths || synth_devs[dev] == NULL)
-                       return -ENXIO;
-               if (!(synth_open_mask & (1 << dev)) && !orig_dev)
-                       return -EBUSY;
-               val = synth_devs[dev]->ioctl(dev, cmd, arg);
-               return __put_user(val, (int *)arg);
-
-       case SNDCTL_FM_4OP_ENABLE:
-               if (__get_user(dev, (int *)arg))
-                       return -EFAULT;
-               if (dev < 0 || dev >= num_synths || synth_devs[dev] == NULL)
-                       return -ENXIO;
-               if (!(synth_open_mask & (1 << dev)))
-                       return -ENXIO;
-               synth_devs[dev]->ioctl(dev, cmd, arg);
-               return 0;
+               case SNDCTL_SEQ_NRMIDIS:
+                       val = max_mididev;
+                       break;
 
-       case SNDCTL_SYNTH_INFO:
-               if (__get_user(dev, (int *)(&(((struct synth_info *)arg)->device))))
-                       return -EFAULT;
-               if (dev < 0 || dev >= max_synthdev)
-                       return -ENXIO;
-               if (!(synth_open_mask & (1 << dev)) && !orig_dev)
-                       return -EBUSY;
-               return synth_devs[dev]->ioctl(dev, cmd, arg);
+               case SNDCTL_SYNTH_MEMAVL:
+                       if (get_user(dev, (int *)arg))
+                               return -EFAULT;
+                       if (dev < 0 || dev >= num_synths || synth_devs[dev] == NULL)
+                               return -ENXIO;
+                       if (!(synth_open_mask & (1 << dev)) && !orig_dev)
+                               return -EBUSY;
+                       val = synth_devs[dev]->ioctl(dev, cmd, arg);
+                       break;
+
+               case SNDCTL_FM_4OP_ENABLE:
+                       if (get_user(dev, (int *)arg))
+                               return -EFAULT;
+                       if (dev < 0 || dev >= num_synths || synth_devs[dev] == NULL)
+                               return -ENXIO;
+                       if (!(synth_open_mask & (1 << dev)))
+                               return -ENXIO;
+                       synth_devs[dev]->ioctl(dev, cmd, arg);
+                       return 0;
+
+               case SNDCTL_SYNTH_INFO:
+                       if (get_user(dev, (int *)(&(((struct synth_info *)arg)->device))))
+                               return -EFAULT;
+                       if (dev < 0 || dev >= max_synthdev)
+                               return -ENXIO;
+                       if (!(synth_open_mask & (1 << dev)) && !orig_dev)
+                               return -EBUSY;
+                       return synth_devs[dev]->ioctl(dev, cmd, arg);
                
                /* Like SYNTH_INFO but returns ID in the name field */
-       case SNDCTL_SYNTH_ID:
-               if (__get_user(dev, (int *)(&(((struct synth_info *)arg)->device))))
-                       return -EFAULT;
-               if (dev < 0 || dev >= max_synthdev)
-                       return -ENXIO;
-               if (!(synth_open_mask & (1 << dev)) && !orig_dev)
-                       return -EBUSY;
-               memcpy(&inf, synth_devs[dev]->info, sizeof(inf));
-               strncpy(inf.name, synth_devs[dev]->id, sizeof(inf.name));
-               inf.device = dev;
-               return __copy_to_user(arg, &inf, sizeof(inf));
+               case SNDCTL_SYNTH_ID:
+                       if (get_user(dev, (int *)(&(((struct synth_info *)arg)->device))))
+                               return -EFAULT;
+                       if (dev < 0 || dev >= max_synthdev)
+                               return -ENXIO;
+                       if (!(synth_open_mask & (1 << dev)) && !orig_dev)
+                               return -EBUSY;
+                       memcpy(&inf, synth_devs[dev]->info, sizeof(inf));
+                       strncpy(inf.name, synth_devs[dev]->id, sizeof(inf.name));
+                       inf.device = dev;
+                       return copy_to_user(arg, &inf, sizeof(inf))?-EFAULT:0;
                
-       case SNDCTL_SEQ_OUTOFBAND:
-               if (__copy_from_user(&event_rec, arg, sizeof(event_rec)))
-                       return -EFAULT;
-               save_flags(flags);
-               cli();
-               play_event(event_rec.arr);
-               restore_flags(flags);
-               return 0;
+               case SNDCTL_SEQ_OUTOFBAND:
+                       if (copy_from_user(&event_rec, arg, sizeof(event_rec)))
+                               return -EFAULT;
+                       save_flags(flags);
+                       cli();
+                       play_event(event_rec.arr);
+                       restore_flags(flags);
+                       return 0;
                  
-       case SNDCTL_MIDI_INFO:
-               if (__get_user(dev, (int *)(&(((struct synth_info *)arg)->device))))
-                       return -EFAULT;
-               if (dev < 0 || dev >= max_mididev)
-                       return -ENXIO;
-               midi_devs[dev]->info.device = dev;
-               return __copy_to_user(arg, &midi_devs[dev]->info, sizeof(struct synth_info));
+               case SNDCTL_MIDI_INFO:
+                       if (get_user(dev, (int *)(&(((struct synth_info *)arg)->device))))
+                               return -EFAULT;
+                       if (dev < 0 || dev >= max_mididev)
+                               return -ENXIO;
+                       midi_devs[dev]->info.device = dev;
+                       return copy_to_user(arg, &midi_devs[dev]->info, sizeof(struct synth_info))?-EFAULT:0;
                
-       case SNDCTL_SEQ_THRESHOLD:
-               if (__get_user(val, (int *)arg))
-                       return -EFAULT;
-               if (val < 1)
-                       val = 1;
-               if (val >= SEQ_MAX_QUEUE)
-                       val = SEQ_MAX_QUEUE - 1;
-               output_threshold = val;
-               return 0;
+               case SNDCTL_SEQ_THRESHOLD:
+                       if (get_user(val, (int *)arg))
+                               return -EFAULT;
+                       if (val < 1)
+                               val = 1;
+                       if (val >= SEQ_MAX_QUEUE)
+                               val = SEQ_MAX_QUEUE - 1;
+                       output_threshold = val;
+                       return 0;
                
-       case SNDCTL_MIDI_PRETIME:
-               if (__get_user(val, (int *)arg))
-                       return -EFAULT;
-               if (val < 0)
-                       val = 0;
-               val = (HZ * val) / 10;
-               pre_event_timeout = val;
-               return __put_user(val, (int *)arg);
-
-       default:
-               if (mode == OPEN_READ)
-                       return -EIO;
-               if (!synth_devs[0])
-                       return -ENXIO;
-               if (!(synth_open_mask & (1 << 0)))
-                       return -ENXIO;
-               if (!synth_devs[0]->ioctl)
-                       return -EINVAL;
-               return synth_devs[0]->ioctl(0, cmd, arg);
+               case SNDCTL_MIDI_PRETIME:
+                       if (get_user(val, (int *)arg))
+                               return -EFAULT;
+                       if (val < 0)
+                               val = 0;
+                       val = (HZ * val) / 10;
+                       pre_event_timeout = val;
+                       break;
+
+               default:
+                       if (mode == OPEN_READ)
+                               return -EIO;
+                       if (!synth_devs[0])
+                               return -ENXIO;
+                       if (!(synth_open_mask & (1 << 0)))
+                               return -ENXIO;
+                       if (!synth_devs[0]->ioctl)
+                               return -EINVAL;
+                       return synth_devs[0]->ioctl(0, cmd, arg);
        }
-       return -EINVAL;
+       return put_user(val, (int *)arg);
 }
 
 int sequencer_select(int dev, struct fileinfo *file, int sel_type, poll_table * wait)
@@ -1845,31 +1821,37 @@ void sequencer_init(void)
 {
        if (sequencer_ok)
                return;
-
 #ifdef CONFIG_MIDI
        MIDIbuf_init();
 #endif
-
-
-       queue = (unsigned char *) (sound_mem_blocks[sound_nblocks] = vmalloc(SEQ_MAX_QUEUE * EV_SZ));
-       sound_mem_sizes[sound_nblocks] = SEQ_MAX_QUEUE * EV_SZ;
-       if (sound_nblocks < 1024)
-               sound_nblocks++;;
+       queue = (unsigned char *)vmalloc(SEQ_MAX_QUEUE * EV_SZ);
        if (queue == NULL)
        {
                  printk(KERN_ERR "sequencer: Can't allocate memory for sequencer output queue\n");
                  return;
        }
-       iqueue = (unsigned char *) (sound_mem_blocks[sound_nblocks] = vmalloc(SEQ_MAX_QUEUE * IEV_SZ));
-       sound_mem_sizes[sound_nblocks] = SEQ_MAX_QUEUE * IEV_SZ;
-       if (sound_nblocks < 1024)
-               sound_nblocks++;
+       iqueue = (unsigned char *)vmalloc(SEQ_MAX_QUEUE * IEV_SZ);
        if (iqueue == NULL)
        {
                printk(KERN_ERR "sequencer: Can't allocate memory for sequencer input queue\n");
+               vfree(queue);
                return;
        }
        sequencer_ok = 1;
 }
 
+void sequencer_unload(void)
+{
+       if(queue)
+       {
+               vfree(queue);
+               queue=NULL;
+       }
+       if(iqueue)
+       {
+               vfree(iqueue);
+               iqueue=NULL;
+       }
+}
+
 #endif
index 82053a4b42974e45f7dfc53b00c77c8782c1d14e..2cd27ffd9062937b627b5968baf76f4539b827c7 100644 (file)
@@ -56,6 +56,7 @@ int sequencer_ioctl (int dev, struct fileinfo *file,
 int sequencer_select(int dev, struct fileinfo *file, int sel_type, poll_table * wait);
 
 void sequencer_init (void);
+void sequencer_unload (void);
 void sequencer_timer(unsigned long dummy);
 int note_to_freq(int note_num);
 unsigned long compute_finetune(unsigned long base_freq, int bend, int range,
index 24b0d63f15dd041d74017cf86ee66f882d52a9c0..158610d4bcdbeaaa19881d842b62ae8d0fc353ce 100644 (file)
@@ -29,20 +29,17 @@ static volatile unsigned long usecs_per_tmr;        /* Length of the current interval *
 
 static struct sound_lowlev_timer *tmr = NULL;
 
-static unsigned long
-tmr2ticks(int tmr_value)
+static unsigned long tmr2ticks(int tmr_value)
 {
        /*
         *    Convert timer ticks to MIDI ticks
         */
 
-       unsigned long   tmp;
-       unsigned long   scale;
+       unsigned long tmp;
+       unsigned long scale;
 
        tmp = tmr_value * usecs_per_tmr;        /* Convert to usecs */
-
        scale = (60 * 1000000) / (curr_tempo * curr_timebase);  /* usecs per MIDI tick */
-
        return (tmp + (scale / 2)) / scale;
 }
 
@@ -53,7 +50,7 @@ void reprogram_timer(void)
        usecs_per_tick = (60 * 1000000) / (curr_tempo * curr_timebase);
 
        /*
-          * Don't kill the system by setting too high timer rate
+        * Don't kill the system by setting too high timer rate
         */
        if (usecs_per_tick < 2000)
                usecs_per_tick = 2000;
@@ -61,22 +58,19 @@ void reprogram_timer(void)
        usecs_per_tmr = tmr->tmr_start(tmr->dev, usecs_per_tick);
 }
 
-void
-sound_timer_syncinterval(unsigned int new_usecs)
+void sound_timer_syncinterval(unsigned int new_usecs)
 {
-/*
- *    This routine is called by the hardware level if
- *      the clock frequency has changed for some reason.
- */
+       /*
       *    This routine is called by the hardware level if
       *      the clock frequency has changed for some reason.
       */
        tmr_offs = tmr_ctr;
        ticks_offs += tmr2ticks(tmr_ctr);
        tmr_ctr = 0;
-
        usecs_per_tmr = new_usecs;
 }
 
-static void
-tmr_reset(void)
+static void tmr_reset(void)
 {
        unsigned long   flags;
 
@@ -91,99 +85,89 @@ tmr_reset(void)
        restore_flags(flags);
 }
 
-static int
-timer_open(int dev, int mode)
+static int timer_open(int dev, int mode)
 {
        if (opened)
                return -EBUSY;
-
        tmr_reset();
        curr_tempo = 60;
        curr_timebase = 100;
        opened = 1;
        reprogram_timer();
-
        return 0;
 }
 
-static void
-timer_close(int dev)
+static void timer_close(int dev)
 {
        opened = tmr_running = 0;
        tmr->tmr_disable(tmr->dev);
 }
 
-static int
-timer_event(int dev, unsigned char *event)
+static int timer_event(int dev, unsigned char *event)
 {
-       unsigned char   cmd = event[1];
-       unsigned long   parm = *(int *) &event[4];
+       unsigned char cmd = event[1];
+       unsigned long parm = *(int *) &event[4];
 
        switch (cmd)
-         {
-         case TMR_WAIT_REL:
-                 parm += prev_event_time;
-         case TMR_WAIT_ABS:
-                 if (parm > 0)
-                   {
-                           long            time;
-
-                           if (parm <= curr_ticks)     /* It's the time */
-                                   return TIMER_NOT_ARMED;
-
-                           time = parm;
-                           next_event_time = prev_event_time = time;
-
-                           return TIMER_ARMED;
-                   }
-                 break;
-
-         case TMR_START:
-                 tmr_reset();
-                 tmr_running = 1;
-                 reprogram_timer();
-                 break;
-
-         case TMR_STOP:
-                 tmr_running = 0;
-                 break;
-
-         case TMR_CONTINUE:
-                 tmr_running = 1;
-                 reprogram_timer();
-                 break;
-
-         case TMR_TEMPO:
-                 if (parm)
-                   {
-                           if (parm < 8)
-                                   parm = 8;
-                           if (parm > 250)
-                                   parm = 250;
-                           tmr_offs = tmr_ctr;
-                           ticks_offs += tmr2ticks(tmr_ctr);
-                           tmr_ctr = 0;
-                           curr_tempo = parm;
-                           reprogram_timer();
-                   }
-                 break;
-
-         case TMR_ECHO:
-                 seq_copy_to_input(event, 8);
-                 break;
-
-         default:;
-         }
+       {
+               case TMR_WAIT_REL:
+                       parm += prev_event_time;
+               case TMR_WAIT_ABS:
+                       if (parm > 0)
+                       {
+                               long time;
+
+                               if (parm <= curr_ticks) /* It's the time */
+                                       return TIMER_NOT_ARMED;
+                               time = parm;
+                               next_event_time = prev_event_time = time;
+                               return TIMER_ARMED;
+                       }
+                       break;
+
+               case TMR_START:
+                       tmr_reset();
+                       tmr_running = 1;
+                       reprogram_timer();
+                       break;
+
+               case TMR_STOP:
+                       tmr_running = 0;
+                       break;
 
+               case TMR_CONTINUE:
+                       tmr_running = 1;
+                       reprogram_timer();
+                       break;
+
+               case TMR_TEMPO:
+                       if (parm)
+                       {
+                               if (parm < 8)
+                                       parm = 8;
+                               if (parm > 250)
+                                       parm = 250;
+                               tmr_offs = tmr_ctr;
+                               ticks_offs += tmr2ticks(tmr_ctr);
+                               tmr_ctr = 0;
+                               curr_tempo = parm;
+                               reprogram_timer();
+                       }
+                       break;
+
+               case TMR_ECHO:
+                       seq_copy_to_input(event, 8);
+                       break;
+
+               default:
+       }
        return TIMER_NOT_ARMED;
 }
 
-static unsigned long
-timer_get_time(int dev)
+static unsigned long timer_get_time(int dev)
 {
        if (!opened)
                return 0;
-
        return curr_ticks;
 }
 
@@ -191,73 +175,80 @@ static int timer_ioctl(int dev, unsigned int cmd, caddr_t arg)
 {
        int val;
 
-       switch (cmd) {
-       case SNDCTL_TMR_SOURCE:
-               return __put_user(TMR_INTERNAL, (int *)arg);
+       switch (cmd) 
+       {
+               case SNDCTL_TMR_SOURCE:
+                       val = TMR_INTERNAL;
+                       break;
 
-       case SNDCTL_TMR_START:
-               tmr_reset();
-               tmr_running = 1;
-               return 0;
+               case SNDCTL_TMR_START:
+                       tmr_reset();
+                       tmr_running = 1;
+                       return 0;
                
-       case SNDCTL_TMR_STOP:
-               tmr_running = 0;
-               return 0;
-
-       case SNDCTL_TMR_CONTINUE:
-               tmr_running = 1;
-               return 0;
-
-       case SNDCTL_TMR_TIMEBASE:
-               if (__get_user(val, (int *)arg))
-                       return -EFAULT;
-               if (val) {
-                       if (val < 1)
-                               val = 1;
-                       if (val > 1000)
-                               val = 1000;
-                       curr_timebase = val;
-               }
-               return __put_user(curr_timebase, (int *)arg);
-
-       case SNDCTL_TMR_TEMPO:
-               if (__get_user(val, (int *)arg))
-                       return -EFAULT;
-               if (val) {
-                       if (val < 8)
-                               val = 8;
-                       if (val > 250)
-                               val = 250;
-                       tmr_offs = tmr_ctr;
-                       ticks_offs += tmr2ticks(tmr_ctr);
-                       tmr_ctr = 0;
-                       curr_tempo = val;
-                       reprogram_timer();
-               }
-               return __put_user(curr_tempo, (int *)arg);
-
-       case SNDCTL_SEQ_CTRLRATE:
-               if (__get_user(val, (int *)arg))
-                       return -EFAULT;
-               if (val != 0)   /* Can't change */
-                       return -EINVAL;
-               val = ((curr_tempo * curr_timebase) + 30) / 60;
-               return __put_user(val, (int *)arg);
+               case SNDCTL_TMR_STOP:
+                       tmr_running = 0;
+                       return 0;
+
+               case SNDCTL_TMR_CONTINUE:
+                       tmr_running = 1;
+                       return 0;
+
+               case SNDCTL_TMR_TIMEBASE:
+                       if (get_user(val, (int *)arg))
+                               return -EFAULT;
+                       if (val) 
+                       {
+                               if (val < 1)
+                                       val = 1;
+                               if (val > 1000)
+                                       val = 1000;
+                               curr_timebase = val;
+                       }
+                       val = curr_timebase;
+                       break;
+
+               case SNDCTL_TMR_TEMPO:
+                       if (get_user(val, (int *)arg))
+                               return -EFAULT;
+                       if (val) 
+                       {
+                               if (val < 8)
+                                       val = 8;
+                               if (val > 250)
+                                       val = 250;
+                               tmr_offs = tmr_ctr;
+                               ticks_offs += tmr2ticks(tmr_ctr);
+                               tmr_ctr = 0;
+                               curr_tempo = val;
+                               reprogram_timer();
+                       }
+                       val = curr_tempo;
+                       break;
+
+               case SNDCTL_SEQ_CTRLRATE:
+                       if (get_user(val, (int *)arg))
+                               return -EFAULT;
+                       if (val != 0)   /* Can't change */
+                               return -EINVAL;
+                       val = ((curr_tempo * curr_timebase) + 30) / 60;
+                       break;
                
-       case SNDCTL_SEQ_GETTIME:
-               return __put_user(curr_ticks, (int *)arg);
+               case SNDCTL_SEQ_GETTIME:
+                       val = curr_ticks;
+                       break;
                
-       case SNDCTL_TMR_METRONOME:
-               /* NOP */
-               break;
+               case SNDCTL_TMR_METRONOME:
+                       /* NOP */
+                       break;
                
-       default:;
+               default:
+                       return -EINVAL;
        }
-       return -EINVAL;
+       return put_user(val, (int *)arg);
 }
 
-static void
-timer_arm(int dev, long time)
+static void timer_arm(int dev, long time)
 {
        if (time < 0)
                time = curr_ticks + 1;
@@ -265,7 +256,6 @@ timer_arm(int dev, long time)
                return;
 
        next_event_time = prev_event_time = time;
-
        return;
 }
 
@@ -282,8 +272,7 @@ static struct sound_timer_operations sound_timer =
        timer_arm
 };
 
-void
-sound_timer_interrupt(void)
+void sound_timer_interrupt(void)
 {
        if (!opened)
                return;
@@ -297,26 +286,24 @@ sound_timer_interrupt(void)
        curr_ticks = ticks_offs + tmr2ticks(tmr_ctr);
 
        if (curr_ticks >= next_event_time)
-         {
-                 next_event_time = (unsigned long) -1;
-                 sequencer_timer(0);
-         }
+       {
+               next_event_time = (unsigned long) -1;
+               sequencer_timer(0);
+       }
 }
 
-void 
-sound_timer_init(struct sound_lowlev_timer *t, char *name)
+void  sound_timer_init(struct sound_lowlev_timer *t, char *name)
 {
-       int             n;
+       int n;
 
        if (initialized)
-         {
-                 if (t->priority <= tmr->priority)
-                         return;       /* There is already a similar or better timer */
-                 tmr = t;
-                 return;
-         }
+       {
+               if (t->priority <= tmr->priority)
+                       return; /* There is already a similar or better timer */
+               tmr = t;
+               return;
+       }
        initialized = 1;
-
        tmr = t;
 
        n = sound_alloc_timerdev();
index 11c63ff1bb7a12f080c2557b343b94a63f0e89c7..0740ca44c3ccb157e74cd522cf826272bc024ecf 100644 (file)
@@ -899,8 +899,8 @@ void cleanup_module(void)
        }
 #endif
        sound_unload_drivers();
-
        free_all_irqs();        /* If something was left allocated by accident */
+       sequencer_unload();
 
        for (i = 0; i < 8; i++)
        {
@@ -1057,11 +1057,10 @@ void sound_stop_timer(void)
 
 static int dma_buffsize = DSP_BUFFSIZE;
 
-int
-sound_alloc_dmap(int dev, struct dma_buffparms *dmap, int chan)
+int sound_alloc_dmap(int dev, struct dma_buffparms *dmap, int chan)
 {
-       char           *start_addr, *end_addr;
-       int             i, dma_pagesize;
+       char *start_addr, *end_addr;
+       int i, dma_pagesize;
 
        dmap->mapping_flags &= ~DMA_MAP_MAPPED;
 
@@ -1141,8 +1140,8 @@ sound_alloc_dmap(int dev, struct dma_buffparms *dmap, int chan)
 
 void sound_free_dmap(int dev, struct dma_buffparms *dmap, int chan)
 {
-       int             sz, size, i;
-       unsigned long   start_addr, end_addr;
+       int sz, size, i;
+       unsigned long start_addr, end_addr;
 
        if (dmap->raw_buf == NULL)
                return;
@@ -1150,9 +1149,7 @@ void sound_free_dmap(int dev, struct dma_buffparms *dmap, int chan)
        if (dmap->mapping_flags & DMA_MAP_MAPPED)
                return;         /* Don't free mmapped buffer. Will use it next time */
 
-       for (sz = 0, size = PAGE_SIZE;
-            size < dmap->buffsize;
-            sz++, size <<= 1);
+       for (sz = 0, size = PAGE_SIZE; size < dmap->buffsize; sz++, size <<= 1);
 
        start_addr = (unsigned long) dmap->raw_buf;
        end_addr = start_addr + dmap->buffsize;
index 480b309d0edd14aca353fe02788fbdec9631ae95..74531056251d665b5f1cdc8e2c1e20289c280b06 100644 (file)
@@ -3,6 +3,7 @@
  *
  * Low level driver for Ensoniq SoundScape
  */
+
 /*
  * Copyright (C) by Hannu Savolainen 1993-1997
  *
  * Version 2 (June 1991). See the "COPYING" file distributed with this software
  * for more info.
  */
+
 /*
  * Thomas Sailer   : ioctl code reworked (vmalloc/vfree removed)
  */
+
 #include <linux/config.h>
 #include <linux/module.h>
 
 /*
  *    I/O ports
  */
-#define MIDI_DATA        0
-#define MIDI_CTRL        1
-#define HOST_CTRL        2
-#define TX_READY               0x02
-#define RX_READY               0x01
-#define HOST_DATA        3
-#define ODIE_ADDR        4
-#define ODIE_DATA        5
+#define MIDI_DATA       0
+#define MIDI_CTRL       1
+#define HOST_CTRL       2
+#define TX_READY       0x02
+#define RX_READY       0x01
+#define HOST_DATA       3
+#define ODIE_ADDR       4
+#define ODIE_DATA       5
 
 /*
  *    Indirect registers
  */
-#define GA_INTSTAT_REG   0
-#define GA_INTENA_REG    1
-#define GA_DMAA_REG      2
-#define GA_DMAB_REG      3
-#define GA_INTCFG_REG    4
-#define GA_DMACFG_REG    5
-#define GA_CDCFG_REG     6
-#define GA_SMCFGA_REG    7
-#define GA_SMCFGB_REG    8
-#define GA_HMCTL_REG     9
+
+#define GA_INTSTAT_REG 0
+#define GA_INTENA_REG  1
+#define GA_DMAA_REG    2
+#define GA_DMAB_REG    3
+#define GA_INTCFG_REG  4
+#define GA_DMACFG_REG  5
+#define GA_CDCFG_REG   6
+#define GA_SMCFGA_REG  7
+#define GA_SMCFGB_REG  8
+#define GA_HMCTL_REG   9
 
 /*
  * DMA channel identifiers (A and B)
  */
-#define SSCAPE_DMA_A           0
-#define SSCAPE_DMA_B           1
+
+#define SSCAPE_DMA_A   0
+#define SSCAPE_DMA_B   1
 
 #define PORT(name)     (devc->base+name)
 
 /*
  * Host commands recognized by the OBP microcode
  */
-#define CMD_GEN_HOST_ACK        0x80
-#define CMD_GEN_MPU_ACK         0x81
-#define CMD_GET_BOARD_TYPE      0x82
-#define CMD_SET_CONTROL         0x88   /* Old firmware only */
-#define CMD_GET_CONTROL         0x89   /* Old firmware only */
-#define        CTL_MASTER_VOL          0
-#define        CTL_MIC_MODE            2
-#define        CTL_SYNTH_VOL           4
-#define        CTL_WAVE_VOL            7
+#define CMD_GEN_HOST_ACK       0x80
+#define CMD_GEN_MPU_ACK                0x81
+#define CMD_GET_BOARD_TYPE     0x82
+#define CMD_SET_CONTROL                0x88    /* Old firmware only */
+#define CMD_GET_CONTROL                0x89    /* Old firmware only */
+#define        CTL_MASTER_VOL          0
+#define        CTL_MIC_MODE            2
+#define        CTL_SYNTH_VOL           4
+#define        CTL_WAVE_VOL            7
 #define CMD_SET_EXTMIDI                0x8a
 #define CMD_GET_EXTMIDI                0x8b
-#define CMD_SET_MT32            0x8c
-#define CMD_GET_MT32            0x8d
+#define CMD_SET_MT32           0x8c
+#define CMD_GET_MT32           0x8d
 
 #define CMD_ACK                        0x80
 
 typedef struct sscape_info
 {
-         int   base, irq, dma;
-         int   ok;     /* Properly detected */
-         int   failed;
-         int   dma_allocated;
-         int   codec_audiodev;
-         int   opened;
-         int   *osp;
-         int   my_audiodev;
+       int     base, irq, dma;
+       int     ok;     /* Properly detected */
+       int     failed;
+       int     dma_allocated;
+       int     codec_audiodev;
+       int     opened;
+       int     *osp;
+       int     my_audiodev;
 } sscape_info;
 
 static struct sscape_info adev_info = {
@@ -93,7 +99,7 @@ static struct sscape_info adev_info = {
 };
 
 static struct sscape_info *devc = &adev_info;
-static int      sscape_mididev = -1;
+static int sscape_mididev = -1;
 
 static struct wait_queue *sscape_sleeper = NULL;
 static volatile struct snd_wait sscape_sleep_flag = {
@@ -101,104 +107,100 @@ static volatile struct snd_wait sscape_sleep_flag = {
 };
 
 /* Some older cards have assigned interrupt bits differently than new ones */
-static char     valid_interrupts_old[] =
-{9, 7, 5, 15};
+static char valid_interrupts_old[] = {
+       9, 7, 5, 15
+};
 
-static char     valid_interrupts_new[] =
-{9, 5, 7, 10};
+static char valid_interrupts_new[] = {
+       9, 5, 7, 10
+};
 
-static char    *valid_interrupts = valid_interrupts_new;
+static char *valid_interrupts = valid_interrupts_new;
 
+/*
+ *     See the bottom of the driver. This can be set by spea =0/1.
+ */
 #ifdef REVEAL_SPEA
-static char     old_hardware = 1;
-
+static char old_hardware = 1;
 #else
-static char     old_hardware = 0;
-
+static char old_hardware = 0;
 #endif
 
 static unsigned char sscape_read(struct sscape_info *devc, int reg)
 {
-       unsigned long   flags;
-       unsigned char   val;
+       unsigned long flags;
+       unsigned char val;
 
        save_flags(flags);
        cli();
-       outb((reg), PORT(ODIE_ADDR));
+       outb(reg, PORT(ODIE_ADDR));
        val = inb(PORT(ODIE_DATA));
        restore_flags(flags);
        return val;
 }
 
-static void
-sscape_write(struct sscape_info *devc, int reg, int data)
+static void sscape_write(struct sscape_info *devc, int reg, int data)
 {
-       unsigned long   flags;
+       unsigned long flags;
 
        save_flags(flags);
        cli();
-       outb((reg), PORT(ODIE_ADDR));
-       outb((data), PORT(ODIE_DATA));
+       outb(reg, PORT(ODIE_ADDR));
+       outb(data, PORT(ODIE_DATA));
        restore_flags(flags);
 }
 
-static void
-host_open(struct sscape_info *devc)
+static void host_open(struct sscape_info *devc)
 {
        outb((0x00), PORT(HOST_CTRL));  /* Put the board to the host mode */
 }
 
-static void
-host_close(struct sscape_info *devc)
+static void host_close(struct sscape_info *devc)
 {
        outb((0x03), PORT(HOST_CTRL));  /* Put the board to the MIDI mode */
 }
 
-static int
-host_write(struct sscape_info *devc, unsigned char *data, int count)
+static int host_write(struct sscape_info *devc, unsigned char *data, int count)
 {
-       unsigned long   flags;
-       int             i, timeout_val;
+       unsigned long flags;
+       int i, timeout_val;
 
        save_flags(flags);
        cli();
 
        /*
-          * Send the command and data bytes
+        * Send the command and data bytes
         */
 
        for (i = 0; i < count; i++)
-         {
-                 for (timeout_val = 10000; timeout_val > 0; timeout_val--)
-                         if (inb(PORT(HOST_CTRL)) & TX_READY)
-                                 break;
+       {
+               for (timeout_val = 10000; timeout_val > 0; timeout_val--)
+                       if (inb(PORT(HOST_CTRL)) & TX_READY)
+                               break;
 
-                 if (timeout_val <= 0)
-                   {
+               if (timeout_val <= 0)
+               {
                            restore_flags(flags);
                            return 0;
-                   }
-                 outb((data[i]), PORT(HOST_DATA));
-         }
-
-
+               }
+               outb(data[i], PORT(HOST_DATA));
+       }
        restore_flags(flags);
-
        return 1;
 }
 
-static int
-host_read(struct sscape_info *devc)
+static int host_read(struct sscape_info *devc)
 {
-       unsigned long   flags;
-       int             timeout_val;
-       unsigned char   data;
+       unsigned long flags;
+       int timeout_val;
+       unsigned char data;
 
        save_flags(flags);
        cli();
 
        /*
-          * Read a byte
+        * Read a byte
         */
 
        for (timeout_val = 10000; timeout_val > 0; timeout_val--)
@@ -206,22 +208,19 @@ host_read(struct sscape_info *devc)
                        break;
 
        if (timeout_val <= 0)
-         {
-                 restore_flags(flags);
-                 return -1;
-         }
+       {
+               restore_flags(flags);
+               return -1;
+       }
        data = inb(PORT(HOST_DATA));
-
        restore_flags(flags);
-
        return data;
 }
 
 
-static int
-host_command2(struct sscape_info *devc, int cmd, int parm1)
+static int host_command2(struct sscape_info *devc, int cmd, int parm1)
 {
-       unsigned char   buf[10];
+       unsigned char buf[10];
 
        buf[0] = (unsigned char) (cmd & 0xff);
        buf[1] = (unsigned char) (parm1 & 0xff);
@@ -229,61 +228,49 @@ host_command2(struct sscape_info *devc, int cmd, int parm1)
        return host_write(devc, buf, 2);
 }
 
-static int
-host_command3(struct sscape_info *devc, int cmd, int parm1, int parm2)
+static int host_command3(struct sscape_info *devc, int cmd, int parm1, int parm2)
 {
-       unsigned char   buf[10];
+       unsigned char buf[10];
 
        buf[0] = (unsigned char) (cmd & 0xff);
        buf[1] = (unsigned char) (parm1 & 0xff);
        buf[2] = (unsigned char) (parm2 & 0xff);
-
        return host_write(devc, buf, 3);
 }
 
-static void
-set_mt32(struct sscape_info *devc, int value)
+static void set_mt32(struct sscape_info *devc, int value)
 {
        host_open(devc);
-       host_command2(devc, CMD_SET_MT32,
-                     value ? 1 : 0);
+       host_command2(devc, CMD_SET_MT32, value ? 1 : 0);
        if (host_read(devc) != CMD_ACK)
-         {
-                 /* printk( "SNDSCAPE: Setting MT32 mode failed\n"); */
-         }
+       {
+               /* printk( "SNDSCAPE: Setting MT32 mode failed\n"); */
+       }
        host_close(devc);
 }
 
-static void
-set_control(struct sscape_info *devc, int ctrl, int value)
+static void set_control(struct sscape_info *devc, int ctrl, int value)
 {
        host_open(devc);
        host_command3(devc, CMD_SET_CONTROL, ctrl, value);
        if (host_read(devc) != CMD_ACK)
-         {
-                 /* printk( "SNDSCAPE: Setting control (%d) failed\n",  ctrl); */
-         }
+       {
+               /* printk( "SNDSCAPE: Setting control (%d) failed\n",  ctrl); */
+       }
        host_close(devc);
 }
 
-
-
-
-
-static void
-do_dma(struct sscape_info *devc, int dma_chan, unsigned long buf, int blk_size, int mode)
+static void do_dma(struct sscape_info *devc, int dma_chan, unsigned long buf, int blk_size, int mode)
 {
-       unsigned char   temp;
+       unsigned char temp;
 
        if (dma_chan != SSCAPE_DMA_A)
-         {
-                 printk("SSCAPE: Tried to use DMA channel  != A. Why?\n");
-                 return;
-         }
+       {
+               printk(KERN_WARNING "soundscape: Tried to use DMA channel  != A. Why?\n");
+               return;
+       }
        audio_devs[devc->codec_audiodev]->flags &= ~DMA_AUTOMODE;
-       DMAbuf_start_dma(devc->codec_audiodev,
-                        buf,
-                        blk_size, mode);
+       DMAbuf_start_dma(devc->codec_audiodev, buf, blk_size, mode);
        audio_devs[devc->codec_audiodev]->flags |= DMA_AUTOMODE;
 
        temp = devc->dma << 4;  /* Setup DMA channel select bits */
@@ -296,49 +283,45 @@ do_dma(struct sscape_info *devc, int dma_chan, unsigned long buf, int blk_size,
        sscape_write(devc, GA_DMAA_REG, temp);
 }
 
-static int
-verify_mpu(struct sscape_info *devc)
+static int verify_mpu(struct sscape_info *devc)
 {
        /*
-          * The SoundScape board could be in three modes (MPU, 8250 and host).
-          * If the card is not in the MPU mode, enabling the MPU driver will
-          * cause infinite loop (the driver believes that there is always some
-          * received data in the buffer.
-          *
-          * Detect this by looking if there are more than 10 received MIDI bytes
-          * (0x00) in the buffer.
+        * The SoundScape board could be in three modes (MPU, 8250 and host).
+        * If the card is not in the MPU mode, enabling the MPU driver will
+        * cause infinite loop (the driver believes that there is always some
+        * received data in the buffer.
+        *
+        * Detect this by looking if there are more than 10 received MIDI bytes
+        * (0x00) in the buffer.
         */
 
-       int             i;
+       int i;
 
        for (i = 0; i < 10; i++)
-         {
-                 if (inb(devc->base + HOST_CTRL) & 0x80)
-                         return 1;
-
-                 if (inb(devc->base) != 0x00)
-                         return 1;
-         }
+       {
+               if (inb(devc->base + HOST_CTRL) & 0x80)
+                       return 1;
 
-       printk("SoundScape: The device is not in the MPU-401 mode\n");
+               if (inb(devc->base) != 0x00)
+                       return 1;
+       }
+       printk(KERN_WARNING "SoundScape: The device is not in the MPU-401 mode\n");
        return 0;
 }
 
-static int
-sscape_coproc_open(void *dev_info, int sub_device)
+static int sscape_coproc_open(void *dev_info, int sub_device)
 {
        if (sub_device == COPR_MIDI)
-         {
-                 set_mt32(devc, 0);
-                 if (!verify_mpu(devc))
-                         return -EIO;
-         }
+       {
+               set_mt32(devc, 0);
+               if (!verify_mpu(devc))
+                       return -EIO;
+       }
        sscape_sleep_flag.opts = WK_NONE;
        return 0;
 }
 
-static void
-sscape_coproc_close(void *dev_info, int sub_device)
+static void sscape_coproc_close(void *dev_info, int sub_device)
 {
        struct sscape_info *devc = dev_info;
        unsigned long   flags;
@@ -346,69 +329,67 @@ sscape_coproc_close(void *dev_info, int sub_device)
        save_flags(flags);
        cli();
        if (devc->dma_allocated)
-         {
-                 sscape_write(devc, GA_DMAA_REG, 0x20);        /* DMA channel disabled */
-                 devc->dma_allocated = 0;
-         }
+       {
+               sscape_write(devc, GA_DMAA_REG, 0x20);  /* DMA channel disabled */
+               devc->dma_allocated = 0;
+       }
        sscape_sleep_flag.opts = WK_NONE;
        restore_flags(flags);
-
        return;
 }
 
-static void
-sscape_coproc_reset(void *dev_info)
+static void sscape_coproc_reset(void *dev_info)
 {
 }
 
-static int
-sscape_download_boot(struct sscape_info *devc, unsigned char *block, int size, int flag)
+static int sscape_download_boot(struct sscape_info *devc, unsigned char *block, int size, int flag)
 {
-       unsigned long   flags;
-       unsigned char   temp;
-       volatile int    done, timeout_val;
+       unsigned long flags;
+       unsigned char temp;
+       volatile int done, timeout_val;
        static unsigned char codec_dma_bits = 0;
 
        if (flag & CPF_FIRST)
-         {
-                 /*
-                    * First block. Have to allocate DMA and to reset the board
-                    * before continuing.
-                  */
-
-                 save_flags(flags);
-                 cli();
-                 codec_dma_bits = sscape_read(devc, GA_CDCFG_REG);
-
-                 if (devc->dma_allocated == 0)
-                   {
-                           devc->dma_allocated = 1;
-                   }
-                 restore_flags(flags);
-
-                 sscape_write(devc, GA_HMCTL_REG,
+       {
+               /*
+                * First block. Have to allocate DMA and to reset the board
+                * before continuing.
+                */
+
+               save_flags(flags);
+               cli();
+               codec_dma_bits = sscape_read(devc, GA_CDCFG_REG);
+
+               if (devc->dma_allocated == 0)
+                       devc->dma_allocated = 1;
+
+               restore_flags(flags);
+
+               sscape_write(devc, GA_HMCTL_REG, 
                        (temp = sscape_read(devc, GA_HMCTL_REG)) & 0x3f);       /*Reset */
 
-                 for (timeout_val = 10000; timeout_val > 0; timeout_val--)
-                         sscape_read(devc, GA_HMCTL_REG);      /* Delay */
+               for (timeout_val = 10000; timeout_val > 0; timeout_val--)
+                       sscape_read(devc, GA_HMCTL_REG);        /* Delay */
 
-                 /* Take board out of reset */
-                 sscape_write(devc, GA_HMCTL_REG,
+               /* Take board out of reset */
+               sscape_write(devc, GA_HMCTL_REG,
                        (temp = sscape_read(devc, GA_HMCTL_REG)) | 0x80);
-         }
+       }
        /*
         * Transfer one code block using DMA
         */
        if (audio_devs[devc->codec_audiodev]->dmap_out->raw_buf == NULL)
-         {
-                 printk("SSCAPE: Error: DMA buffer not available\n");
-                 return 0;
-         }
+       {
+               printk(KERN_WARNING "soundscape: DMA buffer not available\n");
+               return 0;
+       }
        memcpy(audio_devs[devc->codec_audiodev]->dmap_out->raw_buf, block, size);
 
        save_flags(flags);
        cli();
-/******** INTERRUPTS DISABLED NOW ********/
+       
+       /******** INTERRUPTS DISABLED NOW ********/
+       
        do_dma(devc, SSCAPE_DMA_A,
               audio_devs[devc->codec_audiodev]->dmap_out->raw_buf_phys,
               size, DMA_MODE_WRITE);
@@ -416,160 +397,140 @@ sscape_download_boot(struct sscape_info *devc, unsigned char *block, int size, i
        /*
         * Wait until transfer completes.
         */
+       
        sscape_sleep_flag.opts = WK_NONE;
        done = 0;
        timeout_val = 30;
        while (!done && timeout_val-- > 0)
-         {
-                 int             resid;
-
-                 {
-                         unsigned long   tlimit;
-
-                         if (HZ / 50)
-                                 current->timeout = tlimit = jiffies + (HZ / 50);
-                         else
-                                 tlimit = (unsigned long) -1;
-                         sscape_sleep_flag.opts = WK_SLEEP;
-                         interruptible_sleep_on(&sscape_sleeper);
-                         if (!(sscape_sleep_flag.opts & WK_WAKEUP))
-                           {
-                                   if (jiffies >= tlimit)
-                                           sscape_sleep_flag.opts |= WK_TIMEOUT;
-                           }
-                         sscape_sleep_flag.opts &= ~WK_SLEEP;
-                 };
-                 clear_dma_ff(devc->dma);
-                 if ((resid = get_dma_residue(devc->dma)) == 0)
-                   {
-                           done = 1;
-                   }
-         }
+       {
+               int resid;
+               unsigned long   tlimit;
+               current->timeout = tlimit = jiffies + (HZ / 50);
+               sscape_sleep_flag.opts = WK_SLEEP;
+               interruptible_sleep_on(&sscape_sleeper);
+               if (!(sscape_sleep_flag.opts & WK_WAKEUP))
+               {
+                       if (jiffies >= tlimit)
+                               sscape_sleep_flag.opts |= WK_TIMEOUT;
+               }
+               sscape_sleep_flag.opts &= ~WK_SLEEP;
+               clear_dma_ff(devc->dma);
+               if ((resid = get_dma_residue(devc->dma)) == 0)
+               {
+                       done = 1;
+               }
+       }
 
        restore_flags(flags);
        if (!done)
                return 0;
 
        if (flag & CPF_LAST)
-         {
-                 /*
-                    * Take the board out of reset
-                  */
-                 outb((0x00), PORT(HOST_CTRL));
-                 outb((0x00), PORT(MIDI_CTRL));
-
-                 temp = sscape_read(devc, GA_HMCTL_REG);
-                 temp |= 0x40;
-                 sscape_write(devc, GA_HMCTL_REG, temp);       /* Kickstart the board */
-
-                 /*
-                    * Wait until the ODB wakes up
-                  */
-
-                 save_flags(flags);
-                 cli();
-                 done = 0;
-                 timeout_val = 5 * HZ;
-                 while (!done && timeout_val-- > 0)
-                   {
-                           unsigned char   x;
-
-
-                           {
-                                   unsigned long   tlimit;
-
-                                   if (1)
-                                           current->timeout = tlimit = jiffies + (1);
-                                   else
-                                           tlimit = (unsigned long) -1;
-                                   sscape_sleep_flag.opts = WK_SLEEP;
-                                   interruptible_sleep_on(&sscape_sleeper);
-                                   if (!(sscape_sleep_flag.opts & WK_WAKEUP))
-                                     {
-                                             if (jiffies >= tlimit)
-                                                     sscape_sleep_flag.opts |= WK_TIMEOUT;
-                                     }
-                                   sscape_sleep_flag.opts &= ~WK_SLEEP;
-                           };
-                           x = inb(PORT(HOST_DATA));
-                           if (x == 0xff || x == 0xfe)         /* OBP startup acknowledge */
-                             {
-                                     DDB(printk("Soundscape: Acknowledge = %x\n", x));
-                                     done = 1;
-                             }
-                   }
-                 sscape_write(devc, GA_CDCFG_REG, codec_dma_bits);
-
-                 restore_flags(flags);
-                 if (!done)
-                   {
-                           printk("SoundScape: The OBP didn't respond after code download\n");
-                           return 0;
-                   }
-                 save_flags(flags);
-                 cli();
-                 done = 0;
-                 timeout_val = 5 * HZ;
-                 while (!done && timeout_val-- > 0)
-                   {
-
-                           {
-                                   unsigned long   tlimit;
-
-                                   if (1)
-                                           current->timeout = tlimit = jiffies + (1);
-                                   else
-                                           tlimit = (unsigned long) -1;
-                                   sscape_sleep_flag.opts = WK_SLEEP;
-                                   interruptible_sleep_on(&sscape_sleeper);
-                                   if (!(sscape_sleep_flag.opts & WK_WAKEUP))
-                                     {
-                                             if (jiffies >= tlimit)
-                                                     sscape_sleep_flag.opts |= WK_TIMEOUT;
-                                     }
-                                   sscape_sleep_flag.opts &= ~WK_SLEEP;
-                           };
-                           if (inb(PORT(HOST_DATA)) == 0xfe)   /* Host startup acknowledge */
-                                   done = 1;
-                   }
-                 restore_flags(flags);
-                 if (!done)
-                   {
-                           printk("SoundScape: OBP Initialization failed.\n");
-                           return 0;
-                   }
-                 printk("SoundScape board initialized OK\n");
-                 set_control(devc, CTL_MASTER_VOL, 100);
-                 set_control(devc, CTL_SYNTH_VOL, 100);
+       {
+               /*
+                * Take the board out of reset
+                */
+               outb((0x00), PORT(HOST_CTRL));
+               outb((0x00), PORT(MIDI_CTRL));
+
+               temp = sscape_read(devc, GA_HMCTL_REG);
+               temp |= 0x40;
+               sscape_write(devc, GA_HMCTL_REG, temp); /* Kickstart the board */
+
+               /*
+                * Wait until the ODB wakes up
+                */
+
+               save_flags(flags);
+               cli();
+               done = 0;
+               timeout_val = 5 * HZ;
+               while (!done && timeout_val-- > 0)
+               {
+                       unsigned char x;
+                       unsigned long tlimit;
+
+                       current->timeout = tlimit = jiffies + 1;
+                       sscape_sleep_flag.opts = WK_SLEEP;
+                       interruptible_sleep_on(&sscape_sleeper);
+                       if (!(sscape_sleep_flag.opts & WK_WAKEUP))
+                       {
+                               if (jiffies >= tlimit)
+                                       sscape_sleep_flag.opts |= WK_TIMEOUT;
+                       }
+                       sscape_sleep_flag.opts &= ~WK_SLEEP;
+                       
+                       x = inb(PORT(HOST_DATA));
+                       if (x == 0xff || x == 0xfe)             /* OBP startup acknowledge */
+                       {
+                               DDB(printk("Soundscape: Acknowledge = %x\n", x));
+                               done = 1;
+                       }
+               }
+               sscape_write(devc, GA_CDCFG_REG, codec_dma_bits);
+
+               restore_flags(flags);
+               if (!done)
+               {
+                       printk(KERN_ERR "soundscape: The OBP didn't respond after code download\n");
+                       return 0;
+               }
+               save_flags(flags);
+               cli();
+               done = 0;
+               timeout_val = 5 * HZ;
+               while (!done && timeout_val-- > 0)
+               {
+                       unsigned long   tlimit;
+                       current->timeout = tlimit = jiffies + (1);
+                       sscape_sleep_flag.opts = WK_SLEEP;
+                       interruptible_sleep_on(&sscape_sleeper);
+                       if (!(sscape_sleep_flag.opts & WK_WAKEUP))
+                       {
+                               if (jiffies >= tlimit)
+                                       sscape_sleep_flag.opts |= WK_TIMEOUT;
+                       }
+                       sscape_sleep_flag.opts &= ~WK_SLEEP;
+                       if (inb(PORT(HOST_DATA)) == 0xfe)       /* Host startup acknowledge */
+                               done = 1;
+               }
+               restore_flags(flags);
+               if (!done)
+               {
+                       printk(KERN_ERR "soundscape: OBP Initialization failed.\n");
+                       return 0;
+               }
+               printk(KERN_INFO "SoundScape board initialized OK\n");
+               set_control(devc, CTL_MASTER_VOL, 100);
+               set_control(devc, CTL_SYNTH_VOL, 100);
 
 #ifdef SSCAPE_DEBUG3
-                 /*
-                    * Temporary debugging aid. Print contents of the registers after
-                    * downloading the code.
-                  */
-                 {
-                         int             i;
-
-                         for (i = 0; i < 13; i++)
-                                 printk("I%d = %02x (new value)\n", i, sscape_read(devc, i));
-                 }
+               /*
+                * Temporary debugging aid. Print contents of the registers after
+                * downloading the code.
+                */
+               {
+                       int i;
+
+                       for (i = 0; i < 13; i++)
+                               printk("I%d = %02x (new value)\n", i, sscape_read(devc, i));
+               }
 #endif
 
-         }
+       }
        return 1;
 }
 
-static int
-download_boot_block(void *dev_info, copr_buffer * buf)
+static int download_boot_block(void *dev_info, copr_buffer * buf)
 {
        if (buf->len <= 0 || buf->len > sizeof(buf->data))
                return -EINVAL;
 
        if (!sscape_download_boot(devc, buf->data, buf->len, buf->flags))
-         {
-                 printk("SSCAPE: Unable to load microcode block to the OBP.\n");
-                 return -EIO;
-         }
+       {
+               printk(KERN_ERR "soundscape: Unable to load microcode block to the OBP.\n");
+               return -EIO;
+       }
        return 0;
 }
 
@@ -578,25 +539,27 @@ static int sscape_coproc_ioctl(void *dev_info, unsigned int cmd, caddr_t arg, in
        copr_buffer *buf;
        int err;
 
-       switch (cmd) {
-       case SNDCTL_COPR_RESET:
-               sscape_coproc_reset(dev_info);
-               return 0;
-
-       case SNDCTL_COPR_LOAD:
-               buf = (copr_buffer *) vmalloc(sizeof(copr_buffer));
-               if (buf == NULL)
-                       return -ENOSPC;
-               if (__copy_from_user(buf, arg, sizeof(copr_buffer))) {
+       switch (cmd) 
+       {
+               case SNDCTL_COPR_RESET:
+                       sscape_coproc_reset(dev_info);
+                       return 0;
+
+               case SNDCTL_COPR_LOAD:
+                       buf = (copr_buffer *) vmalloc(sizeof(copr_buffer));
+                       if (buf == NULL)
+                               return -ENOSPC;
+                       if (copy_from_user(buf, arg, sizeof(copr_buffer))) 
+                       {
+                               vfree(buf);
+                               return -EFAULT;
+                       }
+                       err = download_boot_block(dev_info, buf);
                        vfree(buf);
-                       return -EFAULT;
-               }
-               err = download_boot_block(dev_info, buf);
-               vfree(buf);
-               return err;
+                       return err;
                
-       default:
-               return -EINVAL;
+               default:
+                       return -EINVAL;
        }
 }
 
@@ -610,25 +573,23 @@ static coproc_operations sscape_coproc_operations =
        &adev_info
 };
 
-static int      sscape_detected = 0;
+static int sscape_detected = 0;
 
-void
-attach_sscape(struct address_info *hw_config)
+void attach_sscape(struct address_info *hw_config)
 {
-
 #ifndef SSCAPE_REGS
        /*
-          * Config register values for Spea/V7 Media FX and Ensoniq S-2000.
-          * These values are card
-          * dependent. If you have another SoundScape based card, you have to
-          * find the correct values. Do the following:
-          *  - Compile this driver with SSCAPE_DEBUG1 defined.
-          *  - Shut down and power off your machine.
-          *  - Boot with DOS so that the SSINIT.EXE program is run.
-          *  - Warm boot to {Linux|SYSV|BSD} and write down the lines displayed
-          *    when detecting the SoundScape.
-          *  - Modify the following list to use the values printed during boot.
-          *    Undefine the SSCAPE_DEBUG1
+        * Config register values for Spea/V7 Media FX and Ensoniq S-2000.
+        * These values are card
+        * dependent. If you have another SoundScape based card, you have to
+        * find the correct values. Do the following:
+        *  - Compile this driver with SSCAPE_DEBUG1 defined.
+        *  - Shut down and power off your machine.
+        *  - Boot with DOS so that the SSINIT.EXE program is run.
+        *  - Warm boot to {Linux|SYSV|BSD} and write down the lines displayed
+        *    when detecting the SoundScape.
+        *  - Modify the following list to use the values printed during boot.
+        *    Undefine the SSCAPE_DEBUG1
         */
 #define SSCAPE_REGS { \
 /* I0 */       0x00, \
@@ -647,76 +608,78 @@ attach_sscape(struct address_info *hw_config)
        unsigned long   flags;
        static unsigned char regs[10] = SSCAPE_REGS;
 
-       int             i, irq_bits = 0xff;
+       int i, irq_bits = 0xff;
 
        if (sscape_detected != hw_config->io_base)
                return;
 
        request_region(devc->base + 2, 6, "SoundScape");
        if (old_hardware)
-         {
-                 valid_interrupts = valid_interrupts_old;
-                 conf_printf("Ensoniq SoundScape (old)", hw_config);
-       } else
+       {
+               valid_interrupts = valid_interrupts_old;
+               conf_printf("Ensoniq SoundScape (old)", hw_config);
+       }
+       else
                conf_printf("Ensoniq SoundScape", hw_config);
 
        for (i = 0; i < sizeof(valid_interrupts); i++)
+       {
                if (hw_config->irq == valid_interrupts[i])
-                 {
-                         irq_bits = i;
-                         break;
-                 }
+               {
+                       irq_bits = i;
+                       break;
+               }
+       }
        if (hw_config->irq > 15 || (regs[4] = irq_bits == 0xff))
-         {
-                 printk("Invalid IRQ%d\n", hw_config->irq);
-                 return;
-         }
+       {
+               printk(KERN_ERR "Invalid IRQ%d\n", hw_config->irq);
+               return;
+       }
        save_flags(flags);
        cli();
 
        for (i = 1; i < 10; i++)
+       {
                switch (i)
-                 {
-                 case 1:       /* Host interrupt enable */
-                         sscape_write(devc, i, 0xf0);  /* All interrupts enabled */
-                         break;
-
-                 case 2:       /* DMA A status/trigger register */
-                 case 3:       /* DMA B status/trigger register */
-                         sscape_write(devc, i, 0x20);  /* DMA channel disabled */
-                         break;
-
-                 case 4:       /* Host interrupt config reg */
-                         sscape_write(devc, i, 0xf0 | (irq_bits << 2) | irq_bits);
-                         break;
-
-                 case 5:       /* Don't destroy CD-ROM DMA config bits (0xc0) */
-                         sscape_write(devc, i, (regs[i] & 0x3f) |
-                                      (sscape_read(devc, i) & 0xc0));
-                         break;
-
-                 case 6:       /* CD-ROM config (WSS codec actually) */
-                         sscape_write(devc, i, regs[i]);
-                         break;
-
-                 case 9:       /* Master control reg. Don't modify CR-ROM bits. Disable SB emul */
-                         sscape_write(devc, i,
-                                  (sscape_read(devc, i) & 0xf0) | 0x08);
-                         break;
-
-                 default:
-                         sscape_write(devc, i, regs[i]);
-                 }
-
+               {
+                       case 1: /* Host interrupt enable */
+                               sscape_write(devc, i, 0xf0);    /* All interrupts enabled */
+                               break;
+
+                       case 2: /* DMA A status/trigger register */
+                       case 3: /* DMA B status/trigger register */
+                               sscape_write(devc, i, 0x20);    /* DMA channel disabled */
+                               break;
+
+                       case 4: /* Host interrupt config reg */
+                               sscape_write(devc, i, 0xf0 | (irq_bits << 2) | irq_bits);
+                               break;
+
+                       case 5: /* Don't destroy CD-ROM DMA config bits (0xc0) */
+                               sscape_write(devc, i, (regs[i] & 0x3f) | (sscape_read(devc, i) & 0xc0));
+                               break;
+
+                       case 6: /* CD-ROM config (WSS codec actually) */
+                               sscape_write(devc, i, regs[i]);
+                               break;
+
+                       case 9: /* Master control reg. Don't modify CR-ROM bits. Disable SB emul */
+                               sscape_write(devc, i, (sscape_read(devc, i) & 0xf0) | 0x08);
+                               break;
+
+                       default:
+                               sscape_write(devc, i, regs[i]);
+               }
+       }
        restore_flags(flags);
 
 #ifdef SSCAPE_DEBUG2
        /*
-          * Temporary debugging aid. Print contents of the registers after
-          * changing them.
+        * Temporary debugging aid. Print contents of the registers after
+        * changing them.
         */
        {
-               int             i;
+               int i;
 
                for (i = 0; i < 13; i++)
                        printk("I%d = %02x (new value)\n", i, sscape_read(devc, i));
@@ -726,31 +689,26 @@ attach_sscape(struct address_info *hw_config)
 #if defined(CONFIG_MIDI) && defined(CONFIG_MPU_EMU)
        if (probe_mpu401(hw_config))
                hw_config->always_detect = 1;
-       {
-               hw_config->name = "SoundScape";
+       hw_config->name = "SoundScape";
 
-               hw_config->irq *= -1;   /* Negative value signals IRQ sharing */
-               attach_mpu401(hw_config);
-               hw_config->irq *= -1;   /* Restore it */
+       hw_config->irq *= -1;   /* Negative value signals IRQ sharing */
+       attach_mpu401(hw_config);
+       hw_config->irq *= -1;   /* Restore it */
 
-               if (hw_config->slots[1] != -1)  /* The MPU driver installed itself */
-                 {
-                         sscape_mididev = hw_config->slots[1];
-                         midi_devs[hw_config->slots[1]]->coproc = &sscape_coproc_operations;
-                 }
+       if (hw_config->slots[1] != -1)  /* The MPU driver installed itself */
+       {
+               sscape_mididev = hw_config->slots[1];
+               midi_devs[hw_config->slots[1]]->coproc = &sscape_coproc_operations;
        }
 #endif
-
        sscape_write(devc, GA_INTENA_REG, 0x80);        /* Master IRQ enable */
        devc->ok = 1;
        devc->failed = 0;
-
 }
 
-static int
-detect_ga(sscape_info * devc)
+static int detect_ga(sscape_info * devc)
 {
-       unsigned char   save;
+       unsigned char save;
 
        DDB(printk("Entered Soundscape detect_ga(%x)\n", devc->base));
 
@@ -758,54 +716,54 @@ detect_ga(sscape_info * devc)
                return 0;
 
        /*
-          * First check that the address register of "ODIE" is
-          * there and that it has exactly 4 writable bits.
-          * First 4 bits
+        * First check that the address register of "ODIE" is
+        * there and that it has exactly 4 writable bits.
+        * First 4 bits
         */
+       
        if ((save = inb(PORT(ODIE_ADDR))) & 0xf0)
-         {
-                 DDB(printk("soundscape: Detect error A\n"));
-                 return 0;
-         }
+       {
+               DDB(printk("soundscape: Detect error A\n"));
+               return 0;
+       }
        outb((0x00), PORT(ODIE_ADDR));
        if (inb(PORT(ODIE_ADDR)) != 0x00)
-         {
-                 DDB(printk("soundscape: Detect error B\n"));
-                 return 0;
-         }
+       {
+               DDB(printk("soundscape: Detect error B\n"));
+               return 0;
+       }
        outb((0xff), PORT(ODIE_ADDR));
        if (inb(PORT(ODIE_ADDR)) != 0x0f)
-         {
-                 DDB(printk("soundscape: Detect error C\n"));
-                 return 0;
-         }
+       {
+               DDB(printk("soundscape: Detect error C\n"));
+               return 0;
+       }
        outb((save), PORT(ODIE_ADDR));
 
        /*
-          * Now verify that some indirect registers return zero on some bits.
-          * This may break the driver with some future revisions of "ODIE" but...
+        * Now verify that some indirect registers return zero on some bits.
+        * This may break the driver with some future revisions of "ODIE" but...
         */
 
        if (sscape_read(devc, 0) & 0x0c)
-         {
-                 DDB(printk("soundscape: Detect error D (%x)\n", sscape_read(devc, 0)));
-                 return 0;
-         }
+       {
+               DDB(printk("soundscape: Detect error D (%x)\n", sscape_read(devc, 0)));
+               return 0;
+       }
        if (sscape_read(devc, 1) & 0x0f)
-         {
-                 DDB(printk("soundscape: Detect error E\n"));
-                 return 0;
-         }
+       {
+               DDB(printk("soundscape: Detect error E\n"));
+               return 0;
+       }
        if (sscape_read(devc, 5) & 0x0f)
-         {
-                 DDB(printk("soundscape: Detect error F\n"));
-                 return 0;
-         }
+       {
+               DDB(printk("soundscape: Detect error F\n"));
+               return 0;
+       }
        return 1;
 }
 
-int
-probe_sscape(struct address_info *hw_config)
+int probe_sscape(struct address_info *hw_config)
 {
 
        if (sscape_detected != 0 && sscape_detected != hw_config->io_base)
@@ -818,110 +776,110 @@ probe_sscape(struct address_info *hw_config)
 
 #ifdef SSCAPE_DEBUG1
        /*
-          * Temporary debugging aid. Print contents of the registers before
-          * changing them.
+        * Temporary debugging aid. Print contents of the registers before
+        * changing them.
         */
        {
-               int             i;
+               int i;
 
                for (i = 0; i < 13; i++)
                        printk("I%d = %02x (old value)\n", i, sscape_read(devc, i));
        }
 #endif
-
-
        devc->failed = 1;
 
        if (!detect_ga(devc))
                return 0;
 
        if (old_hardware)       /* Check that it's really an old Spea/Reveal card. */
-         {
-                 unsigned char   tmp;
-                 int             cc;
-
-                 if (!((tmp = sscape_read(devc, GA_HMCTL_REG)) & 0xc0))
-                   {
-                           sscape_write(devc, GA_HMCTL_REG, tmp | 0x80);
-                           for (cc = 0; cc < 200000; ++cc)
-                                   inb(devc->base + ODIE_ADDR);
-                   }
-         }
+       {
+               unsigned char   tmp;
+               int             cc;
+
+               if (!((tmp = sscape_read(devc, GA_HMCTL_REG)) & 0xc0))
+               {
+                       sscape_write(devc, GA_HMCTL_REG, tmp | 0x80);
+                       for (cc = 0; cc < 200000; ++cc)
+                               inb(devc->base + ODIE_ADDR);
+               }
+       }
        sscape_detected = hw_config->io_base;
-
        return 1;
 }
 
-int
-probe_ss_ms_sound(struct address_info *hw_config)
+int probe_ss_ms_sound(struct address_info *hw_config)
 {
-       int             i, irq_bits = 0xff;
-       int             ad_flags = 0;
+       int i, irq_bits = 0xff;
+       int ad_flags = 0;
 
        if (devc->failed)
-         {
-                 printk("Soundscape: Card not detected\n");
+       {
+                 printk(KERN_ERR "soundscape: Card not detected\n");
                  return 0;
-         }
+       }
        if (devc->ok == 0)
-         {
-                 printk("SoundScape: Invalid initialization order.\n");
-                 return 0;
-         }
+       {
+               printk(KERN_ERR "soundscape: Invalid initialization order.\n");
+               return 0;
+       }
        for (i = 0; i < sizeof(valid_interrupts); i++)
+       {
                if (hw_config->irq == valid_interrupts[i])
-                 {
-                         irq_bits = i;
-                         break;
-                 }
+               {
+                       irq_bits = i;
+                       break;
+               }
+       }
        if (hw_config->irq > 15 || irq_bits == 0xff)
-         {
-                 printk("SoundScape: Invalid MSS IRQ%d\n", hw_config->irq);
-                 return 0;
-         }
+       {
+               printk(KERN_ERR "soundscape: Invalid MSS IRQ%d\n", hw_config->irq);
+               return 0;
+       }
        if (old_hardware)
                ad_flags = 0x12345677;  /* Tell that we may have a CS4248 chip (Spea-V7 Media FX) */
        return ad1848_detect(hw_config->io_base, &ad_flags, hw_config->osp);
 }
 
-void
-attach_ss_ms_sound(struct address_info *hw_config)
+void attach_ss_ms_sound(struct address_info *hw_config)
 {
        /*
-          * This routine configures the SoundScape card for use with the
-          * Win Sound System driver. The AD1848 codec interface uses the CD-ROM
-          * config registers of the "ODIE".
+        * This routine configures the SoundScape card for use with the
+        * Win Sound System driver. The AD1848 codec interface uses the CD-ROM
+        * config registers of the "ODIE".
         */
 
-       int             i, irq_bits = 0xff;
+       int i, irq_bits = 0xff;
 
        hw_config->dma = devc->dma;     /* Share the DMA with the ODIE/OPUS chip */
 
        /*
         * Setup the DMA polarity.
         */
+
        sscape_write(devc, GA_DMACFG_REG, 0x50);
 
        /*
-          * Take the gate-array off of the DMA channel.
+        * Take the gate-array off of the DMA channel.
         */
+       
        sscape_write(devc, GA_DMAB_REG, 0x20);
 
        /*
-          * Init the AD1848 (CD-ROM) config reg.
+        * Init the AD1848 (CD-ROM) config reg.
         */
 
        for (i = 0; i < sizeof(valid_interrupts); i++)
+       {
                if (hw_config->irq == valid_interrupts[i])
-                 {
-                         irq_bits = i;
-                         break;
-                 }
-       sscape_write(devc, GA_CDCFG_REG, 0x89 | (hw_config->dma << 4) |
-                    (irq_bits << 1));
+               {
+                       irq_bits = i;
+                       break;
+               }
+       }
+       sscape_write(devc, GA_CDCFG_REG, 0x89 | (hw_config->dma << 4) | (irq_bits << 1));
 
        if (hw_config->irq == devc->irq)
-               printk("SoundScape: Warning! The WSS mode can't share IRQ with MIDI\n");
+               printk(KERN_WARNING "soundscape: Warning! The WSS mode can't share IRQ with MIDI\n");
 
        hw_config->slots[0] = ad1848_init("SoundScape", hw_config->io_base,
                                          hw_config->irq,
@@ -931,21 +889,21 @@ attach_ss_ms_sound(struct address_info *hw_config)
                                          devc->osp);
 
        if (hw_config->slots[0] != -1)  /* The AD1848 driver installed itself */
-         {
-                 audio_devs[hw_config->slots[0]]->coproc = &sscape_coproc_operations;
-                 devc->codec_audiodev = hw_config->slots[0];
-                 devc->my_audiodev = hw_config->slots[0];
-
-                 /* Set proper routings here (what are they) */
-                 AD1848_REROUTE(SOUND_MIXER_LINE1, SOUND_MIXER_LINE);
-         }
+       {
+               audio_devs[hw_config->slots[0]]->coproc = &sscape_coproc_operations;
+               devc->codec_audiodev = hw_config->slots[0];
+               devc->my_audiodev = hw_config->slots[0];
+
+               /* Set proper routings here (what are they) */
+               AD1848_REROUTE(SOUND_MIXER_LINE1, SOUND_MIXER_LINE);
+       }
 #ifdef SSCAPE_DEBUG5
        /*
-          * Temporary debugging aid. Print contents of the registers
-          * after the AD1848 device has been initialized.
+        * Temporary debugging aid. Print contents of the registers
+        * after the AD1848 device has been initialized.
         */
        {
-               int             i;
+               int i;
 
                for (i = 0; i < 13; i++)
                        printk("I%d = %02x\n", i, sscape_read(devc, i));
@@ -954,8 +912,7 @@ attach_ss_ms_sound(struct address_info *hw_config)
 
 }
 
-void
-unload_sscape(struct address_info *hw_config)
+void unload_sscape(struct address_info *hw_config)
 {
        release_region(devc->base + 2, 6);
 #if defined(CONFIG_MPU_EMU) && defined(CONFIG_MIDI)
@@ -963,8 +920,7 @@ unload_sscape(struct address_info *hw_config)
 #endif
 }
 
-void
-unload_ss_ms_sound(struct address_info *hw_config)
+void unload_ss_ms_sound(struct address_info *hw_config)
 {
        ad1848_unload(hw_config->io_base,
                      hw_config->irq,
@@ -983,11 +939,14 @@ int             io = -1;
 int             mpu_irq = -1;
 int             mpu_io = -1;
 
+int            spea = -1;
+
 static int      mss = 0;
 
 MODULE_PARM(dma, "i");
 MODULE_PARM(irq, "i");
 MODULE_PARM(io, "i");
+MODULE_PARM(spea, "i");                /* spea=0/1 set the old_hardware */
 MODULE_PARM(mpu_irq, "i");
 MODULE_PARM(mpu_io, "i");
 MODULE_PARM(mss, "i");
@@ -995,18 +954,17 @@ MODULE_PARM(mss, "i");
 struct address_info config;
 struct address_info mpu_config;
 
-int 
-init_module(void)
+int init_module(void)
 {
-       printk("Soundscape driver Copyright (C) by Hannu Savolainen 1993-1996\n");
+       printk(KERN_INFO "Soundscape driver Copyright (C) by Hannu Savolainen 1993-1996\n");
        if (dma == -1 || irq == -1 || io == -1)
        {
-                 printk("DMA, IRQ, and IO port must be specified.\n");
-                 return -EINVAL;
+               printk(KERN_ERR "DMA, IRQ, and IO port must be specified.\n");
+               return -EINVAL;
        }
        if (mpu_irq == -1 && mpu_io != -1)
        {
-                 printk("MPU_IRQ must be specified if MPU_IO is set.\n");
+                 printk(KERN_ERR "MPU_IRQ must be specified if MPU_IO is set.\n");
                  return -EINVAL;
        }
        config.irq = irq;
@@ -1016,6 +974,12 @@ init_module(void)
        mpu_config.irq = mpu_irq;
        mpu_config.io_base = mpu_io;
 
+       if(spea != -1)
+       {
+               old_hardware = spea;
+               printk(KERN_INFO "Forcing %s hardware support.\n",
+                       spea?"new":"old");
+       }       
        if (probe_sscape(&mpu_config) == 0)
                return -ENODEV;
 
@@ -1029,8 +993,7 @@ init_module(void)
        return 0;
 }
 
-void 
-cleanup_module(void)
+void cleanup_module(void)
 {
        if (mss)
                unload_ss_ms_sound(&config);
@@ -1039,5 +1002,4 @@ cleanup_module(void)
 }
 
 #endif
-
 #endif
index c3e75857bb19781e310930665d513b08dac50bd2..932be1846a59d45b78d5eec40f9f2fe18fdffd52 100644 (file)
 #include "soundmodule.h"
 #if defined(CONFIG_UART6850) && defined(CONFIG_MIDI) || defined(MODULE)
 
-static int      uart6850_base = 0x330;
+static int uart6850_base = 0x330;
 
-static int     *uart6850_osp;
+static int *uart6850_osp;
 
 #define        DATAPORT   (uart6850_base)
 #define        COMDPORT   (uart6850_base+1)
 #define        STATPORT   (uart6850_base+1)
 
-static int
-uart6850_status(void)
+static int uart6850_status(void)
 {
        return inb(STATPORT);
 }
+
 #define input_avail()          (uart6850_status()&INPUT_AVAIL)
 #define output_ready()         (uart6850_status()&OUTPUT_READY)
-static void
-uart6850_cmd(unsigned char cmd)
+
+static void uart6850_cmd(unsigned char cmd)
 {
-       outb((cmd), COMDPORT);
+       outb(cmd, COMDPORT);
 }
-static int
-uart6850_read(void)
+
+static int uart6850_read(void)
 {
        return inb(DATAPORT);
 }
-static void
-uart6850_write(unsigned char byte)
+
+static void uart6850_write(unsigned char byte)
 {
-       outb((byte), DATAPORT);
+       outb(byte, DATAPORT);
 }
 
 #define        OUTPUT_READY    0x02    /* Mask for data ready Bit */
@@ -59,58 +59,58 @@ uart6850_write(unsigned char byte)
 #define        UART_RESET      0x95
 #define        UART_MODE_ON    0x03
 
-static int      uart6850_opened = 0;
-static int      uart6850_irq;
-static int      uart6850_detected = 0;
-static int      my_dev;
+static int uart6850_opened = 0;
+static int uart6850_irq;
+static int uart6850_detected = 0;
+static int my_dev;
 
-static int      reset_uart6850(void);
-static void     (*midi_input_intr) (int dev, unsigned char data);
-static void     poll_uart6850(unsigned long dummy);
+static int reset_uart6850(void);
+static void (*midi_input_intr) (int dev, unsigned char data);
+static void poll_uart6850(unsigned long dummy);
 
 
-static struct timer_list uart6850_timer =
-{NULL, NULL, 0, 0, poll_uart6850};
+static struct timer_list uart6850_timer = {
+       NULL, NULL, 0, 0, poll_uart6850
+};
 
-static void
-uart6850_input_loop(void)
+static void uart6850_input_loop(void)
 {
-       int             count;
-
-       count = 10;
+       int count = 10;
 
-       while (count)           /*
-                                * Not timed out
-                                */
+       while (count)
+       {
+               /*
+                * Not timed out
+                */
                if (input_avail())
-                 {
-                         unsigned char   c = uart6850_read();
-
-                         count = 100;
-
-                         if (uart6850_opened & OPEN_READ)
-                                 midi_input_intr(my_dev, c);
-               } else
+               {
+                       unsigned char c = uart6850_read();
+                       count = 100;
+                       if (uart6850_opened & OPEN_READ)
+                               midi_input_intr(my_dev, c);
+               }
+               else
+               {
                        while (!input_avail() && count)
                                count--;
+               }
+       }
 }
 
-void
-m6850intr(int irq, void *dev_id, struct pt_regs *dummy)
+void m6850intr(int irq, void *dev_id, struct pt_regs *dummy)
 {
        if (input_avail())
                uart6850_input_loop();
 }
 
 /*
- * It looks like there is no input interrupts in the UART mode. Let's try
- * polling.
+ *     It looks like there is no input interrupts in the UART mode. Let's try
+ *     polling.
  */
 
-static void
-poll_uart6850(unsigned long dummy)
+static void poll_uart6850(unsigned long dummy)
 {
-       unsigned long   flags;
+       unsigned long flags;
 
        if (!(uart6850_opened & OPEN_READ))
                return;         /* Device has been closed */
@@ -121,34 +121,30 @@ poll_uart6850(unsigned long dummy)
        if (input_avail())
                uart6850_input_loop();
 
-
-       {
-               uart6850_timer.expires = (1) + jiffies;
-               add_timer(&uart6850_timer);
-       };                      /*
-                                  * Come back later
-                                */
+       uart6850_timer.expires = 1 + jiffies;
+       add_timer(&uart6850_timer);
+       
+       /*
+        *      Come back later
+        */
 
        restore_flags(flags);
 }
 
-static int
-uart6850_open(int dev, int mode,
+static int uart6850_open(int dev, int mode,
              void            (*input) (int dev, unsigned char data),
              void            (*output) (int dev)
 )
 {
        if (uart6850_opened)
-         {
-                 printk("Midi6850: Midi busy\n");
+       {
+/*               printk("Midi6850: Midi busy\n");*/
                  return -EBUSY;
-         };
+       };
 
        MOD_INC_USE_COUNT;
        uart6850_cmd(UART_RESET);
-
        uart6850_input_loop();
-
        midi_input_intr = input;
        uart6850_opened = mode;
        poll_uart6850(0);       /*
@@ -158,22 +154,18 @@ uart6850_open(int dev, int mode,
        return 0;
 }
 
-static void
-uart6850_close(int dev)
+static void uart6850_close(int dev)
 {
        uart6850_cmd(UART_MODE_ON);
-
-       del_timer(&uart6850_timer);;
+       del_timer(&uart6850_timer);
        uart6850_opened = 0;
-
        MOD_DEC_USE_COUNT;
 }
 
-static int
-uart6850_out(int dev, unsigned char midi_byte)
+static int uart6850_out(int dev, unsigned char midi_byte)
 {
-       int             timeout;
-       unsigned long   flags;
+       int timeout;
+       unsigned long flags;
 
        /*
         * Test for input since pending input seems to block the output.
@@ -195,41 +187,35 @@ uart6850_out(int dev, unsigned char midi_byte)
        for (timeout = 30000; timeout > 0 && !output_ready(); timeout--);       /*
                                                                                 * Wait
                                                                                 */
-
        if (!output_ready())
-         {
-                 printk("Midi6850: Timeout\n");
-                 return 0;
-         }
+       {
+               printk(KERN_WARNING "Midi6850: Timeout\n");
+               return 0;
+       }
        uart6850_write(midi_byte);
        return 1;
 }
 
-static int
-uart6850_command(int dev, unsigned char *midi_byte)
+static int uart6850_command(int dev, unsigned char *midi_byte)
 {
        return 1;
 }
 
-static int
-uart6850_start_read(int dev)
+static int uart6850_start_read(int dev)
 {
        return 0;
 }
 
-static int
-uart6850_end_read(int dev)
+static int uart6850_end_read(int dev)
 {
        return 0;
 }
 
-static void
-uart6850_kick(int dev)
+static void uart6850_kick(int dev)
 {
 }
 
-static int
-uart6850_buffer_status(int dev)
+static int uart6850_buffer_status(int dev)
 {
        return 0;               /*
                                 * No data in buffers
@@ -257,26 +243,25 @@ static struct midi_operations uart6850_operations =
 };
 
 
-void
-attach_uart6850(struct address_info *hw_config)
+void attach_uart6850(struct address_info *hw_config)
 {
-       int             ok, timeout;
+       int ok, timeout;
        unsigned long   flags;
 
        if ((my_dev = sound_alloc_mididev()) == -1)
-         {
-                 printk(KERN_INFO "uart6850: Too many midi devices detected\n");
-                 return;
-         }
+       {
+               printk(KERN_INFO "uart6850: Too many midi devices detected\n");
+               return;
+       }
        uart6850_base = hw_config->io_base;
        uart6850_osp = hw_config->osp;
        uart6850_irq = hw_config->irq;
 
        if (!uart6850_detected)
-         {
-                 sound_unload_mididev(my_dev);
-                 return;
-         }
+       {
+               sound_unload_mididev(my_dev);
+               return;
+       }
        save_flags(flags);
        cli();
 
@@ -284,9 +269,7 @@ attach_uart6850(struct address_info *hw_config)
                                                                                 * Wait
                                                                                 */
        uart6850_cmd(UART_MODE_ON);
-
        ok = 1;
-
        restore_flags(flags);
 
        conf_printf("6850 Midi Interface", hw_config);
@@ -297,8 +280,7 @@ attach_uart6850(struct address_info *hw_config)
        sequencer_init();
 }
 
-static int
-reset_uart6850(void)
+static int reset_uart6850(void)
 {
        uart6850_read();
        return 1;               /*
@@ -307,10 +289,9 @@ reset_uart6850(void)
 }
 
 
-int
-probe_uart6850(struct address_info *hw_config)
+int probe_uart6850(struct address_info *hw_config)
 {
-       int             ok = 0;
+       int ok = 0;
 
        uart6850_osp = hw_config->osp;
        uart6850_base = hw_config->io_base;
@@ -320,13 +301,11 @@ probe_uart6850(struct address_info *hw_config)
                return 0;
 
        ok = reset_uart6850();
-
        uart6850_detected = ok;
        return ok;
 }
 
-void
-unload_uart6850(struct address_info *hw_config)
+void unload_uart6850(struct address_info *hw_config)
 {
        snd_release_irq(hw_config->irq);
        sound_unload_mididev(hw_config->slots[4]);
@@ -335,19 +314,21 @@ unload_uart6850(struct address_info *hw_config)
 
 #ifdef MODULE
 
-int             io = -1;
-int             irq = -1;
+int io = -1;
+int irq = -1;
+
+MODULE_PARM(io,"i");
+MODULE_PARM(irq,"i");
 
 struct address_info cfg;
 
-int 
-init_module(void)
+int init_module(void)
 {
        if (io == -1 || irq == -1)
-         {
-                 printk("uart6850: irq and io must be set.\n");
-                 return -EINVAL;
-         }
+       {
+               printk(KERN_INFO "uart6850: irq and io must be set.\n");
+               return -EINVAL;
+       }
        cfg.io_base = io;
        cfg.irq = irq;
 
@@ -358,8 +339,7 @@ init_module(void)
        return 0;
 }
 
-void 
-cleanup_module(void)
+void cleanup_module(void)
 {
        unload_uart6850(&cfg);
        SOUND_LOCK_END;
index 11537d3724ca33a2ff722098165a108d0b59332e..12c221a681ad137d54fad811660b2ceea1dbf211 100644 (file)
 #include "v_midi.h"
 
 static vmidi_devc *v_devc[2] = { NULL, NULL};
-static int                     midi1,midi2;
+static int midi1,midi2;
+static void *midi_mem = NULL;
 
 #ifdef MODULE
 
 static struct address_info config;     /* dummy */
 
-int
-init_module(void)
+int init_module(void)
 {
        printk("MIDI Loopback device driver\n");
        if (!probe_v_midi(&config))
@@ -41,8 +41,7 @@ init_module(void)
        return 0;
 }
 
-void
-cleanup_module(void)
+void cleanup_module(void)
 {
        unload_v_midi(&config);
        SOUND_LOCK_END;
@@ -61,93 +60,87 @@ cleanup_module(void)
 
 void            (*midi_input_intr) (int dev, unsigned char data);
 
-static int
-v_midi_open (int dev, int mode,
+static int v_midi_open (int dev, int mode,
              void            (*input) (int dev, unsigned char data),
              void            (*output) (int dev)
 )
 {
-  vmidi_devc      *devc = midi_devs[dev]->devc;
-  unsigned long   flags;
-
-  if (devc == NULL)
-    return -(ENXIO);
-
-  save_flags (flags);
-  cli ();
-  if (devc->opened)
-    {
-      restore_flags (flags);
-      return -(EBUSY);
-    }
-  devc->opened = 1;
-  restore_flags (flags);
-
-  devc->intr_active = 1;
-
-  if (mode & OPEN_READ)
-    {
-      devc->input_opened = 1;
-      devc->midi_input_intr = input;
-    }
-
-  return 0;
+       vmidi_devc *devc = midi_devs[dev]->devc;
+       unsigned long flags;
+
+       if (devc == NULL)
+               return -(ENXIO);
+
+       save_flags (flags);
+       cli();
+       if (devc->opened)
+       {
+               restore_flags (flags);
+               return -(EBUSY);
+       }
+       devc->opened = 1;
+       restore_flags (flags);
+
+       devc->intr_active = 1;
+
+       if (mode & OPEN_READ)
+       {
+               devc->input_opened = 1;
+               devc->midi_input_intr = input;
+       }
+
+       return 0;
 }
 
-static void
-v_midi_close (int dev)
+static void v_midi_close (int dev)
 {
-  vmidi_devc        *devc = midi_devs[dev]->devc;
-  unsigned long   flags;
-
-  if (devc == NULL)
-    return;
-
-  save_flags (flags);
-  cli ();
-  devc->intr_active = 0;
-  devc->input_opened = 0;
-  devc->opened = 0;
-  restore_flags (flags);
+       vmidi_devc *devc = midi_devs[dev]->devc;
+       unsigned long flags;
+
+       if (devc == NULL)
+               return;
+
+       save_flags (flags);
+       cli ();
+       devc->intr_active = 0;
+       devc->input_opened = 0;
+       devc->opened = 0;
+       restore_flags (flags);
 }
 
-static int
-v_midi_out (int dev, unsigned char midi_byte)
+static int v_midi_out (int dev, unsigned char midi_byte)
 {
-  vmidi_devc        *devc = midi_devs[dev]->devc;
-  vmidi_devc        *pdevc = midi_devs[devc->pair_mididev]->devc;
-
-  if (devc == NULL)
-    return -(ENXIO);
-
-  if (pdevc->input_opened > 0){
-         if (MIDIbuf_avail(pdevc->my_mididev) > 500)
-               return 0;
-    pdevc->midi_input_intr (pdevc->my_mididev, midi_byte);
-  }
-
-  return 1;
+       vmidi_devc *devc = midi_devs[dev]->devc;
+       vmidi_devc *pdevc = midi_devs[devc->pair_mididev]->devc;
+
+       if (devc == NULL)
+               return -(ENXIO);
+
+       if (pdevc->input_opened > 0){
+               if (MIDIbuf_avail(pdevc->my_mididev) > 500)
+                       return 0;
+               pdevc->midi_input_intr (pdevc->my_mididev, midi_byte);
+       }
+       return 1;
 }
 
-static int
-v_midi_start_read (int dev)
+static int v_midi_start_read (int dev)
 {
-  return 0;
+       return 0;
 }
 
-static int
-v_midi_end_read (int dev)
+static int v_midi_end_read (int dev)
 {
-  vmidi_devc        *devc = midi_devs[dev]->devc;
-
-  if (devc == NULL)
-    return -(ENXIO);
+       vmidi_devc *devc = midi_devs[dev]->devc;
+       if (devc == NULL)
+               return -ENXIO;
 
-  devc->intr_active = 0;
-  return 0;
+       devc->intr_active = 0;
+       return 0;
 }
 
 /* why -EPERM and not -EINVAL?? */
+
 static int v_midi_ioctl (int dev, unsigned cmd, caddr_t arg)
 {
        return -EPERM;
@@ -161,199 +154,143 @@ static int v_midi_ioctl (int dev, unsigned cmd, caddr_t arg)
 
 static struct midi_operations v_midi_operations =
 {
-  {"Loopback MIDI Port 1", 0, 0, SNDCARD_VMIDI},
-  &std_midi_synth,
-  {0},
-  v_midi_open,
-  v_midi_close,
-  v_midi_ioctl,
-  v_midi_out,
-  v_midi_start_read,
-  v_midi_end_read,
-  NULL,
-  NULL,
-  NULL,
-  NULL
+       {"Loopback MIDI Port 1", 0, 0, SNDCARD_VMIDI},
+       &std_midi_synth,
+       {0},
+       v_midi_open,
+       v_midi_close,
+       v_midi_ioctl,
+       v_midi_out,
+       v_midi_start_read,
+       v_midi_end_read,
+       NULL,
+       NULL,
+       NULL,
+       NULL
 };
 
 static struct midi_operations v_midi_operations2 =
 {
-  {"Loopback MIDI Port 2", 0, 0, SNDCARD_VMIDI},
-  &std_midi_synth,
-  {0},
-  v_midi_open,
-  v_midi_close,
-  v_midi_ioctl,
-  v_midi_out,
-  v_midi_start_read,
-  v_midi_end_read,
-  NULL,
-  NULL,
-  NULL,
-  NULL
+       {"Loopback MIDI Port 2", 0, 0, SNDCARD_VMIDI},
+       &std_midi_synth,
+       {0},
+       v_midi_open,
+       v_midi_close,
+       v_midi_ioctl,
+       v_midi_out,
+       v_midi_start_read,
+       v_midi_end_read,
+       NULL,
+       NULL,
+       NULL,
+       NULL
 };
 
-void
-attach_v_midi (struct address_info *hw_config)
+/*
+ *     We kmalloc just one of these - it makes life simpler and the code
+ *     cleaner and the memory handling far more efficient
+ */
+struct vmidi_memory
 {
+       /* Must be first */
+       struct midi_operations m_ops[2];
+       struct synth_operations s_ops[2];
+       struct vmidi_devc v_ops[2];
+};
 
-  /* printk("Attaching v_midi device.....\n"); */
-  if (sound_nblocks >= (1024 - 6)){
-     printk("Sound: Loop Back MIDI: not enough sound driver memory block table\n");
-     return;
-  } 
-
-  midi1 = sound_alloc_mididev();
-  if (midi1 == -1)
-    {
-      printk ("Sound: Too many midi devices detected\n");
-      return;
-    }
-  midi_devs[midi1] = (struct midi_operations *) (sound_mem_blocks[sound_nblocks] = vmalloc (sizeof (struct midi_operations)));
-  sound_mem_sizes[sound_nblocks] = sizeof (struct midi_operations);
+void attach_v_midi (struct address_info *hw_config)
+{
+       struct vmidi_memory *m;
+       /* printk("Attaching v_midi device.....\n"); */
+
+       midi1 = sound_alloc_mididev();
+       if (midi1 == -1)
+       {
+               printk(KERN_ERR "v_midi: Too many midi devices detected\n");
+               return;
+       }
+       
+       m=(struct vmidi_memory *)kmalloc(sizeof(struct vmidi_memory), GFP_KERNEL);
+       if (m == NULL)
+       {
+               printk(KERN_WARNING "Loopback MIDI: Failed to allocate memory\n");
+               sound_unload_mididev(midi1);
+               return;
+       }
        
-  if (sound_nblocks < 1024)
-    sound_nblocks++;;
-  if (midi_devs[midi1] == NULL)
-    {
-      printk (KERN_WARNING "Loop Back MIDI: Failed to allocate memory\n");
-      sound_unload_mididev(midi1);
-      return;
-    }
-
-  midi2 = sound_alloc_mididev();
-  if (midi2 == -1)
-    {
-      printk ("Sound: Too many midi devices detected\n");
-      sound_unload_mididev(midi1);
-      return;
-    }
-
-  midi_devs[midi2] = (struct midi_operations *) (sound_mem_blocks[sound_nblocks] = vmalloc (sizeof (struct midi_operations)));
-  sound_mem_sizes[sound_nblocks] = sizeof (struct midi_operations);
-
-  if (sound_nblocks < 1024)
-    sound_nblocks++;;
-  if (midi_devs[midi2] == NULL)
-    {
-      printk (KERN_WARNING "Loop Back MIDI: Failed to allocate memory\n");
-      sound_unload_mididev(midi1);
-      sound_unload_mididev(midi2);
-      return;
-    }
-
-  /* printk("VMIDI1: %d   VMIDI2: %d\n",midi1,midi2); */
-
-  /* for MIDI-1 */
-  v_devc[0] = (struct vmidi_devc *) (sound_mem_blocks[sound_nblocks] = vmalloc (sizeof (struct vmidi_devc)));
-  sound_mem_sizes[sound_nblocks] = sizeof (struct vmidi_devc);
-
-  if (sound_nblocks < 1024)
-    sound_nblocks++;;
-  if (v_devc[0] == NULL)
-    {
-      printk (KERN_WARNING "Loop Back MIDI: Failed to allocate memory\n");
-      sound_unload_mididev(midi1);
-      sound_unload_mididev(midi2);
-      return;
-    }
-
-  memcpy ((char *) midi_devs[midi1], (char *) &v_midi_operations,
-         sizeof (struct midi_operations));
-
-  v_devc[0]->my_mididev = midi1;
-  v_devc[0]->pair_mididev = midi2;
-  v_devc[0]->opened = v_devc[0]->input_opened = 0;
-  v_devc[0]->intr_active = 0;
-  v_devc[0]->midi_input_intr = NULL;
-
-  midi_devs[midi1]->devc = v_devc[0];
-
-  midi_devs[midi1]->converter = (struct synth_operations *) (sound_mem_blocks[sound_nblocks] = vmalloc (sizeof (struct synth_operations)));
-  sound_mem_sizes[sound_nblocks] = sizeof (struct synth_operations);
-
-  if (sound_nblocks < 1024)
-    sound_nblocks++;;
-
-  if (midi_devs[midi1]->converter == NULL)
-    {
-      printk (KERN_WARNING "Loop Back MIDI: Failed to allocate memory\n");
-      sound_unload_mididev(midi1);
-      sound_unload_mididev(midi2);
-      return;
-    }
-
-  std_midi_synth.midi_dev = midi1;
-  memcpy ((char *) midi_devs[midi1]->converter, (char *) &std_midi_synth,
-         sizeof (struct synth_operations));
-
-  midi_devs[midi1]->converter->id = "V_MIDI 1";
-
-  /* for MIDI-2 */
-  v_devc[1] = (struct vmidi_devc *) (sound_mem_blocks[sound_nblocks] = vmalloc (sizeof (struct vmidi_devc)));
-  sound_mem_sizes[sound_nblocks] = sizeof (struct vmidi_devc);
-
-  if (sound_nblocks < 1024)
-    sound_nblocks++;;
-  if (v_devc[1] == NULL)
-    {
-      printk (KERN_WARNING "Loop Back MIDI: Failed to allocate memory\n");
-      sound_unload_mididev(midi1);
-      sound_unload_mididev(midi2);
-      return;
-    }
-
-
-  memcpy ((char *) midi_devs[midi2], (char *) &v_midi_operations2,
-         sizeof (struct midi_operations));
-
-  v_devc[1]->my_mididev = midi2;
-  v_devc[1]->pair_mididev = midi1;
-  v_devc[1]->opened = v_devc[1]->input_opened = 0;
-  v_devc[1]->intr_active = 0;
-  v_devc[1]->midi_input_intr = NULL;
-
-  midi_devs[midi2]->devc = v_devc[1];
-
-
-  midi_devs[midi2]->converter = (struct synth_operations *) (sound_mem_blocks[sound_nblocks] = vmalloc (sizeof (struct synth_operations)));
-  sound_mem_sizes[sound_nblocks] = sizeof (struct synth_operations);
-
-  if (sound_nblocks < 1024)
-    sound_nblocks++;;
-
-  if (midi_devs[midi2]->converter == NULL)
-    {
-      printk (KERN_WARNING "Loop Back MIDI: Failed to allocate memory\n");
-      sound_unload_mididev(midi1);
-      sound_unload_mididev(midi2);
-      return;
-    }
-
-  std_midi_synth.midi_dev = midi2;
-  memcpy ((char *) midi_devs[midi2]->converter, (char *) &std_midi_synth,
-         sizeof (struct synth_operations));
-
-  midi_devs[midi2]->converter->id = "V_MIDI 2";
-
-  sequencer_init();
-  /* printk("Attached v_midi device\n"); */
+       midi_mem = m;
+       
+       midi_devs[midi1] = &m->m_ops[0];
+       
+
+       midi2 = sound_alloc_mididev();
+       if (midi2 == -1)
+       {
+               printk (KERN_ERR "v_midi: Too many midi devices detected\n");
+               kfree(m);
+               sound_unload_mididev(midi1);
+               return;
+       }
+
+       midi_devs[midi2] = &m->m_ops[1];
+
+       /* printk("VMIDI1: %d   VMIDI2: %d\n",midi1,midi2); */
+
+       /* for MIDI-1 */
+       v_devc[0] = &m->v_ops[0];
+       memcpy ((char *) midi_devs[midi1], (char *) &v_midi_operations,
+               sizeof (struct midi_operations));
+
+       v_devc[0]->my_mididev = midi1;
+       v_devc[0]->pair_mididev = midi2;
+       v_devc[0]->opened = v_devc[0]->input_opened = 0;
+       v_devc[0]->intr_active = 0;
+       v_devc[0]->midi_input_intr = NULL;
+
+       midi_devs[midi1]->devc = v_devc[0];
+
+       midi_devs[midi1]->converter = &m->s_ops[0];
+       std_midi_synth.midi_dev = midi1;
+       memcpy ((char *) midi_devs[midi1]->converter, (char *) &std_midi_synth,
+               sizeof (struct synth_operations));
+       midi_devs[midi1]->converter->id = "V_MIDI 1";
+
+       /* for MIDI-2 */
+       v_devc[1] = &m->v_ops[1];
+
+       memcpy ((char *) midi_devs[midi2], (char *) &v_midi_operations2,
+               sizeof (struct midi_operations));
+
+       v_devc[1]->my_mididev = midi2;
+       v_devc[1]->pair_mididev = midi1;
+       v_devc[1]->opened = v_devc[1]->input_opened = 0;
+       v_devc[1]->intr_active = 0;
+       v_devc[1]->midi_input_intr = NULL;
+
+       midi_devs[midi2]->devc = v_devc[1];
+       midi_devs[midi2]->converter = &m->s_ops[1];
+
+       std_midi_synth.midi_dev = midi2;
+       memcpy ((char *) midi_devs[midi2]->converter, (char *) &std_midi_synth,
+               sizeof (struct synth_operations));
+       midi_devs[midi2]->converter->id = "V_MIDI 2";
 
+       sequencer_init();
+       /* printk("Attached v_midi device\n"); */
 }
 
-int
-probe_v_midi(struct address_info *hw_config)
+int probe_v_midi(struct address_info *hw_config)
 {
        return(1);      /* always OK */
 }
 
 
-void
-unload_v_midi(struct address_info *hw_config)
+void unload_v_midi(struct address_info *hw_config)
 {
-      sound_unload_mididev(midi1);
-      sound_unload_mididev(midi2);
-;
+       sound_unload_mididev(midi1);
+       sound_unload_mididev(midi2);
+       kfree(midi_mem);
 }
 
 #endif
index 27e4477f7e3c366ab3909a1a07626eb64dfd3b6b..5ae476cee9ebfbd1f78ec7a8b91126341a0a48a3 100644 (file)
@@ -583,28 +583,6 @@ affs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
        return error;
 }
 
-/* This is copied from the ext2 fs. No need to reinvent the wheel. */
-
-static int
-subdir(struct dentry * new_dentry, struct dentry * old_dentry)
-{
-       int result;
-
-       result = 0;
-       for (;;) {
-               if (new_dentry != old_dentry) {
-                       struct dentry * parent = new_dentry->d_parent;
-                       if (parent == new_dentry)
-                               break;
-                       new_dentry = parent;
-                       continue;
-               }
-               result = 1;
-               break;
-       }
-       return result;
-}
-
 int
 affs_rename(struct inode *old_dir, struct dentry *old_dentry,
            struct inode *new_dir, struct dentry *new_dentry)
@@ -652,7 +630,7 @@ affs_rename(struct inode *old_dir, struct dentry *old_dentry,
                if (!S_ISDIR(old_inode->i_mode))
                        goto end_rename;
                retval = -EINVAL;
-               if (subdir(new_dentry,old_dentry))
+               if (is_subdir(new_dentry,old_dentry))
                        goto end_rename;
                retval = -ENOTEMPTY;
                if (!empty_dir(new_bh,AFFS_I2HSIZE(new_inode)))
@@ -666,7 +644,7 @@ affs_rename(struct inode *old_dir, struct dentry *old_dentry,
                if (new_inode && !S_ISDIR(new_inode->i_mode))
                        goto end_rename;
                retval = -EINVAL;
-               if (subdir(new_dentry,old_dentry))
+               if (is_subdir(new_dentry,old_dentry))
                        goto end_rename;
                if (affs_parent_ino(old_inode) != old_dir->i_ino)
                        goto end_rename;
index 84341d72546f6ac667f767373b1ae5aef5264f5b..ce9d3fbfc00c8f1a95415dc95e47e2463c3c84f3 100644 (file)
@@ -432,7 +432,6 @@ do_load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)
        unsigned long elf_entry, interp_load_addr = 0;
        int status;
        unsigned long start_code, end_code, end_data;
-       unsigned long elf_stack;
        char passed_fileno[6];
 
        ibcs2_interpreter = 0;
@@ -484,7 +483,6 @@ do_load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)
 
        file = current->files->fd[elf_exec_fileno];
 
-       elf_stack = ~0UL;
        elf_interpreter = NULL;
        start_code = ~0UL;
        end_code = 0;
@@ -620,12 +618,13 @@ do_load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)
        current->mm->mmap = NULL;
        elf_entry = (unsigned long) elf_ex.e_entry;
 
+       /* Do this immediately, since STACK_TOP as used in setup_arg_pages
+          may depend on the personality.  */
+       SET_PERSONALITY(elf_ex, ibcs2_interpreter);
+
        /* Do this so that we can load the interpreter, if need be.  We will
           change some of these later */
        current->mm->rss = 0;
-#ifdef ELF_FLAGS_INIT
-       ELF_FLAGS_INIT;
-#endif
        bprm->p = setup_arg_pages(bprm->p, bprm);
        current->mm->start_stack = bprm->p;
 
@@ -666,11 +665,6 @@ do_load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)
                                        (elf_ppnt->p_offset -
                                         ELF_PAGEOFFSET(elf_ppnt->p_vaddr)));
 
-#ifdef LOW_ELF_STACK
-                       if (error < elf_stack)
-                               elf_stack = error-1;
-#endif
-
                        if (!load_addr_set) {
                                load_addr_set = 1;
                                load_addr = (elf_ppnt->p_vaddr -
@@ -722,8 +716,8 @@ do_load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)
 
        kfree(elf_phdata);
 
-       if (interpreter_type != INTERPRETER_AOUT) sys_close(elf_exec_fileno);
-       SET_PERSONALITY(ibcs2_interpreter);
+       if (interpreter_type != INTERPRETER_AOUT)
+               sys_close(elf_exec_fileno);
 
        if (current->exec_domain && current->exec_domain->module)
                __MOD_DEC_USE_COUNT(current->exec_domain->module);
@@ -738,9 +732,6 @@ do_load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)
 
 #ifndef VM_STACK_FLAGS
        current->executable = dget(bprm->dentry);
-#endif
-#ifdef LOW_ELF_STACK
-       current->start_stack = bprm->p = elf_stack;
 #endif
        current->suid = current->euid = current->fsuid = bprm->e_uid;
        current->sgid = current->egid = current->fsgid = bprm->e_gid;
index e1374398e20a310e9627010fbff5ab5b760c3e5b..a40771a9d2786a99539624bfdf8e5b0c2fc8fd01 100644 (file)
@@ -264,7 +264,7 @@ int coda_inode_grab(dev_t dev, ino_t ino, struct inode **ind)
 {
         struct super_block *sbptr;
 
-        sbptr = get_super(dev);
+        sbptr = get_super(to_kdev_t(dev));
 
         if ( !sbptr ) {
                 printk("coda_inode_grab: coda_find_super returns NULL.\n");
index a63abdeaa4d1384f5ebccdff2619c9de274fe770..16a65d66b5b92dfd86e4212e27901f073abe85a9 100644 (file)
@@ -129,8 +129,8 @@ static int coda_pioctl(struct inode * inode, struct file * filp,
                target_inode = target_de->d_inode;
        }
        
-       CDEBUG(D_PIOCTL, "target ino: 0x%ld, dev: 0x%d\n",
-              target_inode->i_ino, target_inode->i_dev);
+       CDEBUG(D_PIOCTL, "target ino: 0x%ld, dev: %s\n",
+              target_inode->i_ino, kdevname(target_inode->i_dev));
 
        /* return if it is not a Coda inode */
        if ( target_inode->i_sb != inode->i_sb ) {
index 5b655eafa22b0e2cb060a2af20473143a459f577..0bb6faef83963466474ece69ccdbe6da7f8b89e0 100644 (file)
@@ -131,8 +131,8 @@ static struct super_block * coda_read_super(struct super_block *sb,
            goto error;
        } 
 
-       printk("coda_read_super: rootinode is %ld dev %d\n", 
-              root->i_ino, root->i_dev);
+       printk("coda_read_super: rootinode is %ld dev %s\n", 
+              root->i_ino, kdevname(root->i_dev));
        sbi->sbi_root = root;
        sb->s_root = d_alloc_root(root, NULL);
        unlock_super(sb);
@@ -351,7 +351,7 @@ static int coda_get_psdev(void *data, struct inode **res_dev)
 
         if (MINOR(psdev->i_rdev) >= MAX_CODADEVS) { 
                printk("minor %d not an allocated Coda PSDEV\n", 
-                      psdev->i_rdev);
+                      MINOR(psdev->i_rdev));
                return 1;
         }
 
index d4f78c8783de200e74e871fdff472769617b0bab..56381c5272bb25d80fceaf745c3b391f7360dc3f 100644 (file)
@@ -94,7 +94,7 @@ static struct dentry *coda_follow_link(struct dentry *de,
        char mem[CFS_MAXPATHLEN];
        char *path;
 ENTRY;
-       CDEBUG(D_INODE, "(%x/%ld)\n", inode->i_dev, inode->i_ino);
+       CDEBUG(D_INODE, "(%s/%ld)\n", kdevname(inode->i_dev), inode->i_ino);
        
        cnp = ITOC(inode);
        CHECK_CNODE(cnp);
index 138893858898e4de4bed37ac75c1c49e4f581298..f752229ce6aba194a6034b8c757090982cacb455 100644 (file)
@@ -629,17 +629,11 @@ static int ext2_update_inode(struct inode * inode, int do_sync)
 
 void ext2_write_inode (struct inode * inode)
 {
-#if 0
-       printk("ext2_write(%04x:%06d)...", inode->i_dev, inode->i_ino);
-#endif
        ext2_update_inode (inode, 0);
 }
 
 int ext2_sync_inode (struct inode *inode)
 {
-#if 0
-       printk("ext2_sync(%04x:%06d)...", inode->i_dev, inode->i_ino);
-#endif
        return ext2_update_inode (inode, 1);
 }
 
index 5fff3646ee8edb3bbe024c054d227513991c8974..191450b4163c73a7dec3da95bd79043e3e64bb15 100644 (file)
@@ -830,28 +830,6 @@ int ext2_link (struct dentry * old_dentry,
        return 0;
 }
 
-/*
- * Trivially implemented using the dcache structure
- */
-static int subdir (struct dentry * new_dentry, struct dentry * old_dentry)
-{
-       int result;
-
-       result = 0;
-       for (;;) {
-               if (new_dentry != old_dentry) {
-                       struct dentry * parent = new_dentry->d_parent;
-                       if (parent == new_dentry)
-                               break;
-                       new_dentry = parent;
-                       continue;
-               }
-               result = 1;
-               break;
-       }
-       return result;
-}
-
 #define PARENT_INO(buffer) \
        ((struct ext2_dir_entry *) ((char *) buffer + \
        le16_to_cpu(((struct ext2_dir_entry *) buffer)->rec_len)))->inode
@@ -915,7 +893,7 @@ static int do_ext2_rename (struct inode * old_dir, struct dentry *old_dentry,
                if (!S_ISDIR(old_inode->i_mode))
                        goto end_rename;
                retval = -EINVAL;
-               if (subdir(new_dentry, old_dentry))
+               if (is_subdir(new_dentry, old_dentry))
                        goto end_rename;
                retval = -ENOTEMPTY;
                if (!empty_dir (new_inode))
@@ -938,7 +916,7 @@ static int do_ext2_rename (struct inode * old_dir, struct dentry *old_dentry,
                if (new_inode && !S_ISDIR(new_inode->i_mode))
                        goto end_rename;
                retval = -EINVAL;
-               if (subdir(new_dentry, old_dentry))
+               if (is_subdir(new_dentry, old_dentry))
                        goto end_rename;
                dir_bh = ext2_bread (old_inode, 0, 0, &retval);
                if (!dir_bh)
index a88b53d13a63031c98d5699e9cfc27a865c92d87..8b06a9b791d268a391298120008d266d6c3ea936 100644 (file)
@@ -225,6 +225,8 @@ void clear_inode(struct inode *inode)
        wait_on_inode(inode);
        if (IS_WRITABLE(inode) && inode->i_sb && inode->i_sb->dq_op)
                inode->i_sb->dq_op->drop(inode);
+       if (inode->i_sb && inode->i_sb->s_op && inode->i_sb->s_op->clear_inode)
+               inode->i_sb->s_op->clear_inode(inode);
 
        inode->i_state = 0;
 }
index 9445b921e0b4d4d7e6bdb1b84ff8295c434ad52d..ece4b9f8c7a948f461f363e6795120035514c33b 100644 (file)
@@ -79,7 +79,6 @@ struct iso9660_options{
   char cruft;
   char unhide;
   unsigned char check;
-  unsigned char conversion;
   unsigned int blocksize;
   mode_t mode;
   gid_t gid;
@@ -98,7 +97,6 @@ static int parse_options(char *options, struct iso9660_options * popt)
        popt->cruft = 'n';
        popt->unhide = 'n';
        popt->check = 's';              /* default: strict */
-       popt->conversion = 'b';         /* default: no conversion */
        popt->blocksize = 1024;
        popt->mode = S_IRUGO | S_IXUGO; /* r-x for all.  The disc could
                                           be shared with DOS machines so
@@ -166,12 +164,14 @@ static int parse_options(char *options, struct iso9660_options * popt)
                        else return 0;
                }
                else if (!strcmp(this_char,"conv") && value) {
-                       if (value[0] && !value[1] && strchr("btma",*value))
-                               popt->conversion = *value;
-                       else if (!strcmp(value,"binary")) popt->conversion = 'b';
-                       else if (!strcmp(value,"text")) popt->conversion = 't';
-                       else if (!strcmp(value,"mtext")) popt->conversion = 'm';
-                       else if (!strcmp(value,"auto")) popt->conversion = 'a';
+                       /* no conversion is done anymore;
+                          we still accept the same mount options,
+                          but ignore them */
+                       if (value[0] && !value[1] && strchr("btma",*value)) ;
+                       else if (!strcmp(value,"binary")) ;
+                       else if (!strcmp(value,"text")) ;
+                       else if (!strcmp(value,"mtext")) ;
+                       else if (!strcmp(value,"auto")) ;
                        else return 0;
                }
                else if (value &&
@@ -254,17 +254,17 @@ static unsigned int isofs_get_last_session(kdev_t dev)
          printk("isofs.inode: XA disk: %s\n", ms_info.xa_flag ? "yes":"no");
          printk("isofs.inode: vol_desc_start = %d\n", ms_info.addr.lba);
        }
-#endif 0
+#endif
       if (i==0)
 #if WE_OBEY_THE_WRITTEN_STANDARDS
         if (ms_info.xa_flag) /* necessary for a valid ms_info.addr */
-#endif WE_OBEY_THE_WRITTEN_STANDARDS
+#endif
           vol_desc_start=ms_info.addr.lba;
     }
   return vol_desc_start;
 }
 
-struct super_block *isofs_read_super(struct super_block *s,void *data,
+struct super_block *isofs_read_super(struct super_block *s, void *data,
                                     int silent)
 {
        struct buffer_head            * bh = NULL;
@@ -301,7 +301,6 @@ struct super_block *isofs_read_super(struct super_block *s,void *data,
        printk("check = %c\n", opt.check);
        printk("cruft = %c\n", opt.cruft);
        printk("unhide = %c\n", opt.unhide);
-       printk("conversion = %c\n", opt.conversion);
        printk("blocksize = %d\n", opt.blocksize);
        printk("gid = %d\n", opt.gid);
        printk("uid = %d\n", opt.uid);
@@ -571,7 +570,6 @@ struct super_block *isofs_read_super(struct super_block *s,void *data,
        s->u.isofs_sb.s_mapping = opt.map;
        s->u.isofs_sb.s_rock = (opt.rock == 'y' ? 2 : 0);
        s->u.isofs_sb.s_name_check = opt.check;
-       s->u.isofs_sb.s_conversion = opt.conversion;
        s->u.isofs_sb.s_cruft = opt.cruft;
        s->u.isofs_sb.s_unhide = opt.unhide;
        s->u.isofs_sb.s_uid = opt.uid;
@@ -799,21 +797,6 @@ void isofs_read_inode(struct inode * inode)
                                           isonum_711 (raw_inode->ext_attr_length))
          << inode -> i_sb -> u.isofs_sb.s_log_zone_size;
 
-       switch (inode->i_sb->u.isofs_sb.s_conversion){
-       case 'a':
-         inode->u.isofs_i.i_file_format = ISOFS_FILE_UNKNOWN; /* File type */
-         break;
-       case 'b':
-         inode->u.isofs_i.i_file_format = ISOFS_FILE_BINARY; /* File type */
-         break;
-       case 't':
-         inode->u.isofs_i.i_file_format = ISOFS_FILE_TEXT; /* File type */
-         break;
-       case 'm':
-         inode->u.isofs_i.i_file_format = ISOFS_FILE_TEXT_M; /* File type */
-         break;
-       }
-
 /* Now test for possible Rock Ridge extensions which will override some of
    these numbers in the inode structure. */
 
index 26eb1bd89b4e176e536cb7dd087cb3c79ee2fbed..e6bf93e4b54eddc792975fccb394043f95cf552a 100644 (file)
@@ -599,24 +599,6 @@ int minix_link(struct dentry * old_dentry, struct inode * dir,
        return 0;
 }
 
-static int subdir(struct dentry * new_dentry, struct dentry * old_dentry)
-{
-       int result = 0;
-
-       for (;;) {
-               if (new_dentry != old_dentry) {
-                       struct dentry * parent = new_dentry->d_parent;
-                       if (parent == new_dentry)
-                               break;
-                       new_dentry = parent;
-                       continue;
-               }
-               result = 1;
-               break;
-       }
-       return result;
-}
-
 #define PARENT_INO(buffer) \
 (((struct minix_dir_entry *) ((buffer)+info->s_dirsize))->inode)
 
@@ -679,7 +661,7 @@ start_up:
                if (!S_ISDIR(old_inode->i_mode))
                        goto end_rename;
                retval = -EINVAL;
-               if (subdir(new_dentry, old_dentry))
+               if (is_subdir(new_dentry, old_dentry))
                        goto end_rename;
                retval = -ENOTEMPTY;
                if (!empty_dir(new_inode))
@@ -698,7 +680,7 @@ start_up:
                if (new_inode && !S_ISDIR(new_inode->i_mode))
                        goto end_rename;
                retval = -EINVAL;
-               if (subdir(new_dentry, old_dentry))
+               if (is_subdir(new_dentry, old_dentry))
                        goto end_rename;
                retval = -EIO;
                dir_bh = minix_bread(old_inode,0,0);
index 836c1b4d6f538e03c925f5c41f4e6888721c7e61..9d5037a9807984ef2f8a454c49685d76ce1f269d 100644 (file)
@@ -616,26 +616,28 @@ exp_delclient(struct nfsctl_client *ncp)
        svc_client      **clpp, *clp;
        int             err;
 
+       err = -EINVAL;
        if (!exp_verify_string(ncp->cl_ident, NFSCLNT_IDMAX))
-               return -EINVAL;
+               goto out;
 
        /* Lock the hashtable */
        if ((err = exp_writelock()) < 0)
-               return err;
+               goto out;
 
+       err = -EINVAL;
        for (clpp = &clients; (clp = *clpp); clpp = &(clp->cl_next))
                if (!strcmp(ncp->cl_ident, clp->cl_ident))
                        break;
 
-       if (!clp) {
-               exp_unlock();
-               return -EINVAL;
+       if (clp) {
+               *clpp = clp->cl_next;
+               exp_freeclient(clp);
+               err = 0;
        }
-       *clpp = clp->cl_next;
-       exp_freeclient(clp);
 
        exp_unlock();
-       return 0;
+out:
+       return err;
 }
 
 /*
@@ -750,6 +752,8 @@ nfsd_export_shutdown(void)
                while (clnt_hash[i])
                        exp_freeclient(clnt_hash[i]->h_client);
        }
+       clients = NULL; /* we may be restarted before the module unloads */
+       
        exp_unlock();
        dprintk("nfsd: export shutdown complete.\n");
 }
index 17d7de2438ebfbe2ac6185e041cc1e73a1f5320d..d41e6977ce42d9edc1aa41a93107aa64301b8957 100644 (file)
@@ -10,7 +10,11 @@ Fri Jan 23 1998   Krzysztof G. Baranowski <kgb@manjak.knm.org.pl>
 
 Tue Jan 27 1998   Krzysztof G. Baranowski <kgb@manjak.knm.org.pl>
         *    inode.c: added 2048-byte block support to SystemV FS.
-                     Merged detected_bs[512,1024,2048] into one function:
+                     Merged detected_bs[512,1024,2048]() into one function:
                      void detected_bs (u_char type, struct super_block *sb).
                      Thanks to Andrzej Krzysztofowicz <ankry@mif.pg.gda.pl>
                      for the patch.
+
+Wed Feb  4 1998   Krzysztof G. Baranowski <kgb@manjak.knm.org.pl>
+       *    namei.c: removed static subdir(); is_subdir() from dcache.c
+                     is used instead. Cosmetic changes.
index 47b0aebba4a68ac5e548832025ad2d00150427fa..270cfe63752465db10ef1b4b8e038c0781c677a5 100644 (file)
@@ -47,7 +47,7 @@ static int sysv_match(int len, const char * name, struct sysv_dir_entry * de)
        /* "" means "." ---> so paths like "/usr/lib//libc.a" work */
        if (!len && (de->name[0]=='.') && (de->name[1]=='\0'))
                return 1;
-       return namecompare(len,SYSV_NAMELEN,name,de->name);
+       return namecompare(len, SYSV_NAMELEN, name, de->name);
 }
 
 /*
@@ -78,7 +78,7 @@ static struct buffer_head * sysv_find_entry(struct inode * dir,
        pos = block = offset = 0;
        while (pos < dir->i_size) {
                if (!bh) {
-                       bh = sysv_file_bread(dir,block,0);
+                       bh = sysv_file_bread(dir, block, 0);
                        if (!bh) {
                                /* offset = 0; */ block++;
                                pos += sb->sv_block_size;
@@ -117,7 +117,7 @@ int sysv_lookup(struct inode * dir, struct dentry * dentry)
        if (bh) {
                int ino = de->inode;
                brelse(bh);
-               inode = iget(dir->i_sb,ino);
+               inode = iget(dir->i_sb, ino);
        
                if (!inode) 
                        return -EACCES;
@@ -163,7 +163,7 @@ static int sysv_add_entry(struct inode * dir,
        pos = block = offset = 0;
        while (1) {
                if (!bh) {
-                       bh = sysv_file_bread(dir,block,1);
+                       bh = sysv_file_bread(dir, block, 1);
                        if (!bh)
                                return -ENOSPC;
                }
@@ -214,7 +214,7 @@ int sysv_create(struct inode * dir, struct dentry * dentry, int mode)
        inode->i_op = &sysv_file_inode_operations;
        inode->i_mode = mode;
        mark_inode_dirty(inode);
-       error = sysv_add_entry(dir,dentry->d_name.name,
+       error = sysv_add_entry(dir, dentry->d_name.name,
                               dentry->d_name.len, &bh, &de);
        if (error) {
                inode->i_nlink--;
@@ -238,8 +238,8 @@ int sysv_mknod(struct inode * dir, struct dentry * dentry, int mode, int rdev)
 
        if (!dir)
                return -ENOENT;
-       bh = sysv_find_entry(dir,dentry->d_name.name,
-                            dentry->d_name.len,&de);
+       bh = sysv_find_entry(dir, dentry->d_name.name,
+                            dentry->d_name.len, &de);
        if (bh) {
                brelse(bh);
                return -EEXIST;
@@ -268,7 +268,8 @@ int sysv_mknod(struct inode * dir, struct dentry * dentry, int mode, int rdev)
        if (S_ISBLK(mode) || S_ISCHR(mode))
                inode->i_rdev = to_kdev_t(rdev);
        mark_inode_dirty(inode);
-       error = sysv_add_entry(dir, dentry->d_name.name, dentry->d_name.len, &bh, &de);
+       error = sysv_add_entry(dir, dentry->d_name.name, 
+                              dentry->d_name.len, &bh, &de);
        if (error) {
                inode->i_nlink--;
                mark_inode_dirty(inode);
@@ -359,7 +360,7 @@ static int empty_dir(struct inode * inode)
                goto bad_dir;
        if (inode->i_size < pos)
                goto bad_dir;
-       bh = sysv_file_bread(inode,0,0);
+       bh = sysv_file_bread(inode, 0, 0);
        if (!bh)
                goto bad_dir;
        de = (struct sysv_dir_entry *) (bh->b_data + 0*SYSV_DIRSIZE);
@@ -371,7 +372,7 @@ static int empty_dir(struct inode * inode)
        sb = inode->i_sb;
        while (pos < inode->i_size) {
                if (!bh) {
-                       bh = sysv_file_bread(inode,block,0);
+                       bh = sysv_file_bread(inode, block, 0);
                        if (!bh) {
                                /* offset = 0; */ block++;
                                pos += sb->sv_block_size;
@@ -441,7 +442,7 @@ int sysv_rmdir(struct inode * dir, struct dentry * dentry)
                goto end_rmdir;
        }
        if (inode->i_nlink != 2)
-               printk("empty directory has nlink!=2 (%d)\n",inode->i_nlink);
+               printk("empty directory has nlink!=2 (%d)\n", inode->i_nlink);
        de->inode = 0;
        mark_buffer_dirty(bh, 1);
        inode->i_nlink=0;
@@ -491,8 +492,7 @@ repeat:
        }
        if (!inode->i_nlink) {
                printk("Deleting nonexistent file (%s:%lu), %d\n",
-                       kdevname(inode->i_dev),
-                      inode->i_ino, inode->i_nlink);
+                       kdevname(inode->i_dev), inode->i_ino, inode->i_nlink);
                inode->i_nlink=1;
        }
        de->inode = 0;
@@ -526,7 +526,7 @@ int sysv_symlink(struct inode * dir, struct dentry * dentry,
 
        inode->i_mode = S_IFLNK | 0777;
        inode->i_op = &sysv_symlink_inode_operations;
-       name_block = sysv_file_bread(inode,0,1);
+       name_block = sysv_file_bread(inode, 0, 1);
        if (!name_block) {
                inode->i_nlink--;
                mark_inode_dirty(inode);
@@ -603,25 +603,6 @@ int sysv_link(struct dentry * old_dentry, struct inode * dir,
        return 0;
 }
 
-/* return 1 if `new' is a subdir of `old' on the same device */
-static int subdir(struct dentry * new_dentry, struct dentry * old_dentry)
-{
-       int result = 0;
-       
-        for (;;) {
-                if (new_dentry != old_dentry) {
-                        struct dentry * parent = new_dentry->d_parent;
-                        if (parent == new_dentry)
-                                break;
-                        new_dentry = parent;
-                        continue;
-                }
-                result = 1;
-                break;
-        }
-        return result;
-}
-
 #define PARENT_INO(buffer) \
 (((struct sysv_dir_entry *) ((buffer) + 1*SYSV_DIRSIZE))->inode)
 
@@ -653,20 +634,20 @@ try_again:
 start_up:
        old_inode = new_inode = NULL;
        old_bh = new_bh = dir_bh = NULL;
-       old_bh = sysv_find_entry(old_dir,old_dentry->d_name.name,
-                               old_dentry->d_name.len,&old_de);
+       old_bh = sysv_find_entry(old_dir, old_dentry->d_name.name,
+                               old_dentry->d_name.len, &old_de);
        retval = -ENOENT;
        if (!old_bh)
                goto end_rename;
-       old_inode = old_dentry->d_inode;/* don't cross mnt-points */
+       old_inode = old_dentry->d_inode;        /* don't cross mnt-points */
        retval = -EPERM;
        if ((old_dir->i_mode & S_ISVTX) && 
            current->fsuid != old_inode->i_uid &&
            current->fsuid != old_dir->i_uid && !fsuser())
                goto end_rename;
        new_inode = new_dentry->d_inode;
-       new_bh = sysv_find_entry(new_dir,new_dentry->d_name.name,
-                               new_dentry->d_name.len,&new_de);
+       new_bh = sysv_find_entry(new_dir, new_dentry->d_name.name,
+                               new_dentry->d_name.len, &new_de);
        if (new_bh) {
                if (!new_inode) {
                        brelse(new_bh);
@@ -682,7 +663,7 @@ start_up:
                if (!S_ISDIR(old_inode->i_mode))
                        goto end_rename;
                retval = -EINVAL;
-               if (subdir(new_dentry, old_dentry))
+               if (is_subdir(new_dentry, old_dentry))
                        goto end_rename;
                retval = -ENOTEMPTY;
                if (!empty_dir(new_inode))
@@ -701,10 +682,10 @@ start_up:
                if (new_inode && !S_ISDIR(new_inode->i_mode))
                        goto end_rename;
                retval = -EINVAL;
-               if (subdir(new_dentry, old_dentry))
+               if (is_subdir(new_dentry, old_dentry))
                        goto end_rename;
                retval = -EIO;
-               dir_bh = sysv_file_bread(old_inode,0,0);
+               dir_bh = sysv_file_bread(old_inode, 0, 0);
                if (!dir_bh)
                        goto end_rename;
                if (PARENT_INO(dir_bh->b_data) != old_dir->i_ino)
@@ -714,8 +695,8 @@ start_up:
                        goto end_rename;
        }
        if (!new_bh) {
-               retval = sysv_add_entry(new_dir,new_dentry->d_name.name,
-                                       new_dentry->d_name.len,&new_bh,&new_de);
+               retval = sysv_add_entry(new_dir, new_dentry->d_name.name,
+                                       new_dentry->d_name.len, &new_bh, &new_de);
                if (retval)
                        goto end_rename;
        }
index f1965d5cae42832296fc75b5c0c66297cf28670f..073b90a998dfbffa5f449a126fd2d60298c4b76a 100644 (file)
@@ -90,7 +90,8 @@ struct exec
 
 #ifdef __KERNEL__
 
-#define STACK_TOP (0x00120000000UL)
+#define STACK_TOP \
+  ((current->personality==PER_LINUX_32BIT) ? (0x80000000) : (0x00120000000UL))
 
 #endif
 
index 465b028c11948a6bd6b99a95bb61dbc30db81294..89657ba78f268bef8374e497dab1c8f13782339f 100644 (file)
@@ -1,5 +1,5 @@
-#ifndef __ASMaxp_ELF_H
-#define __ASMaxp_ELF_H
+#ifndef __ASM_ALPHA_ELF_H
+#define __ASM_ALPHA_ELF_H
 
 /*
  * ELF register definitions..
@@ -39,7 +39,7 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
    the loader.  We need to make sure that it is out of the way of the program
    that it will "exec", and that there is sufficient room for the brk.  */
 
-#define ELF_ET_DYN_BASE                (2 * TASK_SIZE / 3)
+#define ELF_ET_DYN_BASE                (TASK_UNMAPPED_BASE + 0x1000000)
 
 /* $0 is set by ld.so to a pointer to a function which might be 
    registered using atexit.  This provides a mean for the dynamic
@@ -126,8 +126,10 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
 })
 
 #ifdef __KERNEL__
-#define SET_PERSONALITY(ibcs2) \
-       current->personality = (ibcs2 ? PER_SVR4 : PER_LINUX)
+#define SET_PERSONALITY(EX, IBCS2)                             \
+       current->personality =                                  \
+         ((EX).e_flags & EF_ALPHA_32BIT                        \
+          ? PER_LINUX_32BIT : (IBCS2) ? PER_SVR4 : PER_LINUX)
 #endif
 
 #endif
index 08cd4df67c6bf5407d053e698c2b3712ff055f51..2a09c61d8de63da2f5b32d084125783f40c21d09 100644 (file)
@@ -15,7 +15,8 @@
 /* This decides where the kernel will search for a free chunk of vm
  * space during mmap's.
  */
-#define TASK_UNMAPPED_BASE     (TASK_SIZE / 3)
+#define TASK_UNMAPPED_BASE \
+  ((current->personality & ADDR_LIMIT_32BIT) ? 0x40000000 : TASK_SIZE / 2)
 
 /*
  * Bus types
index 06c3bb7e36ca6a4bbc8a42db74e71a3014b00808..80e27df1a3a68972167713cf843fd245c1dc36b3 100644 (file)
@@ -145,10 +145,17 @@ struct k_sigaction {
 /* Here we must cater to libcs that poke about in kernel headers.  */
 
 struct sigaction {
-       __sighandler_t  sa_handler;
+       union {
+         __sighandler_t        _sa_handler;
+         void (*_sa_sigaction)(int, struct siginfo *, void *);
+       } _u;
        sigset_t        sa_mask;
        int             sa_flags;
 };
+
+#define sa_handler     _u._sa_handler
+#define sa_sigaction   _u._sa_sigaction
+
 #endif /* __KERNEL__ */
 
 typedef struct sigaltstack {
index c7c32636689aa950b962f21c1c529f110bf8fb7e..7e0622419817221259e04d90fa8a015f51b39fa6 100644 (file)
@@ -8,7 +8,7 @@
 #define __NR_write               4
 #define __NR_osf_old_open        5     /* not implemented */
 #define __NR_close               6
-#define __NR_wait4               7
+#define __NR_osf_wait4           7
 #define __NR_osf_old_creat       8     /* not implemented */
 #define __NR_link                9
 #define __NR_unlink             10
 #define __NR_setgroups          80
 #define __NR_osf_old_getpgrp    81     /* not implemented */
 #define __NR_setpgrp            82     /* BSD alias for setpgid */
-#define __NR_setitimer          83
+#define __NR_osf_setitimer      83
 #define __NR_osf_old_wait       84     /* not implemented */
 #define __NR_osf_table          85     /* not implemented */
-#define __NR_getitimer          86
+#define __NR_osf_getitimer      86
 #define __NR_gethostname        87
 #define __NR_sethostname        88
 #define __NR_getdtablesize      89
 #define __NR_dup2               90
 #define __NR_fstat              91
 #define __NR_fcntl              92
-#define __NR_select             93
+#define __NR_osf_select                 93
 #define __NR_poll               94
 #define __NR_fsync              95
 #define __NR_setpriority        96
 #define __NR_recvmsg           113
 #define __NR_sendmsg           114
 #define __NR_osf_old_vtrace    115     /* not implemented */
-#define __NR_gettimeofday      116
-#define __NR_getrusage         117
+#define __NR_osf_gettimeofday  116
+#define __NR_osf_getrusage     117
 #define __NR_getsockopt                118
 
 #define __NR_readv             120
 #define __NR_writev            121
-#define __NR_settimeofday      122
+#define __NR_osf_settimeofday  122
 #define __NR_fchown            123
 #define __NR_fchmod            124
 #define __NR_recvfrom          125
 #define __NR_socketpair                135
 #define __NR_mkdir             136
 #define __NR_rmdir             137
-#define __NR_utimes            138
+#define __NR_osf_utimes                138
 #define __NR_osf_old_sigreturn 139     /* not implemented */
 #define __NR_osf_adjtime       140     /* not implemented */
 #define __NR_getpeername       141
 #define __NR_rt_sigtimedwait           355
 #define __NR_rt_sigqueueinfo           356
 #define __NR_rt_sigsuspend             357
+#define __NR_select                    358
+#define __NR_gettimeofday              359
+#define __NR_settimeofday              360
+#define __NR_getitimer                 361
+#define __NR_setitimer                 362
+#define __NR_utimes                    363
+#define __NR_getrusage                 364
+#define __NR_wait4                     365
+
 
 
 #if defined(__LIBRARY__) && defined(__GNUC__)
index f58698563820f1f825268f5fcec0337a53d188c6..700bb823344e1cc50c8f3d3bb90a81385a401873 100644 (file)
@@ -86,7 +86,7 @@ typedef struct user_i387_struct elf_fpregset_t;
 #define ELF_PLATFORM  ("i386\0i486\0i586\0i686"+((boot_cpu_data.x86-3)*5))
 
 #ifdef __KERNEL__
-#define SET_PERSONALITY(ibcs2) \
+#define SET_PERSONALITY(ex, ibcs2) \
        current->personality = (ibcs2 ? PER_SVR4 : PER_LINUX)
 #endif
 
index 3ba3f8af50dff508cff28bce783704b70c9ed9e3..a68b23fc638e54e0185b7c80f778bde4e9a3e40d 100644 (file)
@@ -21,6 +21,7 @@
 
 #include <asm/system.h>
 #include <asm/atomic.h>
+#include <asm/spinlock.h>
 
 struct semaphore {
        atomic_t count;
@@ -38,6 +39,8 @@ asmlinkage void __up_wakeup(void /* special register calling convention */);
 extern void __down(struct semaphore * sem);
 extern void __up(struct semaphore * sem);
 
+extern spinlock_t semaphore_wake_lock;
+
 #define sema_init(sem, val)    atomic_set(&((sem)->count), (val))
 
 /*
@@ -55,10 +58,9 @@ static inline void wake_one_more(struct semaphore * sem)
 {
        unsigned long flags;
 
-       save_flags(flags);
-       cli();
+       spin_lock_irqsave(&semaphore_wake_lock, flags);
        sem->waking++;
-       restore_flags(flags);
+       spin_unlock_irqrestore(&semaphore_wake_lock, flags);
 }
 
 static inline int waking_non_zero(struct semaphore *sem)
@@ -66,13 +68,12 @@ static inline int waking_non_zero(struct semaphore *sem)
        unsigned long flags;
        int ret = 0;
 
-       save_flags(flags);
-       cli();
+       spin_lock_irqsave(&semaphore_wake_lock, flags);
        if (sem->waking > 0) {
                sem->waking--;
                ret = 1;
        }
-       restore_flags(flags);
+       spin_unlock_irqrestore(&semaphore_wake_lock, flags);
        return ret;
 }
 
index 5da9ff0ed2008e1c7d0cee18b9492d2b12c5959d..598a210080f466eb7a9cebbfcf274edb59d85edf 100644 (file)
@@ -144,11 +144,18 @@ struct k_sigaction {
 /* Here we must cater to libcs that poke about in kernel headers.  */
 
 struct sigaction {
-       __sighandler_t sa_handler;
+       union {
+         __sighandler_t _sa_handler;
+         void (*_sa_sigaction)(int, struct siginfo *, void *);
+       } _u;
        sigset_t sa_mask;
        unsigned long sa_flags;
        void (*sa_restorer)(void);
 };
+
+#define sa_handler     _u._sa_handler
+#define sa_sigaction   _u._sa_sigaction
+
 #endif /* __KERNEL__ */
 
 typedef struct sigaltstack {
index 73826805225e7374b295ffb163b49f233f4993f3..e940c7c6f222f963a00105df5e8f0b8085a94d95 100644 (file)
  *   3 - kernel data segment
  *   4 - user code segment
  *   5 - user data segment
- * ...
- *   8 - TSS #0
- *   9 - LDT #0
- *  10 - TSS #1
- *  11 - LDT #1
+ *   6 - not used
+ *   7 - not used
+ *   8 - APM BIOS support
+ *   9 - APM BIOS support
+ *  10 - APM BIOS support
+ *  11 - APM BIOS support
+ *  12 - TSS #0
+ *  13 - LDT #0
+ *  14 - TSS #1
+ *  15 - LDT #1
  */
-#define FIRST_TSS_ENTRY 8
+#define FIRST_TSS_ENTRY 12
 #define FIRST_LDT_ENTRY (FIRST_TSS_ENTRY+1)
 #define _TSS(n) ((((unsigned long) n)<<4)+(FIRST_TSS_ENTRY<<3))
 #define _LDT(n) ((((unsigned long) n)<<4)+(FIRST_LDT_ENTRY<<3))
index 2dc02df02ad368466fc0e040df50592e8cbc3dba..53766f701544782231a4ea028f62bfbfcb767f90 100644 (file)
@@ -21,7 +21,7 @@
 #define __NR_time               13
 #define __NR_mknod              14
 #define __NR_chmod              15
-#define __NR_chown              16
+#define __NR_lchown             16
 #define __NR_break              17
 #define __NR_oldstat            18
 #define __NR_lseek              19
 #define __NR_rt_sigsuspend     179
 #define __NR_pread             180
 #define __NR_pwrite            181
-#define __NR_lchown            182
+#define __NR_chown             182
 
 /* user-visible error numbers are in the range -1 - -122: see <asm-i386/errno.h> */
 
index d39853edd437c7a1824739ec5321075f2b22415f..70a0c80870d37525437573e2091c15d6dda4a303 100644 (file)
@@ -80,7 +80,7 @@ typedef struct user_m68kfp_struct elf_fpregset_t;
 #define ELF_PLATFORM  (NULL)
 
 #ifdef __KERNEL__
-#define SET_PERSONALITY(ibcs2) \
+#define SET_PERSONALITY(ex, ibcs2) \
        current->personality = (ibcs2 ? PER_SVR4 : PER_LINUX)
 #endif
 
index 325f283813f246b623150610d529bb5e326eb54b..394b9db56ef0a8fee4fd376fdfe6250c701cb7e5 100644 (file)
@@ -75,7 +75,7 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
 #define ELF_PLATFORM   (NULL)
 
 #ifdef __KERNEL__
-#define SET_PERSONALITY(ibcs2) \
+#define SET_PERSONALITY(ex, ibcs2) \
        current->personality = (ibcs2 ? PER_SVR4 : PER_LINUX)
 #endif
 
index d1eeb8c2922cb29f29ba97b089dd3b52187fe4d8..483cd73f200d26ae3cdbd09558298445e347894f 100644 (file)
@@ -60,7 +60,7 @@ typedef unsigned long elf_fpregset_t;
 #define ELF_PLATFORM   (NULL)
 
 #ifdef __KERNEL__
-#define SET_PERSONALITY(ibcs2) \
+#define SET_PERSONALITY(ex, ibcs2) \
        current->personality = (ibcs2 ? PER_SVR4 : PER_LINUX)
 #endif
 
index 7f20fdfaf8fe551836254362e6428c4aefd78920..a6891d6810182fe5252f339af81c484ea9c1eaec 100644 (file)
@@ -25,10 +25,6 @@ typedef unsigned long elf_fpregset_t;
 #define ELF_DATA               ELFDATA2MSB
 #endif
 
-#ifndef ELF_FLAGS_INIT
-#define ELF_FLAGS_INIT current->tss.flags &= ~SPARC_FLAG_32BIT
-#endif
-
 /*
  * This is used to ensure we don't load something for the wrong architecture.
  */
@@ -63,8 +59,13 @@ typedef unsigned long elf_fpregset_t;
 #define ELF_PLATFORM   (NULL)
 
 #ifdef __KERNEL__
-#define SET_PERSONALITY(ibcs2)                                 \
+#define SET_PERSONALITY(ex, ibcs2)                             \
 do {                                                           \
+       if ((ex).e_ident[EI_CLASS] == ELFCLASS32)               \
+               current->tss.flags |= SPARC_FLAG_32BIT;         \
+       else                                                    \
+               current->tss.flags &= ~SPARC_FLAG_32BIT;        \
+                                                               \
        if (ibcs2)                                              \
                current->personality = PER_SVR4;                \
        else if (current->personality != PER_LINUX32)           \
index 3264451109771d824414571bc7d7f3edb1bb8955..6fd874c7e38c5166973a787e579829daa9a4d16e 100644 (file)
@@ -22,10 +22,8 @@ typedef unsigned short       apm_event_t;
 
 #ifdef __KERNEL__
 
-#include <linux/tasks.h>       /* for NR_TASKS */
-#include <linux/sched.h>       /* for _TSS */
-
-#define APM_CS         _TSS(NR_TASKS)
+#define APM_40         0x40
+#define APM_CS         (APM_40 + 8)
 #define APM_CS_16      (APM_CS + 8)
 #define APM_DS         (APM_CS_16 + 8)
 
index e681f6a01c4e9261ec00a23a8baa08a7f04e1c8a..d07d1e61a6fe187184095000e87e2fcd45279277 100644 (file)
@@ -3,7 +3,7 @@
 /*
  *     cd1400.h  -- cd1400 UART hardware info.
  *
- *     Copyright (C) 1996-1997  Stallion Technologies (support@stallion.oz.au).
+ *     Copyright (C) 1996-1998  Stallion Technologies (support@stallion.oz.au).
  *     Copyright (C) 1994-1996  Greg Ungerer (gerg@stallion.oz.au).
  *
  *     This program is free software; you can redistribute it and/or modify
index aa23c5da81ffcb3616d636e4788a7b9801f3c93d..2180e433023c2ac6ae43149b7fc9660520c9213f 100644 (file)
@@ -3,7 +3,7 @@
 /*
  *     cdk.h  -- CDK interface definitions.
  *
- *     Copyright (C) 1996-1997  Stallion Technologies (support@stallion.oz.au).
+ *     Copyright (C) 1996-1998  Stallion Technologies (support@stallion.oz.au).
  *     Copyright (C) 1994-1996  Greg Ungerer (gerg@stallion.oz.au).
  *
  *     This program is free software; you can redistribute it and/or modify
index d56918486c31649cbcbcb9bce74ea34e8b87e131..066888599ae167b8625885f16a9b28c567e4b7a8 100644 (file)
@@ -3,7 +3,7 @@
 /*
  *     comstats.h  -- Serial Port Stats.
  *
- *     Copyright (C) 1996-1997  Stallion Technologies (support@stallion.oz.au).
+ *     Copyright (C) 1996-1998  Stallion Technologies (support@stallion.oz.au).
  *     Copyright (C) 1994-1996  Greg Ungerer (gerg@stallion.oz.au).
  *
  *     This program is free software; you can redistribute it and/or modify
index bac58b52f1eb9670ae6e7d0803958828c6407173..afa36392297a341ce79e7d52a0231453776b7a89 100644 (file)
@@ -2,7 +2,7 @@
 #define _LINUX_CTYPE_H
 
 /*
- * NOTE! This ctype does not handle EOF like the standarc C
+ * NOTE! This ctype does not handle EOF like the standard C
  * library is required to.
  */
 
index f3cbde8a9ab9699eb3a40d789d7611ce0ea10c64..e17a72c1b026daa5bb813927b809f841b6a7101b 100644 (file)
@@ -239,6 +239,43 @@ typedef struct {
 #define R_68K_JMP_SLOT 21
 #define R_68K_RELATIVE 22
 
+/*
+ * Alpha ELF relocation types
+ */
+#define R_ALPHA_NONE            0       /* No reloc */
+#define R_ALPHA_REFLONG         1       /* Direct 32 bit */
+#define R_ALPHA_REFQUAD         2       /* Direct 64 bit */
+#define R_ALPHA_GPREL32         3       /* GP relative 32 bit */
+#define R_ALPHA_LITERAL         4       /* GP relative 16 bit w/optimization */
+#define R_ALPHA_LITUSE          5       /* Optimization hint for LITERAL */
+#define R_ALPHA_GPDISP          6       /* Add displacement to GP */
+#define R_ALPHA_BRADDR          7       /* PC+4 relative 23 bit shifted */
+#define R_ALPHA_HINT            8       /* PC+4 relative 16 bit shifted */
+#define R_ALPHA_SREL16          9       /* PC relative 16 bit */
+#define R_ALPHA_SREL32          10      /* PC relative 32 bit */
+#define R_ALPHA_SREL64          11      /* PC relative 64 bit */
+#define R_ALPHA_OP_PUSH         12      /* OP stack push */
+#define R_ALPHA_OP_STORE        13      /* OP stack pop and store */
+#define R_ALPHA_OP_PSUB         14      /* OP stack subtract */
+#define R_ALPHA_OP_PRSHIFT      15      /* OP stack right shift */
+#define R_ALPHA_GPVALUE         16
+#define R_ALPHA_GPRELHIGH       17
+#define R_ALPHA_GPRELLOW        18
+#define R_ALPHA_IMMED_GP_16     19
+#define R_ALPHA_IMMED_GP_HI32   20
+#define R_ALPHA_IMMED_SCN_HI32  21
+#define R_ALPHA_IMMED_BR_HI32   22
+#define R_ALPHA_IMMED_LO32      23
+#define R_ALPHA_COPY            24      /* Copy symbol at runtime */
+#define R_ALPHA_GLOB_DAT        25      /* Create GOT entry */
+#define R_ALPHA_JMP_SLOT        26      /* Create PLT entry */
+#define R_ALPHA_RELATIVE        27      /* Adjust by program base */
+
+/* Legal values for e_flags field of Elf64_Ehdr.  */
+
+#define EF_ALPHA_32BIT         1       /* All addresses are below 2GB */
+
+
 typedef struct elf32_rel {
   Elf32_Addr   r_offset;
   Elf32_Word   r_info;
index e877574809cb7469c4c12f2e401ec3c6dfd49056..70d1571a0bcf68c5bd8126c67f65c62e0a435cdd 100644 (file)
@@ -125,9 +125,6 @@ extern int max_files, nr_files, nr_free_files;
 #define IS_NOATIME(inode) ((inode)->i_flags & MS_NOATIME)
 #define IS_NODIRATIME(inode) ((inode)->i_flags & MS_NODIRATIME)
 
-extern void update_atime (struct inode *inode);
-#define UPDATE_ATIME(inode) update_atime (inode)
-
 /* the read-only stuff doesn't really belong here, but any other place is
    probably as bad and I don't want to create yet another include file. */
 
@@ -153,6 +150,9 @@ extern void update_atime (struct inode *inode);
 #include <asm/byteorder.h>
 #include <asm/bitops.h>
 
+extern void update_atime (struct inode *inode);
+#define UPDATE_ATIME(inode) update_atime (inode)
+
 extern void buffer_init(void);
 extern void inode_init(void);
 extern void file_table_init(void);
@@ -612,6 +612,7 @@ struct super_operations {
        void (*write_super) (struct super_block *);
        int (*statfs) (struct super_block *, struct statfs *, int);
        int (*remount_fs) (struct super_block *, int *, char *);
+       void (*clear_inode) (struct inode *);
 };
 
 struct dquot_operations {
index a8a3cbecefbcd3c6870b97d6843d955c1c7a65ca..a81dc12969174a9db91390bbe445791929d1d425 100644 (file)
@@ -163,10 +163,6 @@ struct iso_directory_record {
 #define ISOFS_ZONE_BITS(INODE)   ((INODE)->i_sb->u.isofs_sb.s_log_zone_size)
 
 #define ISOFS_SUPER_MAGIC 0x9660
-#define ISOFS_FILE_UNKNOWN 0
-#define ISOFS_FILE_TEXT 1
-#define ISOFS_FILE_BINARY 2
-#define ISOFS_FILE_TEXT_M 3
 
 #ifdef __KERNEL__
 extern int isonum_711(char *);
index a1343a6360d3b633a4b525b6de31d631a3f63061..0350b88bc30919f88f3368afa9275c7c0e18070e 100644 (file)
@@ -6,7 +6,6 @@
  */
 struct iso_inode_info {
        unsigned int i_first_extent;
-       unsigned char i_file_format;
 };
 
 #endif
index 35bd29203c9ade1723dfdb5d98a417378f948c3e..834ae348bddafff6b3762782b26af644f794716b 100644 (file)
@@ -13,7 +13,6 @@ struct isofs_sb_info {
        
        unsigned char s_high_sierra; /* A simple flag */
        unsigned char s_mapping;
-       unsigned char s_conversion;
        unsigned char s_rock;
        unsigned char s_joliet_level;
        unsigned char s_utf8;
index e1bf3726491dffb55f8484dadc15fc06a1fc6376..269ef88ba166f30f5202925e5f6d804ff5a2580e 100644 (file)
@@ -3,7 +3,7 @@
 /*
  *     istallion.h  -- stallion intelligent multiport serial driver.
  *
- *     Copyright (C) 1996-1997  Stallion Technologies (support@stallion.oz.au).
+ *     Copyright (C) 1996-1998  Stallion Technologies (support@stallion.oz.au).
  *     Copyright (C) 1994-1996  Greg Ungerer (gerg@stallion.oz.au).
  *
  *     This program is free software; you can redistribute it and/or modify
@@ -102,6 +102,7 @@ typedef struct stlibrd {
        int             nrports;
        int             nrdevs;
        unsigned int    iobase;
+       int             iosize;
        unsigned long   memaddr;
        void            *membase;
        int             memsize;
index 1566fee80d503d46e422b4a04a988b9a99be1a35..ba2e34f07c47598700ccff456952d7159bd2e194 100644 (file)
@@ -8,9 +8,10 @@
  */
 
 /* Magic numbers for defining port-device mappings */
+#define LP_PARPORT_UNSPEC -4
 #define LP_PARPORT_AUTO -3
 #define LP_PARPORT_OFF -2
-#define LP_PARPORT_UNSPEC -1
+#define LP_PARPORT_NONE -1
 
 /*
  * Per POSIX guidelines, this module reserves the LP and lp prefixes
index 483aea5dc86aadb65489d286aafb2bca22dc71cb..475c6885403a90cdb2d45f555797302e538e3446 100644 (file)
@@ -94,6 +94,7 @@ struct module_info
 #define MOD_AUTOCLEAN          4
 #define MOD_VISITED            8
 #define MOD_USED_ONCE          16
+#define MOD_JUST_FREED         32
 
 /* Values for query_module's which.  */
 
index 194746bc4440329b92c49dd860dc93c674745e36..d689b6db364230706593ceb455d5ea3a40abe38f 100644 (file)
@@ -8,12 +8,14 @@
 /* Flags for bug emulation. These occupy the top three bytes. */
 #define STICKY_TIMEOUTS                0x4000000
 #define WHOLE_SECONDS          0x2000000
+#define ADDR_LIMIT_32BIT       0x0800000
 
 /* Personality types. These go in the low byte. Avoid using the top bit,
  * it will conflict with error returns.
  */
 #define PER_MASK               (0x00ff)
 #define PER_LINUX              (0x0000)
+#define PER_LINUX_32BIT                (0x0000 | ADDR_LIMIT_32BIT)
 #define PER_SVR4               (0x0001 | STICKY_TIMEOUTS)
 #define PER_SVR3               (0x0002 | STICKY_TIMEOUTS)
 #define PER_SCOSVR3            (0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS)
index b43939ed6fac6edea291f2d7c8208b10cef3d340..38685e0770bc78cff08a8fd0f1942062baf6839b 100644 (file)
@@ -3,7 +3,7 @@
 /*
  *     sc26198.h  -- SC26198 UART hardware info.
  *
- *     Copyright (C) 1995-1997  Stallion Technologies (support@stallion.oz.au).
+ *     Copyright (C) 1995-1998  Stallion Technologies (support@stallion.oz.au).
  *
  *     This program is free software; you can redistribute it and/or modify
  *     it under the terms of the GNU General Public License as published by
index bad6d16101ef27aa64490f69bb53a965125973bb..52b290572efe938c31bfcfdf2a475dadb98b9632 100644 (file)
@@ -75,9 +75,9 @@ extern int last_pid;
 #define TASK_RUNNING           0
 #define TASK_INTERRUPTIBLE     1
 #define TASK_UNINTERRUPTIBLE   2
-#define TASK_ZOMBIE            3
-#define TASK_STOPPED           4
-#define TASK_SWAPPING          5
+#define TASK_ZOMBIE            4
+#define TASK_STOPPED           8
+#define TASK_SWAPPING          16
 
 /*
  * Scheduling policies
@@ -448,12 +448,14 @@ extern int securelevel;   /* system security level */
 
 #define CURRENT_TIME (xtime.tv_sec)
 
+extern void FASTCALL(__wake_up(struct wait_queue ** p, unsigned int mode));
 extern void FASTCALL(sleep_on(struct wait_queue ** p));
 extern void FASTCALL(interruptible_sleep_on(struct wait_queue ** p));
-extern void FASTCALL(wake_up(struct wait_queue ** p));
-extern void FASTCALL(wake_up_interruptible(struct wait_queue ** p));
 extern void FASTCALL(wake_up_process(struct task_struct * tsk));
 
+#define wake_up(x)                     __wake_up((x),TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE)
+#define wake_up_interruptible(x)       __wake_up((x),TASK_INTERRUPTIBLE)
+
 extern int in_group_p(gid_t grp);
 
 extern void flush_signals(struct task_struct *);
index 5b3100a751d10bede3443b3085b26aea69358ac3..ce7a1cbcbe048b8cc83890d64d5c07017ca39bed 100644 (file)
@@ -23,9 +23,6 @@
 #define HAVE_ALLOC_SKB         /* For the drivers to know */
 #define HAVE_ALIGNABLE_SKB     /* Ditto 8)                */
 
-#define FREE_READ      1
-#define FREE_WRITE     0
-
 #define CHECKSUM_NONE 0
 #define CHECKSUM_HW 1
 #define CHECKSUM_UNNECESSARY 2
@@ -141,9 +138,6 @@ struct sk_buff
 
 #include <asm/system.h>
 
-#if 0
-extern void                    print_skb(struct sk_buff *);
-#endif
 extern void                    __kfree_skb(struct sk_buff *skb);
 extern void                    skb_queue_head_init(struct sk_buff_head *list);
 extern void                    skb_queue_head(struct sk_buff_head *list,struct sk_buff *buf);
@@ -160,7 +154,7 @@ extern void                 kfree_skbmem(struct sk_buff *skb);
 extern struct sk_buff *                skb_clone(struct sk_buff *skb, int priority);
 extern struct sk_buff *                skb_copy(struct sk_buff *skb, int priority);
 extern struct sk_buff *                skb_realloc_headroom(struct sk_buff *skb, int newheadroom);
-#define dev_kfree_skb(a, b)    kfree_skb((a), (b))
+#define dev_kfree_skb(a)       kfree_skb(a)
 extern unsigned char *         skb_put(struct sk_buff *skb, unsigned int len);
 extern unsigned char *         skb_push(struct sk_buff *skb, unsigned int len);
 extern unsigned char *         skb_pull(struct sk_buff *skb, unsigned int len);
@@ -174,7 +168,7 @@ extern __inline__ int skb_queue_empty(struct sk_buff_head *list)
        return (list->next == (struct sk_buff *) list);
 }
 
-extern __inline__ void kfree_skb(struct sk_buff *skb, int rw)
+extern __inline__ void kfree_skb(struct sk_buff *skb)
 {
        if (atomic_dec_and_test(&skb->users))
                __kfree_skb(skb);
@@ -197,13 +191,13 @@ extern __inline__ int skb_shared(struct sk_buff *skb)
  *     a packet thats being forwarded.
  */
  
-extern __inline__ struct sk_buff *skb_unshare(struct sk_buff *skb, int pri, int dir)
+extern __inline__ struct sk_buff *skb_unshare(struct sk_buff *skb, int pri)
 {
        struct sk_buff *nskb;
        if(!skb_cloned(skb))
                return skb;
        nskb=skb_copy(skb, pri);
-       kfree_skb(skb, dir);    /* Free our shared copy */
+       kfree_skb(skb);         /* Free our shared copy */
        return nskb;
 }
 
@@ -530,7 +524,7 @@ extern __inline__ void skb_queue_purge(struct sk_buff_head *list)
 {
        struct sk_buff *skb;
        while ((skb=skb_dequeue(list))!=NULL)
-               kfree_skb(skb,0);
+               kfree_skb(skb);
 }
 
 extern __inline__ struct sk_buff *dev_alloc_skb(unsigned int length)
index ffaca210a52aa14bb72d9767ada9eb84aee8dbc0..35274488dadfc6a68bcdf886d1a9a6a12db807ff 100644 (file)
@@ -3,7 +3,7 @@
 /*
  *     stallion.h  -- stallion multiport serial driver.
  *
- *     Copyright (C) 1996-1997  Stallion Technologies (support@stallion.oz.au).
+ *     Copyright (C) 1996-1998  Stallion Technologies (support@stallion.oz.au).
  *     Copyright (C) 1994-1996  Greg Ungerer (gerg@stallion.oz.au).
  *
  *     This program is free software; you can redistribute it and/or modify
index e18c0493ac61c1f90fca9e5ffbba6eb1b1570c35..ac41b7a420cbb5552e7c2b0e40c4f1376f89cbe1 100644 (file)
@@ -166,7 +166,7 @@ extern __inline__ int ip_finish_output(struct sk_buff *skb)
                return dst->neighbour->output(skb);
 
        printk(KERN_DEBUG "khm\n");
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        return -EINVAL;
 }
 
index 6cefea06f3d76c7d19d6644d36f2ef7d0c64ca68..30e02d7ff260e8594df05b6482a966d5040dd975 100644 (file)
@@ -426,7 +426,7 @@ static struct dev_name_struct {
        { NULL, 0 }
 };
 
-__initfunc(dev_t name_to_dev_t(char *line))
+__initfunc(kdev_t name_to_kdev_t(char *line))
 {
        int base = 0;
        if (strncmp(line,"/dev/",5) == 0) {
@@ -447,7 +447,7 @@ __initfunc(dev_t name_to_dev_t(char *line))
 
 __initfunc(static void root_dev_setup(char *line, int *num))
 {
-       ROOT_DEV = name_to_dev_t(line);
+       ROOT_DEV = name_to_kdev_t(line);
 }
 
 /*
@@ -1002,10 +1002,10 @@ __initfunc(asmlinkage void start_kernel(void))
        memory_start = paging_init(memory_start,memory_end);
        trap_init();
        init_IRQ();
-       memory_start = console_init(memory_start,memory_end);
        sched_init();
        time_init();
        parse_options(command_line);
+       memory_start = console_init(memory_start,memory_end);
 #ifdef CONFIG_MODULES
        init_modules();
 #endif
@@ -1165,14 +1165,16 @@ static int init(void * unused)
 
 #ifdef CONFIG_BLK_DEV_INITRD
        root_mountflags = real_root_mountflags;
-       if (mount_initrd && ROOT_DEV != real_root_dev && ROOT_DEV == MKDEV(RAMDISK_MAJOR,0)) {
+       if (mount_initrd && ROOT_DEV != real_root_dev
+           && MAJOR(ROOT_DEV) == RAMDISK_MAJOR && MINOR(ROOT_DEV) == 0) {
                int error;
                int i, pid;
 
                pid = kernel_thread(do_linuxrc, "/linuxrc", SIGCHLD);
                if (pid>0)
                        while (pid != wait(&i));
-               if (real_root_dev != MKDEV(RAMDISK_MAJOR, 0)) {
+               if (MAJOR(real_root_dev) != RAMDISK_MAJOR
+                    || MINOR(real_root_dev) != 0) {
                        error = change_root(real_root_dev,"/initrd");
                        if (error)
                                printk(KERN_ERR "Change root to /initrd: "
index 801f3c002bf0d8fbc7bf794fb3b032afa36e6932..08e8eb8522989418a9f07e5f80ebc8c39ccbac1e 100644 (file)
@@ -304,7 +304,7 @@ int acct_process(long exitcode)
        }
        vsize = vsize / 1024;
        ac.ac_mem = encode_comp_t(vsize);
-       ac.ac_io = encode_comp_t(current->io_usage);    /* %% */
+       ac.ac_io = encode_comp_t(0 /* current->io_usage */);    /* %% */
        ac.ac_rw = encode_comp_t(ac.ac_io / 1024);
        ac.ac_minflt = encode_comp_t(current->min_flt);
        ac.ac_majflt = encode_comp_t(current->maj_flt);
index f3125d1625f675457ca84ef34a8cb9258abda621..f64943673bf08bf2e413dd21aaf016052c50e0bf 100644 (file)
@@ -324,8 +324,7 @@ EXPORT_SYMBOL(request_region);
 EXPORT_SYMBOL(release_region);
 
 /* process management */
-EXPORT_SYMBOL(wake_up);
-EXPORT_SYMBOL(wake_up_interruptible);
+EXPORT_SYMBOL(__wake_up);
 EXPORT_SYMBOL(sleep_on);
 EXPORT_SYMBOL(interruptible_sleep_on);
 EXPORT_SYMBOL(schedule);
index a8dc3f85fedf8d516f5cab4a7f191576e97233ba..b4edc07d96dbaedd0a450c34c85a4e9c8867ee55 100644 (file)
@@ -54,7 +54,7 @@ struct module *module_list = &kernel_module;
 static long get_mod_name(const char *user_name, char **buf);
 static void put_mod_name(char *buf);
 static struct module *find_module(const char *name);
-static void free_module(struct module *);
+static void free_module(struct module *, int tag_freed);
 
 
 /*
@@ -363,6 +363,7 @@ sys_delete_module(const char *name_user)
        struct module *mod, *next;
        char *name;
        long error = -EPERM;
+       int something_changed;
 
        lock_kernel();
        if (!suser())
@@ -386,25 +387,35 @@ sys_delete_module(const char *name_user)
                if (mod->refs != NULL || __MOD_IN_USE(mod))
                        goto out;
 
-               free_module(mod);
+               free_module(mod, 0);
                error = 0;
                goto out;
        }
 
        /* Do automatic reaping */
+restart:
+       something_changed = 0;
        for (mod = module_list; mod != &kernel_module; mod = next) {
                next = mod->next;
-               if (mod->refs == NULL &&
-                   ((mod->flags
-                     & (MOD_AUTOCLEAN|MOD_RUNNING|MOD_DELETED|MOD_USED_ONCE))
-                    == (MOD_AUTOCLEAN|MOD_RUNNING|MOD_USED_ONCE)) &&
-                   !__MOD_IN_USE(mod)) {
-                       if (mod->flags & MOD_VISITED)
+               if (mod->refs == NULL
+                   && (mod->flags & MOD_AUTOCLEAN)
+                   && (mod->flags & MOD_RUNNING)
+                   && !(mod->flags & MOD_DELETED)
+                   && (mod->flags & MOD_USED_ONCE)
+                   && !__MOD_IN_USE(mod)) {
+                       if ((mod->flags & MOD_VISITED)
+                           && !(mod->flags & MOD_JUST_FREED)) {
                                mod->flags &= ~MOD_VISITED;
-                       else
-                               free_module(mod);
+                       } else {
+                               free_module(mod, 1);
+                               something_changed = 1;
+                       }
                }
        }
+       if (something_changed)
+               goto restart;
+       for (mod = module_list; mod != &kernel_module; mod = mod->next)
+               mod->flags &= ~MOD_JUST_FREED;
        error = 0;
 out:
        unlock_kernel();
@@ -764,7 +775,7 @@ find_module(const char *name)
  */
 
 static void
-free_module(struct module *mod)
+free_module(struct module *mod, int tag_freed)
 {
        struct module_ref *dep;
        unsigned i;
@@ -786,6 +797,8 @@ free_module(struct module *mod)
                for (pp = &dep->dep->refs; *pp != dep; pp = &(*pp)->next_ref)
                        continue;
                *pp = dep->next_ref;
+               if (tag_freed && dep->dep->refs == NULL)
+                       dep->dep->flags |= MOD_JUST_FREED;
        }
 
        /* And from the main module list.  */
index de7daeb3af6ee755ff226a3298d56b595b70dcc8..afc178c5ee5d9901fa5a155c0a0e6b54d0487543 100644 (file)
@@ -61,36 +61,49 @@ static int selected_console = 0;
  */
 __initfunc(void console_setup(char *str, int *ints))
 {
-       char *s;
-       int i;
        struct console_cmdline *c;
+       char name[sizeof(c->name)];
+       char *s, *options;
+       int i, idx;
 
-       for(i = 0; i < MAX_CMDLINECONSOLES && console_cmdline[i].name[0]; i++)
-               ;
-       if (i == MAX_CMDLINECONSOLES)
-               return;
-       c = &console_cmdline[i];
-       selected_console = 1;
-
+       /*
+        *      Decode str into name, index, options.
+        */
        if (str[0] >= '0' && str[0] <= '9') {
-               strcpy(c->name, "ttyS");
-               strncpy(c->name + 4, str, sizeof(c->name) - 5);
+               strcpy(name, "ttyS");
+               strncpy(name + 4, str, sizeof(name) - 5);
        } else
-               strncpy(c->name, str, sizeof(c->name) - 1);
-       if ((c->options = strchr(str, ',')) != NULL)
-               *(c->options++) = 0;
+               strncpy(name, str, sizeof(name) - 1);
+       name[sizeof(name) - 1] = 0;
+       if ((options = strchr(str, ',')) != NULL)
+               *(options++) = 0;
 #ifdef __sparc__
        if (!strcmp(str, "ttya"))
-               strcpy(c->name, "ttyS0");
+               strcpy(name, "ttyS0");
        if (!strcmp(str, "ttyb"))
-               strcpy(c->name, "ttyS1");
+               strcpy(name, "ttyS1");
 #endif
-
-       for(s = c->name; *s; s++)
+       for(s = name; *s; s++)
                if (*s >= '0' && *s <= '9')
                        break;
-       c->index = simple_strtoul(s, NULL, 10);
+       idx = simple_strtoul(s, NULL, 10);
        *s = 0;
+
+       /*
+        *      See if this tty is not yet registered, and
+        *      if we have a slot free.
+        */
+       for(i = 0; i < MAX_CMDLINECONSOLES && console_cmdline[i].name[0]; i++)
+               if (strcmp(console_cmdline[i].name, name) == 0 &&
+                         console_cmdline[i].index == idx)
+                               return;
+       if (i == MAX_CMDLINECONSOLES)
+               return;
+       selected_console = 1;
+       c = &console_cmdline[i];
+       memcpy(c->name, name, sizeof(c->name));
+       c->options = options;
+       c->index = idx;
 }
 
 
index 2a93ef5dc7229df10680f8aa9a4f5c79c4c02a50..f48f520ff8cef59c8979921151369a796cc58094 100644 (file)
@@ -144,7 +144,6 @@ static inline void move_last_runqueue(struct task_struct * p)
        prev->next_run = p;
 }
 
-#ifdef __SMP__
 /*
  * The tasklist_lock protects the linked list of processes.
  *
@@ -158,8 +157,7 @@ static inline void move_last_runqueue(struct task_struct * p)
  */
 rwlock_t tasklist_lock = RW_LOCK_UNLOCKED;
 spinlock_t scheduler_lock = SPIN_LOCK_UNLOCKED;
-static spinlock_t runqueue_lock = SPIN_LOCK_UNLOCKED;
-#endif
+spinlock_t runqueue_lock = SPIN_LOCK_UNLOCKED;
 
 /*
  * Wake up a process. Put it on the run-queue if it's not
@@ -315,7 +313,7 @@ static inline void internal_add_timer(struct timer_list *timer)
        }
 }
 
-static spinlock_t timerlist_lock = SPIN_LOCK_UNLOCKED;
+spinlock_t timerlist_lock = SPIN_LOCK_UNLOCKED;
 
 void add_timer(struct timer_list *timer)
 {
@@ -509,27 +507,7 @@ rwlock_t waitqueue_lock = RW_LOCK_UNLOCKED;
  * have to protect against interrupts), as the actual removal from the
  * queue is handled by the process itself.
  */
-void wake_up(struct wait_queue **q)
-{
-       struct wait_queue *next;
-
-       read_lock(&waitqueue_lock);
-       if (q && (next = *q)) {
-               struct wait_queue *head;
-
-               head = WAIT_QUEUE_HEAD(q);
-               while (next != head) {
-                       struct task_struct *p = next->task;
-                       next = next->next;
-                       if ((p->state == TASK_UNINTERRUPTIBLE) ||
-                           (p->state == TASK_INTERRUPTIBLE))
-                               wake_up_process(p);
-               }
-       }
-       read_unlock(&waitqueue_lock);
-}
-
-void wake_up_interruptible(struct wait_queue **q)
+void __wake_up(struct wait_queue **q, unsigned int mode)
 {
        struct wait_queue *next;
 
@@ -541,7 +519,7 @@ void wake_up_interruptible(struct wait_queue **q)
                while (next != head) {
                        struct task_struct *p = next->task;
                        next = next->next;
-                       if (p->state == TASK_INTERRUPTIBLE)
+                       if (p->state & mode)
                                wake_up_process(p);
                }
        }
index 198230c368586e2878580ca5b509bd6eb9549888..6c1620a00ea89ac1a454f869aee8a023ed75b107 100644 (file)
@@ -136,7 +136,7 @@ int llc_mac_data_indicate(llcptr lp, struct sk_buff *skb)
                 *      No auto free for I pdus
                 */
                skb->sk = NULL;
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
        }
 
        if(lp->llc_callbacks)
index b9a22683281776298be8855e926fcafddf2b7a12..f0c6d116ee64a1813af441423acb97debe279cc8 100644 (file)
@@ -344,7 +344,7 @@ int llc_free_acknowledged_skbs(llcptr lp, unsigned char pdu_ack)
                fr = (frameptr) (pp->data + lp->dev->hard_header_len);
                ns_save = fr->i_hdr.ns;
 
-               kfree_skb(pp, FREE_WRITE);
+               kfree_skb(pp);
                ack_count++;
 
                if (ns_save == ack) 
index 1a12f4d6099c891115398683f7e7b3e79f4bfd98..93c359f7ee21bf9fc5172eeb1734616fdde19468 100644 (file)
@@ -62,7 +62,7 @@ int p8022_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
        }
 
        skb->sk = NULL;
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
index ef6a4976a957e55c268ae06972f93877244cf227..e2c53a951ce58c8cd15339001967817c4c4a2f66 100644 (file)
@@ -57,7 +57,7 @@ int p8022tr_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
        }
 
        skb->sk = NULL;
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
index 6ce58da353ce9f1479e078eff7ca825df2fc6932..b922640fc73321dbbb34f41f2009dea3b85aeb40 100644 (file)
@@ -67,7 +67,7 @@ int snap_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
                return proto->rcvfunc(skb, dev, &psnap_packet_type);
        }
        skb->sk = NULL;
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
index 15ae478ea5ebd55f258871be73232d03aaffa3fa..511c659704920062569e4c221f540111aca503b3 100644 (file)
@@ -96,7 +96,7 @@ static void aarp_expire(struct aarp_entry *a)
        struct sk_buff *skb;
        
        while((skb=skb_dequeue(&a->packet_queue))!=NULL)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
        kfree_s(a,sizeof(*a));
 }
 
@@ -663,7 +663,7 @@ static int aarp_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
         
        if(dev->type!=ARPHRD_ETHER)
        {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
        
@@ -673,7 +673,7 @@ static int aarp_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
         
        if(!skb_pull(skb,sizeof(*ea)))
        {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -686,7 +686,7 @@ static int aarp_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
        if(ea->function<AARP_REQUEST || ea->function > AARP_PROBE || ea->hw_len != ETH_ALEN || ea->pa_len != AARP_PA_ALEN ||
                ea->pa_src_zero != 0 || ea->pa_dst_zero != 0)
        {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
        
@@ -717,7 +717,7 @@ static int aarp_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
        if(ifa==NULL)
        {
                restore_flags(flags);
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 1;               
        }
        if(ifa->status&ATIF_PROBE)
@@ -730,7 +730,7 @@ static int aarp_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
                         
                        ifa->status|=ATIF_PROBE_FAIL;
                        restore_flags(flags);
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        return 1;               
                }
        }                                
@@ -789,7 +789,7 @@ static int aarp_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
                        break;
        }
        restore_flags(flags);
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 1;               
 }
 
index bad9f004e0c77579535c26ebc2eeea6accdc81f4..8b724361d6921936f5c69ba373e622baed22bb35 100644 (file)
@@ -1258,7 +1258,7 @@ static int atalk_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
        /* Size check */
        if(skb->len < sizeof(*ddp))
        {
-               kfree_skb(skb,FREE_READ);
+               kfree_skb(skb);
                return (0);
        }
 
@@ -1289,7 +1289,7 @@ static int atalk_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
         */
        if(skb->len < sizeof(*ddp))
        {
-               kfree_skb(skb,FREE_READ);
+               kfree_skb(skb);
                return (0);
        }
 
@@ -1300,13 +1300,13 @@ static int atalk_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
        if(ddp->deh_sum && atalk_checksum(ddp, ddp->deh_len) != ddp->deh_sum)
        {
                /* Not a valid appletalk frame - dustbin time */
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return (0);
        }
 
        if(call_in_firewall(AF_APPLETALK, skb->dev, ddp, NULL,&skb)!=FW_ACCEPT)
        {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return (0);
        }
 
@@ -1331,7 +1331,7 @@ static int atalk_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
                 */
                if (skb->pkt_type != PACKET_HOST || ddp->deh_dnet == 0)
                {
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        return (0);
                }
 
@@ -1340,7 +1340,7 @@ static int atalk_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
                 */
                if(call_fw_firewall(AF_APPLETALK, skb->dev, ddp, NULL, &skb) != FW_ACCEPT)
                {
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        return (0);
                }
 
@@ -1351,7 +1351,7 @@ static int atalk_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
                rt = atrtr_find(&ta);
                if(rt == NULL || ddp->deh_hops == DDP_MAXHOPS)
                {
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        return (0);
                }
                ddp->deh_hops++;
@@ -1389,7 +1389,7 @@ static int atalk_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
                        /* 22 bytes - 12 ether, 2 len, 3 802.2 5 snap */
                        skb = skb_realloc_headroom(skb, 32);
                else
-                       skb = skb_unshare(skb, GFP_ATOMIC, FREE_READ);
+                       skb = skb_unshare(skb, GFP_ATOMIC);
                
                /*
                 * If the buffer didn't vanish into the lack of
@@ -1398,7 +1398,7 @@ static int atalk_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
                if(skb)
                {
                        if(aarp_send_ddp(rt->dev, skb, &ta, NULL) == -1)
-                               kfree_skb(skb, FREE_READ);
+                               kfree_skb(skb);
                }
 
                return (0);
@@ -1416,7 +1416,7 @@ static int atalk_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
        
        if(sock == NULL)        /* But not one of our sockets */
        {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return (0);
        }
 
@@ -1461,7 +1461,7 @@ static int atalk_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
        if(sock_queue_rcv_skb(sock, skb) < 0)
        {
                skb->sk = NULL;
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
        }
 
        return (0);
@@ -1489,7 +1489,7 @@ static int ltalk_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
                ap = atalk_find_dev_addr(dev);
                if(ap == NULL || skb->len < sizeof(struct ddpshdr))
                {
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        return (0);
                }
 
@@ -1650,7 +1650,7 @@ static int atalk_sendmsg(struct socket *sock, struct msghdr *msg, int len,
        err = memcpy_fromiovec(skb_put(skb,len), msg->msg_iov, len);
        if(err)
        {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return (-EFAULT);
        }
 
@@ -1661,7 +1661,7 @@ static int atalk_sendmsg(struct socket *sock, struct msghdr *msg, int len,
 
        if(call_out_firewall(AF_APPLETALK, skb->dev, ddp, NULL, &skb) != FW_ACCEPT)
        {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return (-EPERM);
        }
 
@@ -1679,7 +1679,7 @@ static int atalk_sendmsg(struct socket *sock, struct msghdr *msg, int len,
                                loopback = 1;
                                SOCK_DEBUG(sk, "SK %p: send out(copy).\n", sk);
                                if(aarp_send_ddp(dev, skb2, &usat->sat_addr, NULL) == -1)
-                                       kfree_skb(skb2, FREE_WRITE);
+                                       kfree_skb(skb2);
                                /* else queued/sent above in the aarp queue */
                        }
                }
@@ -1707,7 +1707,7 @@ static int atalk_sendmsg(struct socket *sock, struct msghdr *msg, int len,
                }
 
                if(aarp_send_ddp(dev, skb, &usat->sat_addr, NULL) == -1)
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                /* else queued/sent above in the aarp queue */
        }
        SOCK_DEBUG(sk, "SK %p: Done write (%d).\n", sk, len);
index c12b9fd13993ba147988a184957b40fc26d114d9..3a4196b3fad1a7ffa83f3656ae40bd7fef6dce47 100644 (file)
@@ -368,7 +368,7 @@ void ax25_send_to_raw(struct sock *sk, struct sk_buff *skb, int proto)
                                return;
 
                        if (sock_queue_rcv_skb(sk, copy) != 0)
-                               kfree_skb(copy, FREE_READ);
+                               kfree_skb(copy);
                }
 
                sk = sk->next;
@@ -418,7 +418,7 @@ void ax25_destroy_socket(ax25_cb *ax25)     /* Not static as it's used by the timer
                                skb->sk->protinfo.ax25->state = AX25_STATE_0;
                        }
 
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                }
        }
 
@@ -1241,7 +1241,7 @@ static int ax25_accept(struct socket *sock, struct socket *newsock, int flags)
 
        /* Now attach up the new socket */
        skb->sk = NULL;
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        sk->ack_backlog--;
        newsock->sk = newsk;
 
@@ -1385,7 +1385,7 @@ static int ax25_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct
        if (sk->type == SOCK_SEQPACKET) {
                /* Connected mode sockets go via the LAPB machine */
                if (sk->state != TCP_ESTABLISHED) {
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return -ENOTCONN;
                }
 
index a17109bff862766f1afd535dec816134de2a82d4..79fef3dcba3b0beceef7a38a562c1398b2d83775 100644 (file)
@@ -85,7 +85,7 @@ static int ax25_rx_fragment(ax25_cb *ax25, struct sk_buff *skb)
                                if (ax25->fragno == 0) {
                                        if ((skbn = alloc_skb(AX25_MAX_HEADER_LEN + ax25->fraglen, GFP_ATOMIC)) == NULL) {
                                                while ((skbo = skb_dequeue(&ax25->frag_queue)) != NULL)
-                                                       kfree_skb(skbo, FREE_READ);
+                                                       kfree_skb(skbo);
                                                return 1;
                                        }
 
@@ -97,13 +97,13 @@ static int ax25_rx_fragment(ax25_cb *ax25, struct sk_buff *skb)
                                        /* Copy data from the fragments */
                                        while ((skbo = skb_dequeue(&ax25->frag_queue)) != NULL) {
                                                memcpy(skb_put(skbn, skbo->len), skbo->data, skbo->len);
-                                               kfree_skb(skbo, FREE_READ);
+                                               kfree_skb(skbo);
                                        }
 
                                        ax25->fraglen = 0;
 
                                        if (ax25_rx_iframe(ax25, skbn) == 0)
-                                               kfree_skb(skbn, FREE_READ);
+                                               kfree_skb(skbn);
                                }
 
                                return 1;
@@ -113,7 +113,7 @@ static int ax25_rx_fragment(ax25_cb *ax25, struct sk_buff *skb)
                /* First fragment received */
                if (*skb->data & AX25_SEG_FIRST) {
                        while ((skbo = skb_dequeue(&ax25->frag_queue)) != NULL)
-                               kfree_skb(skbo, FREE_READ);
+                               kfree_skb(skbo);
                        ax25->fragno = *skb->data & AX25_SEG_REM;
                        skb_pull(skb, 1);               /* skip fragno */
                        ax25->fraglen = skb->len;
@@ -149,7 +149,7 @@ int ax25_rx_iframe(ax25_cb *ax25, struct sk_buff *skb)
                 */
                struct sk_buff *skbn = skb_copy(skb, GFP_ATOMIC);
                if (skbn != NULL) {
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        skb = skbn;
                }
 
@@ -234,12 +234,12 @@ static int ax25_rcv(struct sk_buff *skb, struct device *dev, ax25_address *dev_a
        skb->h.raw = skb->data;
 
        if ((ax25_dev = ax25_dev_ax25dev(dev)) == NULL) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
        if (call_in_firewall(PF_AX25, skb->dev, skb->h.raw, NULL, &skb) != FW_ACCEPT) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -248,7 +248,7 @@ static int ax25_rcv(struct sk_buff *skb, struct device *dev, ax25_address *dev_a
         */
 
        if (ax25_addr_parse(skb->data, skb->len, &src, &dest, &dp, &type, &dama) == NULL) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -279,7 +279,7 @@ static int ax25_rcv(struct sk_buff *skb, struct device *dev, ax25_address *dev_a
                        ax25_send_to_raw(raw, skb, skb->data[1]);
 
                if (!mine && ax25cmp(&dest, (ax25_address *)dev->broadcast) != 0) {
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        return 0;
                }
 
@@ -308,22 +308,22 @@ static int ax25_rcv(struct sk_buff *skb, struct device *dev, ax25_address *dev_a
                                /* Now find a suitable dgram socket */
                                if ((sk = ax25_find_socket(&dest, &src, SOCK_DGRAM)) != NULL) {
                                        if (atomic_read(&sk->rmem_alloc) >= sk->rcvbuf) {
-                                               kfree_skb(skb, FREE_READ);
+                                               kfree_skb(skb);
                                        } else {
                                                /*
                                                 *      Remove the control and PID.
                                                 */
                                                skb_pull(skb, 2);
                                                if (sock_queue_rcv_skb(sk, skb) != 0)
-                                                       kfree_skb(skb, FREE_READ);
+                                                       kfree_skb(skb);
                                        }
                                } else {
-                                       kfree_skb(skb, FREE_READ);
+                                       kfree_skb(skb);
                                }
                                break;
 
                        default:
-                               kfree_skb(skb, FREE_READ);      /* Will scan SOCK_AX25 RAW sockets */
+                               kfree_skb(skb); /* Will scan SOCK_AX25 RAW sockets */
                                break;
                }
 
@@ -336,7 +336,7 @@ static int ax25_rcv(struct sk_buff *skb, struct device *dev, ax25_address *dev_a
         *      silently ignore them. For now we stay quiet.
         */
        if (ax25_dev->values[AX25_VALUES_CONMODE] == 0) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -353,7 +353,7 @@ static int ax25_rcv(struct sk_buff *skb, struct device *dev, ax25_address *dev_a
                 *      do no further work
                 */
                if (ax25_process_rx_frame(ax25, skb, type, dama) == 0)
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
 
                return 0;
        }
@@ -370,7 +370,7 @@ static int ax25_rcv(struct sk_buff *skb, struct device *dev, ax25_address *dev_a
                if ((*skb->data & ~AX25_PF) != AX25_DM && mine)
                        ax25_return_dm(dev, &src, &dest, &dp);
 
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -384,7 +384,7 @@ static int ax25_rcv(struct sk_buff *skb, struct device *dev, ax25_address *dev_a
        if (sk != NULL) {
                if (sk->ack_backlog == sk->max_ack_backlog || (make = ax25_make_new(sk, ax25_dev)) == NULL) {
                        if (mine) ax25_return_dm(dev, &src, &dest, &dp);
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        return 0;
                }
 
@@ -399,13 +399,13 @@ static int ax25_rcv(struct sk_buff *skb, struct device *dev, ax25_address *dev_a
                sk->ack_backlog++;
        } else {
                if (!mine) {
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        return 0;
                }
 
                if ((ax25 = ax25_create_cb()) == NULL) {
                        ax25_return_dm(dev, &src, &dest, &dp);
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        return 0;
                }
 
@@ -419,7 +419,7 @@ static int ax25_rcv(struct sk_buff *skb, struct device *dev, ax25_address *dev_a
         *      Sort out any digipeated paths.
         */
        if (dp.ndigi != 0 && ax25->digipeat == NULL && (ax25->digipeat = kmalloc(sizeof(ax25_digi), GFP_ATOMIC)) == NULL) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                ax25_destroy_socket(ax25);
                return 0;
        }
@@ -461,7 +461,7 @@ static int ax25_rcv(struct sk_buff *skb, struct device *dev, ax25_address *dev_a
                if (!sk->dead)
                        sk->data_ready(sk, skb->len);
        } else {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
        }
 
        return 0;
@@ -475,7 +475,7 @@ int ax25_kiss_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *p
        skb->sk = NULL;         /* Initially we don't know who it's for */
 
        if ((*skb->data & 0x0F) != 0) {
-               kfree_skb(skb, FREE_READ);      /* Not a KISS data frame */
+               kfree_skb(skb); /* Not a KISS data frame */
                return 0;
        }
 
index a50822b9043edb29b4111b381b8742f797f50e3e..c285b4641fdd74eb6ce07ac2305be4b630b28746 100644 (file)
@@ -140,14 +140,14 @@ int ax25_rebuild_header(struct sk_buff *skb)
                         *      gets fixed.
                         */
                        if ((ourskb = skb_copy(skb, GFP_ATOMIC)) == NULL) {
-                               kfree_skb(skb, FREE_WRITE);
+                               kfree_skb(skb);
                                return 1;
                        }
 
                        if (skb->sk != NULL)
                                skb_set_owner_w(ourskb, skb->sk);
 
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
 
                        skb_pull(ourskb, AX25_HEADER_LEN - 1);  /* Keep PID */
 
@@ -169,7 +169,7 @@ int ax25_rebuild_header(struct sk_buff *skb)
 
        if (route->digipeat != NULL) {
                if ((ourskb = ax25_rt_build_path(skb, src, dst, route->digipeat)) == NULL) {
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return 1;
                }
 
index 96e27153fe12c0ea168544358fbdbe7cc4ba8704..71eb5cfc35687c4cb3a143da9a1c05c3d7750a29 100644 (file)
@@ -194,7 +194,7 @@ void ax25_output(ax25_cb *ax25, int paclen, struct sk_buff *skb)
                        skb_queue_tail(&ax25->write_queue, skbn); /* Throw it on the queue */
                }
 
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
        } else {
                skb_queue_tail(&ax25->write_queue, skb);          /* Throw it on the queue */
        }
@@ -347,14 +347,14 @@ void ax25_transmit_buffer(ax25_cb *ax25, struct sk_buff *skb, int type)
        if (skb_headroom(skb) < headroom) {
                if ((skbn = skb_realloc_headroom(skb, headroom)) == NULL) {
                        printk(KERN_CRIT "AX.25: ax25_transmit_buffer - out of memory\n");
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return;
                }
 
                if (skb->sk != NULL)
                        skb_set_owner_w(skbn, skb->sk);
 
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                skb = skbn;
        }
 
@@ -376,7 +376,7 @@ void ax25_queue_xmit(struct sk_buff *skb)
        unsigned char *ptr;
 
        if (call_out_firewall(PF_AX25, skb->dev, skb->data, NULL, &skb) != FW_ACCEPT) {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return;
        }
 
index 911b548343b1266a10d62781d2e679dc47b313fc..0dedcc88e89a13673d903d74ffc999fd4d0b075a 100644 (file)
@@ -421,7 +421,7 @@ struct sk_buff *ax25_rt_build_path(struct sk_buff *skb, ax25_address *src, ax25_
                if (skb->sk != NULL)
                        skb_set_owner_w(skbn, skb->sk);
 
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 
                skb = skbn;
        }
index 98a977182b0cef529ecaa5b3538428b0f89231c7..948ff47197252682845000c59c3c7aee97bc1981 100644 (file)
@@ -64,16 +64,16 @@ void ax25_clear_queues(ax25_cb *ax25)
        struct sk_buff *skb;
 
        while ((skb = skb_dequeue(&ax25->write_queue)) != NULL)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 
        while ((skb = skb_dequeue(&ax25->ack_queue)) != NULL)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 
        while ((skb = skb_dequeue(&ax25->reseq_queue)) != NULL)
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
 
        while ((skb = skb_dequeue(&ax25->frag_queue)) != NULL)
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
 }
 
 /*
@@ -91,7 +91,7 @@ void ax25_frames_acked(ax25_cb *ax25, unsigned short nr)
        if (ax25->va != nr) {
                while (skb_peek(&ax25->ack_queue) != NULL && ax25->va != nr) {
                        skb = skb_dequeue(&ax25->ack_queue);
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        ax25->va = (ax25->va + 1) % ax25->modulus;
                }
        }
index cd6e9500066d4028a53afbbfa7f9d50640f5b1e4..501820a63e55ff6aade93d68386c76bce4372c67 100644 (file)
@@ -153,7 +153,7 @@ no_packet:
 
 void skb_free_datagram(struct sock * sk, struct sk_buff *skb)
 {
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        release_sock(sk);
 }
 
index 8b8845e1c350b4da1a431f9f6ab32f73dd5ed028..df9d67841c9d1aed0e68539cc4fbfb31344464e5 100644 (file)
@@ -332,7 +332,7 @@ static int
 default_rebuild_header(struct sk_buff *skb)
 {
        printk(KERN_DEBUG "%s: default_rebuild_header called -- BUG!\n", skb->dev ? skb->dev->name : "NULL!!!");
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        return 1;
 }
 
@@ -595,7 +595,7 @@ int dev_queue_xmit(struct sk_buff *skb)
        }
        end_bh_atomic();
 
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
 
 #ifdef CONFIG_NET_PROFILE
        NET_PROFILE_LEAVE(dev_queue_xmit);
@@ -706,7 +706,7 @@ void netif_rx(struct sk_buff *skb)
                                return;
                        }
                        atomic_inc(&netdev_rx_dropped);
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        return;
                }
 #ifdef CONFIG_NET_HW_FLOWCONTROL
@@ -721,7 +721,7 @@ void netif_rx(struct sk_buff *skb)
        }
        netdev_dropping = 1;
        atomic_inc(&netdev_rx_dropped);
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
 }
 
 #ifdef CONFIG_BRIDGE
@@ -818,9 +818,9 @@ void net_bh(void)
 
 #ifdef CONFIG_CPU_IS_SLOW
                if (ave_busy > 128*16) {
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        while ((skb = skb_dequeue(&backlog)) != NULL)
-                               kfree_skb(skb, FREE_WRITE);
+                               kfree_skb(skb);
                        break;
                }
 #endif
@@ -864,7 +864,7 @@ void net_bh(void)
 
                if (skb->mac.raw < skb->head || skb->mac.raw > skb->data) {
                        printk(KERN_CRIT "%s: wrong mac.raw ptr, proto=%04x\n", skb->dev->name, skb->protocol);
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        continue;
                }
 
@@ -926,7 +926,7 @@ void net_bh(void)
                 */
         
                else {
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                }
        }       /* End of queue loop */
        
index 0022ef0554b8a13d9904a571971ec753159920d6..698308f5fa581e8b56cab28ebd057171c1163cdd 100644 (file)
@@ -66,13 +66,13 @@ static void dst_run_gc(unsigned long dummy)
 
 static int dst_discard(struct sk_buff *skb)
 {
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
 static int dst_blackhole(struct sk_buff *skb)
 {
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        return 0;
 }
 
index 1ed7c27ce6d03f3fa38c42a82f76df00b22ebba2..9be31f79267ac1da9b42eb6d5e782c8a6f63437c 100644 (file)
@@ -51,7 +51,7 @@ static struct neigh_table *neigh_tables;
 
 static int neigh_blackhole(struct sk_buff *skb)
 {
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        return -ENETDOWN;
 }
 
@@ -526,7 +526,7 @@ int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
                        if (neigh->tbl == NULL) {
                                NEIGH_PRINTK2("neigh %p used after death.\n", neigh);
                                if (skb)
-                                       kfree_skb(skb, FREE_WRITE);
+                                       kfree_skb(skb);
                                end_bh_atomic();
                                return 1;
                        }
@@ -540,7 +540,7 @@ int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
                        } else {
                                neigh->nud_state = NUD_FAILED;
                                if (skb)
-                                       kfree_skb(skb, FREE_WRITE);
+                                       kfree_skb(skb);
                                end_bh_atomic();
                                return 1;
                        }
@@ -551,7 +551,7 @@ int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
                                        struct sk_buff *buff;
                                        buff = neigh->arp_queue.prev;
                                        __skb_unlink(buff, &neigh->arp_queue);
-                                       kfree_skb(buff, FREE_WRITE);
+                                       kfree_skb(buff);
                                }
                                __skb_queue_head(&neigh->arp_queue, skb);
                        }
@@ -759,14 +759,14 @@ int neigh_resolve_output(struct sk_buff *skb)
                }
                if (dev->hard_header(skb, dev, ntohs(skb->protocol), neigh->ha, NULL, skb->len) >= 0)
                        return neigh->ops->queue_xmit(skb);
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return -EINVAL;
        }
        return 0;
 
 discard:
        NEIGH_PRINTK1("neigh_resolve_output: dst=%p neigh=%p\n", dst, dst ? dst->neighbour : NULL);
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        return -EINVAL;
 }
 
@@ -782,7 +782,7 @@ int neigh_connected_output(struct sk_buff *skb)
 
        if (dev->hard_header(skb, dev, ntohs(skb->protocol), neigh->ha, NULL, skb->len) >= 0)
                return neigh->ops->queue_xmit(skb);
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        return -EINVAL;
 }
 
@@ -803,7 +803,7 @@ static void neigh_proxy_process(unsigned long arg)
                        if (tbl->proxy_redo)
                                tbl->proxy_redo(back);
                        else
-                               kfree_skb(back, FREE_WRITE);
+                               kfree_skb(back);
                } else if (!sched_next || tdif < sched_next)
                        sched_next = tdif;
        }
@@ -821,7 +821,7 @@ void pneigh_enqueue(struct neigh_table *tbl, struct neigh_parms *p,
        long sched_next = net_random()%p->proxy_delay;
 
        if (tbl->proxy_queue.qlen > p->proxy_qlen) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return;
        }
        skb->stamp.tv_sec = 0;
index 92260558a93baab3244012d686301d0bb596da5a..54fc5766286a068caea1a0123c212e0424ef255b 100644 (file)
@@ -146,7 +146,7 @@ int whitehole_count;
 static int whitehole_xmit(struct sk_buff *skb, struct device *dev)
 {
        struct net_device_stats *stats;
-       dev_kfree_skb(skb, FREE_WRITE);
+       dev_kfree_skb(skb);
        stats = (struct net_device_stats *)dev->priv;
        stats->tx_packets++;
        stats->tx_bytes+=skb->len;
index 786775f107da41bb36e411698ee7615d3e44b9e0..d189ff79260915c6cdd89b6e2234f27235df1f8f 100644 (file)
@@ -254,7 +254,7 @@ void rtmsg_ifinfo(int type, struct device *dev)
                return;
 
        if (rtnetlink_fill_ifinfo(skb, dev, type, 0, 0) < 0) {
-               kfree_skb(skb, 0);
+               kfree_skb(skb);
                return;
        }
        NETLINK_CB(skb).dst_groups = RTMGRP_LINK;
@@ -454,10 +454,10 @@ static void rtnetlink_rcv(struct sock *sk, int len)
                        if (skb->len)
                                skb_queue_head(&sk->receive_queue, skb);
                        else
-                               kfree_skb(skb, FREE_READ);
+                               kfree_skb(skb);
                        break;
                }
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
        }
 
        rtnl_shunlock();
index 0def160268ebcf8efcad280ab8160ac694cfdf6c..0206d8c7f86b1f3d7bd2324d6786ffe0bbae16f5 100644 (file)
@@ -64,7 +64,6 @@ static atomic_t net_skbcount = ATOMIC_INIT(0);
 static atomic_t net_allocs = ATOMIC_INIT(0);
 static atomic_t net_fails  = ATOMIC_INIT(0);
 
-
 extern atomic_t ip_frag_mem;
 
 /*
index 54f6e3e4d0eb1f153ca39851f87e7905589d2eed..417b6ac837e7edb476724d06974bf521daf26d38 100644 (file)
@@ -842,7 +842,7 @@ void sklist_destroy_socket(struct sock **list,struct sock *sk)
 
        while((skb=skb_dequeue(&sk->receive_queue))!=NULL)
        {
-               kfree_skb(skb,FREE_READ);
+               kfree_skb(skb);
        }
 
        if(atomic_read(&sk->wmem_alloc) == 0 &&
index 781dc48a5c5d43badb602ff49f51d20e33e7639e..b66add191f436dead04362046cbd38c88c9cf600 100644 (file)
@@ -150,16 +150,16 @@ static __inline__ void kill_sk_queues(struct sock *sk)
                 */
                if (skb->sk != NULL && skb->sk != sk)
                        skb->sk->prot->close(skb->sk, 0);
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
        }
 
        /* Next, the error queue. */
        while((skb = skb_dequeue(&sk->error_queue)) != NULL)
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
 
        /* Now the backlog. */
        while((skb=skb_dequeue(&sk->back_log)) != NULL)
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
 }
 
 static __inline__ void kill_sk_now(struct sock *sk)
index 8d4d09ee19fc599a6a73cf5731bbf074ff4ddbc8..371dc3742548a490128e49d0a7a96ec164f916ef 100644 (file)
@@ -295,7 +295,7 @@ static int arp_constructor(struct neighbour *neigh)
 static void arp_error_report(struct neighbour *neigh, struct sk_buff *skb)
 {
        icmp_send(skb, ICMP_DEST_UNREACH, ICMP_HOST_UNREACH, 0);
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
 }
 
 static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb)
@@ -363,7 +363,7 @@ int arp_find(unsigned char *haddr, struct sk_buff *skb)
 
        if (!skb->dst) {
                printk(KERN_DEBUG "arp_find is called with dst==NULL\n");
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return 1;
        }
 
@@ -384,7 +384,7 @@ int arp_find(unsigned char *haddr, struct sk_buff *skb)
                        return 0;
                }
        } else
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
        neigh_release(n);
        end_bh_atomic();
        return 1;
@@ -673,7 +673,7 @@ int arp_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
        }
 
 out:
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
index 71a470663cd9ee8b3de0147dcf34c64de74bd4e7..3a5c2646bd2a2fb4585d214a727613dc7e1d24ff 100644 (file)
@@ -1007,7 +1007,7 @@ int icmp_rcv(struct sk_buff *skb, unsigned short len)
        (icmp_pointers[icmph->type].handler)(icmph, skb, len);
 
 drop:
-       kfree_skb(skb, FREE_READ); 
+       kfree_skb(skb);
        return 0;
 error:
        icmp_statistics.IcmpInErrors++;
index 3f7de95757bebfeddcbd2a424e8ab5e0e6203c1a..e506c988b4ccf01dc292734d6fb7ed919d663308 100644 (file)
@@ -300,7 +300,7 @@ int igmp_rcv(struct sk_buff *skb, unsigned short len)
 
        if (len < sizeof(struct igmphdr) || ip_compute_csum((void *)ih, len)
            || in_dev==NULL) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
        
@@ -328,7 +328,7 @@ int igmp_rcv(struct sk_buff *skb, unsigned short len)
        default:
                NETDEBUG(printk(KERN_DEBUG "New IGMP type=%d, why we do not know about it?\n", ih->type));
        }
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
index 3dcc82549d86bc658a517b33eea02271a2d40012..474e54a1ede32a0e9d2a10b03f25292d35462d08 100644 (file)
@@ -149,13 +149,13 @@ int ip_forward(struct sk_buff *skb)
                if (skb_headroom(skb) < dev2->hard_header_len || skb_cloned(skb)) {
                        struct sk_buff *skb2;
                        skb2 = skb_realloc_headroom(skb, (dev2->hard_header_len + 15)&~15);
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        if (skb2 == NULL)
                                return -1;
                        skb = skb2;
                }
                if (ip_do_nat(skb)) {
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return -1;
                }
        }
@@ -180,7 +180,7 @@ int ip_forward(struct sk_buff *skb)
                                maddr = inet_select_addr(dev2, rt->rt_gateway, RT_SCOPE_UNIVERSE);
                                fw_res = ip_fw_masq_icmp(&skb, maddr);
                                if (fw_res < 0) {
-                                       kfree_skb(skb, FREE_READ);
+                                       kfree_skb(skb);
                                        return -1;
                                }
 
@@ -205,7 +205,7 @@ int ip_forward(struct sk_buff *skb)
                        icmp_send(skb, ICMP_DEST_UNREACH, ICMP_HOST_UNREACH, 0);
                        /* fall thru */
                default:
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        return -1;
                }
 #endif
@@ -230,7 +230,7 @@ skip_call_fw_firewall:
                        maddr = inet_select_addr(dev2, rt->rt_gateway, RT_SCOPE_UNIVERSE);
 
                        if (ip_fw_masquerade(&skb, maddr) < 0) {
-                               kfree_skb(skb, FREE_READ);
+                               kfree_skb(skb);
                                return -1;
                        } else {
                                /*
@@ -245,7 +245,7 @@ skip_call_fw_firewall:
        if (skb_headroom(skb) < dev2->hard_header_len || skb_cloned(skb)) {
                struct sk_buff *skb2;
                skb2 = skb_realloc_headroom(skb, (dev2->hard_header_len + 15)&~15);
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 
                if (skb2 == NULL) {
                        NETDEBUG(printk(KERN_ERR "\nIP: No memory available for IP forward\n"));
@@ -261,7 +261,7 @@ skip_call_fw_firewall:
                   masquerading is only supported via forward rules */
                if (fw_res == FW_REJECT)
                        icmp_send(skb, ICMP_DEST_UNREACH, ICMP_HOST_UNREACH, 0);
-               kfree_skb(skb,FREE_WRITE);
+               kfree_skb(skb);
                return -1;
        }
 #endif
@@ -305,6 +305,6 @@ too_many_hops:
         /* Tell the sender its packet died... */
         icmp_send(skb, ICMP_TIME_EXCEEDED, ICMP_EXC_TTL, 0);
 drop:
-       kfree_skb(skb,FREE_WRITE);
+       kfree_skb(skb);
        return -1;
 }
index 12576946cfc771005ccca0c6f1dc01b234479bb4..57861e79d56b812541ae1b44442964df8ea4fb60 100644 (file)
@@ -15,6 +15,7 @@
  *             David S. Miller :       Begin massive cleanup...
  *             Andi Kleen      :       Add sysctls.
  *             xxxx            :       Overlapfrag bug.
+ *             Ultima          :       ip_expire() kernel panic.
  */
 
 #include <linux/types.h>
@@ -78,10 +79,10 @@ atomic_t ip_frag_mem = ATOMIC_INIT(0);              /* Memory used for fragments */
 char *in_ntoa(__u32 in);
 
 /* Memory Tracking Functions. */
-extern __inline__ void frag_kfree_skb(struct sk_buff *skb, int type)
+extern __inline__ void frag_kfree_skb(struct sk_buff *skb)
 {
        atomic_sub(skb->truesize, &ip_frag_mem);
-       kfree_skb(skb,type);
+       kfree_skb(skb);
 }
 
 extern __inline__ void frag_kfree_s(void *ptr, int len)
@@ -175,7 +176,7 @@ static void ip_free(struct ipq *qp)
        while (fp) {
                struct ipfrag *xp = fp->next;
 
-               frag_kfree_skb(fp->skb,FREE_READ);
+               frag_kfree_skb(fp->skb);
                frag_kfree_s(fp, sizeof(struct ipfrag));
                fp = xp;
        }
@@ -192,6 +193,15 @@ static void ip_expire(unsigned long arg)
 {
        struct ipq *qp = (struct ipq *) arg;
 
+       if(!qp->fragments)
+        {      
+#ifdef IP_EXPIRE_DEBUG
+               printk("warning: possible ip-expire attack\n");
+#endif
+               ip_free(qp);
+               return;
+       }
+  
        /* Send an ICMP "Fragment Reassembly Timeout" message. */
        ip_statistics.IpReasmTimeout++;
        ip_statistics.IpReasmFails++;   
@@ -344,7 +354,7 @@ static struct sk_buff *ip_glue(struct ipq *qp)
                        NETDEBUG(printk(KERN_ERR "Invalid fragment list: "
                                        "Fragment over size.\n"));
                        ip_free(qp);
-                       kfree_skb(skb,FREE_WRITE);
+                       kfree_skb(skb);
                        ip_statistics.IpReasmFails++;
                        return NULL;
                }
@@ -427,7 +437,7 @@ struct sk_buff *ip_defrag(struct sk_buff *skb)
        } else {
                /* If we failed to create it, then discard the frame. */
                if ((qp = ip_create(skb, iph)) == NULL) {
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        ip_statistics.IpReasmFails++;
                        return NULL;
                }
@@ -437,7 +447,7 @@ struct sk_buff *ip_defrag(struct sk_buff *skb)
        if(ntohs(iph->tot_len)+(int)offset>65535) {
                if (net_ratelimit())
                        printk(KERN_INFO "Oversized packet received from %d.%d.%d.%d\n", NIPQUAD(iph->saddr));
-               frag_kfree_skb(skb, FREE_READ);
+               frag_kfree_skb(skb);
                ip_statistics.IpReasmFails++;
                return NULL;
        }       
@@ -501,7 +511,7 @@ struct sk_buff *ip_defrag(struct sk_buff *skb)
                        /* We have killed the original next frame. */
                        next = tfp;
 
-                       frag_kfree_skb(tmp->skb,FREE_READ);
+                       frag_kfree_skb(tmp->skb);
                        frag_kfree_s(tmp, sizeof(struct ipfrag));
                }
        }
@@ -512,7 +522,7 @@ struct sk_buff *ip_defrag(struct sk_buff *skb)
 
        /* No memory to save the fragment - so throw the lot. */
        if (!tfp) {
-               frag_kfree_skb(skb, FREE_READ);
+               frag_kfree_skb(skb);
                return NULL;
        }
        tfp->prev = prev;
index 512a1ffb5119ca0ba01c6db694f9c57764f8f0df..dfb27d06dfbd26b40ff2a252c51cd69b000b12e5 100644 (file)
@@ -581,7 +581,7 @@ int ip_fw_chk(struct iphdr *ip, struct device *rif, __u16 *redirport, struct ip_
                                skb_put(skb,len);
                                memcpy(skb->data,ip,len);
                                if(netlink_post(NETLINK_FIREWALL, skb))
-                                       kfree_skb(skb, FREE_WRITE);
+                                       kfree_skb(skb);
                        }
                }
 #endif         
index 1d3327e0e03204678f4ad6cdf4414ba369c77cc9..1bf34fb1dda34ed55067e6931fe64e4707a4fe59 100644 (file)
@@ -452,7 +452,7 @@ void ipgre_err(struct sk_buff *skb, unsigned char *dp, int len)
 
        /* Try to guess incoming interface */
        if (ip_route_output(&rt, eiph->saddr, 0, RT_TOS(eiph->tos), 0)) {
-               kfree_skb(skb2, FREE_WRITE);
+               kfree_skb(skb2);
                return;
        }
        skb2->dev = rt->u.dst.dev;
@@ -464,14 +464,14 @@ void ipgre_err(struct sk_buff *skb, unsigned char *dp, int len)
                if (ip_route_output(&rt, eiph->daddr, eiph->saddr, eiph->tos, 0) ||
                    rt->u.dst.dev->type != ARPHRD_IPGRE) {
                        ip_rt_put(rt);
-                       kfree_skb(skb2, FREE_WRITE);
+                       kfree_skb(skb2);
                        return;
                }
        } else {
                ip_rt_put(rt);
                if (ip_route_input(skb2, eiph->daddr, eiph->saddr, eiph->tos, skb2->dev) ||
                    skb2->dst->dev->type != ARPHRD_IPGRE) {
-                       kfree_skb(skb2, FREE_WRITE);
+                       kfree_skb(skb2);
                        return;
                }
        }
@@ -479,7 +479,7 @@ void ipgre_err(struct sk_buff *skb, unsigned char *dp, int len)
        /* change mtu on this route */
        if (type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED) {
                if (rel_info > skb2->dst->pmtu) {
-                       kfree_skb(skb2, FREE_WRITE);
+                       kfree_skb(skb2);
                        return;
                }
                skb2->dst->pmtu = rel_info;
@@ -493,7 +493,7 @@ void ipgre_err(struct sk_buff *skb, unsigned char *dp, int len)
        }
 
        icmp_send(skb2, rel_type, rel_code, rel_info);
-       kfree_skb(skb2, FREE_WRITE);
+       kfree_skb(skb2);
 #endif
 }
 
@@ -572,7 +572,7 @@ int ipgre_rcv(struct sk_buff *skb, unsigned short len)
        icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PROT_UNREACH, 0);
 
 drop:
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return(0);
 }
 
@@ -723,11 +723,11 @@ static int ipgre_tunnel_xmit(struct sk_buff *skb, struct device *dev)
                if (!new_skb) {
                        ip_rt_put(rt);
                        stats->tx_dropped++;
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
                        tunnel->recursion--;
                        return 0;
                }
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                skb = new_skb;
        }
 
@@ -801,7 +801,7 @@ tx_error_icmp:
 
 tx_error:
        stats->tx_errors++;
-       dev_kfree_skb(skb, FREE_WRITE);
+       dev_kfree_skb(skb);
        tunnel->recursion--;
        return 0;
 }
index a7a95c9619e42c5e3769c727cca7713da3f155b2..f5dc2d81d56d672453d2bf1c7eeb5e4e8875cc92 100644 (file)
@@ -257,7 +257,7 @@ int ip_local_deliver(struct sk_buff *skb)
         {
                int ret = ip_fw_demasquerade(&skb);
                if (ret < 0) {
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return 0;
                }
 
@@ -267,7 +267,7 @@ int ip_local_deliver(struct sk_buff *skb)
                        dst_release(skb->dst);
                        skb->dst = NULL;
                        if (ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, skb->dev)) {
-                               kfree_skb(skb, FREE_WRITE);
+                               kfree_skb(skb);
                                return 0;
                        }
                        return skb->dst->input(skb);
@@ -312,7 +312,7 @@ int ip_local_deliver(struct sk_buff *skb)
                                                if(ipsec_sk_policy(raw_sk,skb1))        
                                                        raw_rcv(raw_sk, skb1);
                                                else
-                                                       kfree_skb(skb1, FREE_WRITE);
+                                                       kfree_skb(skb1);
                                        }
                                }
                                raw_sk = sknext;
@@ -375,12 +375,12 @@ int ip_local_deliver(struct sk_buff *skb)
                if(ipsec_sk_policy(raw_sk, skb))
                        raw_rcv(raw_sk, skb);
                else
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
        }
        else if (!flag)         /* Free and report errors */
        {
                icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PROT_UNREACH, 0);        
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
        }
 
        return(0);
@@ -503,7 +503,7 @@ int ip_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
 inhdr_error:
        ip_statistics.IpInHdrErrors++;
 drop:
-        kfree_skb(skb, FREE_WRITE);
+        kfree_skb(skb);
         return(0);
 }
 
index d162b9a7ae1ded006cfdbe5cf894d2e1190b6119..ebd7a887a073126d3e83b8537448be9678bbad79 100644 (file)
@@ -569,7 +569,7 @@ static struct sk_buff * skb_replace(struct sk_buff *skb, int pri, char *o_buf, i
                  * preferably inplace
                  */
 
-                kfree_skb(skb, FREE_WRITE);
+                kfree_skb(skb);
         }
         return n_skb;
 }
index 14b423f2fff2ae35fb71e99df0c40bb00a75e7e2..b33f202ecc5a182e15714501327f5c47365e6341 100644 (file)
@@ -452,7 +452,7 @@ eol:
 error:
        if (skb) {
                icmp_send(skb, ICMP_PARAMETERPROB, 0, pp_ptr-iph);
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
        }
        return -EINVAL;
 }
index f2b02708d34d0e6dbab88375040821b1f97ac196..b3ece7e131a5cdc5f99138496ebc6b8bca7dcd84 100644 (file)
@@ -270,7 +270,7 @@ int ip_mc_output(struct sk_buff *skb)
                /* Multicasts with ttl 0 must not go beyond the host */
 
                if (skb->nh.iph->ttl == 0) {
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return 0;
                }
        }
@@ -390,7 +390,7 @@ void ip_queue_xmit(struct sk_buff *skb)
                 * and if (uh...) TCP had segments queued on this route...
                 */
                skb2 = skb_realloc_headroom(skb, (dev->hard_header_len+15)&~15);
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                if (skb2 == NULL)
                        return;
                skb = skb2;
@@ -432,7 +432,7 @@ fragment:
        return;
 
 drop:
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
 }
 
 /*
@@ -539,7 +539,7 @@ int ip_build_xmit(struct sock *sk,
 #ifdef CONFIG_NET_SECURITY
                if ((fw_res=call_out_firewall(PF_SECURITY, NULL, NULL, (void *) 5, &skb))<FW_ACCEPT)
                {
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        if (fw_res != FW_QUEUE)
                                return -EPERM;
                        else
@@ -549,7 +549,7 @@ int ip_build_xmit(struct sock *sk,
 
                if (err)
                {
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return err;
                }
 
@@ -716,7 +716,7 @@ int ip_build_xmit(struct sock *sk,
 #endif         
                if (err)
                {
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        dev_unlock_list();
                        return err;
                }
@@ -789,7 +789,7 @@ void ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
 
        if (mtu<8) {
                ip_statistics.IpFragFails++;
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return;
        }
 
@@ -830,7 +830,7 @@ void ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
                if ((skb2 = alloc_skb(len+hlen+dev->hard_header_len+15,GFP_ATOMIC)) == NULL) {
                        NETDEBUG(printk(KERN_INFO "IP: frag: no memory for new fragment!\n"));
                        ip_statistics.IpFragFails++;
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return;
                }
 
@@ -903,7 +903,7 @@ void ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
 
                output(skb2);
        }
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        ip_statistics.IpFragOKs++;
 }
 
index d2def47cf462c0151ff1fbe413a925f80ed8e4e4..e6b51f6e8fef0051cec68b43bcf93edab9687956 100644 (file)
@@ -351,7 +351,7 @@ int ip_setsockopt(struct sock *sk, int level, int optname, char *optval, int opt
                                struct sk_buff *skb;
                                /* Drain queued errors */
                                while((skb=skb_dequeue(&sk->error_queue))!=NULL)
-                                       kfree_skb(skb, FREE_READ);
+                                       kfree_skb(skb);
                        }
                        sk->ip_recverr = val?1:0;
                        release_sock(sk);
index e297aefdc477f314cba2952d1f66b444f931580e..20521e643aeb19826aeae0c3227e76eafce9c155 100644 (file)
@@ -350,7 +350,7 @@ ic_rarp_recv(struct sk_buff *skb, struct device *dev, struct packet_type *pt))
 
        /* And throw the packet out... */
 drop:
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
index 565116ffca548601b90f0a5a9281aae711ab8242..154c0500e95542c7eb9c1bc8de4ccc2b56bd0b79 100644 (file)
@@ -384,7 +384,7 @@ void ipip_err(struct sk_buff *skb, unsigned char *dp, int len)
 
        /* Try to guess incoming interface */
        if (ip_route_output(&rt, eiph->saddr, 0, RT_TOS(eiph->tos), 0)) {
-               kfree_skb(skb2, FREE_WRITE);
+               kfree_skb(skb2);
                return;
        }
        skb2->dev = rt->u.dst.dev;
@@ -396,14 +396,14 @@ void ipip_err(struct sk_buff *skb, unsigned char *dp, int len)
                if (ip_route_output(&rt, eiph->daddr, eiph->saddr, eiph->tos, 0) ||
                    rt->u.dst.dev->type != ARPHRD_IPGRE) {
                        ip_rt_put(rt);
-                       kfree_skb(skb2, FREE_WRITE);
+                       kfree_skb(skb2);
                        return;
                }
        } else {
                ip_rt_put(rt);
                if (ip_route_input(skb2, eiph->daddr, eiph->saddr, eiph->tos, skb2->dev) ||
                    skb2->dst->dev->type != ARPHRD_IPGRE) {
-                       kfree_skb(skb2, FREE_WRITE);
+                       kfree_skb(skb2);
                        return;
                }
        }
@@ -411,7 +411,7 @@ void ipip_err(struct sk_buff *skb, unsigned char *dp, int len)
        /* change mtu on this route */
        if (type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED) {
                if (rel_info > skb2->dst->pmtu) {
-                       kfree_skb(skb2, FREE_WRITE);
+                       kfree_skb(skb2);
                        return;
                }
                skb2->dst->pmtu = rel_info;
@@ -425,7 +425,7 @@ void ipip_err(struct sk_buff *skb, unsigned char *dp, int len)
        }
 
        icmp_send(skb2, rel_type, rel_code, rel_info);
-       kfree_skb(skb2, FREE_WRITE);
+       kfree_skb(skb2);
        return;
 #endif
 }
@@ -454,7 +454,7 @@ int ipip_rcv(struct sk_buff *skb, unsigned short len)
        }
 
        icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PROT_UNREACH, 0);
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
@@ -548,11 +548,11 @@ static int ipip_tunnel_xmit(struct sk_buff *skb, struct device *dev)
                if (!new_skb) {
                        ip_rt_put(rt);
                        stats->tx_dropped++;
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
                        tunnel->recursion--;
                        return 0;
                }
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                skb = new_skb;
        }
 
@@ -591,7 +591,7 @@ tx_error_icmp:
        icmp_send(skb, ICMP_DEST_UNREACH, ICMP_HOST_UNREACH, 0);
 tx_error:
        stats->tx_errors++;
-       dev_kfree_skb(skb, FREE_WRITE);
+       dev_kfree_skb(skb);
        tunnel->recursion--;
        return 0;
 }
index b1f2bd35c5d8da15845e4d7c7e82b013eb3bc89a..079515a32c7ba94f639c51bcd83cdf24544818fb 100644 (file)
@@ -135,7 +135,7 @@ static struct device * reg_dev;
 static int reg_vif_xmit(struct sk_buff *skb, struct device *dev)
 {
        ipmr_cache_report(skb, reg_vif_num, IGMPMSG_WHOLEPKT);
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        return 0;
 }
 
@@ -320,7 +320,7 @@ static void ipmr_cache_delete(struct mfc_cache *cache)
                                netlink_unicast(rtnl, skb, NETLINK_CB(skb).pid, MSG_DONTWAIT);
                        } else
 #endif
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                }
        }
        kfree_s(cache,sizeof(cache));
@@ -504,7 +504,7 @@ static int ipmr_cache_report(struct sk_buff *pkt, vifi_t vifi, int assert)
        if ((ret=sock_queue_rcv_skb(mroute_socket,skb))<0) {
                if (net_ratelimit())
                        printk(KERN_WARNING "mroute: pending queue full, dropping entries.\n");
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
        }
 
        return ret;
@@ -523,7 +523,7 @@ static int ipmr_cache_unresolved(struct mfc_cache *cache, vifi_t vifi, struct sk
                 */
                if(cache_resolve_queue_len>=10 || (cache=ipmr_cache_alloc(GFP_ATOMIC))==NULL)
                {
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return -ENOBUFS;
                }
                /*
@@ -556,7 +556,7 @@ static int ipmr_cache_unresolved(struct mfc_cache *cache, vifi_t vifi, struct sk
                         */
                        if (ipmr_cache_report(skb, vifi, IGMPMSG_NOCACHE)<0) {
                                ipmr_cache_delete(cache);
-                               kfree_skb(skb, FREE_WRITE);
+                               kfree_skb(skb);
                                return -ENOBUFS;
                        }
                }
@@ -566,7 +566,7 @@ static int ipmr_cache_unresolved(struct mfc_cache *cache, vifi_t vifi, struct sk
         */
        if(cache->mfc_queuelen>3)
        {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return -ENOBUFS;
        }
        cache->mfc_queuelen++;
@@ -1176,7 +1176,7 @@ int ip_mr_forward(struct sk_buff *skb, struct mfc_cache *cache, int local)
 
 dont_forward:
        if (!local)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
        return 0;
 }
 
@@ -1234,7 +1234,7 @@ int ip_mr_input(struct sk_buff *skb)
                        ipmr_cache_unresolved(cache, vif, skb);
                        return -EAGAIN;
                }
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -1247,7 +1247,7 @@ int ip_mr_input(struct sk_buff *skb)
 dont_forward:
        if (local)
                return ip_local_deliver(skb);
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
@@ -1265,7 +1265,7 @@ int pim_rcv_v1(struct sk_buff * skb, unsigned short len)
            len < sizeof(*pim) + sizeof(*encap) ||
            pim->group != PIM_V1_VERSION || pim->code != PIM_V1_REGISTER ||
            reg_dev == NULL) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                 return -EINVAL;
         }
 
@@ -1279,7 +1279,7 @@ int pim_rcv_v1(struct sk_buff * skb, unsigned short len)
        if (!MULTICAST(encap->daddr) ||
            ntohs(encap->tot_len) == 0 ||
            ntohs(encap->tot_len) + sizeof(*pim) > len) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return -EINVAL;
        }
        skb->mac.raw = skb->nh.raw;
@@ -1310,7 +1310,7 @@ int pim_rcv(struct sk_buff * skb, unsigned short len)
            (pim->flags&PIM_NULL_REGISTER) ||
            reg_dev == NULL ||
            ip_compute_csum((void *)pim, len)) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                 return -EINVAL;
         }
 
@@ -1319,7 +1319,7 @@ int pim_rcv(struct sk_buff * skb, unsigned short len)
        if (!MULTICAST(encap->daddr) ||
            ntohs(encap->tot_len) == 0 ||
            ntohs(encap->tot_len) + sizeof(*pim) > len) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return -EINVAL;
        }
        skb->mac.raw = skb->nh.raw;
index ade80c193d3b4e325a4a906dbc40691c2f92d2ef..acc1b8d17e72c592bc8e027151c23fe1b16136d0 100644 (file)
@@ -228,7 +228,7 @@ static int rarp_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
        if (rarp->ar_hln != dev->addr_len || dev->type != ntohs(rarp->ar_hrd) 
                || dev->flags&IFF_NOARP || !in_dev || !in_dev->ifa_list)
        {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -237,7 +237,7 @@ static int rarp_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
  */
        if (rarp->ar_op != htons(ARPOP_RREQUEST))
        {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -255,7 +255,7 @@ static int rarp_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
                /*
                 *      This packet is not for us. Remove it. 
                 */
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
   
@@ -287,7 +287,7 @@ static int rarp_rcv(struct sk_buff *skb, struct device *dev, struct packet_type
                        dev->dev_addr, sha);
        }
 
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
index 78d873dcf5d10ba5da9c6f2d32037bb8a66b7c57..d2163863d4d0ab050dc7fb9a0985235d73d6880e 100644 (file)
@@ -155,7 +155,7 @@ void raw_err (struct sock *sk, struct sk_buff *skb)
        if (sk->ip_recverr && !sk->sock_readers) {
                struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC);
                if (skb2 && sock_queue_err_skb(sk, skb2))
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
        }
 
        if (type == ICMP_DEST_UNREACH && code == ICMP_FRAG_NEEDED) {
@@ -173,7 +173,7 @@ static int raw_rcv_skb(struct sock * sk, struct sk_buff * skb)
        if (__sock_queue_rcv_skb(sk,skb)<0)
        {
                ip_statistics.IpInDiscards++;
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return -1;
        }
 
index 1623ffa3cfd76726e8e31ef1a9fb883860647c8c..023f0465e3c2991e73904cba5f6da7ceba6f4615 100644 (file)
@@ -500,6 +500,8 @@ void ip_rt_redirect(u32 old_gw, u32 daddr, u32 new_gw,
 
                                if (!arp_bind_neighbour(&rt->u.dst) ||
                                    !(rt->u.dst.neighbour->nud_state&NUD_VALID)) {
+                                       if (rt->u.dst.neighbour)
+                                               neigh_event_send(rt->u.dst.neighbour, NULL);
                                        ip_rt_put(rt);
                                        rt_free(rt);
                                        break;
@@ -599,7 +601,7 @@ static int ip_error(struct sk_buff *skb)
        switch (rt->u.dst.error) {
        case EINVAL:
        default:
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        case EHOSTUNREACH:
                code = ICMP_HOST_UNREACH;
@@ -615,7 +617,7 @@ static int ip_error(struct sk_buff *skb)
                icmp_send(skb, ICMP_DEST_UNREACH, code, 0);
                rt->last_error = jiffies;
        }
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 } 
 
@@ -701,7 +703,7 @@ static int ip_rt_bug(struct sk_buff *skb)
 {
        printk(KERN_DEBUG "ip_rt_bug: %08x -> %08x, %s\n", skb->nh.iph->saddr,
               skb->nh.iph->daddr, skb->dev ? skb->dev->name : "?");
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        return 0;
 }
 
@@ -1415,7 +1417,7 @@ int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr* nlh, void *arg)
                                      rta->rta_oif ? *rta->rta_oif : 0);
        }
        if (err) {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return err;
        }
 
@@ -1478,7 +1480,7 @@ int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr* nlh, void *arg)
 
 nlmsg_failure:
 rtattr_failure:
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        return -EMSGSIZE;
 }
 
index 091d31dc8ce80e1111a6be178457caad15572274..38ec3782f5552701b3062f5a2268f8bfbc2415f3 100644 (file)
@@ -492,6 +492,8 @@ void tcp_time_wait(struct sock *sk)
 
 /*
  *     Walk down the receive queue counting readable data.
+ *
+ *     Must be called with the socket lock held.
  */
 
 static int tcp_readable(struct sock *sk)
@@ -500,14 +502,11 @@ static int tcp_readable(struct sock *sk)
        unsigned long amount;
        struct sk_buff *skb;
        int sum;
-       unsigned long flags;
 
        SOCK_DEBUG(sk, "tcp_readable: %p - ",sk);
 
-       save_flags(flags);
-       cli();
-       if (sk == NULL || (skb = skb_peek(&sk->receive_queue)) == NULL) {
-               restore_flags(flags);
+       skb = skb_peek(&sk->receive_queue);
+       if (skb == NULL) {
                SOCK_DEBUG(sk, "empty\n");
                return(0);
        }
@@ -560,7 +559,6 @@ static int tcp_readable(struct sock *sk)
                skb = skb->next;
        } while(skb != (struct sk_buff *)&sk->receive_queue);
 
-       restore_flags(flags);
        SOCK_DEBUG(sk, "got %lu bytes.\n",amount);
        return(amount);
 }
@@ -672,12 +670,18 @@ int tcp_ioctl(struct sock *sk, int cmd, unsigned long arg)
  */
 static void wait_for_tcp_connect(struct sock * sk)
 {
+       struct task_struct *tsk = current;
+       struct wait_queue wait = { tsk, NULL };
+
+       tsk->state = TASK_INTERRUPTIBLE;
+       add_wait_queue(sk->sleep, &wait);
        release_sock(sk);
-       cli();
-       if (((1 << sk->state) & ~(TCPF_ESTABLISHED|TCPF_CLOSE_WAIT)) &&
-           sk->err == 0)
-               interruptible_sleep_on(sk->sleep);
-       sti();
+
+       if (((1 << sk->state) & ~(TCPF_ESTABLISHED|TCPF_CLOSE_WAIT)) && sk->err == 0)
+               schedule();
+
+       tsk->state = TASK_RUNNING;
+       remove_wait_queue(sk->sleep, &wait);
        lock_sock(sk);
 }
 
@@ -904,7 +908,7 @@ int tcp_do_sendmsg(struct sock *sk, int iovlen, struct iovec *iov, int flags)
                         */
                        tmp = tp->af_specific->build_net_header(sk, skb);
                        if (tmp < 0) {
-                               kfree_skb(skb, FREE_WRITE);
+                               kfree_skb(skb);
                                if (copied)
                                        return(copied);
                                return(tmp);
@@ -1042,7 +1046,7 @@ static inline void tcp_eat_skb(struct sock *sk, struct sk_buff * skb)
        sk->tp_pinfo.af_tcp.delayed_acks++;
 
        __skb_unlink(skb, &sk->receive_queue);
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
 }
 
 
@@ -1431,7 +1435,7 @@ void tcp_close(struct sock *sk, unsigned long timeout)
         *  reader process may not have drained the data yet!
         */
        while((skb=skb_dequeue(&sk->receive_queue))!=NULL)
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
 
        /*  Timeout is not the same thing - however the code likes
         *  to send both the same way (sigh).
@@ -1440,17 +1444,25 @@ void tcp_close(struct sock *sk, unsigned long timeout)
                tcp_send_fin(sk);
 
        if (timeout) {
-               cli();
+               struct task_struct *tsk = current;
+               struct wait_queue wait = { tsk, NULL };
+
+               tsk->state = TASK_INTERRUPTIBLE;
+               tsk->timeout = timeout;
+               add_wait_queue(sk->sleep, &wait);
                release_sock(sk);
-               current->timeout = timeout;
-               while(closing(sk) && current->timeout) {
-                       interruptible_sleep_on(sk->sleep);
-                       if (signal_pending(current))
+
+               while (closing(sk)) {
+                       schedule();
+                       if (signal_pending(tsk) || !tsk->timeout)
                                break;
                }
-               current->timeout=0;
+
+               tsk->timeout=0;
+               tsk->state = TASK_RUNNING;
+               remove_wait_queue(sk->sleep, &wait);
+               
                lock_sock(sk);
-               sti();
        }
 
        /* Now that the socket is dead, if we are in the FIN_WAIT2 state
index 8a7d9a58abacd499a3ee5ce20edb68153318f528..3589b075bcceab1d741cdf4c3e1452f551d5fd2c 100644 (file)
@@ -763,7 +763,7 @@ static int tcp_clean_rtx_queue(struct sock *sk, __u32 ack, __u32 *seq,
 
                skb_unlink(skb);
                
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
        }
 
        if (acked) {
@@ -1067,7 +1067,7 @@ static void tcp_ofo_queue(struct sock *sk)
                if (!after(skb->end_seq, tp->rcv_nxt)) {
                        SOCK_DEBUG(sk, "ofo packet was already received \n");
                        skb_unlink(skb);
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        continue;
                }
                SOCK_DEBUG(sk, "ofo requeuing : rcv_next %X seq %X - %X\n",
@@ -1106,7 +1106,7 @@ static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
                SOCK_DEBUG(sk, "retransmit received: seq %X\n", skb->seq);
 
                tp->delayed_acks = MAX_DELAY_ACK;
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return;
        }
 
@@ -1135,7 +1135,7 @@ static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
                        if (skb->seq == skb1->seq && skb->len >= skb1->len) {
                                skb_append(skb1, skb);
                                skb_unlink(skb1);
-                               kfree_skb(skb1, FREE_READ);
+                               kfree_skb(skb1);
                                break;
                        }
                        
@@ -1345,7 +1345,7 @@ static void prune_queue(struct sock *sk)
         * useful packets (crossing fingers).
         */
        while ((skb = skb_dequeue_tail(&sk->out_of_order_queue))) { 
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                if (atomic_read(&sk->rmem_alloc) <= sk->rcvbuf)
                        return;
        }
@@ -1362,7 +1362,7 @@ static void prune_queue(struct sock *sk)
                }
                skb_unlink(skb);
                tp->rcv_nxt = skb->seq;
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                if (atomic_read(&sk->rmem_alloc) <= sk->rcvbuf) 
                        break;
        }
@@ -1420,7 +1420,7 @@ int tcp_rcv_established(struct sock *sk, struct sk_buff *skb,
                        /* Bulk data transfer: sender */
                        if (len == th->doff*4) {
                                tcp_ack(sk, th, skb->seq, skb->ack_seq, len); 
-                               kfree_skb(skb, FREE_READ); 
+                               kfree_skb(skb); 
                                tcp_data_snd_check(sk);
                                return 0;
                        } else { /* Header too small */
@@ -1504,7 +1504,7 @@ int tcp_rcv_established(struct sock *sk, struct sk_buff *skb,
 
        if (!queued) {
        discard:
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
        }
 
        return 0;
@@ -1929,7 +1929,7 @@ step6:
 
        if (!queued) { 
 discard:
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
        }
        return 0;
 }
index 5953548eb8f7dc075e8f1213569df2f70f6aa46a..f2e12a78a32b899cbae16285ab334aec2f5cf993 100644 (file)
@@ -629,7 +629,7 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
                 */
                sk->daddr = 0;
                sk->saddr = sk->rcv_saddr = 0;
-               kfree_skb(buff, FREE_WRITE);
+               kfree_skb(buff);
                release_sock(sk);
                return(-ENETUNREACH);
        }
@@ -1057,7 +1057,7 @@ static void tcp_v4_send_synack(struct sock *sk, struct open_request *req)
 
        if(ip_build_pkt(skb, sk, req->af.v4_req.loc_addr,
                        req->af.v4_req.rmt_addr, req->af.v4_req.opt) < 0) {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return;
        }
        
@@ -1538,7 +1538,7 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb)
 reset:
        tcp_v4_send_reset(skb);
 discard:
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        /* Be careful here. If this function gets more complicated and
         * gcc suffers from register pressure on the x86, sk (in %ebx) 
         * might be destroyed here. This current version compiles correctly,
@@ -1615,7 +1615,7 @@ no_tcp_socket:
 
 discard_it:
        /* Discard frame. */
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
@@ -1814,11 +1814,11 @@ static int tcp_v4_destroy_sock(struct sock *sk)
 
        /* Cleanup up the write buffer. */
        while((skb = skb_dequeue(&sk->write_queue)) != NULL)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 
        /* Cleans up our, hopefuly empty, out_of_order_queue. */
        while((skb = skb_dequeue(&sk->out_of_order_queue)) != NULL)
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
 
        return 0;
 }
index 939aeb6642f97cf88ccc7e821d0be2e8dbeb86bb..fbae5cfa6d6c32a6171faa8fd5698b3779b3a883 100644 (file)
@@ -106,7 +106,7 @@ void tcp_send_skb(struct sock *sk, struct sk_buff *skb)
                printk(KERN_DEBUG "tcp_send_skb: bad skb "
                       "(skb = %p, data = %p, th = %p, len = %u)\n",
                       skb, skb->data, th, skb->len);
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return;
        }
 
@@ -118,7 +118,7 @@ void tcp_send_skb(struct sock *sk, struct sk_buff *skb)
                /* If it's got a syn or fin discard. */
                if(!th->syn && !th->fin) {
                        printk(KERN_DEBUG "tcp_send_skb: attempt to queue a bogon.\n");
-                       kfree_skb(skb,FREE_WRITE);
+                       kfree_skb(skb);
                        return;
                }
        }
@@ -205,7 +205,7 @@ static int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len)
        /* Put headers on the new packet. */
        tmp = tp->af_specific->build_net_header(sk, buff);
        if (tmp < 0) {
-               kfree_skb(buff, FREE_WRITE);
+               kfree_skb(buff);
                return -1;
        }
                
@@ -263,7 +263,7 @@ static void tcp_wrxmit_prob(struct sock *sk, struct sk_buff *skb)
        update_send_head(sk);
 
        skb_unlink(skb);        
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
 
        if (!sk->dead)
                sk->write_space(sk);
@@ -597,7 +597,7 @@ static int tcp_retrans_try_collapse(struct sock *sk, struct sk_buff *skb)
                th1->fin = 1;
 
        /* ... and off you go. */
-       kfree_skb(buff, FREE_WRITE);
+       kfree_skb(buff);
        tp->packets_out--;
 
        /* Header checksum will be set by the retransmit procedure
@@ -759,7 +759,7 @@ void tcp_send_fin(struct sock *sk)
                /* FIXME: We must not throw this out. Eventually we must
                  * put a FIN into the queue, otherwise it never gets queued.
                 */
-               kfree_skb(buff, FREE_WRITE);
+               kfree_skb(buff);
                sk->write_seq++;
                t = del_timer(&sk->timer);
                if (t)
@@ -829,7 +829,7 @@ int tcp_send_synack(struct sock *sk)
 
        tmp = tp->af_specific->build_net_header(sk, skb);
        if (tmp < 0) {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return tmp;
        }
 
@@ -950,7 +950,7 @@ void tcp_send_ack(struct sock *sk)
        /* Put in the IP header and routing stuff. */
        tmp = tp->af_specific->build_net_header(sk, buff);
        if (tmp < 0) {
-               kfree_skb(buff, FREE_WRITE);
+               kfree_skb(buff);
                return;
        }
 
@@ -1043,7 +1043,7 @@ void tcp_write_wakeup(struct sock *sk)
                /* Put in the IP header and routing stuff. */
                tmp = tp->af_specific->build_net_header(sk, buff);
                if (tmp < 0) {
-                       kfree_skb(buff, FREE_WRITE);
+                       kfree_skb(buff);
                        return;
                }
 
index 519e9eade0a04c5ddbfcde65ad52c80405dcd6d4..674fcc85267b2fe0ed38eef7e3c6641e5ac72fe0 100644 (file)
@@ -492,7 +492,7 @@ void udp_err(struct sk_buff *skb, unsigned char *dp, int len)
        if (sk->ip_recverr && !sk->sock_readers) {
                struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC);
                if (skb2 && sock_queue_err_skb(sk, skb2))
-                       kfree_skb(skb2, FREE_READ);
+                       kfree_skb(skb2);
        }
        
        switch (type) {
@@ -971,7 +971,7 @@ static int udp_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
         
        if(!ipsec_sk_policy(sk,skb))
        {       
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return(0);
        }
         
@@ -983,7 +983,7 @@ static int udp_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
                udp_statistics.UdpInErrors++;
                ip_statistics.IpInDiscards++;
                ip_statistics.IpInDelivers--;
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return -1;
        }
        udp_statistics.UdpInDatagrams++;
@@ -1031,7 +1031,7 @@ static int udp_v4_mcast_deliver(struct sk_buff *skb, struct udphdr *uh,
        }
        SOCKHASH_UNLOCK();
        if(!given)
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
        return 0;
 }
 
@@ -1094,7 +1094,7 @@ int udp_rcv(struct sk_buff *skb, unsigned short len)
        if (ulen > len || len < sizeof(*uh) || ulen < sizeof(*uh)) {
                NETDEBUG(printk(KERN_DEBUG "UDP: short packet: %d/%d\n", ulen, len));
                udp_statistics.UdpInErrors++;
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return(0);
        }
 
@@ -1113,7 +1113,7 @@ int udp_rcv(struct sk_buff *skb, unsigned short len)
                       ntohl(daddr),ntohs(uh->dest),
                       ulen));
                udp_statistics.UdpInErrors++;
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return(0);
        }
 
@@ -1149,7 +1149,7 @@ int udp_rcv(struct sk_buff *skb, unsigned short len)
                 * Hmm.  We got an UDP broadcast to a port to which we
                 * don't wanna listen.  Ignore it.
                 */
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return(0);
        }
        udp_deliver(sk, skb);
index b2380fb78fed99cd4cc518f5175a3921ec683102..6b7508666f9ad8c5c49176e26c373b546867dd64 100644 (file)
@@ -77,7 +77,7 @@ int ipv6_routing_header(struct sk_buff **skb_ptr, struct device *dev,
                        pos += 1;
 
                icmpv6_send(skb, ICMPV6_PARAMETER_PROB, 0, pos, dev);
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;       
        }
 
@@ -94,7 +94,7 @@ int ipv6_routing_header(struct sk_buff **skb_ptr, struct device *dev,
                pos += 3;
 
                icmpv6_send(skb, ICMPV6_PARAMETER_PROB, 0, pos, dev);
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -107,7 +107,7 @@ int ipv6_routing_header(struct sk_buff **skb_ptr, struct device *dev,
        addr_type = ipv6_addr_type(addr);
 
        if (addr_type == IPV6_ADDR_MULTICAST) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
index 7f65f90aab527f52cbb7e56e27a51064b8fa7a23..b84dc9268ba85647db58d52825ba4f716674c308 100644 (file)
@@ -499,7 +499,7 @@ int icmpv6_rcv(struct sk_buff *skb, struct device *dev,
        };
 
 discard_it:
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
index d8d697fb107c3436aac394fbd04e5e60eb472bed..7316a30f102a0679ef95ef600569d90304a7e81a 100644 (file)
@@ -266,14 +266,14 @@ int ip6_fw_reject(struct sk_buff *skb)
         *      send it via netlink, as (rule, skb)
         */
 
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
 int ip6_fw_discard(struct sk_buff *skb)
 {
        printk(KERN_DEBUG "ip6_fw: BUG fw_reject called\n");
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
index 72ce290ae87632ccae4f0a44e596b10a17848f3f..ead32047afd692fdf3af50f28725a12e06ef8997 100644 (file)
@@ -121,7 +121,7 @@ static int ip6_dstopt_unknown(struct sk_buff *skb, struct ipv6_tlvtype *hdr)
                                    ICMPV6_UNK_OPTION, pos, skb->dev);
        };
        
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
@@ -183,7 +183,7 @@ int ipv6_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
        int pkt_len;
 
        if (skb->pkt_type == PACKET_OTHERHOST) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -204,7 +204,7 @@ int ipv6_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
        return 0;
 err:
        ipv6_statistics.Ip6InHdrErrors++;
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
@@ -358,7 +358,7 @@ st_loop:
                offset = nhptr - (u8*) hdr;
                icmpv6_send(skb, ICMPV6_PARAMPROB, ICMPV6_UNK_NEXTHDR,
                            offset, skb->dev);
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
        }
 
        return 0;
@@ -407,7 +407,7 @@ int ip6_mc_input(struct sk_buff *skb)
        }
 
        if (discard)
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
 
        return 0;
 }
index dcf108c0b42eabe60d73bca1c538e616e8cd57ab..de2668af357c892f37ee07bce605fcffc32a3c20 100644 (file)
@@ -60,7 +60,7 @@ int ip6_output(struct sk_buff *skb)
                return dst->neighbour->output(skb);
 
        printk(KERN_DEBUG "khm\n");
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        return -EINVAL;
 }
 
@@ -341,7 +341,7 @@ static int ip6_frag_xmit(struct sock *sk, inet_getfrag_t getfrag,
                                      nfrags * frag_len, frag_len);
 
                        if (err) {
-                               kfree_skb(skb, FREE_WRITE);
+                               kfree_skb(skb);
                                break;
                        }
 
@@ -351,7 +351,7 @@ static int ip6_frag_xmit(struct sock *sk, inet_getfrag_t getfrag,
        }
 
        if (err) {
-               kfree_skb(last_skb, FREE_WRITE);
+               kfree_skb(last_skb);
                return -EFAULT;
        }
 
@@ -490,7 +490,7 @@ int ip6_build_xmit(struct sock *sk, inet_getfrag_t getfrag, const void *data,
                        dst->output(skb);
                } else {
                        err = -EFAULT;
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                }
        } else {
                if (sk->ip_hdrincl)
@@ -529,7 +529,7 @@ int ip6_forward(struct sk_buff *skb)
        int size;
        
        if (ipv6_config.forwarding == 0) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return -EINVAL;
        }
 
@@ -548,7 +548,7 @@ int ip6_forward(struct sk_buff *skb)
                icmpv6_send(skb, ICMPV6_TIME_EXCEED, ICMPV6_EXC_HOPLIMIT,
                            0, skb->dev);
 
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return -ETIMEDOUT;
        }
 
@@ -577,14 +577,14 @@ int ip6_forward(struct sk_buff *skb)
 
        if (size > dst->pmtu) {
                icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, dst->pmtu, skb->dev);
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return -EMSGSIZE;
        }
 
        if (skb_headroom(skb) < dst->dev->hard_header_len || skb_cloned(skb)) {
                struct sk_buff *skb2;
                skb2 = skb_realloc_headroom(skb, (dst->dev->hard_header_len + 15)&~15);
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                skb = skb2;
        }
 
index c6d8b7b1d33b5b9ebd4bff97a7570b1cbd4b6f4d..f4bdc676b6a7905bdef5c4117ef3a16cd12e8b5a 100644 (file)
@@ -320,7 +320,7 @@ void ndisc_send_na(struct device *dev, struct neighbour *neigh,
        }
 
        if (ndisc_build_ll_hdr(skb, dev, daddr, neigh, len) == 0) {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return;
        }
 
@@ -384,7 +384,7 @@ void ndisc_send_ns(struct device *dev, struct neighbour *neigh,
        }
 
        if (ndisc_build_ll_hdr(skb, dev, daddr, neigh, len) == 0) {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return;
        }
 
@@ -434,7 +434,7 @@ void ndisc_send_rs(struct device *dev, struct in6_addr *saddr,
        }
 
        if (ndisc_build_ll_hdr(skb, dev, daddr, NULL, len) == 0) {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return;
        }
 
@@ -489,7 +489,7 @@ static void ndisc_error_report(struct neighbour *neigh, struct sk_buff *skb)
         *       destination unreachable"
         */
        icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_ADDR_UNREACH, 0, skb->dev);
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
 }
 
 static void ndisc_solicit(struct neighbour *neigh, struct sk_buff *skb)
@@ -831,7 +831,7 @@ void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh,
        hlen = 0;
 
        if (ndisc_build_ll_hdr(buff, dev, &skb->nh.ipv6h->saddr, NULL, len) == 0) {
-               kfree_skb(buff, FREE_WRITE);
+               kfree_skb(buff);
                return;
        }
        
@@ -909,7 +909,7 @@ static void pndisc_redo(struct sk_buff *skb)
 {
        ndisc_rcv(skb, skb->dev, &skb->nh.ipv6h->saddr, &skb->nh.ipv6h->daddr,
                  NULL, skb->len);
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
 }
 
 int ndisc_rcv(struct sk_buff *skb, struct device *dev,
index 8ed1bdeb78d4fd5e6f34e0f2e3c5b60045ee3e94..4678ca3f3bafac1bbd50a689011c66ee02116324 100644 (file)
@@ -194,7 +194,7 @@ static inline int rawv6_rcv_skb(struct sock * sk, struct sk_buff * skb)
        /* Charge it to the socket. */
        if (sock_queue_rcv_skb(sk,skb)<0) {
                /* ip_statistics.IpInDiscards++; */
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
index 6a6c7fbbcaee9893429b2ced0bf84eafdfeb8958..aa027da142352461648bc6554b39bcbcfde72340 100644 (file)
@@ -112,7 +112,7 @@ static void fq_free(struct frag_queue *fq)
        struct ipv6_frag *fp, *back;
 
        for(fp = fq->fragments; fp; ) {
-               kfree_skb(fp->skb, FREE_READ);          
+               kfree_skb(fp->skb);             
                back = fp;
                fp=fp->next;
                kfree(back);
@@ -159,7 +159,7 @@ static void create_frag_entry(struct sk_buff *skb, struct device *dev,
                                           GFP_ATOMIC);
 
        if (fq == NULL) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return;
        }
 
@@ -201,7 +201,7 @@ static void reasm_queue(struct frag_queue *fq, struct sk_buff *skb,
                                           GFP_ATOMIC);
 
        if (nfp == NULL) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return;
        }
 
@@ -230,7 +230,7 @@ static void reasm_queue(struct frag_queue *fq, struct sk_buff *skb,
                }
 
                /* duplicate. discard it. */
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                kfree(nfp);
                return;
        }
@@ -308,7 +308,7 @@ static int reasm_frag_1(struct frag_queue *fq, struct sk_buff **skb_in)
                struct ipv6_frag *back;
 
                memcpy(skb_put(skb, fp->len), (__u8*)(fp->fhdr + 1), fp->len);
-               kfree_skb(fp->skb, FREE_READ);
+               kfree_skb(fp->skb);
                back = fp;
                fp=fp->next;
                kfree(back);
index 47644c9aeeeac413df0315ca2d052fae9e1944e0..c823955202cab0ef0d46339aebba51f6a6ddf496 100644 (file)
@@ -910,7 +910,7 @@ static int rt6_msgrcv(int unit, struct sk_buff *skb)
 
 out:
        rtnl_unlock();
-       kfree_skb(skb, FREE_READ);      
+       kfree_skb(skb); 
        return count;
 }
 
@@ -926,7 +926,7 @@ static void rt6_sndrtmsg(struct in6_rtmsg *rtmsg)
               sizeof(struct in6_rtmsg));
        
        if (netlink_post(NETLINK_ROUTE6, skb))
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 }
 
 void rt6_sndmsg(int type, struct in6_addr *dst, struct in6_addr *src,
@@ -966,7 +966,7 @@ void rt6_sndmsg(int type, struct in6_addr *dst, struct in6_addr *src,
        msg->rtmsg_flags = flags;
 
        if (netlink_post(NETLINK_ROUTE6, skb))
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 }
 #endif /* CONFIG_IPV6_NETLINK */
 
@@ -1336,7 +1336,7 @@ int ipv6_route_ioctl(unsigned int cmd, void *arg)
 int ip6_pkt_discard(struct sk_buff *skb)
 {      
        ipv6_statistics.Ip6OutNoRoutes++;
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        return 0;
 }
 
index de3e0b660dbcfdfdde0c24430997e6b60a1ac7c9..d0b80438c37379a20804d7c6701f1bfe86bce4c1 100644 (file)
@@ -330,7 +330,7 @@ void ipip6_err(struct sk_buff *skb, unsigned char *dp, int len)
                        icmpv6_send(skb2, rel_type, rel_code, rel_info, skb2->dev);
                }
        }
-       kfree_skb(skb2, FREE_WRITE);
+       kfree_skb(skb2);
        return;
 #endif
 }
@@ -359,7 +359,7 @@ int ipip6_rcv(struct sk_buff *skb, unsigned short len)
        }
 
        icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PROT_UNREACH, 0);
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
@@ -472,11 +472,11 @@ static int ipip6_tunnel_xmit(struct sk_buff *skb, struct device *dev)
                if (!new_skb) {
                        ip_rt_put(rt);
                        stats->tx_dropped++;
-                       dev_kfree_skb(skb, FREE_WRITE);
+                       dev_kfree_skb(skb);
                        tunnel->recursion--;
                        return 0;
                }
-               dev_kfree_skb(skb, FREE_WRITE);
+               dev_kfree_skb(skb);
                skb = new_skb;
        }
 
@@ -520,7 +520,7 @@ tx_error_icmp:
        icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_ADDR_UNREACH, 0, dev);
 tx_error:
        stats->tx_errors++;
-       dev_kfree_skb(skb, FREE_WRITE);
+       dev_kfree_skb(skb);
        tunnel->recursion--;
        return 0;
 }
index 7fd8c552eda2a3643541e3cfbed354b1583b4eb4..f7a080a0d04373fb1b035e2430b08a1d7ea98788 100644 (file)
@@ -685,7 +685,7 @@ static void tcp_v6_send_synack(struct sock *sk, struct open_request *req)
 
        dst = ip6_route_output(sk, &fl);
        if (dst->error) {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                dst_release(dst);
                return;
        }
@@ -1247,7 +1247,7 @@ discard_it:
         *      Discard frame
         */
 
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
@@ -1454,14 +1454,14 @@ static int tcp_v6_destroy_sock(struct sock *sk)
         */
 
        while((skb = skb_dequeue(&sk->write_queue)) != NULL)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 
        /*
         *  Cleans up our, hopefuly empty, out_of_order_queue
         */
 
        while((skb = skb_dequeue(&sk->out_of_order_queue)) != NULL)
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
 
        /*
         *      Release destination entry
index 8c912de30cf999e5399e2ae7b25c72f47e2a7671..34c465f41d56049fc9666869cc2c6e4bb41f0d09 100644 (file)
@@ -402,7 +402,7 @@ static inline int udpv6_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
                ipv6_statistics.Ip6InDiscards++;
                ipv6_statistics.Ip6InDelivers--;
                skb->sk = NULL;
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return 0;
        }
        udp_stats_in6.UdpInDatagrams++;
@@ -467,13 +467,13 @@ static void udpv6_mcast_deliver(struct udphdr *uh,
                        struct sk_buff *buff = skb_clone(skb, GFP_ATOMIC);
                        if(sock_queue_rcv_skb(sk, buff) < 0) {
                                buff->sk = NULL;
-                               kfree_skb(buff, FREE_READ);
+                               kfree_skb(buff);
                        }
                }
        }
        if(!sk || sock_queue_rcv_skb(sk, skb) < 0) {
                skb->sk = NULL;
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
        }
 }
 
@@ -500,7 +500,7 @@ int udpv6_rcv(struct sk_buff *skb, struct device *dev,
        if (ulen > len || len < sizeof(*uh)) {
                printk(KERN_DEBUG "UDP: short packet: %d/%d\n", ulen, len);
                udp_stats_in6.UdpInErrors++;
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return(0);
        }
 
@@ -543,7 +543,7 @@ int udpv6_rcv(struct sk_buff *skb, struct device *dev,
 
                icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_PORT_UNREACH, 0, dev);
                
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return(0);
        }
 
@@ -558,7 +558,7 @@ int udpv6_rcv(struct sk_buff *skb, struct device *dev,
 
 discard:
        udp_stats_in6.UdpInErrors++;
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return(0);      
 }
 
index 374585092bc72e9407b28ce9eeab8f3625d7ce20..caafd6c22a3d2a0b85bc946a4370802a0fde1414 100644 (file)
@@ -210,7 +210,7 @@ static void ipx_destroy_socket(struct sock *sk)
 
        ipx_remove_socket(sk);
        while((skb=skb_dequeue(&sk->receive_queue))!=NULL) {
-               kfree_skb(skb,FREE_READ);
+               kfree_skb(skb);
        }
 
        sk_free(sk);
@@ -378,11 +378,7 @@ static int ipxitf_def_skb_handler(struct sock *sock, struct sk_buff *skb)
 
        if((retval = sock_queue_rcv_skb(sock, skb))<0)
        {
-               /*
-                * skb->sk is NULL here, so FREE_WRITE does not hurt
-                * the sending socket.
-                */
-               kfree_skb(skb,FREE_WRITE);
+               kfree_skb(skb);
        }
        return retval;
 }
@@ -439,10 +435,9 @@ static int ipxitf_demux_socket(ipx_interface *intrfc, struct sk_buff *skb, int c
        if (copy == 0)
        {
                /* skb was solely for us, and we did not make a copy,
-                * so free it. FREE_WRITE does not hurt, because
-                * skb->sk is NULL here.
+                * so free it.
                 */
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
        }
        return 0;
 }
@@ -494,7 +489,7 @@ static int ipxitf_demux_socket(ipx_interface *intrfc, struct sk_buff *skb, int c
        if (sock1 == NULL && sock2 == NULL)
        {
                if (!copy)
-                       kfree_skb(skb,FREE_WRITE);
+                       kfree_skb(skb);
                return 0;
        }
 
@@ -563,7 +558,7 @@ static struct sk_buff *ipxitf_adjust_skbuff(ipx_interface *intrfc, struct sk_buf
                skb2->h.raw=skb_put(skb2,skb->len);
                memcpy(skb2->h.raw, skb->h.raw, skb->len);
        }
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        return NULL;
 }
 
@@ -636,15 +631,7 @@ static int ipxitf_send(ipx_interface *intrfc, struct sk_buff *skb, char *node)
 
        if (!send_to_wire)
        {
-               /*
-                *      We do a FREE_WRITE here because this indicates how
-                *      to treat the socket with which the packet is
-                *      associated.  If this packet is associated with a
-                *      socket at all, it must be the originator of the
-                *      packet.   Routed packets will have no socket associated
-                *      with them.
-                */
-               kfree_skb(skb,FREE_WRITE);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -708,7 +695,7 @@ static int ipxitf_rcv(ipx_interface *intrfc, struct sk_buff *skb)
 
        if (call_in_firewall(PF_IPX, skb->dev, ipx, NULL, &skb)!=FW_ACCEPT)
        {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -801,20 +788,20 @@ static int ipxitf_rcv(ipx_interface *intrfc, struct sk_buff *skb)
                 */
                if (call_fw_firewall(PF_IPX, skb->dev, ipx, NULL, &skb)!=FW_ACCEPT)
                {
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        return 0;
                }
 
                /* We only route point-to-point packets. */
                if (skb->pkt_type == PACKET_HOST)
                {
-                       skb=skb_unshare(skb, GFP_ATOMIC, FREE_READ);
+                       skb=skb_unshare(skb, GFP_ATOMIC);
                        if(skb)
                                return ipxrtr_route_skb(skb);
                        else
                                return 0;
                }
-               kfree_skb(skb,FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -826,7 +813,7 @@ static int ipxitf_rcv(ipx_interface *intrfc, struct sk_buff *skb)
        }
 
        /* we couldn't pawn it off so unload it */
-       kfree_skb(skb,FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
@@ -1381,7 +1368,7 @@ static int ipxrtr_route_packet(struct sock *sk, struct sockaddr_ipx *usipx, stru
        err = memcpy_fromiovec(skb_put(skb,len),iov,len);
        if (err) 
        {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return -EFAULT; 
        }       
 
@@ -1396,7 +1383,7 @@ static int ipxrtr_route_packet(struct sock *sk, struct sockaddr_ipx *usipx, stru
 
        if(call_out_firewall(PF_IPX, skb->dev, ipx, NULL, &skb)!=FW_ACCEPT)
        {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return -EPERM;
        }
        
@@ -1414,7 +1401,7 @@ static int ipxrtr_route_skb(struct sk_buff *skb)
        if (r == NULL)
        {
                /* no known route */
-               kfree_skb(skb,FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
        i = r->ir_intrfc;
@@ -2039,7 +2026,7 @@ int ipx_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
        
        /* Too small? */
        if(ntohs(ipx->ipx_pktsize)<sizeof(struct ipxhdr)) {
-               kfree_skb(skb,FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
        
@@ -2047,7 +2034,7 @@ int ipx_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
        {
                if(ipx_set_checksum(ipx, ntohs(ipx->ipx_pktsize))!=ipx->ipx_checksum)
                {
-                       kfree_skb(skb,FREE_READ);
+                       kfree_skb(skb);
                        return 0;
                }
        }
@@ -2064,7 +2051,7 @@ int ipx_rcv(struct sk_buff *skb, struct device *dev, struct packet_type *pt)
 
                if (intrfc == NULL) {
                        /* Not one of ours */
-                       kfree_skb(skb,FREE_READ);
+                       kfree_skb(skb);
                        return 0;
                }
        }
index 126b9367351eb911c70058559463ff6dabc43c02..4e7a9ca4d2c5bcf16f64eaead188b2cfea56b105 100644 (file)
@@ -114,7 +114,7 @@ static void lapb_state0_machine(lapb_cb *lapb, struct sk_buff *skb, struct lapb_
                        break;
        }
 
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
 }
 
 /*
@@ -206,7 +206,7 @@ static void lapb_state1_machine(lapb_cb *lapb, struct sk_buff *skb, struct lapb_
                        break;
        }
 
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
 }
 
 /*
@@ -278,7 +278,7 @@ static void lapb_state2_machine(lapb_cb *lapb, struct sk_buff *skb, struct lapb_
                        break;
        }
 
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
 }
 
 /*
@@ -523,7 +523,7 @@ static void lapb_state3_machine(lapb_cb *lapb, struct sk_buff *skb, struct lapb_
        }
 
        if (!queued)
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
 }
 
 /*
@@ -595,7 +595,7 @@ static void lapb_state4_machine(lapb_cb *lapb, struct sk_buff *skb, struct lapb_
                        break;
        }
 
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
 }
 
 /*
index 9e1cdf4758bea16d8699ab41b5ed393bf913e410..8c8b21c10ba769572f3c10c3e894fd253124ee59 100644 (file)
@@ -158,7 +158,7 @@ void lapb_transmit_buffer(lapb_cb *lapb, struct sk_buff *skb, int type)
 #endif
 
        if (!lapb_data_transmit(lapb, skb))
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 }
 
 void lapb_establish_data_link(lapb_cb *lapb)
index 3f7f0a84e9048decacefe181f17293a7a501ca1f..611eba6f18a28fe0ba301338e99bfbe2d286dbfb 100644 (file)
@@ -43,10 +43,10 @@ void lapb_clear_queues(lapb_cb *lapb)
        struct sk_buff *skb;
 
        while ((skb = skb_dequeue(&lapb->write_queue)) != NULL)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 
        while ((skb = skb_dequeue(&lapb->ack_queue)) != NULL)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 }
 
 /*
@@ -67,7 +67,7 @@ void lapb_frames_acked(lapb_cb *lapb, unsigned short nr)
        if (lapb->va != nr) {
                while (skb_peek(&lapb->ack_queue) != NULL && lapb->va != nr) {
                        skb = skb_dequeue(&lapb->ack_queue);
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        lapb->va = (lapb->va + 1) % modulus;
                }
        }
index 9b14449975f7dd390af5ca7d71f653a1993a6932..85bd8f4d1df55b3f7b3c563b02d10916556af843 100644 (file)
@@ -414,7 +414,7 @@ static int netbeui_sendmsg(struct socket *sock, struct msghdr *msg, int len, int
        err = memcpy_fromiovec(skb_put(skb,len),msg->msg_iov,len);
        if (err)
        {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return -EFAULT;
        }
 
@@ -422,14 +422,14 @@ static int netbeui_sendmsg(struct socket *sock, struct msghdr *msg, int len, int
 
        if(call_out_firewall(AF_NETBEUI, skb->dev, nbp, NULL)!=FW_ACCEPT)
        {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return -EPERM;
        }
 
 #endif
 
        if(nb_send_low(dev,skb,&usat->sat_addr, NULL)==-1)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
        SOCK_DEBUG(sk, "SK %p: Done write (%d).\n", sk, len);
        return len;
 }
index 198fe1ce19903caab07aff67d8d5b8a5dcb7960e..29edc5acf7598981be809b252bc2f4f944140b9a 100644 (file)
@@ -163,7 +163,7 @@ static void netbeui_event(llcptr llc)
        /* We ignore TST, XID, FRMR stuff */
        /* FIXME: We need to free frames here once I fix the callback! */
        if(llc->inc_skb)
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
 }
 
 /*
index e4c2ec7ce1a4a9e21ed196b8fd42993ff1ac6174..c5a57959716825932db33716a51dcccbbfd06547 100644 (file)
@@ -85,7 +85,7 @@ void netbeui_heard_name(struct device *dev, struct sk_buff *skb)
                        nb_complete(nb,skb);
                }
        }
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        return 0;
 }
 
@@ -139,7 +139,7 @@ void netbeui_name_defence(struct dev *dev, struct sk_buff *skb)
                        }               
                }
        }
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
 }
 
 void netbeui_name_query(struct dev *dev, struct sk_buff *skb)
@@ -158,6 +158,6 @@ void netbeui_name_query(struct dev *dev, struct sk_buff *skb)
                        dev_queue_xmit(nskb);
                }
        }
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
 }
 
index 8b51f71208554d76a990aad1572111defb7f8ab7..a84d1fd53ffeac09e6fef9bf1b02dd6066a1587f 100644 (file)
@@ -300,7 +300,7 @@ void nr_destroy_socket(struct sock *sk)     /* Not static as it's used by the timer
                        skb->sk->protinfo.nr->state = NR_STATE_0;
                }
 
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
        }
 
        if (atomic_read(&sk->wmem_alloc) != 0 || atomic_read(&sk->rmem_alloc) != 0) {
@@ -763,7 +763,7 @@ static int nr_accept(struct socket *sock, struct socket *newsock, int flags)
 
        /* Now attach up the new socket */
        skb->sk = NULL;
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        sk->ack_backlog--;
        newsock->sk = newsk;
 
@@ -999,7 +999,7 @@ static int nr_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct s
        SOCK_DEBUG(sk, "NET/ROM: Transmitting buffer\n");
 
        if (sk->state != TCP_ESTABLISHED) {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return -ENOTCONN;
        }
 
index 4614db71cf29167c6b45157220401e59b2a03ab9..b04adbcaa74e0991b0d994c6500bb85d1a87697e 100644 (file)
@@ -123,7 +123,7 @@ static int nr_rebuild_header(struct sk_buff *skb)
        if (arp_find(bp + 7, skb)) {
 #if 0
                /* BUGGGG! If arp_find returned 1, skb does not exist. --ANK*/
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 #endif
                return 1;
        }
@@ -138,17 +138,17 @@ static int nr_rebuild_header(struct sk_buff *skb)
        bp[6] |= AX25_SSSID_SPARE;
 
        if ((skbn = skb_clone(skb, GFP_ATOMIC)) == NULL) {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return 1;
        }
 
        if (skb->sk != NULL)
                skb_set_owner_w(skbn, skb->sk);
 
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
 
        if (!nr_route_frame(skbn, NULL)) {
-               kfree_skb(skbn, FREE_WRITE);
+               kfree_skb(skbn);
                stats->tx_errors++;
        }
 
@@ -219,7 +219,7 @@ static int nr_xmit(struct sk_buff *skb, struct device *dev)
 
        sti();
 
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
 
        stats->tx_errors++;
 
index a0d3148c2fdeacc3de0aef1f64587aec1d0b476f..ac32cd704efca3f7267b19503d54996ced7dae38 100644 (file)
@@ -74,7 +74,7 @@ static int nr_queue_rx_frame(struct sock *sk, struct sk_buff *skb, int more)
 
                while ((skbo = skb_dequeue(&sk->protinfo.nr->frag_queue)) != NULL) {
                        memcpy(skb_put(skbn, skbo->len), skbo->data, skbo->len);
-                       kfree_skb(skbo, FREE_READ);
+                       kfree_skb(skbo);
                }
 
                sk->protinfo.nr->fraglen = 0;           
@@ -246,7 +246,7 @@ static int nr_state3_machine(struct sock *sk, struct sk_buff *skb, int frametype
                                        } else if (nr_in_rx_window(sk, ns)) {
                                                skb_queue_tail(&temp_queue, skbn);
                                        } else {
-                                               kfree_skb(skbn, FREE_READ);
+                                               kfree_skb(skbn);
                                        }
                                }
                                while ((skbn = skb_dequeue(&temp_queue)) != NULL) {
index 4c3eb61d8d412c97e20cd19f7ae17daa6f6a506f..93da60adb7abf85a4f0d1a890eb4b9e0f8d7ac17 100644 (file)
@@ -79,7 +79,7 @@ void nr_output(struct sock *sk, struct sk_buff *skb)
                        skb_queue_tail(&sk->write_queue, skbn); /* Throw it on the queue */
                }
 
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
        } else {
                skb_queue_tail(&sk->write_queue, skb);          /* Throw it on the queue */
        }
@@ -216,7 +216,7 @@ void nr_transmit_buffer(struct sock *sk, struct sk_buff *skb)
        *dptr++ = sysctl_netrom_network_ttl_initialiser;
 
        if (!nr_route_frame(skb, NULL)) {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                nr_disconnect(sk, ENETUNREACH);
        }
 }
index d311418769f7b16098c15cab7abedf3077ba7a04..7ae69fe07236f1a3051b5c047b3fc78897bcc008 100644 (file)
@@ -47,16 +47,16 @@ void nr_clear_queues(struct sock *sk)
        struct sk_buff *skb;
 
        while ((skb = skb_dequeue(&sk->write_queue)) != NULL)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 
        while ((skb = skb_dequeue(&sk->protinfo.nr->ack_queue)) != NULL)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 
        while ((skb = skb_dequeue(&sk->protinfo.nr->reseq_queue)) != NULL)
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
 
        while ((skb = skb_dequeue(&sk->protinfo.nr->frag_queue)) != NULL)
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
 }
 
 /*
@@ -74,7 +74,7 @@ void nr_frames_acked(struct sock *sk, unsigned short nr)
        if (sk->protinfo.nr->va != nr) {
                while (skb_peek(&sk->protinfo.nr->ack_queue) != NULL && sk->protinfo.nr->va != nr) {
                        skb = skb_dequeue(&sk->protinfo.nr->ack_queue);
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        sk->protinfo.nr->va = (sk->protinfo.nr->va + 1) % NR_MODULUS;
                }
        }
@@ -266,7 +266,7 @@ void nr_transmit_dm(struct sk_buff *skb)
        *dptr++ = 0;
 
        if (!nr_route_frame(skbn, NULL))
-               kfree_skb(skbn, FREE_WRITE);
+               kfree_skb(skbn);
 }
 
 void nr_disconnect(struct sock *sk, int reason)
index 589c8f6bdb9b2e3fd9f28ffae8c47a93848950aa..4f277ec48b340c97a32ac89df9656ef42f18ee8f 100644 (file)
@@ -220,7 +220,7 @@ static int packet_rcv_spkt(struct sk_buff *skb, struct device *dev,  struct pack
         */
 
        if (skb->pkt_type == PACKET_LOOPBACK) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -241,7 +241,7 @@ static int packet_rcv_spkt(struct sk_buff *skb, struct device *dev,  struct pack
 
        if (sock_queue_rcv_skb(sk,skb)<0)
        {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -362,7 +362,7 @@ static int packet_sendmsg_spkt(struct socket *sock, struct msghdr *msg, int len,
 
        if (err) 
        {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return err;
        }
 
@@ -384,7 +384,7 @@ static int packet_rcv(struct sk_buff *skb, struct device *dev,  struct packet_ty
        sk = (struct sock *) pt->data;
 
        if (skb->pkt_type == PACKET_LOOPBACK) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -423,7 +423,7 @@ static int packet_rcv(struct sk_buff *skb, struct device *dev,  struct packet_ty
 
        if (sock_queue_rcv_skb(sk,skb)<0)
        {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
        return(0);
@@ -488,7 +488,7 @@ static int packet_sendmsg(struct socket *sock, struct msghdr *msg, int len,
                                     saddr ? saddr->sll_addr : NULL,
                                     NULL, len) < 0
                    && sock->type == SOCK_DGRAM) {
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        dev_unlock_list();
                        return -EINVAL;
                }
@@ -516,7 +516,7 @@ static int packet_sendmsg(struct socket *sock, struct msghdr *msg, int len,
        }
 
        if (err) {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return err;
        }
 
@@ -585,7 +585,7 @@ static int packet_release(struct socket *sock, struct socket *peersock)
        /* Purge queues */
 
        while ((skb=skb_dequeue(&sk->receive_queue))!=NULL)
-               kfree_skb(skb,FREE_READ);
+               kfree_skb(skb);
 
        if (atomic_read(&sk->rmem_alloc) || atomic_read(&sk->wmem_alloc)) {
                sk->timer.data=(unsigned long)sk;
index 5ae64334dab38815508ea3ed326f409f11d4a3da..eeb3963507a5b89eacc7992466da648e9bbae72b 100644 (file)
@@ -378,7 +378,7 @@ void rose_destroy_socket(struct sock *sk)   /* Not static as it's used by the time
                        skb->sk->protinfo.rose->state = ROSE_STATE_0;
                }
 
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
        }
 
        if (atomic_read(&sk->wmem_alloc) != 0 || atomic_read(&sk->rmem_alloc) != 0) {
@@ -851,7 +851,7 @@ static int rose_accept(struct socket *sock, struct socket *newsock, int flags)
 
        /* Now attach up the new socket */
        skb->sk = NULL;
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        sk->ack_backlog--;
        newsock->sk = newsk;
 
@@ -1064,7 +1064,7 @@ static int rose_sendmsg(struct socket *sock, struct msghdr *msg, int len,
        SOCK_DEBUG(sk, "ROSE: Transmitting buffer\n");
        
        if (sk->state != TCP_ESTABLISHED) {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return -ENOTCONN;
        }
 
index 6b6586a0d926f475a1c27cbe97e29f206ec81632..0cc81c46443ef51cd19a6bd27b6211927ee1ac2a 100644 (file)
@@ -104,23 +104,23 @@ static int rose_rebuild_header(struct sk_buff *skb)
        if (arp_find(bp + 7, skb)) {
 #if 0
                /* BUGGGG! If arp_find returned 1, skb does not exist. --ANK*/
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 #endif
                return 1;
        }
 
        if ((skbn = skb_clone(skb, GFP_ATOMIC)) == NULL) {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return 1;
        }
 
        if (skb->sk != NULL)
                skb_set_owner_w(skbn, skb->sk);
 
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
 
        if (!rose_route_frame(skbn, NULL)) {
-               kfree_skb(skbn, FREE_WRITE);
+               kfree_skb(skbn);
                stats->tx_errors++;
        }
 
@@ -191,7 +191,7 @@ static int rose_xmit(struct sk_buff *skb, struct device *dev)
 
        sti();
 
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
 
        stats->tx_errors++;
 
index 8ee27147a5980b6f5fcbeefeb85f933750cba3b5..c462fa6962f03137c70e61847f2957c8d1ff3359 100644 (file)
@@ -169,7 +169,7 @@ void rose_link_rx_restart(struct sk_buff *skb, struct rose_neigh *neigh, unsigne
        if (neigh->restarted) {
                while ((skbn = skb_dequeue(&neigh->queue)) != NULL)
                        if (!rose_send_frame(skbn, neigh))
-                               kfree_skb(skbn, FREE_WRITE);
+                               kfree_skb(skbn);
        }
 }
 
@@ -199,7 +199,7 @@ void rose_transmit_restart_request(struct rose_neigh *neigh)
        *dptr++ = 0;
 
        if (!rose_send_frame(skb, neigh))
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 }
 
 /*
@@ -226,7 +226,7 @@ void rose_transmit_restart_confirmation(struct rose_neigh *neigh)
        *dptr++ = ROSE_RESTART_CONFIRMATION;
 
        if (!rose_send_frame(skb, neigh))
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 }
 
 /*
@@ -254,7 +254,7 @@ void rose_transmit_diagnostic(struct rose_neigh *neigh, unsigned char diag)
        *dptr++ = diag;
 
        if (!rose_send_frame(skb, neigh))
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 }
 
 /*
@@ -284,7 +284,7 @@ void rose_transmit_clear_request(struct rose_neigh *neigh, unsigned int lci, uns
        *dptr++ = diagnostic;
 
        if (!rose_send_frame(skb, neigh))
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 }
 
 void rose_transmit_link(struct sk_buff *skb, struct rose_neigh *neigh)
@@ -292,7 +292,7 @@ void rose_transmit_link(struct sk_buff *skb, struct rose_neigh *neigh)
        unsigned char *dptr;
 
        if (call_fw_firewall(PF_ROSE, skb->dev, skb->data, NULL, &skb) != FW_ACCEPT) {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return;
        }
 
@@ -304,7 +304,7 @@ void rose_transmit_link(struct sk_buff *skb, struct rose_neigh *neigh)
 
        if (neigh->restarted) {
                if (!rose_send_frame(skb, neigh))
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
        } else {
                skb_queue_tail(&neigh->queue, skb);
 
index d9145cdea61612e4386aebb9982baec66d5b10d4..917846bf7a4f39603b9058e567de12e844b8d273 100644 (file)
@@ -184,7 +184,7 @@ static void rose_remove_neigh(struct rose_neigh *rose_neigh)
        rose_stop_t0timer(rose_neigh);
 
        while ((skb = skb_dequeue(&rose_neigh->queue)) != NULL)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 
        save_flags(flags); cli();
 
@@ -534,7 +534,7 @@ static void rose_del_route_by_neigh(struct rose_neigh *rose_neigh)
        rose_start_ftimer(rose_neigh);
 
        while ((skb = skb_dequeue(&rose_neigh->queue)) != NULL)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 
        rose_route = rose_route_list;
 
index e7709726cdfe62298a43fcba1739199831dee35c..d8021226167b04f6fd0d31223b34e8e9ae82583c 100644 (file)
@@ -47,10 +47,10 @@ void rose_clear_queues(struct sock *sk)
        struct sk_buff *skb;
 
        while ((skb = skb_dequeue(&sk->write_queue)) != NULL)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 
        while ((skb = skb_dequeue(&sk->protinfo.rose->ack_queue)) != NULL)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 }
 
 /*
@@ -68,7 +68,7 @@ void rose_frames_acked(struct sock *sk, unsigned short nr)
        if (sk->protinfo.rose->va != nr) {
                while (skb_peek(&sk->protinfo.rose->ack_queue) != NULL && sk->protinfo.rose->va != nr) {
                        skb = skb_dequeue(&sk->protinfo.rose->ack_queue);
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        sk->protinfo.rose->va = (sk->protinfo.rose->va + 1) % ROSE_MODULUS;
                }
        }
@@ -206,7 +206,7 @@ void rose_write_internal(struct sock *sk, int frametype)
 
                default:
                        printk(KERN_ERR "ROSE: rose_write_internal - invalid frametype %02X\n", frametype);
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return;
        }
 
index dbc05d31bf034b6cf9dcc67c683ad9551aa16eb6..5e10ac097bb259b856cfcf6b84fa0288675e512b 100644 (file)
@@ -459,7 +459,7 @@ csz_enqueue(struct sk_buff *skb, struct Qdisc* sch)
 
        this = &q->flow[flow_id];
        if (this->q.qlen >= this->max_bytes || this->L_tab == NULL) {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -711,12 +711,12 @@ csz_reset(struct Qdisc* sch)
 
        for (i=0; i<4; i++)
                while ((skb=skb_dequeue(&q->other[i])) != NULL)
-                       kfree_skb(skb, 0);
+                       kfree_skb(skb);
 
        for (i=0; i<CSZ_MAX_GUARANTEED; i++) {
                struct csz_flow *this = q->flow + i;
                while ((skb = skb_dequeue(&this->q)) != NULL)
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                this->snext = this->sprev =
                this->fnext = this->fprev = (struct csz_head*)this;
                this->start = this->finish = 0;
index 8134baf16b32dc0921ee74843dd9173042f40fdc..af44d4e7517c7f540e159633ccfe4fcd52d0a138 100644 (file)
@@ -47,7 +47,7 @@ bfifo_enqueue(struct sk_buff *skb, struct Qdisc* sch)
                q->qbytes += skb->len;
                return 0;
        }
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        return 1;
 }
 
@@ -71,7 +71,7 @@ bfifo_reset(struct Qdisc* sch)
 
        while((skb=skb_dequeue(&sch->q)) != NULL) {
                q->qbytes -= skb->len;
-               kfree_skb(skb,FREE_WRITE);
+               kfree_skb(skb);
        }
        if (q->qbytes) {
                printk("fifo_reset: qbytes=%d\n", q->qbytes);
@@ -88,7 +88,7 @@ pfifo_enqueue(struct sk_buff *skb, struct Qdisc* sch)
                skb_queue_tail(&sch->q, skb);
                return 0;
        }
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        return 1;
 }
 
@@ -104,7 +104,7 @@ pfifo_reset(struct Qdisc* sch)
        struct sk_buff *skb;
 
        while((skb=skb_dequeue(&sch->q))!=NULL)
-               kfree_skb(skb,FREE_WRITE);
+               kfree_skb(skb);
 }
 
 
index 129eb2b32115289d2a6dacfa4ad19bc4aecbe344..c3399f9c1edd73fa5e8c26039d80d87a99130b94 100644 (file)
@@ -98,7 +98,7 @@ struct Qdisc *qdisc_lookup(int handle)
 static int
 noop_enqueue(struct sk_buff *skb, struct Qdisc * qdisc)
 {
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        return 0;
 }
 
@@ -139,7 +139,7 @@ pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc* qdisc)
                return 1;
        }
        qdisc->dropped++;
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        return 0;
 }
 
@@ -213,7 +213,7 @@ default_requeue(struct sk_buff *skb, struct Qdisc* qdisc)
 {
        if (net_ratelimit())
                printk(KERN_DEBUG "%s deferred output. It is buggy.\n", skb->dev->name);
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        return 0;
 }
 
@@ -414,7 +414,7 @@ int qdisc_restart(struct device *dev)
                }
 
                printk(KERN_DEBUG "%s: it is impossible!!!\n", dev->name);
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
        }
        return q->q.qlen;
 }
index fd3ee43ac79dc40181dda3e5c6fa8344bcac81d6..637288d99002044c7d4a343a44cf6499338ad344 100644 (file)
@@ -189,7 +189,7 @@ enqueue:
                        return 1;
                }
 drop:
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return 0;
        }
        if (q->qave >= q->qth_max) {
@@ -231,7 +231,7 @@ red_reset(struct Qdisc* sch)
 
        while((skb=skb_dequeue(&sch->q))!=NULL) {
                q->qbytes -= skb->len;
-               kfree_skb(skb,FREE_WRITE);
+               kfree_skb(skb);
        }
        if (q->qbytes) {
                printk("red_reset: qbytes=%lu\n", q->qbytes);
index 65c3906b47a122e2a251bfa9dc4a68a812258c62..b27f556ea3861ffe27366113429d512809e53037 100644 (file)
@@ -174,7 +174,7 @@ static __inline__ void sfq_drop(struct sfq_sched_data *q)
                sfq_index x = q->dep[d].next;
                skb = q->qs[x].prev;
                __skb_unlink(skb, &q->qs[x]);
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                sfq_dec(q, x);
 /*
                sch->q.qlen--;
@@ -189,7 +189,7 @@ static __inline__ void sfq_drop(struct sfq_sched_data *q)
        q->allot[q->next[d]] += q->quantum;
        skb = q->qs[d].prev;
        __skb_unlink(skb, &q->qs[d]);
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        sfq_dec(q, d);
 /*
        sch->q.qlen--;
@@ -271,7 +271,7 @@ sfq_reset(struct Qdisc* sch)
        struct sk_buff *skb;
 
        while ((skb = sfq_dequeue(sch)) != NULL)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 }
 
 
index 9869af1d3e8c996b8b759dab5bbd18ca99bd91a5..b4f1417615ee54ba62e003078cdb484906cc3e2f 100644 (file)
@@ -118,7 +118,7 @@ tbf_enqueue(struct sk_buff *skb, struct Qdisc* sch)
 
        __skb_unlink(skb, &sch->q);
        q->bytes -= skb->len;
-       kfree_skb(skb, FREE_WRITE);
+       kfree_skb(skb);
        return 0;
 }
 
@@ -187,7 +187,7 @@ tbf_reset(struct Qdisc* sch)
        struct sk_buff *skb;
 
        while ((skb = __skb_dequeue(&sch->q)) != NULL)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
        q->bytes = 0;
        PSCHED_GET_TIME(q->t_c);
        q->tokens = q->depth;
index 1a9baa5491ac6b5e35d4cb35e833e6bd8ce7f2ec..7e33a0145e9f53cd1ac442cb838370f1811f4e81 100644 (file)
@@ -286,14 +286,14 @@ static void unix_destroy_socket(unix_socket *sk)
                {
                        unix_socket *osk=skb->sk;
                        osk->state=TCP_CLOSE;
-                       kfree_skb(skb, FREE_WRITE);     /* Now surplus - free the skb first before the socket */
+                       kfree_skb(skb);                 /* Now surplus - free the skb first before the socket */
                        osk->state_change(osk);         /* So the connect wakes and cleans up (if any) */
                        /* osk will be destroyed when it gets to close or the timer fires */                    
                }
                else
                {
                        /* passed fds are erased in the kfree_skb hook */
-                       kfree_skb(skb,FREE_WRITE);
+                       kfree_skb(skb);
                }
        }
        
@@ -695,7 +695,7 @@ static int unix_stream_connect1(struct socket *sock, struct msghdr *msg,
                other=unix_find_other(sunaddr, addr_len, sk->type, hash, &err);
                if(other==NULL)
                {
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return err;
                }
                other->ack_backlog++;
@@ -819,7 +819,7 @@ static int unix_accept(struct socket *sock, struct socket *newsock, int flags)
                {
                        tsk=skb->sk;
                        tsk->state_change(tsk);
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        continue;
                }
                break;
@@ -838,7 +838,7 @@ static int unix_accept(struct socket *sock, struct socket *newsock, int flags)
        unix_lock(newsk);               /* Swap lock over */
        unix_unlock(sk);                /* Locked to child socket not master */
        unix_lock(tsk);                 /* Back lock */
-       kfree_skb(skb, FREE_WRITE);     /* The buffer is just used as a tag */
+       kfree_skb(skb);                 /* The buffer is just used as a tag */
        tsk->state_change(tsk);         /* Wake up any sleeping connect */
        sock_wake_async(tsk->socket, 0);
        return 0;
@@ -958,7 +958,7 @@ static int unix_dgram_sendmsg(struct socket *sock, struct msghdr *msg, int len,
                unix_peer(sk)=NULL;
                other = NULL;
                if (sunaddr == NULL) {
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return -ECONNRESET;
                }
        }
@@ -968,13 +968,13 @@ static int unix_dgram_sendmsg(struct socket *sock, struct msghdr *msg, int len,
                
                if (other==NULL)
                {
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return err;
                }
                if (!unix_may_send(sk, other))
                {
                        unix_unlock(other);
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return -EINVAL;
                }
        }
@@ -1080,7 +1080,7 @@ static int unix_stream_sendmsg(struct socket *sock, struct msghdr *msg, int len,
 
                if (other->dead || (sk->shutdown & SEND_SHUTDOWN))
                {
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        if(sent)
                                return sent;
                        send_sig(SIGPIPE,current,0);
@@ -1280,7 +1280,7 @@ static int unix_stream_recvmsg(struct socket *sock, struct msghdr *msg, int size
                                break;
                        }
 
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
 
                        if (scm->fp)
                                break;
index bc473e317ae7bedf35c637385370a2298da197be..f128531b573003c24523e8a3a5311ac83e90d09b 100644 (file)
@@ -323,7 +323,7 @@ void x25_destroy_socket(struct sock *sk)    /* Not static as it's used by the timer
                        skb->sk->protinfo.x25->state = X25_STATE_0;
                }
 
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
        }
 
        if (atomic_read(&sk->wmem_alloc) != 0 || atomic_read(&sk->rmem_alloc) != 0) {
@@ -718,7 +718,7 @@ static int x25_accept(struct socket *sock, struct socket *newsock, int flags)
 
        /* Now attach up the new socket */
        skb->sk = NULL;
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
        sk->ack_backlog--;
        newsock->sk = newsk;
 
@@ -952,7 +952,7 @@ static int x25_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct
        SOCK_DEBUG(sk, "x25_sendmsg: Transmitting buffer\n");
 
        if (sk->state != TCP_ESTABLISHED) {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return -ENOTCONN;
        }
 
index 81f7434e22b75f43adecbe67fe9056d82fbb1683..16fc3677d3cc7605abc232baa6d2a191f245ea27 100644 (file)
@@ -54,7 +54,7 @@ static int x25_receive_data(struct sk_buff *skb, struct x25_neigh *neigh)
        unsigned int lci;
 
        if (call_in_firewall(PF_X25, skb->dev, skb->data, NULL, &skb) != FW_ACCEPT) {
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -90,7 +90,7 @@ static int x25_receive_data(struct sk_buff *skb, struct x25_neigh *neigh)
 /*
        x25_transmit_clear_request(neigh, lci, 0x0D);
 */
-       kfree_skb(skb, FREE_READ);
+       kfree_skb(skb);
 
        return 0;
 }
@@ -106,7 +106,7 @@ int x25_lapb_receive_frame(struct sk_buff *skb, struct device *dev, struct packe
         */
        if ((neigh = x25_get_neigh(dev)) == NULL) {
                printk(KERN_DEBUG "X.25: unknown neighbour - %s\n", dev->name);
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -117,20 +117,20 @@ int x25_lapb_receive_frame(struct sk_buff *skb, struct device *dev, struct packe
 
                case 0x01:
                        x25_link_established(neigh);
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        return 0;
 
                case 0x02:
                        x25_link_terminated(neigh);
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        return 0;
 
                case 0x03:
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        return 0;
 
                default:
-                       kfree_skb(skb, FREE_READ);
+                       kfree_skb(skb);
                        return 0;
        }
 }
@@ -146,7 +146,7 @@ int x25_llc_receive_frame(struct sk_buff *skb, struct device *dev, struct packet
         */
        if ((neigh = x25_get_neigh(dev)) == NULL) {
                printk(KERN_DEBUG "X.25: unknown_neighbour - %s\n", dev->name);
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
                return 0;
        }
 
@@ -223,11 +223,11 @@ void x25_send_frame(struct sk_buff *skb, struct x25_neigh *neigh)
 
 #if defined(CONFIG_LLC) || defined(CONFIG_LLC_MODULE)
                case ARPHRD_ETHER:
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return;
 #endif
                default:
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        return;
        }
 
index 1c4cb3bc71f6aaba516a98e1746f99d1dec27f08..b9a66103c31af1ec9c6e59f65bacf538728cbacf 100644 (file)
@@ -64,12 +64,12 @@ static int x25_queue_rx_frame(struct sock *sk, struct sk_buff *skb, int more)
 
                skbo = skb_dequeue(&sk->protinfo.x25->fragment_queue);
                memcpy(skb_put(skbn, skbo->len), skbo->data, skbo->len);
-               kfree_skb(skbo, FREE_READ);
+               kfree_skb(skbo);
 
                while ((skbo = skb_dequeue(&sk->protinfo.x25->fragment_queue)) != NULL) {
                        skb_pull(skbo, (sk->protinfo.x25->neighbour->extended) ? X25_EXT_MIN_LEN : X25_STD_MIN_LEN);
                        memcpy(skb_put(skbn, skbo->len), skbo->data, skbo->len);
-                       kfree_skb(skbo, FREE_READ);
+                       kfree_skb(skbo);
                }
 
                sk->protinfo.x25->fraglen = 0;          
index 1742d802f55734859cc3171b35fe7a69aa99eadb..f27fa4f4aeaa0152c03216cb91272d6869055297 100644 (file)
@@ -225,7 +225,7 @@ void x25_transmit_clear_request(struct x25_neigh *neigh, unsigned int lci, unsig
 void x25_transmit_link(struct sk_buff *skb, struct x25_neigh *neigh)
 {
        if (call_fw_firewall(PF_X25, skb->dev, skb->data, NULL, &skb) != FW_ACCEPT) {
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
                return;
        }
 
@@ -304,7 +304,7 @@ static void x25_remove_neigh(struct x25_neigh *x25_neigh)
        struct sk_buff *skb;
 
        while ((skb = skb_dequeue(&x25_neigh->queue)) != NULL)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 
        x25_stop_t20timer(x25_neigh);
 
index 5283092a110cb225a54424f4ce9cf7c80ad6dfdc..24fdf4d479174c784b46ed6b99d965341ff9c6ed 100644 (file)
@@ -98,7 +98,7 @@ void x25_output(struct sock *sk, struct sk_buff *skb)
                        skb_queue_tail(&sk->write_queue, skbn);
                }
                
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
        } else {
                skb_queue_tail(&sk->write_queue, skb);
        }
index 52e5be0cb6ab4ce169aa6dc1972b86920a07f4a8..8b055e40e0759452b8e964d37511de87cc4f9f48 100644 (file)
@@ -48,19 +48,19 @@ void x25_clear_queues(struct sock *sk)
        struct sk_buff *skb;
 
        while ((skb = skb_dequeue(&sk->write_queue)) != NULL)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 
        while ((skb = skb_dequeue(&sk->protinfo.x25->ack_queue)) != NULL)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 
        while ((skb = skb_dequeue(&sk->protinfo.x25->interrupt_in_queue)) != NULL)
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
 
        while ((skb = skb_dequeue(&sk->protinfo.x25->interrupt_out_queue)) != NULL)
-               kfree_skb(skb, FREE_WRITE);
+               kfree_skb(skb);
 
        while ((skb = skb_dequeue(&sk->protinfo.x25->fragment_queue)) != NULL)
-               kfree_skb(skb, FREE_READ);
+               kfree_skb(skb);
 }
 
 
@@ -82,7 +82,7 @@ void x25_frames_acked(struct sock *sk, unsigned short nr)
        if (sk->protinfo.x25->va != nr) {
                while (skb_peek(&sk->protinfo.x25->ack_queue) != NULL && sk->protinfo.x25->va != nr) {
                        skb = skb_dequeue(&sk->protinfo.x25->ack_queue);
-                       kfree_skb(skb, FREE_WRITE);
+                       kfree_skb(skb);
                        sk->protinfo.x25->va = (sk->protinfo.x25->va + 1) % modulus;
                }
        }
index 4a8ab351d50583c27648381ac47d997fe4568817..6e4a1f2cc032572ff64ff00bb0422b038f082fab 100644 (file)
@@ -237,7 +237,7 @@ proc write_tristate { file1 file2 varname variable dep } {
                then { puts $file1 "$varname=y"; \
                       puts $file2 "#define $varname 1" } \
        else { \
-           error "Attempting to write value for variable that is not configured ($varname)." \
+           puts stdout "ERROR - Attempting to write value for unconfigured variable ($varname)." \
        }
 }
 
@@ -281,7 +281,21 @@ proc option_name {w mnum line text helpidx} {
        pack $w.x$line.l -side right -fill both -expand on
 }
 
-proc toggle_switch {w mnum line text variable} {
+proc toggle_switch2 {w mnum line text variable} {
+       frame $w.x$line -relief sunken
+       radiobutton $w.x$line.y -text "y" -variable $variable -value 1 \
+               -relief groove -width 2 -command "update_menu$mnum .menu$mnum"
+       radiobutton $w.x$line.m -text "-"  -variable $variable -value 2 \
+               -relief groove -width 2 -command "update_menu$mnum .menu$mnum"
+       radiobutton $w.x$line.n -text "n"  -variable $variable -value 0 \
+               -relief groove -width 2 -command "update_menu$mnum .menu$mnum"
+               
+       option_name $w $mnum $line $text $variable
+               
+       pack $w.x$line.n $w.x$line.m $w.x$line.y -side right -fill y
+}
+
+proc toggle_switch3 {w mnum line text variable} {
        frame $w.x$line -relief sunken
        radiobutton $w.x$line.y -text "y" -variable $variable -value 1 \
                -relief groove -width 2 -command "update_menu$mnum .menu$mnum"
@@ -296,13 +310,13 @@ proc toggle_switch {w mnum line text variable} {
 }
 
 proc bool {w mnum line text variable} {
-       toggle_switch $w $mnum $line $text $variable
+       toggle_switch2 $w $mnum $line $text $variable
        $w.x$line.m configure -state disabled
        pack $w.x$line -anchor w -fill both -expand on
 }
 
 proc tristate {w mnum line text variable } {
-       toggle_switch $w $mnum $line $text $variable
+       toggle_switch3 $w $mnum $line $text $variable
        pack $w.x$line -anchor w -fill both -expand on
 }
 
@@ -336,7 +350,7 @@ proc minimenu { w mnum line text variable helpidx } {
        frame $w.x$line
        menubutton $w.x$line.x -textvariable $variable -menu \
                $w.x$line.x.menu -relief raised \
-               -width 15 -anchor w
+               -anchor w
        option_name $w $mnum $line $text $helpidx
        pack $w.x$line.x -anchor w -side right -fill y
        pack $w.x$line -anchor w -fill both -expand on
index ebd5269bf3892b1c2b5ab145e8b4e6fee3b30a51..dcf025e2e5681efd3357a5cd4546892f40cbc71a 100644 (file)
@@ -685,7 +685,7 @@ void dump_tk_script(struct kconfig *scfg)
   int menu_maxlines = 0;
   struct kconfig * cfg;
   struct kconfig * cfg1 = NULL;
-  char * menulabel;
+  char * menulabel = "tkgen error";
 
   /*
    * Start by assigning menu numbers, and submenu numbers.
index 9c7f7e0e97d1773d0f08516b24db0523d0f2a636..f91d0f3553ba03ce190e206ff59138aead2ccc90 100644 (file)
@@ -578,7 +578,7 @@ static int do_source(char * filename)
   char buffer[1024];
   int  offset;
   int old_lineno;
-  char * old_file;
+  char * old_file = 0;         /* superfluous, just for gcc */
   char * pnt;
   FILE * infile;