Author: sparky                       Date: Sat May 27 13:51:55 2006 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- synced with rt25

---- Files affected:
SOURCES:
   kernel-desktop-preempt-rt.patch (1.4 -> 1.5) 

---- Diffs:

================================================================
Index: SOURCES/kernel-desktop-preempt-rt.patch
diff -u SOURCES/kernel-desktop-preempt-rt.patch:1.4 
SOURCES/kernel-desktop-preempt-rt.patch:1.5
--- SOURCES/kernel-desktop-preempt-rt.patch:1.4 Wed May  3 23:58:19 2006
+++ SOURCES/kernel-desktop-preempt-rt.patch     Sat May 27 15:51:50 2006
@@ -2000,6 +2000,19 @@
        .handler        = ioc_timer_interrupt
  };
  
+Index: linux/arch/arm/kernel/calls.S
+===================================================================
+--- linux.orig/arch/arm/kernel/calls.S
++++ linux/arch/arm/kernel/calls.S
+@@ -332,7 +332,7 @@
+ /* 320 */     CALL(sys_get_mempolicy)
+               CALL(sys_set_mempolicy)
+ #ifndef syscalls_counted
+-.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
++.equ syscalls_padding, ((__NR_syscalls + 3) & ~3) - __NR_syscalls
+ #define syscalls_counted
+ #endif
+ .rept syscalls_padding
 Index: linux/arch/arm/kernel/dma.c
 ===================================================================
 --- linux.orig/arch/arm/kernel/dma.c
@@ -2103,10 +2116,50 @@
  /*
   * "slow" syscall return path.  "why" tells us if this was a real syscall.
   */
