SOURCES: kernel-desktop-preempt-rt.patch - updated to patch-2.6.16...

sparky sparky at pld-linux.org
Wed May 3 23:55:40 CEST 2006


Author: sparky                       Date: Wed May  3 21:55:40 2006 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- updated to patch-2.6.16-rt20 (merged 18->20 changes)

---- Files affected:
SOURCES:
   kernel-desktop-preempt-rt.patch (1.2 -> 1.3) 

---- Diffs:

================================================================
Index: SOURCES/kernel-desktop-preempt-rt.patch
diff -u SOURCES/kernel-desktop-preempt-rt.patch:1.2 SOURCES/kernel-desktop-preempt-rt.patch:1.3
--- SOURCES/kernel-desktop-preempt-rt.patch:1.2	Mon May  1 17:15:04 2006
+++ SOURCES/kernel-desktop-preempt-rt.patch	Wed May  3 23:55:34 2006
@@ -789,6 +789,44 @@
 +	passes through a grace period.  The last entry should be zero,
 +	as it is only incremented if a torture structure's counter
 +	somehow gets incremented farther than it should.
+Index: linux/Documentation/RCU/whatisRCU.txt
+===================================================================
+--- linux.orig/Documentation/RCU/whatisRCU.txt
++++ linux/Documentation/RCU/whatisRCU.txt
+@@ -790,7 +790,6 @@ RCU pointer update:
+ 
+ RCU grace period:
+ 
+-	synchronize_kernel (deprecated)
+ 	synchronize_net
+ 	synchronize_sched
+ 	synchronize_rcu
+Index: linux/Documentation/feature-removal-schedule.txt
+===================================================================
+--- linux.orig/Documentation/feature-removal-schedule.txt
++++ linux/Documentation/feature-removal-schedule.txt
+@@ -32,21 +32,6 @@ Who:	Adrian Bunk <bunk at stusta.de>
+ 
+ ---------------------------
+ 
+-What:	RCU API moves to EXPORT_SYMBOL_GPL
+-When:	April 2006
+-Files:	include/linux/rcupdate.h, kernel/rcupdate.c
+-Why:	Outside of Linux, the only implementations of anything even
+-	vaguely resembling RCU that I am aware of are in DYNIX/ptx,
+-	VM/XA, Tornado, and K42.  I do not expect anyone to port binary
+-	drivers or kernel modules from any of these, since the first two
+-	are owned by IBM and the last two are open-source research OSes.
+-	So these will move to GPL after a grace period to allow
+-	people, who might be using implementations that I am not aware
+-	of, to adjust to this upcoming change.
+-Who:	Paul E. McKenney <paulmck at us.ibm.com>
+-
+----------------------------
+-
+ What:	raw1394: requests of type RAW1394_REQ_ISO_SEND, RAW1394_REQ_ISO_LISTEN
+ When:	November 2005
+ Why:	Deprecated in favour of the new ioctl-based rawiso interface, which is
 Index: linux/Documentation/kernel-parameters.txt
 ===================================================================
 --- linux.orig/Documentation/kernel-parameters.txt
@@ -18288,15 +18326,6 @@
  	return;
  }
  
