]> git.hungrycats.org Git - linux/commitdiff
v2.4.14.7 -> v2.4.14.8
authorLinus Torvalds <torvalds@athlon.transmeta.com>
Tue, 5 Feb 2002 04:33:52 +0000 (20:33 -0800)
committerLinus Torvalds <torvalds@athlon.transmeta.com>
Tue, 5 Feb 2002 04:33:52 +0000 (20:33 -0800)
  - Richard Henderson: alpha update
  - Andrew Morton: fix ext3/minix/sysv fsync behaviour.

24 files changed:
Makefile
arch/alpha/config.in
arch/alpha/kernel/alpha_ksyms.c
arch/alpha/kernel/irq_smp.c
arch/alpha/kernel/semaphore.c
arch/alpha/kernel/smp.c
arch/alpha/kernel/traps.c
drivers/atm/idt77252.c
drivers/ide/ide-disk.c
drivers/pci/pci.c
fs/ext3/fsync.c
fs/fat/inode.c
fs/inode.c
fs/minix/file.c
fs/nfs/write.c
fs/proc/proc_misc.c
fs/sysv/file.c
fs/udf/fsync.c
include/asm-alpha/semaphore.h
include/asm-alpha/spinlock.h
include/linux/pci.h
include/linux/sched.h
kernel/exit.c
net/ipv4/ipconfig.c

index 8832a7883cd9bd7902e7d6911a22f6bee9799d15..8dfc61a9c5c98b7bd0af258c5c52cb865013b5c5 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 4
 SUBLEVEL = 15
-EXTRAVERSION =-pre7
+EXTRAVERSION =-pre8
 
 KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 
index 26118d5e55fdc2b25172e6a29d3b6fcf4e92dc59..91f072a80d708d92b578c6515c3ac3ec2caaa718 100644 (file)
@@ -385,6 +385,9 @@ if [ "$CONFIG_DEBUG_KERNEL" != "n" ]; then
    tristate '  Kernel FP software completion' CONFIG_MATHEMU
    bool '  Debug memory allocations' CONFIG_DEBUG_SLAB
    bool '  Magic SysRq key' CONFIG_MAGIC_SYSRQ
+   bool '  Spinlock debugging' CONFIG_DEBUG_SPINLOCK
+   bool '  Read-write spinlock debugging' CONFIG_DEBUG_RWLOCK
+   bool '  Semaphore debugging' CONFIG_DEBUG_SEMAPHORE
 else
    define_tristate CONFIG_MATHEMU y
 fi
index f09f1b2ffb70134723de740bc84abc8252732459..d6043ed645818fe2d9fc5f83c49d8f8478f10f35 100644 (file)
@@ -222,12 +222,12 @@ EXPORT_SYMBOL(__global_sti);
 EXPORT_SYMBOL(__global_save_flags);
 EXPORT_SYMBOL(__global_restore_flags);
 EXPORT_SYMBOL(atomic_dec_and_lock);
-#if DEBUG_SPINLOCK
+#ifdef CONFIG_DEBUG_SPINLOCK
 EXPORT_SYMBOL(spin_unlock);
 EXPORT_SYMBOL(debug_spin_lock);
 EXPORT_SYMBOL(debug_spin_trylock);
 #endif
-#if DEBUG_RWLOCK
+#ifdef CONFIG_DEBUG_RWLOCK
 EXPORT_SYMBOL(write_lock);
 EXPORT_SYMBOL(read_lock);
 #endif
index 9022228a0ac652dff00e8381b72cece54178303e..37f866966c5be8f87f463f247ac31a230ceb908a 100644 (file)
@@ -124,7 +124,7 @@ get_irqlock(int cpu, void* where)
        /*
         * Finally.
         */
-#if DEBUG_SPINLOCK
+#ifdef CONFIG_DEBUG_SPINLOCK
        global_irq_lock.task = current;
        global_irq_lock.previous = where;
 #endif