-@@ -389,5 +392,112 @@ ENTRY(sys_oabi_call_table)
+@@ -87,8 +90,8 @@ ENTRY(ret_from_fork)
+       b       ret_slow_syscall
+       
+ 
+-      .equ NR_syscalls,0
+-#define CALL(x) .equ NR_syscalls,NR_syscalls+1
++      .equ __NR_syscalls,0                    @ Used to determine syscall 
table padding.
++#define CALL(x) .equ __NR_syscalls,__NR_syscalls+1
+ #include "calls.S"
+ #undef CALL
+ #define CALL(x) .long x
+@@ -202,7 +205,7 @@ ENTRY(vector_swi)
+       tst     ip, #_TIF_SYSCALL_TRACE         @ are we tracing syscalls?
+       bne     __sys_trace
+ 
+-      cmp     scno, #NR_syscalls              @ check upper syscall limit
++      cmp     scno, #__NR_syscalls            @ check upper syscall limit
+       adr     lr, ret_fast_syscall            @ return address
+       ldrcc   pc, [tbl, scno, lsl #2]         @ call sys_* routine
+ 
+@@ -226,7 +229,7 @@ __sys_trace:
+       adr     lr, __sys_trace_return          @ return address
+       mov     scno, r0                        @ syscall number (possibly new)
+       add     r1, sp, #S_R0 + S_OFF           @ pointer to regs
+-      cmp     scno, #NR_syscalls              @ check upper syscall limit
++      cmp     scno, #__NR_syscalls            @ check upper syscall limit
+       ldmccia r1, {r0 - r3}                   @ have to reload r0 - r3
+       ldrcc   pc, [tbl, scno, lsl #2]         @ call sys_* routine
+       b       2b
+@@ -273,7 +276,7 @@ ENTRY(sys_call_table)
+ sys_syscall:
+               eor     scno, r0, #__NR_OABI_SYSCALL_BASE
+               cmp     scno, #__NR_syscall - __NR_SYSCALL_BASE
+-              cmpne   scno, #NR_syscalls      @ check range
++              cmpne   scno, #__NR_syscalls    @ check range
+               stmloia sp, {r5, r6}            @ shuffle args
+               movlo   r0, r1
+               movlo   r1, r2
+@@ -388,6 +391,112 @@ ENTRY(sys_oabi_call_table)
+ #include "calls.S"
  #undef ABI
  #undef OBSOLETE
- 
++#endif
++
 +#ifdef CONFIG_FRAME_POINTER
 +
 +#ifdef CONFIG_MCOUNT
@@ -2211,9 +2264,7 @@
 +      ldr     r0, [r0, #-4]   @ get target return address
 +1:
 +      mov     pc, lr
-+
-+#endif
-+
+ 
  #endif
  
 Index: linux/arch/arm/kernel/fiq.c
@@ -13923,10 +13974,10 @@
        clear_thread_flag(TIF_POLLING_NRFLAG);
        smp_mb__after_clear_bit();
 -      while (!need_resched()) {
-+      while (!need_resched() || !need_resched_delayed()) {
++      while (!need_resched() && !need_resched_delayed()) {
                local_irq_disable();
 -              if (!need_resched())
-+              if (!need_resched() || !need_resched_delayed())
++              if (!need_resched() && !need_resched_delayed())
                        safe_halt();
                else
                        local_irq_enable();
@@ -15344,7 +15395,7 @@
 ===================================================================
 --- linux.orig/drivers/char/Kconfig
 +++ linux/drivers/char/Kconfig
-@@ -719,6 +719,45 @@ config RTC
+@@ -719,6 +719,46 @@ config RTC
          To compile this driver as a module, choose M here: the
          module will be called rtc.
  
@@ -15359,6 +15410,7 @@
 +
 +config BLOCKER
 +      tristate "Priority Inheritance Debugging (Blocker) Device Support"
++      depends on X86
 +      default y
 +      ---help---
 +        If you say Y here then a device will be created that the userspace
@@ -17517,7 +17569,49 @@
  } 
  #endif
  
-@@ -2039,13 +2039,17 @@ static void vortex_tx_timeout(struct net
+@@ -1888,6 +1888,7 @@ vortex_timer(unsigned long data)
+       int next_tick = 60*HZ;
+       int ok = 0;
+       int media_status, mii_status, old_window;
++      unsigned long flags;
+ 
+       if (vortex_debug > 2) {
+               printk(KERN_DEBUG "%s: Media selection timer tick happened, 
%s.\n",
+@@ -1897,7 +1898,7 @@ vortex_timer(unsigned long data)
+ 
+       if (vp->medialock)
+               goto leave_media_alone;
+-      disable_irq(dev->irq);
++      spin_lock_irqsave(&vp->lock, flags);
+       old_window = ioread16(ioaddr + EL3_CMD) >> 13;
+       EL3WINDOW(4);
+       media_status = ioread16(ioaddr + Wn4_Media);
+@@ -1919,7 +1920,6 @@ vortex_timer(unsigned long data)
+               break;
+       case XCVR_MII: case XCVR_NWAY:
+               {
+-                      spin_lock_bh(&vp->lock);
+                       mii_status = mdio_read(dev, vp->phys[0], MII_BMSR);
+                       if (!(mii_status & BMSR_LSTATUS)) {
+                               /* Re-read to get actual link status */
+@@ -1957,7 +1957,6 @@ vortex_timer(unsigned long data)
+                       } else {
+                               netif_carrier_off(dev);
+                       }
+-                      spin_unlock_bh(&vp->lock);
+               }
+               break;
+         default:                                      /* Other media types 
handled by Tx timeouts. */
+@@ -2000,7 +1999,7 @@ vortex_timer(unsigned long data)
+               /* AKPM: FIXME: Should reset Rx & Tx here.  P60 of 3c90xc.pdf */
+       }
+       EL3WINDOW(old_window);
+-      enable_irq(dev->irq);
++      spin_unlock_irqrestore(&vp->lock, flags);
+ 
+ leave_media_alone:
+       if (vortex_debug > 2)
+@@ -2039,13 +2038,17 @@ static void vortex_tx_timeout(struct net
                        /*
                         * Block interrupts because vortex_interrupt does a 
bare spin_lock()
                         */
@@ -18418,6 +18512,29 @@
  
                spin_lock(&leader->proc_lock);
                spin_lock(&current->proc_lock);
+Index: linux/fs/file.c
+===================================================================
+--- linux.orig/fs/file.c
++++ linux/fs/file.c
+@@ -137,7 +137,9 @@ static void free_fdtable_rcu(struct rcu_
+               kfree(fdt->fd);
+               kfree(fdt);
+       } else {
+-              fddef = &get_cpu_var(fdtable_defer_list);
++
++              fddef = &per_cpu(fdtable_defer_list, raw_smp_processor_id());
++
+               spin_lock(&fddef->lock);
+               fdt->next = fddef->next;
+               fddef->next = fdt;
+@@ -149,7 +151,6 @@ static void free_fdtable_rcu(struct rcu_
+               if (!schedule_work(&fddef->wq))
+                       mod_timer(&fddef->timer, 5);
+               spin_unlock(&fddef->lock);
+-              put_cpu_var(fdtable_defer_list);
+       }
+ }
+ 
 Index: linux/fs/jbd/transaction.c
 ===================================================================
 --- linux.orig/fs/jbd/transaction.c
@@ -19055,6 +19172,19 @@
  #define ACPI_MUTEX_SEM              1
  
  /* Functions for acpi_os_signal */
+Index: linux/include/asm-arm/arch-omap/clock.h
+===================================================================
+--- linux.orig/include/asm-arm/arch-omap/clock.h
++++ linux/include/asm-arm/arch-omap/clock.h
+@@ -48,7 +48,7 @@ struct clk_functions {
+ 
+ extern unsigned int mpurate;
+ extern struct list_head clocks;
+-extern spinlock_t clockfw_lock;
++extern raw_spinlock_t clockfw_lock;
+ 
+ extern int clk_init(struct clk_functions * custom_clocks);
+ extern int clk_register(struct clk *clk);
 Index: linux/include/asm-arm/arch-pxa/timex.h
 ===================================================================
 --- linux.orig/include/asm-arm/arch-pxa/timex.h
@@ -19510,7 +19640,7 @@
 ===================================================================
 --- linux.orig/include/asm-arm/semaphore.h
 +++ linux/include/asm-arm/semaphore.h
-@@ -5,46 +5,67 @@
+@@ -5,46 +5,66 @@
  #define __ASM_ARM_SEMAPHORE_H
  
  #include <linux/linkage.h>
@@ -19528,7 +19658,6 @@
 + */
 +#ifndef CONFIG_PREEMPT_RT
 +# define semaphore compat_semaphore
-+#define __MUTEX_INITIALIZER(name) __COMPAT_MUTEX_INITIALIZER(name)
 +#endif
 +
  #include <asm/atomic.h>
@@ -19589,7 +19718,7 @@
  }
  
  /*
-@@ -55,16 +76,18 @@ asmlinkage int  __down_interruptible_fai
+@@ -55,16 +75,18 @@ asmlinkage int  __down_interruptible_fai
  asmlinkage int  __down_trylock_failed(void);
  asmlinkage void __up_wakeup(void);
  
@@ -19613,7 +19742,7 @@
  {
        might_sleep();
        __down_op(sem, __down_failed);
-@@ -74,13 +97,13 @@ static inline void down(struct semaphore
+@@ -74,13 +96,13 @@ static inline void down(struct semaphore
   * This is ugly, but we want the default case to fall through.
   * "__down_interruptible" is the actual routine that waits...
   */
@@ -19629,7 +19758,7 @@
  {
        return __down_op_ret(sem, __down_trylock_failed);
  }
-@@ -91,9 +114,10 @@ static inline int down_trylock(struct se
+@@ -91,9 +113,10 @@ static inline int down_trylock(struct se
   * The default case (no contention) will result in NO
   * jumps for both down() and up().
   */
@@ -19666,104 +19795,115 @@
  
  #define CPU_ARCH_UNKNOWN      0
  #define CPU_ARCH_ARMv3                1
-@@ -186,7 +187,7 @@ static inline void sched_cacheflush(void
-  */
- #if __LINUX_ARM_ARCH__ >= 6
+@@ -181,72 +182,10 @@ static inline void sched_cacheflush(void
+ {
+ }
  
+-/*
+- * CPU interrupt mask handling.
+- */
+ #if __LINUX_ARM_ARCH__ >= 6
+-
 -#define local_irq_save(x)                                     \
-+#define raw_local_irq_save(x)                                 \
-       ({                                                      \
-       __asm__ __volatile__(                                   \
-       "mrs    %0, cpsr                @ local_irq_save\n"     \
-@@ -194,17 +195,17 @@ static inline void sched_cacheflush(void
-       : "=r" (x) : : "memory", "cc");                         \
-       })
- 
+-      ({                                                      \
+-      __asm__ __volatile__(                                   \
+-      "mrs    %0, cpsr                @ local_irq_save\n"     \
+-      "cpsid  i"                                              \
+-      : "=r" (x) : : "memory", "cc");                         \
+-      })
+-
 -#define local_irq_enable()  __asm__("cpsie i  @ __sti" : : : "memory", "cc")
 -#define local_irq_disable() __asm__("cpsid i  @ __cli" : : : "memory", "cc")
 -#define local_fiq_enable()  __asm__("cpsie f  @ __stf" : : : "memory", "cc")
 -#define local_fiq_disable() __asm__("cpsid f  @ __clf" : : : "memory", "cc")
-+#define raw_local_irq_enable()  __asm__("cpsie i      @ __sti" : : : 
"memory", "cc")
-+#define raw_local_irq_disable() __asm__("cpsid i      @ __cli" : : : 
"memory", "cc")
+-
 +#define raw_local_fiq_enable()  __asm__("cpsie f      @ __stf" : : : 
"memory", "cc")
 +#define raw_local_fiq_disable() __asm__("cpsid f      @ __clf" : : : 
"memory", "cc")
- 
  #else
- 
- /*
-  * Save the current interrupt enable state & disable IRQs
-  */
+-
+-/*
+- * Save the current interrupt enable state & disable IRQs
+- */
 -#define local_irq_save(x)                                     \
-+#define raw_local_irq_save(x)                                 \
-       ({                                                      \
-               unsigned long temp;                             \
-               (void) (&temp == &x);                           \
-@@ -216,11 +217,11 @@ static inline void sched_cacheflush(void
-       :                                                       \
-       : "memory", "cc");                                      \
-       })
+-      ({                                                      \
+-              unsigned long temp;                             \
+-              (void) (&temp == &x);                           \
+-      __asm__ __volatile__(                                   \
+-      "mrs    %0, cpsr                @ local_irq_save\n"     \
+-"     orr     %1, %0, #128\n"                                 \
+-"     msr     cpsr_c, %1"                                     \
+-      : "=r" (x), "=r" (temp)                                 \
+-      :                                                       \
+-      : "memory", "cc");                                      \
+-      })
 -      
-+
- /*
-  * Enable IRQs
-  */
+-/*
+- * Enable IRQs
+- */
 -#define local_irq_enable()                                    \
-+#define raw_local_irq_enable()                                \
-       ({                                                      \
-               unsigned long temp;                             \
-       __asm__ __volatile__(                                   \
-@@ -235,7 +236,7 @@ static inline void sched_cacheflush(void
- /*
-  * Disable IRQs
-  */
+-      ({                                                      \
+-              unsigned long temp;                             \
+-      __asm__ __volatile__(                                   \
+-      "mrs    %0, cpsr                @ local_irq_enable\n"   \
+-"     bic     %0, %0, #128\n"                                 \
+-"     msr     cpsr_c, %0"                                     \
+-      : "=r" (temp)                                           \
+-      :                                                       \
+-      : "memory", "cc");                                      \
+-      })
+-
+-/*
+- * Disable IRQs
+- */
 -#define local_irq_disable()                                   \
-+#define raw_local_irq_disable()                               \
-       ({                                                      \
-               unsigned long temp;                             \
-       __asm__ __volatile__(                                   \
-@@ -282,7 +283,7 @@ static inline void sched_cacheflush(void
+-      ({                                                      \
+-              unsigned long temp;                             \
+-      __asm__ __volatile__(                                   \
+-      "mrs    %0, cpsr                @ local_irq_disable\n"  \
+-"     orr     %0, %0, #128\n"                                 \
+-"     msr     cpsr_c, %0"                                     \
+-      : "=r" (temp)                                           \
+-      :                                                       \
+-      : "memory", "cc");                                      \
+-      })
+-
  /*
-  * Save the current interrupt enable state.
+  * Enable FIQs
   */
+@@ -279,32 +218,7 @@ static inline void sched_cacheflush(void
+ 
+ #endif
+ 
+-/*
+- * Save the current interrupt enable state.
+- */
 -#define local_save_flags(x)                                   \
-+#define raw_local_save_flags(x)                               \
-       ({                                                      \
-       __asm__ __volatile__(                                   \
-       "mrs    %0, cpsr                @ local_save_flags"     \
-@@ -292,20 +293,27 @@ static inline void sched_cacheflush(void
- /*
-  * restore saved IRQ & FIQ state
-  */
+-      ({                                                      \
+-      __asm__ __volatile__(                                   \
+-      "mrs    %0, cpsr                @ local_save_flags"     \
+-      : "=r" (x) : : "memory", "cc");                         \
+-      })
+-
+-/*
+- * restore saved IRQ & FIQ state
+- */
 -#define local_irq_restore(x)                                  \
-+#define raw_local_irq_restore(x)                              \
-       __asm__ __volatile__(                                   \
-       "msr    cpsr_c, %0              @ local_irq_restore\n"  \
-       :                                                       \
-       : "r" (x)                                               \
-       : "memory", "cc")
- 
+-      __asm__ __volatile__(                                   \
+-      "msr    cpsr_c, %0              @ local_irq_restore\n"  \
+-      :                                                       \
+-      : "r" (x)                                               \
+-      : "memory", "cc")
+-
 -#define irqs_disabled()                       \
 -({                                    \
 -      unsigned long flags;            \
 -      local_save_flags(flags);        \
 -      (int)(flags & PSR_I_BIT);       \
-+#define raw_irqs_disabled_flags(flags)        \
-+({                                            \
-+      (int)(flags & PSR_I_BIT);               \
-+})
-+
-+#define raw_irqs_disabled()                   \
-+({                                            \
-+      unsigned long flags;                    \
-+      raw_local_save_flags(flags);            \
-+      raw_irqs_disabled_flags(flags); \
- })
- 
+-})
 +#include <linux/trace_irqflags.h>
-+
+ 
  #ifdef CONFIG_SMP
  
- #define smp_mb()              mb()
 Index: linux/include/asm-arm/thread_info.h
 ===================================================================
 --- linux.orig/include/asm-arm/thread_info.h
@@ -19939,14 +20079,21 @@
 ===================================================================
 --- linux.orig/include/asm-arm/unistd.h
 +++ linux/include/asm-arm/unistd.h
-@@ -533,6 +533,10 @@ type name(type1 arg1, type2 arg2, type3 
+@@ -361,6 +361,9 @@
+ #define __NR_get_mempolicy            (__NR_SYSCALL_BASE+320)
+ #define __NR_set_mempolicy            (__NR_SYSCALL_BASE+321)
+ 
++// FIXME: check this number ...
++#define NR_syscalls                   322
++
+ /*
+  * The following SWIs are ARM private.
+  */
+@@ -533,6 +536,7 @@ type name(type1 arg1, type2 arg2, type3 
  #define __ARCH_WANT_OLD_READDIR
  #define __ARCH_WANT_SYS_SOCKETCALL
  #endif
 +
-+// FIXME: check this number ...
-+#define NR_syscalls   328
-+
  #endif
  
  #ifdef __KERNEL_SYSCALLS__
@@ -26785,7 +26932,7 @@
 ===================================================================
 --- /dev/null
 +++ linux/include/linux/plist.h
-@@ -0,0 +1,247 @@
+@@ -0,0 +1,248 @@
 +/*
 + * Descending-priority-sorted double-linked list
 + *
@@ -26861,6 +27008,7 @@
 +#ifndef _LINUX_PLIST_H_
 +#define _LINUX_PLIST_H_
 +
++#include <linux/kernel.h>
 +#include <linux/list.h>
 +#include <linux/spinlock_types.h>
 +
@@ -31519,7 +31667,7 @@
        if (err >= 0) {
                key->shared.pgoff =
                        page->index << (PAGE_CACHE_SHIFT - PAGE_SHIFT);
-@@ -242,18 +279,246 @@ static void drop_key_refs(union futex_ke
+@@ -242,18 +279,254 @@ static void drop_key_refs(union futex_ke
        }
  }
  
@@ -31718,11 +31866,19 @@
 +
 +      list_for_each_entry_safe(this, next, head, list) {
 +              if (match_futex (&this->key, &me->key)) {
-+                      /*
-+                       * Another waiter already exists - bump up
-+                       * the refcount and return its pi_state:
-+                       */
++                      /* Another waiter already exists */
 +                      pi_state = this->pi_state;
++
++                      /* make sure its a PI waiter: */
++                      if (unlikely(!pi_state)) {
++#ifdef CONFIG_DEBUG_RT_MUTEXES
++                              if (printk_ratelimit())
++                                      printk("BUG: %s/%d: Mixing PI and 
non-PI futexes!\n",
++                                              current->comm, current->pid);
++#endif
++                              return -EINVAL;
++                      }
++                      /* bump up the refcount and return its pi_state: */
 +                      atomic_inc(&pi_state->refcount);
 +                      me->pi_state = pi_state;
 +                      pr_debug("Waiter found: %d\n",
@@ -31768,7 +31924,7 @@
   * The hash bucket lock must be held when this is called.
   * Afterwards, the futex_q must not be accessed.
   */
-@@ -280,16 +545,85 @@ static void wake_futex(struct futex_q *q
+@@ -280,16 +553,85 @@ static void wake_futex(struct futex_q *q
        q->lock_ptr = NULL;
  }
  
@@ -31858,7 +32014,7 @@
        int ret;
  
        down_read(&current->mm->mmap_sem);
-@@ -298,19 +632,21 @@ static int futex_wake(unsigned long uadd
+@@ -298,19 +640,27 @@ static int futex_wake(unsigned long uadd
        if (unlikely(ret != 0))
                goto out;
  
@@ -31871,8 +32027,14 @@
  
        list_for_each_entry_safe(this, next, head, list) {
                if (match_futex (&this->key, &key)) {
-+                      if (this->pi_state)
-+                              return -EINVAL;
++                      /*
++                       * Mixing of PI-aware and PI-unaware
++                       * waiters is invalid:
++                       */
++                      if (unlikely(this->pi_state)) {
++                              ret = -EINVAL;
++                              break;
++                      }
                        wake_futex(this);
                        if (++ret >= nr_wake)
                                break;
@@ -31884,7 +32046,7 @@
  out:
        up_read(&current->mm->mmap_sem);
        return ret;
-@@ -320,10 +656,12 @@ out:
+@@ -320,10 +670,12 @@ out:
   * Wake up all waiters hashed on the physical page that is mapped
   * to this virtual address:
   */
@@ -31899,7 +32061,7 @@
        struct list_head *head;
        struct futex_q *this, *next;
        int ret, op_ret, attempt = 0;
-@@ -338,27 +676,29 @@ retryfull:
+@@ -338,27 +690,29 @@ retryfull:
        if (unlikely(ret != 0))
                goto out;
  
@@ -31943,7 +32105,7 @@
                ret = op_ret;
                goto out;
  #endif
-@@ -368,47 +708,34 @@ retry:
+@@ -368,47 +722,34 @@ retry:
                        goto out;
                }
  
@@ -31965,7 +32127,9 @@
 -                          !(vma = find_vma(mm, uaddr2)) ||
 -                          vma->vm_start > uaddr2 ||
 -                          !(vma->vm_flags & VM_WRITE))
--                              goto out;
++                      if (futex_handle_fault((unsigned long)uaddr2,
<<Diff was trimmed, longer than 597 lines>>

---- CVS-web:
    
http://cvs.pld-linux.org/SOURCES/kernel-desktop-preempt-rt.patch?r1=1.4&r2=1.5&f=u

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to