-@@ -1332,7 +1326,7 @@ struct bh_lru {
- 
- static DEFINE_PER_CPU(struct bh_lru, bh_lrus) = {{ NULL }};
- 
--#ifdef CONFIG_SMP
-+#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT)
- #define bh_lru_lock()	local_irq_disable()
- #define bh_lru_unlock()	local_irq_enable()
- #else
 @@ -3160,6 +3154,8 @@ EXPORT_SYMBOL(alloc_buffer_head);
  void free_buffer_head(struct buffer_head *bh)
  {
@@ -25196,7 +25225,7 @@
 + */
 +#define ROBUST_LIST_LIMIT	2048
 +
-+long do_futex(u32 __user *uaddr, int op, u32 val, unsigned long timeout,
++long do_futex(u32 __user *uaddr, int op, u32 val, struct timespec *timeout,
 +	      u32 __user *uaddr2, u32 val2, u32 val3);
 +
 +extern int handle_futex_death(u32 __user *uaddr, struct task_struct *curr);
@@ -25599,10 +25628,11 @@
  	.policy		= SCHED_NORMAL,					\
  	.cpus_allowed	= CPU_MASK_ALL,					\
  	.mm		= NULL,						\
-@@ -121,6 +123,7 @@ extern struct group_info init_groups;
+@@ -121,6 +123,8 @@ extern struct group_info init_groups;
  	.journal_info	= NULL,						\
  	.cpu_timers	= INIT_CPU_TIMERS(tsk.cpu_timers),		\
  	.fs_excl	= ATOMIC_INIT(0),				\
++	.posix_timer_list = NULL,					\
 +	INIT_RT_MUTEXES(tsk)						\
  }
  
@@ -27003,6 +27033,17 @@
 +}
 +
 +#endif
+Index: linux/include/linux/posix-timers.h
+===================================================================
+--- linux.orig/include/linux/posix-timers.h
++++ linux/include/linux/posix-timers.h
+@@ -110,5 +110,5 @@ void posix_cpu_timers_exit_group(struct 
+ 
+ void set_process_cpu_timer(struct task_struct *task, unsigned int clock_idx,
+ 			   cputime_t *newval, cputime_t *oldval);
+-
++int posix_cpu_thread_init(void);
+ #endif
 Index: linux/include/linux/preempt.h
 ===================================================================
 --- linux.orig/include/linux/preempt.h
@@ -27261,7 +27302,14 @@
  
  /**
   * rcu_dereference - fetch an RCU-protected pointer in an
-@@ -253,7 +274,13 @@ extern int rcu_pending(int cpu);
+@@ -247,13 +268,19 @@ extern int rcu_pending(int cpu);
+  * softirq handlers will have completed, since in some kernels, these
+  * handlers can run in process context, and can block.
+  *
+- * This primitive provides the guarantees made by the (deprecated)
++ * This primitive provides the guarantees made by the (now removed)
+  * synchronize_kernel() API.  In contrast, synchronize_rcu() only
+  * guarantees that rcu_read_lock() sections will have completed.
   * In "classic RCU", these two guarantees happen to be one and
   * the same, but can differ in realtime RCU implementations.
   */
@@ -27275,8 +27323,11 @@
  
  extern void rcu_init(void);
  extern void rcu_check_callbacks(int cpu, int user);
-@@ -268,7 +295,6 @@ extern void FASTCALL(call_rcu_bh(struct 
- extern __deprecated_for_modules void synchronize_kernel(void);
+@@ -265,10 +292,8 @@ extern void FASTCALL(call_rcu(struct rcu
+ 				void (*func)(struct rcu_head *head)));
+ extern void FASTCALL(call_rcu_bh(struct rcu_head *head,
+ 				void (*func)(struct rcu_head *head)));
+-extern __deprecated_for_modules void synchronize_kernel(void);
  extern void synchronize_rcu(void);
  void synchronize_idle(void);
 -extern void rcu_barrier(void);
@@ -28175,7 +28226,16 @@
  #ifdef CONFIG_SCHEDSTATS
  	struct sched_info sched_info;
  #endif
-@@ -828,11 +977,51 @@ struct task_struct {
+@@ -773,6 +922,8 @@ struct task_struct {
+ 	unsigned long long it_sched_expires;
+ 	struct list_head cpu_timers[3];
+ 
++	struct task_struct* posix_timer_list;
++
+ /* process credentials */
+ 	uid_t uid,euid,suid,fsuid;
+ 	gid_t gid,egid,sgid,fsgid;
+@@ -828,11 +979,51 @@ struct task_struct {
  /* Protection of proc_dentry: nesting proc_lock, dcache_lock, write_lock_irq(&tasklist_lock); */
  	spinlock_t proc_lock;
  
@@ -28227,7 +28287,7 @@
  /* journalling filesystem info */
  	void *journal_info;
  
-@@ -869,6 +1058,13 @@ struct task_struct {
+@@ -869,6 +1060,13 @@ struct task_struct {
  	nodemask_t mems_allowed;
  	int cpuset_mems_generation;
  #endif
@@ -28241,7 +28301,7 @@
  	atomic_t fs_excl;	/* holding fs exclusive resources */
  	struct rcu_head rcu;
  };
-@@ -928,6 +1124,11 @@ static inline void put_task_struct(struc
+@@ -928,6 +1126,11 @@ static inline void put_task_struct(struc
  #define PF_BORROWED_MM	0x00400000	/* I am a kthread doing use_mm */
  #define PF_RANDOMIZE	0x00800000	/* randomize virtual address space */
  #define PF_SWAPWRITE	0x01000000	/* Allowed to write to swap */
@@ -28253,7 +28313,7 @@
  
  /*
   * Only the _current_ task can read/write to tsk->flags, but other
-@@ -982,6 +1183,17 @@ static inline void idle_task_exit(void) 
+@@ -982,6 +1185,17 @@ static inline void idle_task_exit(void) 
  #endif
  
  extern void sched_idle_next(void);
@@ -28271,7 +28331,7 @@
  extern void set_user_nice(task_t *p, long nice);
  extern int task_prio(const task_t *p);
  extern int task_nice(const task_t *p);
-@@ -989,11 +1201,13 @@ extern int can_nice(const task_t *p, con
+@@ -989,11 +1203,13 @@ extern int can_nice(const task_t *p, con
  extern int task_curr(const task_t *p);
  extern int idle_cpu(int cpu);
  extern int sched_setscheduler(struct task_struct *, int, struct sched_param *);
@@ -28285,7 +28345,7 @@
  
  /*
   * The default (Linux) execution domain.
-@@ -1041,6 +1255,9 @@ extern void do_timer(struct pt_regs *);
+@@ -1041,6 +1257,9 @@ extern void do_timer(struct pt_regs *);
  
  extern int FASTCALL(wake_up_state(struct task_struct * tsk, unsigned int state));
  extern int FASTCALL(wake_up_process(struct task_struct * tsk));
@@ -28295,7 +28355,7 @@
  extern void FASTCALL(wake_up_new_task(struct task_struct * tsk,
  						unsigned long clone_flags));
  #ifdef CONFIG_SMP
-@@ -1128,12 +1345,20 @@ extern struct mm_struct * mm_alloc(void)
+@@ -1128,12 +1347,20 @@ extern struct mm_struct * mm_alloc(void)
  
  /* mmdrop drops the mm and the page tables */
  extern void FASTCALL(__mmdrop(struct mm_struct *));
@@ -28316,7 +28376,7 @@
  /* mmput gets rid of the mappings and all user-space */
  extern void mmput(struct mm_struct *);
  /* Grab a reference to a task's mm, if it is not already going away */
-@@ -1297,43 +1522,97 @@ static inline int signal_pending(struct 
+@@ -1297,43 +1524,97 @@ static inline int signal_pending(struct 
  	return unlikely(test_tsk_thread_flag(p,TIF_SIGPENDING));
  }
    
@@ -28430,7 +28490,7 @@
  /* Reevaluate whether the task has signals pending delivery.
     This is required every time the blocked sigset_t changes.
     callers must hold sighand->siglock.  */
-@@ -1355,6 +1634,7 @@ static inline unsigned int task_cpu(cons
+@@ -1355,6 +1636,7 @@ static inline unsigned int task_cpu(cons
  
  static inline void set_task_cpu(struct task_struct *p, unsigned int cpu)
  {
@@ -29892,7 +29952,7 @@
 +extern int timeofday_is_continuous(void);
 +extern u32 timeofday_get_clockres(void);
 +extern void timeofday_init(void);
-+
++extern void timeofday_overflow_protection(void);
 +#ifndef CONFIG_IS_TICK_BASED
 +#define arch_getoffset() (0)
 +#else
@@ -30397,7 +30457,7 @@
  		if (msg) {
  			printk(KERN_WARNING "error in initcall at 0x%p: "
  				"returned with %s\n", *call, msg);
-@@ -618,6 +642,7 @@ static void __init do_basic_setup(void)
+@@ -618,13 +642,16 @@ static void __init do_basic_setup(void)
  static void do_pre_smp_initcalls(void)
  {
  	extern int spawn_ksoftirqd(void);
@@ -30405,15 +30465,16 @@
  #ifdef CONFIG_SMP
  	extern int migration_init(void);
  
-@@ -625,6 +650,7 @@ static void do_pre_smp_initcalls(void)
+ 	migration_init();
  #endif
++	posix_cpu_thread_init();
  	spawn_ksoftirqd();
  	spawn_softlockup_task();
 +	spawn_desched_task();
  }
  
  static void run_init_process(char *init_filename)
-@@ -670,6 +696,8 @@ static int init(void * unused)
+@@ -670,6 +697,8 @@ static int init(void * unused)
  
  	smp_prepare_cpus(max_cpus);
  
@@ -30422,12 +30483,12 @@
  	do_pre_smp_initcalls();
  
  	fixup_cpu_present_map();
-@@ -698,7 +726,51 @@ static int init(void * unused)
+@@ -698,7 +727,51 @@ static int init(void * unused)
  		ramdisk_execute_command = NULL;
  		prepare_namespace();
  	}
 +#ifdef CONFIG_PREEMPT_RT
-+	WARN_ON(irqs_disabled() || irqs_disabled());
++	WARN_ON(irqs_disabled());
 +#endif
  
 +#define DEBUG_COUNT (defined(CONFIG_DEBUG_RT_MUTEXES) + defined(CONFIG_DEBUG_PREEMPT) + defined(CONFIG_CRITICAL_PREEMPT_TIMING) + defined(CONFIG_CRITICAL_IRQSOFF_TIMING) + defined(CONFIG_LATENCY_TRACE) + defined(CONFIG_DEBUG_SLAB) + defined(CONFIG_DEBUG_PAGEALLOC))
@@ -30474,12 +30535,12 @@
  	/*
  	 * Ok, we have completed the initial bootup, and
  	 * we're essentially up and running. Get rid of the
-@@ -721,6 +793,9 @@ static int init(void * unused)
+@@ -721,6 +794,9 @@ static int init(void * unused)
  		printk(KERN_WARNING "Failed to execute %s\n",
  				ramdisk_execute_command);
  	}
 +#ifdef CONFIG_PREEMPT_RT
-+	WARN_ON(irqs_disabled() || irqs_disabled());
++	WARN_ON(irqs_disabled());
 +#endif
  
  	/*
@@ -31128,6 +31189,15 @@
  /*
   * This creates a new process as a copy of the old one,
   * but does not actually start it yet.
+@@ -1005,7 +1061,7 @@ static task_t *copy_process(unsigned lon
+  	INIT_LIST_HEAD(&p->cpu_timers[0]);
+  	INIT_LIST_HEAD(&p->cpu_timers[1]);
+  	INIT_LIST_HEAD(&p->cpu_timers[2]);
+-
++	p->posix_timer_list = NULL;
+ 	p->lock_depth = -1;		/* -1 = no lock */
+ 	do_posix_clock_monotonic_gettime(&p->start_time);
+ 	p->security = NULL;
 @@ -1022,6 +1078,8 @@ static task_t *copy_process(unsigned lon
   	}
  #endif
@@ -31321,16 +31391,17 @@
   *  Thanks to Ben LaHaise for yelling "hashed waitqueues" loudly
   *  enough at me, Linus for the original (flawed) idea, Matthew
   *  Kirkwood for proof-of-concept implementation.
-@@ -42,6 +50,8 @@
+@@ -41,6 +49,9 @@
+ #include <linux/syscalls.h>
  #include <linux/signal.h>
  #include <asm/futex.h>
- 
-+#include "rtmutex_common.h"
++#include <linux/hrtimer.h>
 +
++#include "rtmutex_common.h"
+ 
  #define FUTEX_HASHBITS (CONFIG_BASE_SMALL ? 4 : 8)
  
- /*
-@@ -59,7 +69,7 @@ union futex_key {
+@@ -59,7 +70,7 @@ union futex_key {
  		int offset;
  	} shared;
  	struct {
@@ -31339,7 +31410,7 @@
  		struct mm_struct *mm;
  		int offset;
  	} private;
-@@ -71,6 +81,27 @@ union futex_key {
+@@ -71,6 +82,27 @@ union futex_key {
  };
  
  /*
@@ -31367,7 +31438,7 @@
   * We use this hashed waitqueue instead of a normal wait_queue_t, so
   * we can wake only the relevant ones (hashed queues may be shared).
   *
-@@ -83,15 +114,19 @@ struct futex_q {
+@@ -83,15 +115,19 @@ struct futex_q {
  	struct list_head list;
  	wait_queue_head_t waiters;
  
@@ -31390,7 +31461,7 @@
  };
  
  /*
-@@ -140,8 +175,9 @@ static inline int match_futex(union fute
+@@ -140,8 +176,9 @@ static inline int match_futex(union fute
   *
   * Should be called with &current->mm->mmap_sem but NOT any spinlocks.
   */
@@ -31401,7 +31472,7 @@
  	struct mm_struct *mm = current->mm;
  	struct vm_area_struct *vma;
  	struct page *page;
-@@ -150,16 +186,16 @@ static int get_futex_key(unsigned long u
+@@ -150,16 +187,16 @@ static int get_futex_key(unsigned long u
  	/*
  	 * The futex address must be "naturally" aligned.
  	 */
@@ -31421,7 +31492,7 @@
  	if (unlikely(!vma))
  		return -EFAULT;
  
-@@ -180,7 +216,7 @@ static int get_futex_key(unsigned long u
+@@ -180,7 +217,7 @@ static int get_futex_key(unsigned long u
  	 */
  	if (likely(!(vma->vm_flags & VM_MAYSHARE))) {
  		key->private.mm = mm;
@@ -31430,7 +31501,7 @@
  		return 0;
  	}
  
-@@ -190,7 +226,7 @@ static int get_futex_key(unsigned long u
+@@ -190,7 +227,7 @@ static int get_futex_key(unsigned long u
  	key->shared.inode = vma->vm_file->f_dentry->d_inode;
  	key->both.offset++; /* Bit 0 of offset indicates inode-based key. */
  	if (likely(!(vma->vm_flags & VM_NONLINEAR))) {
@@ -31439,7 +31510,7 @@
  				     + vma->vm_pgoff);
  		return 0;
  	}
-@@ -201,7 +237,7 @@ static int get_futex_key(unsigned long u
+@@ -201,7 +238,7 @@ static int get_futex_key(unsigned long u
  	 * from swap.  But that's a lot of code to duplicate here
  	 * for a rare case, so we simply fetch the page.
  	 */
@@ -31448,7 +31519,7 @@
  	if (err >= 0) {
  		key->shared.pgoff =
  			page->index << (PAGE_CACHE_SHIFT - PAGE_SHIFT);
-@@ -242,18 +278,246 @@ static void drop_key_refs(union futex_ke
+@@ -242,18 +279,246 @@ static void drop_key_refs(union futex_ke
  	}
  }
  
@@ -31697,7 +31768,7 @@
   * The hash bucket lock must be held when this is called.
   * Afterwards, the futex_q must not be accessed.
   */
-@@ -280,16 +544,85 @@ static void wake_futex(struct futex_q *q
+@@ -280,16 +545,85 @@ static void wake_futex(struct futex_q *q
  	q->lock_ptr = NULL;
  }
  
@@ -31787,7 +31858,7 @@
  	int ret;
  
  	down_read(&current->mm->mmap_sem);
-@@ -298,19 +631,21 @@ static int futex_wake(unsigned long uadd
+@@ -298,19 +632,21 @@ static int futex_wake(unsigned long uadd
  	if (unlikely(ret != 0))
  		goto out;
  
@@ -31813,7 +31884,7 @@
  out:
  	up_read(&current->mm->mmap_sem);
  	return ret;
-@@ -320,10 +655,12 @@ out:
+@@ -320,10 +656,12 @@ out:
   * Wake up all waiters hashed on the physical page that is mapped
   * to this virtual address:
   */
@@ -31828,7 +31899,7 @@
  	struct list_head *head;
  	struct futex_q *this, *next;
  	int ret, op_ret, attempt = 0;
-@@ -338,27 +675,29 @@ retryfull:
+@@ -338,27 +676,29 @@ retryfull:
  	if (unlikely(ret != 0))
  		goto out;
  
@@ -31872,7 +31943,7 @@
  		ret = op_ret;
  		goto out;
  #endif
-@@ -368,47 +707,34 @@ retry:
+@@ -368,47 +708,34 @@ retry:
  			goto out;
  		}
  
@@ -31894,9 +31965,7 @@
 -			    !(vma = find_vma(mm, uaddr2)) ||
 -			    vma->vm_start > uaddr2 ||
 -			    !(vma->vm_flags & VM_WRITE))
-+			if (futex_handle_fault((unsigned long)uaddr2,
-+					       attempt))
- 				goto out;
+-				goto out;
 -
 -			switch (handle_mm_fault(mm, vma, uaddr2, 1)) {
 -			case VM_FAULT_MINOR:
@@ -31906,7 +31975,9 @@
 -				current->maj_flt++;
 -				break;
 -			default:
--				goto out;
++			if (futex_handle_fault((unsigned long)uaddr2,
++					       attempt))
+ 				goto out;
 -			}
  			goto retry;
  		}
@@ -31932,7 +32003,7 @@
  
  	list_for_each_entry_safe(this, next, head, list) {
  		if (match_futex (&this->key, &key1)) {
-@@ -419,7 +745,7 @@ retry:
+@@ -419,7 +746,7 @@ retry:
  	}
  
  	if (op_ret > 0) {
@@ -31941,7 +32012,7 @@
  
  		op_ret = 0;
  		list_for_each_entry_safe(this, next, head, list) {
-@@ -432,9 +758,9 @@ retry:
+@@ -432,9 +759,9 @@ retry:
  		ret += op_ret;
  	}
  
@@ -31954,7 +32025,7 @@
  out:
  	up_read(&current->mm->mmap_sem);
  	return ret;
-@@ -444,11 +770,11 @@ out:
+@@ -444,11 +771,11 @@ out:
   * Requeue all waiters hashed on one physical page to another
   * physical page.
   */
@@ -31969,7 +32040,7 @@
  	struct list_head *head1;
  	struct futex_q *this, *next;
  	int ret, drop_count = 0;
-@@ -463,68 +789,69 @@ static int futex_requeue(unsigned long u
+@@ -463,68 +790,69 @@ static int futex_requeue(unsigned long u
  	if (unlikely(ret != 0))
  		goto out;
  
@@ -32063,7 +32134,7 @@
  
  	/* drop_key_refs() must be called outside the spinlocks. */
  	while (--drop_count >= 0)
-@@ -539,7 +866,7 @@ out:
+@@ -539,7 +867,7 @@ out:
  static inline struct futex_hash_bucket *
  queue_lock(struct futex_q *q, int fd, struct file *filp)
  {
@@ -32072,7 +32143,7 @@
  
  	q->fd = fd;
  	q->filp = filp;
-@@ -547,23 +874,24 @@ queue_lock(struct futex_q *q, int fd, st
+@@ -547,23 +875,24 @@ queue_lock(struct futex_q *q, int fd, st
  	init_waitqueue_head(&q->waiters);
  
  	get_key_refs(&q->key);
@@ -32106,7 +32177,7 @@
  	drop_key_refs(&q->key);
  }
  
-@@ -575,16 +903,17 @@ queue_unlock(struct futex_q *q, struct f
+@@ -575,16 +904,17 @@ queue_unlock(struct futex_q *q, struct f
  /* The key must be already stored in q->key. */
  static void queue_me(struct futex_q *q, int fd, struct file *filp)
  {
@@ -32128,7 +32199,7 @@
  
  	/* In the common case we don't take the spinlock, which is nice. */
   retry:
-@@ -610,6 +939,9 @@ static int unqueue_me(struct futex_q *q)
+@@ -610,6 +940,9 @@ static int unqueue_me(struct futex_q *q)
  		}
  		WARN_ON(list_empty(&q->list));
  		list_del(&q->list);
@@ -32138,7 +32209,7 @@
  		spin_unlock(lock_ptr);
  		ret = 1;
  	}
-@@ -618,21 +950,42 @@ static int unqueue_me(struct futex_q *q)
+@@ -618,21 +951,44 @@ static int unqueue_me(struct futex_q *q)
  	return ret;
  }
  
@@ -32148,9 +32219,7 @@
 + * hash bucket. The hash bucket lock is held on entry and dropped here.
 + */
 +static void unqueue_me_pi(struct futex_q *q, struct futex_hash_bucket *hb)
- {
--	DECLARE_WAITQUEUE(wait, current);
--	int ret, curval;
++{
 +	WARN_ON(list_empty(&q->list));
 +	list_del(&q->list);
 +
@@ -32163,8 +32232,10 @@
 +	drop_key_refs(&q->key);
 +}
 +
-+static int futex_wait(u32 __user *uaddr, u32 val, unsigned long time)
-+{
++static int futex_wait(u32 __user *uaddr, u32 val, struct timespec *time)
+ {
+-	DECLARE_WAITQUEUE(wait, current);
+-	int ret, curval;
 +	struct task_struct *curr = current;
 +	DECLARE_WAITQUEUE(wait, curr);
 +	struct futex_hash_bucket *hb;
@@ -32172,6 +32243,8 @@
 -	struct futex_hash_bucket *bh;
 +	u32 uval;
 +	int ret;
++	struct hrtimer_sleeper t;
++	int rem = 0;
  
 +	q.pi_state = NULL;
   retry:
@@ -32187,7 +32260,7 @@
  
  	/*
  	 * Access the page AFTER the futex is queued.
-@@ -654,37 +1007,35 @@ static int futex_wait(unsigned long uadd
+@@ -654,37 +1010,35 @@ static int futex_wait(unsigned long uadd
  	 * We hold the mmap semaphore, so the mapping cannot have changed
  	 * since we looked it up in get_futex_key.
  	 */
@@ -32237,24 +32310,52 @@
  
  	/*
<<Diff was trimmed, longer than 597 lines>>

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



More information about the pld-cvs-commit mailing list