index b47d5b1c23c0d8168e8607e8091ce75a7b710447..27ba8b1dcd523687a33affc4262147c6a1e50d56 100644 (file)
@@ -57,7 +57,7 @@ __down_failed(struct semaphore *sem)
 {
        DECLARE_WAITQUEUE(wait, current);
 
-#if DEBUG_SEMAPHORE
+#ifdef CONFIG_DEBUG_SEMAPHORE
        printk("%s(%d): down failed(%p)\n",
               current->comm, current->pid, sem);
 #endif
@@ -97,7 +97,7 @@ __down_failed(struct semaphore *sem)
        remove_wait_queue(&sem->wait, &wait);
        current->state = TASK_RUNNING;
 
-#if DEBUG_SEMAPHORE
+#ifdef CONFIG_DEBUG_SEMAPHORE
        printk("%s(%d): down acquired(%p)\n",
               current->comm, current->pid, sem);
 #endif
@@ -109,7 +109,7 @@ __down_failed_interruptible(struct semaphore *sem)
        DECLARE_WAITQUEUE(wait, current);
        long ret;
 
-#if DEBUG_SEMAPHORE
+#ifdef CONFIG_DEBUG_SEMAPHORE
        printk("%s(%d): down failed(%p)\n",
               current->comm, current->pid, sem);
 #endif
@@ -185,7 +185,7 @@ __down_failed_interruptible(struct semaphore *sem)
        current->state = TASK_RUNNING;
        wake_up(&sem->wait);
 
-#if DEBUG_SEMAPHORE
+#ifdef CONFIG_DEBUG_SEMAPHORE
        printk("%s(%d): down %s(%p)\n",
               current->comm, current->pid,
               (ret < 0 ? "interrupted" : "acquired"), sem);
@@ -207,7 +207,7 @@ down(struct semaphore *sem)
 #if WAITQUEUE_DEBUG
        CHECK_MAGIC(sem->__magic);
 #endif
-#if DEBUG_SEMAPHORE
+#ifdef CONFIG_DEBUG_SEMAPHORE
        printk("%s(%d): down(%p) <count=%d> from %p\n",
               current->comm, current->pid, sem,
               atomic_read(&sem->count), __builtin_return_address(0));
@@ -221,7 +221,7 @@ down_interruptible(struct semaphore *sem)
 #if WAITQUEUE_DEBUG
        CHECK_MAGIC(sem->__magic);
 #endif
-#if DEBUG_SEMAPHORE
+#ifdef CONFIG_DEBUG_SEMAPHORE
        printk("%s(%d): down(%p) <count=%d> from %p\n",
               current->comm, current->pid, sem,
               atomic_read(&sem->count), __builtin_return_address(0));
@@ -240,7 +240,7 @@ down_trylock(struct semaphore *sem)
 
        ret = __down_trylock(sem);
 
-#if DEBUG_SEMAPHORE
+#ifdef CONFIG_DEBUG_SEMAPHORE
        printk("%s(%d): down_trylock %s from %p\n",
               current->comm, current->pid,
               ret ? "failed" : "acquired",
@@ -256,7 +256,7 @@ up(struct semaphore *sem)
 #if WAITQUEUE_DEBUG
        CHECK_MAGIC(sem->__magic);
 #endif
-#if DEBUG_SEMAPHORE
+#ifdef CONFIG_DEBUG_SEMAPHORE
        printk("%s(%d): up(%p) <count=%d> from %p\n",
               current->comm, current->pid, sem,
               atomic_read(&sem->count), __builtin_return_address(0));
index ad18fd97d8b3851e3888757d888c70827ce3f031..dbb08b98a884ffa64331eaf5052cd51b33999767 100644 (file)
@@ -1091,7 +1091,7 @@ flush_icache_page(struct vm_area_struct *vma, struct page *page)
        }
 }
 \f
-#if DEBUG_SPINLOCK
+#ifdef CONFIG_DEBUG_SPINLOCK
 void
 spin_unlock(spinlock_t * lock)
 {
@@ -1181,9 +1181,9 @@ debug_spin_trylock(spinlock_t * lock, const char *base_file, int line_no)
        }
        return ret;
 }
-#endif /* DEBUG_SPINLOCK */
+#endif /* CONFIG_DEBUG_SPINLOCK */
 \f
-#if DEBUG_RWLOCK
+#ifdef CONFIG_DEBUG_RWLOCK
 void write_lock(rwlock_t * lock)
 {
        long regx, regy;
@@ -1261,4 +1261,4 @@ void read_lock(rwlock_t * lock)
                goto try_again;
        }
 }
-#endif /* DEBUG_RWLOCK */
+#endif /* CONFIG_DEBUG_RWLOCK */
index c95dcf6518c3f3b9271093f4c9988303520f3f06..46db9ffe645d87aee2a14545ca8f7aa9b2a6838a 100644 (file)
@@ -20,6 +20,7 @@
 #include <asm/unaligned.h>
 #include <asm/sysinfo.h>
 #include <asm/hwrpb.h>
