]> git.neil.brown.name Git - history.git/commitdiff
Import 1.1.30 1.1.30
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:09:34 +0000 (15:09 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:09:34 +0000 (15:09 -0500)
21 files changed:
Makefile
boot/bootsect.S
boot/head.S
drivers/block/blk.h
drivers/block/floppy.c
drivers/block/ll_rw_blk.c
drivers/net/Makefile
drivers/scsi/scsi.c
drivers/scsi/scsi.h
drivers/scsi/scsi_ioctl.c
drivers/scsi/sd.c
drivers/scsi/sr.c
drivers/scsi/sr_ioctl.c
fs/proc/base.c
include/linux/fs.h
include/linux/sched.h
include/linux/string.h
include/linux/wait.h
kernel/fork.c
net/Makefile
net/inet/tcp.c

index a53489bc732e04cde0bd3c9d7948518e52f0c3c2..9c58e53f478f115dfb5dafb6796c98a82576426a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 1
 PATCHLEVEL = 1
-SUBLEVEL = 29
+SUBLEVEL = 30
 
 all:   Version zImage
 
index 261d5a1c1e1bd6b46e7255b7081f6cfd4bff98ce..ec04a205f8c034cc9311a78021bb6978296f9761 100644 (file)
@@ -25,7 +25,7 @@ SYSSIZE = DEF_SYSSIZE
 ! buffer cache as in minix (and especially now that the kernel is 
 ! compressed :-)
 !
-! The loader has been made as simple as possible, and continuos
+! The loader has been made as simple as possible, and continuous
 ! read errors will result in a unbreakable loop. Reboot by hand. It
 ! loads pretty fast by getting whole tracks at a time whenever possible.
 
@@ -69,7 +69,7 @@ _main:
        jmpi    go,INITSEG
 
 go:    mov     ax,cs           
-       mov     dx,#0x4000-12   ! 0x4000 is arbitrary value >= length of
+       mov     di,#0x4000-12   ! 0x4000 is arbitrary value >= length of
                                ! bootsect + length of setup + room for stack
                                ! 12 is disk parm size
 
@@ -82,7 +82,7 @@ go:   mov     ax,cs
        mov     ds,ax
        mov     es,ax
        mov     ss,ax           ! put stack at INITSEG:0x4000-12.
-       mov     sp,dx
+       mov     sp,di
 /*
  *     Many BIOS's default disk parameter tables will not 
  *     recognize multi-sector reads beyond the maximum sector number
@@ -92,40 +92,38 @@ go: mov     ax,cs
  *     Since single sector reads are slow and out of the question,
  *     we must take care of this by creating new parameter tables
  *     (for the first disk) in RAM.  We will set the maximum sector
- *     count to 18 - the most we will encounter on an HD 1.44.  
+ *     count to 36 - the most we will encounter on an ED 2.88.  
  *
  *     High doesn't hurt.  Low does.
  *
  *     Segments are as follows: ds=es=ss=cs - INITSEG,
- *             fs = 0, gs = parameter table segment
+ *             fs = 0, gs is unused.
  */
 
        push    #0
        pop     fs
        mov     bx,#0x78                ! fs:bx is parameter table address
+       push    ds
        seg fs
-       lgs     si,(bx)                 ! gs:si is source
+       lds     si,(bx)                 ! ds:si is source
 
-       mov     di,dx                   ! es:di is destination
        mov     cx,#6                   ! copy 12 bytes
        cld
+       push    di
 
        rep
-       seg gs
        movsw
 
-       mov     di,dx
-       movb    4(di),*18               ! patch sector count
+       pop     di
+       pop     ds
+
+       movb    4(di),*36               ! patch sector count
 
        seg fs
        mov     (bx),di
        seg fs
        mov     2(bx),es
 
-       mov     ax,cs
-       mov     fs,ax
-       mov     gs,ax
-       
        xor     ah,ah                   ! reset FDC 
        xor     dl,dl
        int     0x13    
@@ -170,26 +168,31 @@ ok_load_setup:
 #else
 
 ! It seems that there is no BIOS call to get the number of sectors.  Guess
-! 18 sectors if sector 18 can be read, 15 if sector 15 can be read.
-! Otherwise guess 9.
+! 36 sectors if sector 36 can be read, 18 sectors if sector 18 can be read,
+! 15 if sector 15 can be read.  Otherwise guess 9.
+
+       mov     si,#disksizes           ! table of sizes to try
 
+probe_loop:
+       lodsb
+       cbw                             ! extend to word
+       seg cs
+       mov     sectors, ax
+       cmp     si,#disksizes+4
+       jae     got_sectors             ! if all else fails, try 9
+       xchg    ax, cx                  ! cx = track and sector
        xor     dx, dx                  ! drive 0, head 0
-       mov     cx,#0x0012              ! sector 18, track 0
        mov     bx,#0x0200+SETUPSECS*0x200  ! address after setup (es = cs)
        mov     ax,#0x0201              ! service 2, 1 sector
        int     0x13
-       jnc     got_sectors
-       mov     cl,#0x0f                ! sector 15
-       mov     ax,#0x0201              ! service 2, 1 sector
-       int     0x13
-       jnc     got_sectors
-       mov     cl,#0x09
+       jc      probe_loop              ! try next value
 
 #endif
 
 got_sectors:
-       seg cs
-       mov     sectors,cx
+
+! Restore es
+
        mov     ax,#INITSEG
        mov     es,ax
 
@@ -216,8 +219,8 @@ got_sectors:
 
 ! After that we check which root-device to use. If the device is
 ! defined (!= 0), nothing is done and the given device is used.
-! Otherwise, either /dev/PS0 (2,28) or /dev/at0 (2,8), depending
-! on the number of sectors that the BIOS reports currently.
+! Otherwise, one of /dev/fd0H2880 (2,32) or /dev/PS0 (2,28) or /dev/at0 (2,8),
+! depending on the number of sectors we pretend to know we have.
 
        seg cs
        mov     ax,root_dev
@@ -228,10 +231,13 @@ got_sectors:
        mov     ax,#0x0208              ! /dev/ps0 - 1.2Mb
        cmp     bx,#15
        je      root_defined
-       mov     ax,#0x021c              ! /dev/PS0 - 1.44Mb
+       mov     al,#0x1c                ! /dev/PS0 - 1.44Mb
        cmp     bx,#18
        je      root_defined
-       mov     ax,#0x0200              ! /dev/fd0 - autodetect
+       mov     al,#0x20                ! /dev/fd0H2880 - 2.88Mb
+       cmp     bx,#36
+       je      root_defined
+       mov     al,#0                   ! /dev/fd0 - autodetect
 root_defined:
        seg cs
        mov     root_dev,ax
@@ -362,7 +368,7 @@ print_loop:
        push    cx              ! save count left
        call    print_nl        ! nl for readability
 
-       cmp     cl, 5
+       cmp     cl, #5
        jae     no_reg          ! see if register name is needed
        
        mov     ax, #0xe05 + 'A - 1
@@ -399,15 +405,12 @@ print_hex:
        mov     dx, (bp)        ! load word into dx
 print_digit:
        rol     dx, #4          ! rotate so that lowest 4 bits are used
-       mov     ah, #0xe        
-       mov     al, dl          ! mask off so we have only next nibble
-       and     al, #0xf
-       add     al, #'0         ! convert to 0-based digit
-       cmp     al, #'9         ! check for overflow
-       jbe     good_digit
-       add     al, #'A - '0 - 10
-
-good_digit:
+       mov     ax, #0xe0f      ! ah = request, al = mask for nybble
+       and     al, dl
+       add     al, #0x90       ! convert al to ascii hex (four instructions)
+       daa
+       adc     al, #0x40
+       daa
        int     0x10
        loop    print_digit
        ret
@@ -429,6 +432,9 @@ kill_motor:
 sectors:
        .word 0
 
+disksizes:
+       .byte 36,18,15,9
+
 msg1:
        .byte 13,10
        .ascii "Loading"
index ff37a462e0c927ad09580cf3401359a388658bd9..8c9d25664a3037f28b0d6ca5ca19deafe0f7095a 100644 (file)
@@ -285,8 +285,8 @@ _tmp_floppy_area:
 /*
  * floppy_track_buffer is used to buffer one track of floppy data: it
  * has to be separate from the tmp_floppy area, as otherwise a single-
- * sector read/write can mess it up. It can contain one full track of
- * data (18*2*512 bytes).
+ * sector read/write can mess it up. It can contain one full cylinder (sic) of
+ * data (36*2*512 bytes).
  */
 _floppy_track_buffer:
        .fill 512*2*36,1,0
index 662c2c6ac770dc1df685c31681d8719cdd3f43e1..137d9a1238f1aca5d94a5acb6f04664a7972fa65 100644 (file)
@@ -21,8 +21,8 @@
 /*
  * Ok, this is an expanded form so that we can use the same
  * request for paging requests when that is implemented. In
- * paging, 'bh' is NULL, and 'waiting' is used to wait for
- * read/write completion.
+ * paging, 'bh' is NULL, and the semaphore is used to wait
+ * for read/write completion.
  */
 struct request {
        int dev;                /* -1 if no request */
@@ -32,7 +32,7 @@ struct request {
        unsigned long nr_sectors;
        unsigned long current_nr_sectors;
        char * buffer;
-       struct task_struct * waiting;
+       struct semaphore * sem;
        struct buffer_head * bh;
        struct buffer_head * bhtail;
        struct request * next;
@@ -271,7 +271,6 @@ static void end_request(int uptodate)
 {
        struct request * req;
        struct buffer_head * bh;
-       struct task_struct * p;
 
        req = CURRENT;
        req->errors = 0;
@@ -302,13 +301,8 @@ static void end_request(int uptodate)
        }
        DEVICE_OFF(req->dev);
        CURRENT = req->next;
-       if ((p = req->waiting) != NULL) {
-               req->waiting = NULL;
-               p->swapping = 0;
-               p->state = TASK_RUNNING;
-               if (p->counter > current->counter)
-                       need_resched = 1;
-       }
+       if (req->sem != NULL)
+               up(req->sem);
        req->dev = -1;
        wake_up(&wait_for_request);
 }
index dda4bf1e74a723d176e1cf346bd42772f831e676..5758ceffd64b17e33150f6e8c7f455092ab0b18e 100644 (file)
  * minor modifications to allow 2.88 floppies to be run. 
  */
 
+/* 1994/7/13 -- Paul Vojta -- modified the probing code to allow three or more
+ * disk types.
+ */
+
 
 #define REALLY_SLOW_IO
 #define FLOPPY_IRQ 6
@@ -165,34 +169,68 @@ static struct floppy_struct floppy_type[] = {
        { 1440, 9,2,80,0,0x23,0x01,0xDF,0x50,NULL },    /* 720kB in 1.2MB drive */
        { 2880,18,2,80,0,0x1B,0x00,0xCF,0x6C,NULL },    /* 1.44MB diskette */
        { 5760,36,2,80,0,0x1B,0x43,0xAF,0x54,NULL },    /* 2.88MB diskette */
-       { 5760,36,2,80,0,0x1B,0x43,0xAF,0x54,NULL },    /* 2.88MB diskette */
 };
 
 /*
- * Auto-detection. Each drive type has a pair of formats which are
+ * Auto-detection. Each drive type has a number of formats which are
  * used in succession to try to read the disk. If the FDC cannot lock onto
  * the disk, the next format is tried. This uses the variable 'probing'.
  */
-static struct floppy_struct floppy_types[] = {
-       {  720, 9,2,40,0,0x2A,0x02,0xDF,0x50,"360k/PC" }, /* 360kB PC diskettes */
+#define        NUMBER(x)       (sizeof(x) / sizeof(*(x)))
+
+static struct floppy_struct floppy_type_1[] = {
        {  720, 9,2,40,0,0x2A,0x02,0xDF,0x50,"360k/PC" }, /* 360kB PC diskettes */
+};
+
+static struct floppy_struct floppy_type_2[] = {
        { 2400,15,2,80,0,0x1B,0x00,0xDF,0x54,"1.2M" },    /* 1.2 MB AT-diskettes */
        {  720, 9,2,40,1,0x23,0x01,0xDF,0x50,"360k/AT" }, /* 360kB in 1.2MB drive */
+};
+
+static struct floppy_struct floppy_type_3[] = {
        { 1440, 9,2,80,0,0x2A,0x02,0xDF,0x50,"720k" },    /* 3.5" 720kB diskette */
-       { 1440, 9,2,80,0,0x2A,0x02,0xDF,0x50,"720k" },    /* 3.5" 720kB diskette */
+};
+
+static struct floppy_struct floppy_type_4[] = {
+       { 2880,18,2,80,0,0x1B,0x00,0xCF,0x6C,"1.44M" },   /* 1.44MB diskette */
+       { 1440, 9,2,80,0,0x2A,0x02,0xDF,0x50,"720k/AT" }, /* 3.5" 720kB diskette */
+};
+
+static struct floppy_struct floppy_type_5[] = {
+       { 5760,36,2,80,0,0x1B,0x43,0xAF,0x50,"2.88M" },   /* 2.88MB diskette */
        { 2880,18,2,80,0,0x1B,0x00,0xCF,0x6C,"1.44M" },   /* 1.44MB diskette */
        { 1440, 9,2,80,0,0x2A,0x02,0xDF,0x50,"720k/AT" }, /* 3.5" 720kB diskette */
-       { 5760,36,2,80,0,0x1B,0x43,0xAF,0x54,"2.88M-AMI" },   /* DUMMY */ 
-       { 2880,18,2,80,0,0x1B,0x00,0xCF,0x6C,"1.44M-AMI" },   /* Dummy */
-       { 5760,36,2,80,0,0x1B,0x43,0xAF,0x54,"2.88M" },   /* 2.88MB diskette */ 
-       { 2880,18,2,80,0,0x1B,0x40,0xCF,0x6C,"1.44MX" },   /* 1.44MB diskette */ 
+};
+
+#define        floppy_type_6   floppy_type_5           /* 5 and 6 are the same */
+
+
+static struct floppy_struct *floppy_types[] = {
+       floppy_type_1,
+       floppy_type_2,
+       floppy_type_3,
+       floppy_type_4,
+       floppy_type_5,
+       floppy_type_6,
+};
+
+static int floppy_num_types[] = {
+       NUMBER(floppy_type_1),
+       NUMBER(floppy_type_2),
+       NUMBER(floppy_type_3),
+       NUMBER(floppy_type_4),
+       NUMBER(floppy_type_5),
+       NUMBER(floppy_type_6),
 };
 
 /* Auto-detection: Disk type used until the next media change occurs. */
 struct floppy_struct *current_type[4] = { NULL, NULL, NULL, NULL };
 
 /* This type is tried first. */
-struct floppy_struct *base_type[4];
+struct floppy_struct *base_type[4] = { NULL, NULL, NULL, NULL };
+
+/* This gives the end of the list */
+struct floppy_struct *base_type_end[4];
 
 /*
  * User-provided type information. current_type points to
@@ -279,8 +317,8 @@ static unsigned short min_report_error_cnt[4] = {2, 2, 2, 2};
  * Track buffer and block buffer (in case track buffering doesn't work).
  * Because these are written to by the DMA controller, they must
  * not contain a 64k byte boundary crossing, or data will be
- * corrupted/lost. Alignment of these is enforced in boot/head.s.
- * Note that you must not change the sizes below without updating head.s.
+ * corrupted/lost. Alignment of these is enforced in boot/head.S.
+ * Note that you must not change the sizes below without updating head.S.
  */
 extern char tmp_floppy_area[BLOCK_SIZE];
 extern char floppy_track_buffer[512*2*MAX_BUFFER_SECTORS];
@@ -395,6 +433,7 @@ static void floppy_off(unsigned int nr)
 void request_done(int uptodate)
 {
        timer_active &= ~(1 << FLOPPY_TIMER);
+       probing = 0;
        if (format_status != FORMAT_BUSY)
                end_request(uptodate);
        else {
@@ -563,6 +602,13 @@ static void bad_flp_intr(void)
 {
        int errors;
 
+       if (probing) {
+               int device = MINOR(CURRENT_DEVICE) & 3;
+               ++floppy;
+               if (floppy < base_type_end[device])
+                       return;
+               floppy = base_type[device];
+       }
        current_track = NO_TRACK;
        if (format_status == FORMAT_BUSY)
                errors = ++format_errors;
@@ -1080,21 +1126,20 @@ repeat:
                }
        }
        seek = 0;
-       probing = 0;
        device = MINOR(CURRENT_DEVICE);
        if (device > 3)
                floppy = (device >> 2) + floppy_type;
        else { /* Auto-detection */
-               floppy = current_type[device & 3];
-               if (!floppy) {
-                       probing = 1;
-                       floppy = base_type[device & 3];
+               if (!probing) {
+                       floppy = current_type[device & 3];
                        if (!floppy) {
-                               request_done(0);
-                               goto repeat;
+                               probing = 1;
+                               floppy = base_type[device & 3];
+                               if (!floppy) {
+                                       request_done(0);
+                                       goto repeat;
+                               }
                        }
-                       if (CURRENT_ERRORS & 1)
-                               floppy++;
                }
        }
        if (format_status != FORMAT_BUSY) {
@@ -1297,33 +1342,29 @@ outb_p(addr,0x70); \
 inb_p(0x71); \
 })
 
-static struct floppy_struct *find_base(int drive,int code)
+static void set_base_type(int drive,int code)
 {
        struct floppy_struct *base;
 
-       if (code > 0 && code < 7) {                            /* -bb*/
-               base = &floppy_types[(code-1)*2];
+       if (code > 0 && code <= NUMBER(floppy_types)) {
+               base = floppy_types[code-1];
                printk("fd%d is %s",drive,base->name);
-               return base;
-       } else if (!code) {
+               base_type[drive] = base;
+               base_type_end[drive] = base + floppy_num_types[code-1];
+       } else if (!code)
                printk("fd%d is not installed", drive);
-               return NULL;
-       }
-       printk("fd%d is unknown type %d",drive,code);
-       return NULL;
+       else
+               printk("fd%d is unknown type %d",drive,code);
 }
 
 static void config_types(void)
 {
        printk("Floppy drive(s): ");
-       base_type[0] = find_base(0,(CMOS_READ(0x10) >> 4) & 15);
-       if ((CMOS_READ(0x10) & 15) == 0)
-               base_type[1] = NULL;
-       else {
+       set_base_type(0, (CMOS_READ(0x10) >> 4) & 15);
+       if (CMOS_READ(0x10) & 15) {
                printk(", ");
-               base_type[1] = find_base(1,CMOS_READ(0x10) & 15);
+               set_base_type(1, CMOS_READ(0x10) & 15);
        }
-       base_type[2] = base_type[3] = NULL;
        printk("\n");
 }
 
index d9106fdf53e55715908fa16596d26a6efa88ce26..122538ca0895376a41214b73d8f5e44df9e0ec2d 100644 (file)
@@ -233,7 +233,7 @@ repeat:
                        req = req->next;
                while (req) {
                        if (req->dev == bh->b_dev &&
-                           !req->waiting &&
+                           !req->sem &&
                            req->cmd == rw &&
                            req->sector + req->nr_sectors == sector &&
                            req->nr_sectors < 244)
@@ -247,7 +247,7 @@ repeat:
                        }
 
                        if (req->dev == bh->b_dev &&
-                           !req->waiting &&
+                           !req->sem &&
                            req->cmd == rw &&
                            req->sector - count == sector &&
                            req->nr_sectors < 244)
@@ -292,7 +292,7 @@ repeat:
        req->nr_sectors = count;
        req->current_nr_sectors = count;
        req->buffer = bh->b_data;
-       req->waiting = NULL;
+       req->sem = NULL;
        req->bh = bh;
        req->bhtail = bh;
        req->next = NULL;
@@ -303,6 +303,7 @@ void ll_rw_page(int rw, int dev, int page, char * buffer)
 {
        struct request * req;
        unsigned int major = MAJOR(dev);
+       struct semaphore sem = MUTEX_LOCKED;
 
        if (major >= MAX_BLKDEV || !(blk_dev[major].request_fn)) {
                printk("Trying to read nonexistent block-device %04x (%d)\n",dev,page*8);
@@ -324,16 +325,11 @@ void ll_rw_page(int rw, int dev, int page, char * buffer)
        req->nr_sectors = 8;
        req->current_nr_sectors = 8;
        req->buffer = buffer;
-       req->waiting = current;
+       req->sem = &sem;
        req->bh = NULL;
        req->next = NULL;
-       current->swapping = 1;
-       current->state = TASK_SWAPPING;
        add_request(major+blk_dev,req);
-       /* The I/O may have inadvertently chagned the task state.
-          Make sure we really wait until the I/O is done */
-       if (current->swapping) current->state = TASK_SWAPPING;
-       schedule();
+       down(&sem);
 }
 
 /* This function can be used to request a number of buffers from a block
@@ -435,6 +431,7 @@ void ll_rw_swap_file(int rw, int dev, unsigned int *b, int nb, char *buf)
        int buffersize;
        struct request * req;
        unsigned int major = MAJOR(dev);
+       struct semaphore sem = MUTEX_LOCKED;
 
        if (major >= MAX_BLKDEV || !(blk_dev[major].request_fn)) {
                printk("ll_rw_swap_file: trying to swap nonexistent block-device\n");
@@ -463,16 +460,11 @@ void ll_rw_swap_file(int rw, int dev, unsigned int *b, int nb, char *buf)
                req->nr_sectors = buffersize >> 9;
                req->current_nr_sectors = buffersize >> 9;
                req->buffer = buf;
-               req->waiting = current;
+               req->sem = &sem;
                req->bh = NULL;
                req->next = NULL;
-               current->swapping = 1;
-               current->state = TASK_UNINTERRUPTIBLE;
                add_request(major+blk_dev,req);
-               /* The I/O may have inadvertently chagned the task state.
-                  Make sure we really wait until the I/O is done */
-               if (current->swapping) current->state = TASK_UNINTERRUPTIBLE;
-               schedule();
+               down(&sem);
        }
 }
 
index 938e659d2a19f84613b03f569b291b5e3bba9e6c..715459b220c7949b07d8e22782cb4798f9d0cd1e 100644 (file)
@@ -8,7 +8,7 @@
 include CONFIG
 include MODULES
 
-NETDRV_OBJS := net.a(Space.o) net.a(auto_irq.o) net.a(net_init.o) net.a(loopback.o)
+NETDRV_OBJS := Space.o auto_irq.o net_init.o loopback.o
 CFLAGS := $(CFLAGS) -I../../net/inet
 CPP := $(CPP) -I../../net/inet
 
@@ -25,28 +25,28 @@ NETDRV_OBJS := $(NETDRV_OBJS) net.a(sk_g16.o)
 endif
 
 ifdef CONFIG_WD80x3
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(wd.o)
+NETDRV_OBJS := $(NETDRV_OBJS) wd.o
 CONFIG_8390 = CONFIG_8390
 wd.o:  wd.c CONFIG
        $(CC) $(CPPFLAGS) $(CFLAGS) $(WD_OPTS) -c $<
 endif
 
 ifdef CONFIG_EL2
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(3c503.o)
+NETDRV_OBJS := $(NETDRV_OBJS) 3c503.o
 CONFIG_8390 = CONFIG_8390
 3c503.o:       3c503.c CONFIG
        $(CC) $(CPPFLAGS) $(CFLAGS) $(EL2_OPTS) -c $<
 endif
 
 ifdef CONFIG_NE2000
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(ne.o)
+NETDRV_OBJS := $(NETDRV_OBJS) ne.o
 CONFIG_8390 = CONFIG_8390
 ne.o:  ne.c CONFIG
        $(CC) $(CPPFLAGS) $(CFLAGS) $(NE_OPTS) -c $<
 endif
 
 ifdef CONFIG_HPLAN
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(hp.o)
+NETDRV_OBJS := $(NETDRV_OBJS) hp.o
 CONFIG_8390 = CONFIG_8390
 hp.o:  hp.c CONFIG
        $(CC) $(CPPFLAGS) $(CFLAGS) $(HP_OPTS) -c $<
@@ -58,47 +58,47 @@ CONFIG_8390 = CONFIG_8390
 endif
 
 ifdef CONFIG_ULTRA
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(smc-ultra.o)
+NETDRV_OBJS := $(NETDRV_OBJS) smc-ultra.o
 CONFIG_8390 = CONFIG_8390
 endif
 
 ifdef CONFIG_E2100
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(e2100.o)
+NETDRV_OBJS := $(NETDRV_OBJS) e2100.o
 CONFIG_8390 = CONFIG_8390
 endif
 
 ifdef CONFIG_PLIP
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(plip.o)
+NETDRV_OBJS := $(NETDRV_OBJS) plip.o
 plip.o:        plip.c CONFIG
        $(CC) $(CPPFLAGS) $(CFLAGS) $(PLIP_OPTS) -c $<
 endif
 
 ifdef CONFIG_PPP
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(ppp.o) net.a(slhc.o)
+NETDRV_OBJS := $(NETDRV_OBJS) ppp.o slhc.o
 endif
 
 ifdef CONFIG_SLIP
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(slip.o) net.a(slhc.o)
+NETDRV_OBJS := $(NETDRV_OBJS) slip.o slhc.o
 slip.o:        slip.c CONFIG
        $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
 endif
 
 ifdef CONFIG_DE650
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(de650.o)
+NETDRV_OBJS := $(NETDRV_OBJS) de650.o
 CONFIG_8390 = CONFIG_8390
 endif
 ifdef CONFIG_3C589
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(3c589.o)
+NETDRV_OBJS := $(NETDRV_OBJS) 3c589.o
 endif
 
 ifdef CONFIG_DUMMY
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(dummy.o)
+NETDRV_OBJS := $(NETDRV_OBJS) dummy.o
 dummy.o: dummy.c CONFIG
        $(CC) $(CPPFLAGS) $(CFLAGS) -c $<
 endif
 
 ifdef CONFIG_DE600
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(de600.o)
+NETDRV_OBJS := $(NETDRV_OBJS) de600.o
 endif
 de600.o: de600.c CONFIG
        $(CC) $(CPPFLAGS) $(CFLAGS) $(DE600_OPTS) -c $<
@@ -110,48 +110,48 @@ de620.o: de620.c CONFIG
        $(CC) $(CPPFLAGS) $(CFLAGS) $(DE620_OPTS) -c $<
        
 ifdef CONFIG_AT1500
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(lance.o)
+NETDRV_OBJS := $(NETDRV_OBJS) lance.o
 endif
 ifdef CONFIG_LANCE
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(lance.o)
+NETDRV_OBJS := $(NETDRV_OBJS) lance.o
 endif
 ifdef CONFIG_AT1700
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(at1700.o)
+NETDRV_OBJS := $(NETDRV_OBJS) at1700.o
 endif
 ifdef CONFIG_EL1
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(3c501.o)
+NETDRV_OBJS := $(NETDRV_OBJS) 3c501.o
 endif
 ifdef CONFIG_EL16
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(3c507.o)
+NETDRV_OBJS := $(NETDRV_OBJS) 3c507.o
 endif
 ifdef CONFIG_EL3
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(3c509.o)
+NETDRV_OBJS := $(NETDRV_OBJS) 3c509.o
 endif
 ifdef CONFIG_EEXPRESS
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(eexpress.o)
+NETDRV_OBJS := $(NETDRV_OBJS) eexpress.o
 endif
 ifdef CONFIG_ZNET
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(znet.o)
+NETDRV_OBJS := $(NETDRV_OBJS) znet.o
 endif
 ifdef CONFIG_DEPCA
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(depca.o)
+NETDRV_OBJS := $(NETDRV_OBJS) depca.o
 depca.o: depca.c CONFIG
        $(CC) $(CPPFLAGS) $(CFLAGS) $(DEPCA_OPTS) -c $<
 endif
 ifdef CONFIG_ATP
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(atp.o)
+NETDRV_OBJS := $(NETDRV_OBJS) atp.o
 endif
 ifdef CONFIG_NI52
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(ni52.o)
+NETDRV_OBJS := $(NETDRV_OBJS) ni52.o
 endif
 ifdef CONFIG_NI65
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(ni65.o)
+NETDRV_OBJS := $(NETDRV_OBJS) ni65.o
 endif
 ifdef CONFIG_ELPLUS
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(3c505.o)
+NETDRV_OBJS := $(NETDRV_OBJS) 3c505.o
 endif
 ifdef CONFIG_AC3200
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(ac3200.o)
+NETDRV_OBJS := $(NETDRV_OBJS) ac3200.o
 CONFIG_8390 = CONFIG_8390
 endif
 ifdef CONFIG_APRICOT
@@ -159,17 +159,19 @@ NETDRV_OBJS := $(NETDRV_OBJS) net.a(apricot.o)
 endif
 
 ifdef CONFIG_8390
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(8390.o)
+NETDRV_OBJS := $(NETDRV_OBJS) 8390.o
 endif
 
 ifdef CONFIG_PI
-NETDRV_OBJS := $(NETDRV_OBJS) net.a(pi2.o)
+NETDRV_OBJS := $(NETDRV_OBJS) pi2.o
 CONFIG_PI = CONFIG_PI
 pi2.o:  pi2.c CONFIG
        $(CC) $(CPPFLAGS) $(CFLAGS) $(PI_OPTS) -c $<
 endif
 
 net.a: $(NETDRV_OBJS)
+       rm -f net.a
+       ar rc net.a $(NETDRV_OBJS)
        ranlib net.a
 
 clean:
index d0ca6bc66acd4ad14700a8430af819570dbf3540..105f9113ce17eaf05d562b12f2e36b1668701a68 100644 (file)
@@ -334,6 +334,13 @@ static void scan_scsis (struct Scsi_Host * shpnt)
          
          if (!the_result)
            {
+               /* It would seem some TOSHIBA CD-ROM gets things wrong */
+               if (!strncmp(scsi_result+8,"TOSHIBA",7) &&
+                   !strncmp(scsi_result+16,"CD-ROM",6) &&
+                   scsi_result[0] == TYPE_DISK) {
+                       scsi_result[0] = TYPE_ROM;
+                       scsi_result[1] |= 0x80;  /* removable */
+               }
              SDpnt->removable = (0x80 & 
                                  scsi_result[1]) >> 7;
              SDpnt->lockable = SDpnt->removable;
@@ -617,14 +624,14 @@ Scsi_Cmnd * request_queueable (struct request * req, Scsi_Device * device)
       SCpnt->request.nr_sectors -= req->nr_sectors;
       req->current_nr_sectors = bh->b_size >> 9;
       req->buffer = bh->b_data;
-      SCpnt->request.waiting = NULL; /* Wait until whole thing done */
+      SCpnt->request.sem = NULL; /* Wait until whole thing done */
     } else {
       req->dev = -1;
       wake_up(&wait_for_request);
     };      
   } else {
     SCpnt->request.dev = 0xffff; /* Busy, but no request */
-    SCpnt->request.waiting = NULL;  /* And no one is waiting for the device either */
+    SCpnt->request.sem = NULL;  /* And no one is waiting for the device either */
   };
 
   SCpnt->use_sg = 0;  /* Reset the scatter-gather flag */
@@ -716,7 +723,7 @@ Scsi_Cmnd * allocate_device (struct request ** reqp, Scsi_Device * device,
            SCpnt->request.nr_sectors -= req->nr_sectors;
            req->current_nr_sectors = bh->b_size >> 9;
            req->buffer = bh->b_data;
-           SCpnt->request.waiting = NULL; /* Wait until whole thing done */
+           SCpnt->request.sem = NULL; /* Wait until whole thing done */
          }
          else 
            {
@@ -726,7 +733,7 @@ Scsi_Cmnd * allocate_device (struct request ** reqp, Scsi_Device * device,
            };
        } else {
          SCpnt->request.dev = 0xffff; /* Busy */
-         SCpnt->request.waiting = NULL;  /* And no one is waiting for this to complete */
+         SCpnt->request.sem = NULL;  /* And no one is waiting for this to complete */
        };
        sti();
        break;
@@ -1914,7 +1921,7 @@ scsi_dump_status(void)
     for(SCpnt=shpnt->host_queue; SCpnt; SCpnt = SCpnt->next)
       {
        /*  (0) 0:0:0 (802 123434 8 8 0) (3 3 2) (%d %d %d) %d %x      */
-       printk("(%d) %d:%d:%d (%4.4x %d %d %d %d) (%d %d %x) (%d %d %d) %x %x %d %x\n",
+       printk("(%d) %d:%d:%d (%4.4x %d %d %d %d) (%d %d %x) (%d %d %d) %x %x %x\n",
               i, SCpnt->host->host_no,
               SCpnt->target,
               SCpnt->lun,
@@ -1931,8 +1938,6 @@ scsi_dump_status(void)
               SCpnt->internal_timeout,
               SCpnt->cmnd[0],
               SCpnt->sense_buffer[2],
-              (SCpnt->request.waiting ? 
-               SCpnt->request.waiting->pid : 0),
               SCpnt->result);
       };
   printk("wait_for_request = %x\n", wait_for_request);
@@ -1945,14 +1950,12 @@ scsi_dump_status(void)
        printk("%d: ", i);
        req = blk_dev[i].current_request;
        while(req) {
-         printk("(%x %d %d %d %d %d) ",
+         printk("(%x %d %d %d %d) ",
                 req->dev,
                 req->cmd,
                 req->sector,
                 req->nr_sectors,
-                req->current_nr_sectors,
-                (req->waiting ? 
-                 req->waiting->pid : 0));
+                req->current_nr_sectors);
          req = req->next;
        }
        printk("\n");
index 0e21bdc4c2acc2e597a72f6a470db1f0b203f1fb..721ca0cf82d38800447aac0d41c120cbca9c112f 100644 (file)
@@ -522,7 +522,6 @@ static void end_scsi_request(Scsi_Cmnd * SCpnt, int uptodate, int sectors)
 {
        struct request * req;
        struct buffer_head * bh;
-       struct task_struct * p;
 
        req = &SCpnt->request;
        req->errors = 0;
@@ -554,12 +553,8 @@ static void end_scsi_request(Scsi_Cmnd * SCpnt, int uptodate, int sectors)
          return;
        };
        DEVICE_OFF(req->dev);
-       if ((p = req->waiting) != NULL) {
-               req->waiting = NULL;
-               p->swapping = 0;
-               p->state = TASK_RUNNING;
-               if (p->counter > current->counter)
-                       need_resched = 1;
+       if (req->sem != NULL) {
+               up(req->sem);
        }
        req->dev = -1;
        wake_up(&SCpnt->device->device_wait);
index 4766b9aca54622b0fcbdf54fdabd80f452cacfb6..05381fb90ae28bab2e97c94f1cd31e47fc03a217 100644 (file)
@@ -73,16 +73,12 @@ static int ioctl_probe(struct Scsi_Host * host, void *buffer)
 static void scsi_ioctl_done (Scsi_Cmnd * SCpnt)
 {
   struct request * req;
-  struct task_struct * p;
   
   req = &SCpnt->request;
   req->dev = 0xfffe; /* Busy, but indicate request done */
   
-  if ((p = req->waiting) != NULL) {
-    req->waiting = NULL;
-    p->state = TASK_RUNNING;
-    if (p->counter > current->counter)
-      need_resched = 1;
+  if (req->sem != NULL) {
+    up(req->sem);
   }
 }      
 
@@ -97,8 +93,10 @@ static int ioctl_internal_command(Scsi_Device *dev, char * cmd)
                        MAX_RETRIES);
 
        if (SCpnt->request.dev != 0xfffe){
-         SCpnt->request.waiting = current;
-         current->state = TASK_UNINTERRUPTIBLE;
+         struct semaphore sem = MUTEX_LOCKED;
+         SCpnt->request.sem = &sem;
+         down(&sem);
+         /* Hmm.. Have to ask about this one */
          while (SCpnt->request.dev != 0xfffe) schedule();
        };
 
@@ -181,8 +179,10 @@ static int ioctl_command(Scsi_Device *dev, void *buffer)
                        MAX_RETRIES);
 
        if (SCpnt->request.dev != 0xfffe){
-         SCpnt->request.waiting = current;
-         current->state = TASK_UNINTERRUPTIBLE;
+         struct semaphore sem = MUTEX_LOCKED;
+         SCpnt->request.sem = &sem;
+         down(&sem);
+         /* Hmm.. Have to ask about this one */
          while (SCpnt->request.dev != 0xfffe) schedule();
        };
 
index c2d71b9b0c2740ea3e6c027a3335d0332e33e447..c04a8b2b5505250214a95d2468408c7440ef712e 100644 (file)
@@ -775,16 +775,12 @@ static int check_scsidisk_media_change(dev_t full_dev){
 static void sd_init_done (Scsi_Cmnd * SCpnt)
 {
   struct request * req;
-  struct task_struct * p;
   
   req = &SCpnt->request;
   req->dev = 0xfffe; /* Busy, but indicate request done */
   
-  if ((p = req->waiting) != NULL) {
-    req->waiting = NULL;
-    p->state = TASK_RUNNING;
-    if (p->counter > current->counter)
-      need_resched = 1;
+  if (req->sem != NULL) {
+    up(req->sem);
   }
 }
 
@@ -884,8 +880,10 @@ static int sd_init_onedisk(int i)
       while(SCpnt->request.dev != 0xfffe);
     else
       if (SCpnt->request.dev != 0xfffe){
-       SCpnt->request.waiting = current;
-       current->state = TASK_UNINTERRUPTIBLE;
+       struct semaphore sem = MUTEX_LOCKED;
+       SCpnt->request.sem = &sem;
+       down(&sem);
+       /* Hmm.. Have to ask about this one.. */
        while (SCpnt->request.dev != 0xfffe) schedule();
       };
     
index 72166dc45e551b1f3859e09066ce20fdc89203aa..6af2df39da133447dd350ef512193071b37b1352 100644 (file)
@@ -641,11 +641,8 @@ static void sr_init_done (Scsi_Cmnd * SCpnt)
   req = &SCpnt->request;
   req->dev = 0xfffe; /* Busy, but indicate request done */
   
-  if ((p = req->waiting) != NULL) {
-    req->waiting = NULL;
-    p->state = TASK_RUNNING;
-    if (p->counter > current->counter)
-      need_resched = 1;
+  if (req->sem != NULL) {
+    up(req->sem);
   }
 }
 
@@ -675,8 +672,10 @@ static void get_sectorsize(int i){
       while(SCpnt->request.dev != 0xfffe);
     else
       if (SCpnt->request.dev != 0xfffe){
-       SCpnt->request.waiting = current;
-       current->state = TASK_UNINTERRUPTIBLE;
+       struct semaphore sem = MUTEX_LOCKED;
+       SCpnt->request.sem = &sem;
+       down(&sem);
+       /* Hmm.. Have to ask about this */
        while (SCpnt->request.dev != 0xfffe) schedule();
       };
     
index 3ebd6ca5a7dfeb610a206334c2690a4fb0cead5b..e1761839b8c71222c421dae0a0f5eadb4cf19212 100644 (file)
@@ -26,11 +26,8 @@ static void sr_ioctl_done(Scsi_Cmnd * SCpnt)
   req = &SCpnt->request;
   req->dev = 0xfffe; /* Busy, but indicate request done */
   
-  if ((p = req->waiting) != NULL) {
-    req->waiting = NULL;
-    p->state = TASK_RUNNING;
-    if (p->counter > current->counter)
-      need_resched = 1;
+  if (req->sem != NULL) {
+    up(&req->sem);
   }
 }
 
@@ -50,8 +47,10 @@ static int do_ioctl(int target, unsigned char * sr_cmd, void * buffer, unsigned
 
 
        if (SCpnt->request.dev != 0xfffe){
-         SCpnt->request.waiting = current;
-         current->state = TASK_UNINTERRUPTIBLE;
+         struct semaphore sem = MUTEX_LOCKED;
+         SCpnt->request.sem = &sem;
+         down(&sem);
+         /* Hmm.. Have to ask about this */
          while (SCpnt->request.dev != 0xfffe) schedule();
        };
 
index 5209d22852455245cb27b320ed4500973f52d730..f38072d88afbdbb3f42c868b17c869a87c6f16cb 100644 (file)
@@ -70,7 +70,7 @@ static struct proc_dir_entry base_dir[] = {
 
 int proc_match(int len,const char * name,struct proc_dir_entry * de)
 {
-       register int same __asm__("ax");
+       register int same;
 
        if (!de || !de->low_ino)
                return 0;
@@ -79,7 +79,8 @@ int proc_match(int len,const char * name,struct proc_dir_entry * de)
                return 1;
        if (de->namelen != len)
                return 0;
-       __asm__("cld\n\t"
+       __asm__ __volatile__(
+               "cld\n\t"
                "repe ; cmpsb\n\t"
                "setz %%al"
                :"=a" (same)
index 3ed49018d02a806daf2d66b7942184003d74c51f..44b10ac1e3facfe631ca378c98ced779399e09ad 100644 (file)
@@ -177,6 +177,7 @@ struct inode {
        time_t          i_ctime;
        unsigned long   i_blksize;
        unsigned long   i_blocks;
+       unsigned long   i_version;
        struct semaphore i_sem;
        struct inode_operations * i_op;
        struct super_block * i_sb;
index 23acca890a393e6e767fe958cbd0858c512dcfbf..a7b4a0ab0d11ccec17d188c9ebeb6ffe12190b6b 100644 (file)
@@ -264,7 +264,6 @@ struct task_struct {
        unsigned long personality;
        int dumpable:1;
        int did_exec:1;
-       volatile int swapping:1;
        int pid,pgrp,session,leader;
        int     groups[NGROUPS];
        /* 
@@ -332,7 +331,7 @@ struct task_struct {
 /* schedlink */        &init_task,&init_task, \
 /* signals */  {{ 0, },}, \
 /* stack */    0,(unsigned long) &init_kernel_stack, \
-/* ec,brk... */        0,0,0,0,0,0, \
+/* ec,brk... */        0,0,0,0,0, \
 /* pid etc.. */        0,0,0,0, \
 /* suppl grps*/ {NOGROUP,}, \
 /* proc links*/ &init_task,&init_task,NULL,NULL,NULL,NULL, \
index c84aacb3abec84e316ce96e0aafee383c8b82aa6..15168d6092f0370c2a42f5228bd85f211b38bb39 100644 (file)
@@ -25,7 +25,8 @@ extern "C" {
  
 extern inline char * strcpy(char * dest,const char *src)
 {
-__asm__("cld\n"
+__asm__ __volatile__(
+       "cld\n"
        "1:\tlodsb\n\t"
        "stosb\n\t"
        "testb %%al,%%al\n\t"
@@ -37,7 +38,8 @@ return dest;
 
 extern inline char * strncpy(char * dest,const char *src,size_t count)
 {
-__asm__("cld\n"
+__asm__ __volatile__(
+       "cld\n"
        "1:\tdecl %2\n\t"
        "js 2f\n\t"
        "lodsb\n\t"
@@ -54,7 +56,8 @@ return dest;
 
 extern inline char * strcat(char * dest,const char * src)
 {
-__asm__("cld\n\t"
+__asm__ __volatile__(
+       "cld\n\t"
        "repne\n\t"
        "scasb\n\t"
        "decl %1\n"
@@ -69,7 +72,8 @@ return dest;
 
 extern inline char * strncat(char * dest,const char * src,size_t count)
 {
-__asm__("cld\n\t"
+__asm__ __volatile__(
+       "cld\n\t"
        "repne\n\t"
        "scasb\n\t"
        "decl %1\n\t"
@@ -90,8 +94,9 @@ return dest;
 
 extern inline int strcmp(const char * cs,const char * ct)
 {
-register int __res __asm__("ax");
-__asm__("cld\n"
+register int __res;
+__asm__ __volatile__(
+       "cld\n"
        "1:\tlodsb\n\t"
        "scasb\n\t"
        "jne 2f\n\t"
@@ -108,8 +113,9 @@ return __res;
 
 extern inline int strncmp(const char * cs,const char * ct,size_t count)
 {
-register int __res __asm__("ax");
-__asm__("cld\n"
+register int __res;
+__asm__ __volatile__(
+       "cld\n"
        "1:\tdecl %3\n\t"
        "js 2f\n\t"
        "lodsb\n\t"
@@ -128,8 +134,9 @@ return __res;
 
 extern inline char * strchr(const char * s,char c)
 {
-register char * __res __asm__("ax");
-__asm__("cld\n\t"
+register char * __res;
+__asm__ __volatile__(
+       "cld\n\t"
        "movb %%al,%%ah\n"
        "1:\tlodsb\n\t"
        "cmpb %%ah,%%al\n\t"
@@ -145,8 +152,9 @@ return __res;
 
 extern inline char * strrchr(const char * s,char c)
 {
-register char * __res __asm__("dx");
-__asm__("cld\n\t"
+register char * __res;
+__asm__ __volatile__(
+       "cld\n\t"
        "movb %%al,%%ah\n"
        "1:\tlodsb\n\t"
        "cmpb %%ah,%%al\n\t"
@@ -160,8 +168,9 @@ return __res;
 
 extern inline size_t strspn(const char * cs, const char * ct)
 {
-register char * __res __asm__("si");
-__asm__("cld\n\t"
+register char * __res;
+__asm__ __volatile__(
+       "cld\n\t"
        "movl %4,%%edi\n\t"
        "repne\n\t"
        "scasb\n\t"
@@ -184,8 +193,9 @@ return __res-cs;
 
 extern inline size_t strcspn(const char * cs, const char * ct)
 {
-register char * __res __asm__("si");
-__asm__("cld\n\t"
+register char * __res;
+__asm__ __volatile__(
+       "cld\n\t"
        "movl %4,%%edi\n\t"
        "repne\n\t"
        "scasb\n\t"
@@ -208,8 +218,9 @@ return __res-cs;
 
 extern inline char * strpbrk(const char * cs,const char * ct)
 {
-register char * __res __asm__("si");
-__asm__("cld\n\t"
+register char * __res;
+__asm__ __volatile__(
+       "cld\n\t"
        "movl %4,%%edi\n\t"
        "repne\n\t"
        "scasb\n\t"
@@ -235,8 +246,9 @@ return __res;
 
 extern inline char * strstr(const char * cs,const char * ct)
 {
-register char * __res __asm__("ax");
-__asm__("cld\n\t" \
+register char * __res;
+__asm__ __volatile__(
+       "cld\n\t" \
        "movl %4,%%edi\n\t"
        "repne\n\t"
        "scasb\n\t"
@@ -262,8 +274,9 @@ return __res;
 
 extern inline size_t strlen(const char * s)
 {
-register int __res __asm__("cx");
-__asm__("cld\n\t"
+register int __res;
+__asm__ __volatile__(
+       "cld\n\t"
        "repne\n\t"
        "scasb\n\t"
        "notl %0\n\t"
@@ -277,7 +290,8 @@ extern char * ___strtok;
 extern inline char * strtok(char * s,const char * ct)
 {
 register char * __res;
-__asm__("testl %1,%1\n\t"
+__asm__ __volatile__(
+       "testl %1,%1\n\t"
        "jne 1f\n\t"
        "testl %0,%0\n\t"
        "je 8f\n\t"
@@ -335,7 +349,8 @@ return __res;
 
 extern inline void * memcpy(void * to, const void * from, size_t n)
 {
-__asm__("cld\n\t"
+__asm__ __volatile__(
+       "cld\n\t"
        "movl %%edx, %%ecx\n\t"
        "shrl $2,%%ecx\n\t"
        "rep ; movsl\n\t"
@@ -355,14 +370,16 @@ return (to);
 extern inline void * memmove(void * dest,const void * src, size_t n)
 {
 if (dest<src)
-__asm__("cld\n\t"
+__asm__ __volatile__(
+       "cld\n\t"
        "rep\n\t"
        "movsb"
        : /* no output */
        :"c" (n),"S" (src),"D" (dest)
        :"cx","si","di");
 else
-__asm__("std\n\t"
+__asm__ __volatile__(
+       "std\n\t"
        "rep\n\t"
        "movsb\n\t"
        "cld"
@@ -376,8 +393,9 @@ return dest;
 
 extern inline int memcmp(const void * cs,const void * ct,size_t count)
 {
-register int __res __asm__("ax");
-__asm__("cld\n\t"
+register int __res;
+__asm__ __volatile__(
+       "cld\n\t"
        "repe\n\t"
        "cmpsb\n\t"
        "je 1f\n\t"
@@ -391,10 +409,11 @@ return __res;
 
 extern inline void * memchr(const void * cs,char c,size_t count)
 {
-register void * __res __asm__("di");
+register void * __res;
 if (!count)
        return NULL;
-__asm__("cld\n\t"
+__asm__ __volatile__(
+       "cld\n\t"
        "repne\n\t"
        "scasb\n\t"
        "je 1f\n\t"
@@ -407,7 +426,8 @@ return __res;
 
 extern inline void * memset(void * s,char c,size_t count)
 {
-__asm__("cld\n\t"
+__asm__ __volatile__(
+       "cld\n\t"
        "rep\n\t"
        "stosb"
        : /* no output */
index 3af5609ec2bef904081bea9738465d50abe6fe47..e03a88d933668893b2a9177f19ef911fb4195d10 100644 (file)
@@ -17,6 +17,7 @@ struct semaphore {
 };
 
 #define MUTEX ((struct semaphore) { 1, NULL })
+#define MUTEX_LOCKED ((struct semaphore) { 0, NULL })
 
 struct select_table_entry {
        struct wait_queue wait;
index 08ad4af403ec2064e3bc23ea971149997ea2ec65..a4859a7033e5b2e231d9563faf4d9bc98a02ce30 100644 (file)
@@ -188,7 +188,6 @@ asmlinkage int sys_fork(struct pt_regs regs)
                (*p->binfmt->use_count)++;
 
        p->did_exec = 0;
-       p->swapping = 0;
        p->kernel_stack_page = 0;
        p->state = TASK_UNINTERRUPTIBLE;
        p->flags &= ~(PF_PTRACED|PF_TRACESYS);
index bf41f8fc692435c26e3276e96f3296490966bebc..388749bed17f2a0ccec9f80ca62c31849385792c 100644 (file)
@@ -23,12 +23,12 @@ SUBOBJS     := $(foreach f,$(SUBDIRS),$f/$f.o)
 
 OBJS   =  socket.o protocols.o
 
-all:           subdirs net.o
+all:           net.o
 
 net.o:         $(OBJS) network.a
                $(LD) -r -o net.o $(OBJS) network.a
 
-network.a:     $(SUBOBJS)
+network.a:     subdirs
                rm -f $@
                ar rc $@ $(SUBOBJS)
                ranlib $@
index 313f3889fc3f61ac379c9ef60c9e952596ce7fd1..79b86894f5ce9cd9cf61d0a150dc1f2dfa122db5 100644 (file)
 #include <asm/segment.h>
 #include <linux/mm.h>
 
-#define TCP_FASTPATH
+#undef TCP_FASTPATH
 
 #define SEQ_TICK 3
 unsigned long seq_offset;