+#include <asm/mmu_context.h>
 
 #include "proto.h"
 
@@ -311,8 +312,22 @@ do_entIF(unsigned long type, unsigned long a1,
                        if (alpha_fp_emul(regs.pc-4))
                                return;
                }
-               /* fallthrough as illegal instruction .. */
+               break;
+
              case 3: /* FEN fault */
+               /* Irritating users can call PAL_clrfen to disable the
+                  FPU for the process.  The kernel will then trap in
+                  do_switch_stack and undo_switch_stack when we try
+                  to save and restore the FP registers.
+
+                  Given that GCC by default generates code that uses the
+                  FP registers, PAL_clrfen is not useful except for DoS
+                  attacks.  So turn the bleeding FPU back on and be done
+                  with it.  */
+               current->thread.pal_flags |= 1;
+               __reload_thread(&current->thread);
+               return;
+
              case 5: /* illoc */
              default: /* unexpected instruction-fault type */
                      ;
index 2ab2ed402947df36a6a28876a901b1e0c538b269..d123bf6f58fa9c9ba59fb8458714f42243432406 100644 (file)
@@ -782,7 +782,9 @@ out:
        if (jiffies - scq->trans_start > HZ) {
                printk("%s: Error pushing TBD for %d.%d\n",
                       card->name, vc->tx_vcc->vpi, vc->tx_vcc->vci);
+#ifdef CONFIG_ATM_IDT77252_DEBUG
                idt77252_tx_dump(card);
+#endif
                scq->trans_start = jiffies;
        }
 
index 4c1214eb5ec91e4b952350e72c27ab5dde7c2c2a..e5aced875202d53e1b5b1b562a9830c1e1173b16 100644 (file)
@@ -690,7 +690,7 @@ static void idedisk_add_settings(ide_drive_t *drive)
        ide_add_setting(drive,  "multcount",            id ? SETTING_RW : SETTING_READ,                 HDIO_GET_MULTCOUNT,     HDIO_SET_MULTCOUNT,     TYPE_BYTE,      0,      id ? id->max_multsect : 0,      1,      2,      &drive->mult_count,             set_multcount);
        ide_add_setting(drive,  "nowerr",               SETTING_RW,                                     HDIO_GET_NOWERR,        HDIO_SET_NOWERR,        TYPE_BYTE,      0,      1,                              1,      1,      &drive->nowerr,                 set_nowerr);
        ide_add_setting(drive,  "breada_readahead",     SETTING_RW,                                     BLKRAGET,               BLKRASET,               TYPE_INT,       0,      255,                            1,      2,      &read_ahead[major],             NULL);
-       ide_add_setting(drive,  "file_readahead",       SETTING_RW,                                     BLKFRAGET,              BLKFRASET,              TYPE_INTA,      0,      INT_MAX,                        1,      1024,   &max_readahead[major][minor],   NULL);
+       ide_add_setting(drive,  "file_readahead",       SETTING_RW,                                     BLKFRAGET,              BLKFRASET,              TYPE_INTA,      0,      4096,                   PAGE_SIZE,      1024,   &max_readahead[major][minor],   NULL);
        ide_add_setting(drive,  "max_kb_per_request",   SETTING_RW,                                     BLKSECTGET,             BLKSECTSET,             TYPE_INTA,      1,      255,                            1,      2,      &max_sectors[major][minor],     NULL);
        ide_add_setting(drive,  "lun",                  SETTING_RW,                                     -1,                     -1,                     TYPE_INT,       0,      7,                              1,      1,      &drive->lun,                    NULL);
        ide_add_setting(drive,  "failures",             SETTING_RW,                                     -1,                     -1,                     TYPE_INT,       0,      65535,                          1,      1,      &drive->failures,               NULL);
index 9aa9ab1616caf77aae98246a278078218706f7fd..471ae4bb3e398936a7faa15131029dddc9a77ba6 100644 (file)
@@ -985,7 +985,7 @@ void __devinit  pci_read_bridge_bases(struct pci_bus *child)
        base = (io_base_lo & PCI_IO_RANGE_MASK) << 8;
        limit = (io_limit_lo & PCI_IO_RANGE_MASK) << 8;
 
-       if ((base & PCI_IO_RANGE_TYPE_MASK) == PCI_IO_RANGE_TYPE_32) {
+       if ((io_base_lo & PCI_IO_RANGE_TYPE_MASK) == PCI_IO_RANGE_TYPE_32) {
                u16 io_base_hi, io_limit_hi;
                pci_read_config_word(dev, PCI_IO_BASE_UPPER16, &io_base_hi);
                pci_read_config_word(dev, PCI_IO_LIMIT_UPPER16, &io_limit_hi);
index 742c4027f791a878438590292799bc0a104530e7..79f4f838514f77957092e6efaa72410961749921 100644 (file)
@@ -62,6 +62,7 @@ int ext3_sync_file(struct file * file, struct dentry *dentry, int datasync)
         * we'll end up waiting on them in commit.
         */
        ret = fsync_inode_buffers(inode);
+       ret |= fsync_inode_data_buffers(inode);
 
        ext3_force_commit(inode->i_sb);
 
index ad4af48e863a39971b7666d5cdfbfd3bab9bf5e1..bba65eff5898a91e496c4d56f6f08044b43fc9ed 100644 (file)
@@ -123,6 +123,8 @@ struct inode *fat_iget(struct super_block *sb, int i_pos)
                if (i->i_location != i_pos)
                        continue;
                inode = igrab(i->i_fat_inode);
+               if (inode)
+                       break;
        }
        spin_unlock(&fat_inode_lock);
        return inode;
index 60fa00d40e7b41716628d98699c6d0beed2d7085..5e2d697efa6cb3d745a55154772c6c4ba34117e6 100644 (file)
@@ -404,6 +404,8 @@ static void try_to_sync_unused_inodes(void * arg)
        spin_lock(&sb_lock);
        sb = sb_entry(super_blocks.next);
        for (; nr_inodes && sb != sb_entry(&super_blocks); sb = sb_entry(sb->s_list.next)) {
+               if (list_empty(&sb->s_dirty))
+                       continue;
                spin_unlock(&sb_lock);
                nr_inodes = try_to_sync_unused_list(&sb->s_dirty, nr_inodes);
                spin_lock(&sb_lock);
@@ -957,8 +959,6 @@ struct inode *igrab(struct inode *inode)
                 */
                inode = NULL;
        spin_unlock(&inode_lock);
-       if (inode)
-               wait_on_inode(inode);
        return inode;
 }
 
index d464e68a92bcd4a22c6238d1a52a86e80f3fae8c..ab8682902b2678e5b6b520944bfdde2225cc7c78 100644 (file)
@@ -30,8 +30,10 @@ struct inode_operations minix_file_inode_operations = {
 int minix_sync_file(struct file * file, struct dentry *dentry, int datasync)
 {
        struct inode *inode = dentry->d_inode;
-       int err  = fsync_inode_buffers(inode);
+       int err;
 
+       err = fsync_inode_buffers(inode);
+       err |= fsync_inode_data_buffers(inode);
        if (!(inode->i_state & I_DIRTY))
                return err;
        if (datasync && !(inode->i_state & I_DIRTY_DATASYNC))
index 7284c054671be8a326e59f3522efc4baa8bced4d..2d7d653924fcb8b44e71a29f55201c4b87a9faaa 100644 (file)
@@ -314,7 +314,7 @@ nfs_inode_add_request(struct inode *inode, struct nfs_page *req)
        if (!NFS_WBACK_BUSY(req))
                printk(KERN_ERR "NFS: unlocked request attempted hashed!\n");
        if (list_empty(&inode->u.nfs_i.writeback))
-               atomic_inc(&inode->i_count);
+               igrab(inode);
        inode->u.nfs_i.npages++;
        list_add(&req->wb_hash, &inode->u.nfs_i.writeback);
        req->wb_count++;
index 504232b00ec26a700f2a3948d544621cd7000070..aeca5ec31880af14807e070a181d57e0542ac9e0 100644 (file)
  * have a way to deal with that gracefully. Right now I used straightforward
  * wrappers, but this needs further analysis wrt potential overflows.
  */
-extern int get_hardware_list(char *);
-extern int get_stram_list(char *);
-#ifdef CONFIG_DEBUG_MALLOC
-extern int get_malloc(char * buffer);
-#endif
 #ifdef CONFIG_MODULES
 extern int get_module_list(char *);
 #endif
@@ -219,33 +214,6 @@ static struct file_operations proc_cpuinfo_operations = {
        release:        seq_release,
 };
 
-#ifdef CONFIG_PROC_HARDWARE
-static int hardware_read_proc(char *page, char **start, off_t off,
-                                int count, int *eof, void *data)
-{
-       int len = get_hardware_list(page);
-       return proc_calc_metrics(page, start, off, count, eof, len);
-}
-#endif
-
-#ifdef CONFIG_STRAM_PROC
-static int stram_read_proc(char *page, char **start, off_t off,
-                                int count, int *eof, void *data)
-{
-       int len = get_stram_list(page);
-       return proc_calc_metrics(page, start, off, count, eof, len);
-}
-#endif
-
-#ifdef CONFIG_DEBUG_MALLOC
-static int malloc_read_proc(char *page, char **start, off_t off,
-                                int count, int *eof, void *data)
-{
-       int len = get_malloc(page);
-       return proc_calc_metrics(page, start, off, count, eof, len);
-}
-#endif
-
 #ifdef CONFIG_MODULES
 static int modules_read_proc(char *page, char **start, off_t off,
                                 int count, int *eof, void *data)
@@ -538,15 +506,6 @@ void __init proc_misc_init(void)
                {"uptime",      uptime_read_proc},
                {"meminfo",     meminfo_read_proc},
                {"version",     version_read_proc},
-#ifdef CONFIG_PROC_HARDWARE
-               {"hardware",    hardware_read_proc},
-#endif
-#ifdef CONFIG_STRAM_PROC
-               {"stram",       stram_read_proc},
-#endif
-#ifdef CONFIG_DEBUG_MALLOC
-               {"malloc",      malloc_read_proc},
-#endif
 #ifdef CONFIG_MODULES
                {"modules",     modules_read_proc},
 #endif
index b798b4339b6e2bdae61fd42d71623f9e9af24921..ee1ec8bf62e398414c370a2425ab99d5fded85b1 100644 (file)
@@ -35,8 +35,10 @@ struct inode_operations sysv_file_inode_operations = {
 int sysv_sync_file(struct file * file, struct dentry *dentry, int datasync)
 {
        struct inode *inode = dentry->d_inode;
-       int err  = fsync_inode_buffers(inode);
+       int err;
 
+       err = fsync_inode_buffers(inode);
+       err |= fsync_inode_data_buffers(inode);
        if (!(inode->i_state & I_DIRTY))
                return err;
        if (datasync && !(inode->i_state & I_DIRTY_DATASYNC))
index 59a73f0d269e3a279b6be0d8708a5a079fb4664f..f302078dfa0f511380e481f0c709dd1c8c5c6a61 100644 (file)
@@ -45,6 +45,7 @@ int udf_fsync_inode(struct inode *inode, int datasync)
        int err;
 
        err = fsync_inode_buffers(inode);
+       err |= fsync_inode_data_buffers(inode);
        if (!(inode->i_state & I_DIRTY))
                return err;
        if (datasync && !(inode->i_state & I_DIRTY_DATASYNC))
index b5d6082085c1c2e84a81a4f10dac76e0dfe7ea52..ab26cfbaddbfe76facac91b2feb9abe43b4c9e93 100644 (file)
@@ -15,9 +15,6 @@
 #include <linux/wait.h>
 #include <linux/rwsem.h>
 
-#define DEBUG_SEMAPHORE 0
-#define DEBUG_RW_SEMAPHORE 0
-
 struct semaphore {
        /* Careful, inline assembly knows about the position of these two.  */
        atomic_t count __attribute__((aligned(8)));
@@ -92,14 +89,14 @@ extern void __up_wakeup(struct semaphore *);
 static inline void __down(struct semaphore *sem)
 {
        long count = atomic_dec_return(&sem->count);
-       if (__builtin_expect(count < 0, 0))
+       if (unlikely(count < 0))
                __down_failed(sem);
 }
 
 static inline int __down_interruptible(struct semaphore *sem)
 {
        long count = atomic_dec_return(&sem->count);
-       if (__builtin_expect(count < 0, 0))
+       if (unlikely(count < 0))
                return __down_failed_interruptible(sem);
        return 0;
 }
@@ -201,11 +198,11 @@ static inline void __up(struct semaphore *sem)
                : "m"(*sem), "r"(0x0000000100000000)
                : "memory");
 
-       if (__builtin_expect(ret <= 0, 0))
+       if (unlikely(ret <= 0))
                __up_wakeup(sem);
 }
 
-#if !WAITQUEUE_DEBUG && !DEBUG_SEMAPHORE
+#if !WAITQUEUE_DEBUG && !defined(CONFIG_DEBUG_SEMAPHORE)
 extern inline void down(struct semaphore *sem)
 {
        __down(sem);
index bf560fde0a3519c77d6b633be6a723743bdf7305..f93eac565509ad80fe0872cc07daab35877a4b5f 100644 (file)
@@ -1,12 +1,11 @@
 #ifndef _ALPHA_SPINLOCK_H
 #define _ALPHA_SPINLOCK_H
 
+#include <linux/config.h>
 #include <asm/system.h>
 #include <linux/kernel.h>
 #include <asm/current.h>
 
-#define DEBUG_SPINLOCK 0
-#define DEBUG_RWLOCK 0
 
 /*
  * Simple spin lock operations.  There are two variants, one clears IRQ's
@@ -17,7 +16,7 @@
 
 typedef struct {
        volatile unsigned int lock /*__attribute__((aligned(32))) */;
-#if DEBUG_SPINLOCK
+#if CONFIG_DEBUG_SPINLOCK
        int on_cpu;
        int line_no;
        void *previous;
@@ -26,7 +25,7 @@ typedef struct {
 #endif
 } spinlock_t;
 
-#if DEBUG_SPINLOCK
+#if CONFIG_DEBUG_SPINLOCK
 #define SPIN_LOCK_UNLOCKED (spinlock_t) {0, -1, 0, 0, 0, 0}
 #define spin_lock_init(x)                                              \
        ((x)->lock = 0, (x)->on_cpu = -1, (x)->previous = 0, (x)->task = 0)
@@ -38,7 +37,7 @@ typedef struct {
 #define spin_is_locked(x)      ((x)->lock != 0)
 #define spin_unlock_wait(x)    ({ do { barrier(); } while ((x)->lock); })
 
-#if DEBUG_SPINLOCK
+#if CONFIG_DEBUG_SPINLOCK
 extern void spin_unlock(spinlock_t * lock);
 extern void debug_spin_lock(spinlock_t * lock, const char *, int);
 extern int debug_spin_trylock(spinlock_t * lock, const char *, int);
@@ -86,7 +85,7 @@ static inline void spin_lock(spinlock_t * lock)
 
 #define spin_trylock(lock) (!test_and_set_bit(0,(lock)))
 #define spin_lock_own(LOCK, LOCATION)  ((void)0)
-#endif /* DEBUG_SPINLOCK */
+#endif /* CONFIG_DEBUG_SPINLOCK */
 
 /***********************************************************/
 
@@ -98,7 +97,7 @@ typedef struct {
 
 #define rwlock_init(x) do { *(x) = RW_LOCK_UNLOCKED; } while(0)
 
-#if DEBUG_RWLOCK
+#if CONFIG_DEBUG_RWLOCK
 extern void write_lock(rwlock_t * lock);
 extern void read_lock(rwlock_t * lock);
 #else
@@ -141,7 +140,7 @@ static inline void read_lock(rwlock_t * lock)
        : "=m" (*(volatile int *)lock), "=&r" (regx)
        : "m" (*(volatile int *)lock) : "memory");
 }
-#endif /* DEBUG_RWLOCK */
+#endif /* CONFIG_DEBUG_RWLOCK */
 
 static inline void write_unlock(rwlock_t * lock)
 {
index e1cd3b4203e068910f50dbd412d8fd78a0225936..4971fa3c3586394b70244e8bb34675d91c0fdc32 100644 (file)
 #define PCI_SEC_LATENCY_TIMER  0x1b    /* Latency timer for secondary interface */
 #define PCI_IO_BASE            0x1c    /* I/O range behind the bridge */
 #define PCI_IO_LIMIT           0x1d
-#define  PCI_IO_RANGE_TYPE_MASK        0x0f    /* I/O bridging type */
+#define  PCI_IO_RANGE_TYPE_MASK        0x0fUL  /* I/O bridging type */
 #define  PCI_IO_RANGE_TYPE_16  0x00
 #define  PCI_IO_RANGE_TYPE_32  0x01
-#define  PCI_IO_RANGE_MASK     ~0x0f
+#define  PCI_IO_RANGE_MASK     (~0x0fUL)
 #define PCI_SEC_STATUS         0x1e    /* Secondary status register, only bit 14 used */
 #define PCI_MEMORY_BASE                0x20    /* Memory range behind */
 #define PCI_MEMORY_LIMIT       0x22
-#define  PCI_MEMORY_RANGE_TYPE_MASK 0x0f
-#define  PCI_MEMORY_RANGE_MASK ~0x0f
+#define  PCI_MEMORY_RANGE_TYPE_MASK 0x0fUL
+#define  PCI_MEMORY_RANGE_MASK (~0x0fUL)
 #define PCI_PREF_MEMORY_BASE   0x24    /* Prefetchable memory range behind */
 #define PCI_PREF_MEMORY_LIMIT  0x26
-#define  PCI_PREF_RANGE_TYPE_MASK 0x0f
+#define  PCI_PREF_RANGE_TYPE_MASK 0x0fUL
 #define  PCI_PREF_RANGE_TYPE_32        0x00
 #define  PCI_PREF_RANGE_TYPE_64        0x01
-#define  PCI_PREF_RANGE_MASK   ~0x0f
+#define  PCI_PREF_RANGE_MASK   (~0x0fUL)
 #define PCI_PREF_BASE_UPPER32  0x28    /* Upper half of prefetchable memory range */
 #define PCI_PREF_LIMIT_UPPER32 0x2c
 #define PCI_IO_BASE_UPPER16    0x30    /* Upper half of I/O addresses */
 #define PCI_CB_IO_BASE_1_HI    0x36
 #define PCI_CB_IO_LIMIT_1      0x38
 #define PCI_CB_IO_LIMIT_1_HI   0x3a
-#define  PCI_CB_IO_RANGE_MASK  ~0x03
+#define  PCI_CB_IO_RANGE_MASK  (~0x03UL)
 /* 0x3c-0x3d are same as for htype 0 */
 #define PCI_CB_BRIDGE_CONTROL  0x3e
 #define  PCI_CB_BRIDGE_CTL_PARITY      0x01    /* Similar to standard bridge control register */
@@ -402,7 +402,7 @@ struct pci_dev {
 #define PCI_BRIDGE_RESOURCES 7
 #define PCI_NUM_RESOURCES 11
   
-#define PCI_REGION_FLAG_MASK 0x0f      /* These bits of resource flags tell us the PCI region flags */
+#define PCI_REGION_FLAG_MASK 0x0fU     /* These bits of resource flags tell us the PCI region flags */
 
 struct pci_bus {
        struct list_head node;          /* node in list of buses */
index 1501cd0e9f8d85d1f1d7f1c64fd59c33a53058cb..9cdc5e05d025171155bae86e3ce5cd2cf8851a8f 100644 (file)
@@ -88,7 +88,6 @@ extern int last_pid;
 #define TASK_UNINTERRUPTIBLE   2
 #define TASK_ZOMBIE            4
 #define TASK_STOPPED           8
-#define TASK_DEAD              16
 
 #define __set_task_state(tsk, state_value)             \
        do { (tsk)->state = (state_value); } while (0)
index 54db99b61b5c4b35ca443bdb370f2687de68d55f..708cad8597f50ac50169a7c5397d29a07701bd4b 100644 (file)
@@ -535,9 +535,6 @@ repeat:
                                }
                                goto end_wait4;
                        case TASK_ZOMBIE:
-                               /* Make sure no other waiter picks this task up */
-                               p->state = TASK_DEAD;
-
                                current->times.tms_cutime += p->times.tms_utime + p->times.tms_cutime;
                                current->times.tms_cstime += p->times.tms_stime + p->times.tms_cstime;
                                read_unlock(&tasklist_lock);
index accf014200a6c66e91099b50b793ce1203739a2c..4065d23b75feeb5e490e2c4b6760fd0ddd651bc6 100644 (file)
@@ -1144,7 +1144,9 @@ static int __init ip_auto_config(void)
         */
        if (ic_myaddr == INADDR_NONE ||
 #ifdef CONFIG_ROOT_NFS
-           (root_server_addr == INADDR_NONE && ic_servaddr == INADDR_NONE) ||
+           (MAJOR(ROOT_DEV) == UNNAMED_MAJOR
+            && root_server_addr == INADDR_NONE
+            && ic_servaddr == INADDR_NONE) ||
 #endif
            ic_first_dev->next) {
 #ifdef IPCONFIG_DYNAMIC