1. 07 Jan, 2006 6 commits
    • Russell King's avatar
      Merge with Linus' kernel. · 123656d4
      Russell King authored
      123656d4
    • Russell King's avatar
      [ARM] Move AMBA include files to include/linux/amba/ · a62c80e5
      Russell King authored
      Since the ARM AMBA bus is used on MIPS as well as ARM, we need
      to make the bus available for other architectures to use.  Move
      the AMBA include files from include/asm-arm/hardware/ to
      include/linux/amba/
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      a62c80e5
    • Andre McCurdy's avatar
      [ARM] 3239/1: Add ARM optimised swab32 · 6351610d
      Andre McCurdy authored
      Patch from Andre McCurdy
      
      Replaces generic swab32 routine with a more ARM friendly version.
      Reduces kernel text size by approx 1200 bytes when compiled with
      3.4.4 and approx 2400 bytes with 4.0.2
      
      Probably some performance benefit as well.
      Signed-off-by: default avatarAndre McCurdy <armccurdy@yahoo.co.uk>
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      6351610d
    • Richard Purdie's avatar
      [ARM] 3235/1: SharpSL PM: Fix a gcc4 build error · 2c041f4b
      Richard Purdie authored
      Patch from Richard Purdie
      
      Fix a gcc4 build error (incomplete element type) in the pxa SharpSL
      PM code.
      Signed-off-by: default avatarRichard Purdie <rpurdie@rpsys.net>
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      2c041f4b
    • Pavel Pisa's avatar
      [ARM] 3232/1: i.MX Frame Buffer undeclared "dev" variable fix · f99c8929
      Pavel Pisa authored
      Patch from Pavel Pisa
      
      Correction of the code broken by update
      whole-tree platform devices update.
      Signed-off-by: default avatarPavel Pisa <pisa@cmp.felk.cvut.cz>
      Signed-off-by: default avatarSascha Hauer <s.hauer@pengutronix.de>
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      f99c8929
    • David S. Miller's avatar
      [PATCH] Fix posix-cpu-timers sched_time accumulation · 0aec63e6
      David S. Miller authored
      I've spent the past 3 days digging into a glibc testsuite failure in
      current CVS, specifically libc/rt/tst-cputimer1.c The thr1 and thr2
      timers fire too early in the second pass of this test.  The second
      pass is noteworthy because it makes use of intervals, whereas the
      first pass does not.
      
      All throughout the posix-cpu-timers.c code, the calculation of the
      process sched_time sum is implemented roughly as:
      
      	unsigned long long sum;
      
      	sum = tsk->signal->sched_time;
      	t = tsk;
      	do {
      		sum += t->sched_time;
      		t = next_thread(t);
      	} while (t != tsk);
      
      In fact this is the exact scheme used by check_process_timers().
      
      In the case of check_process_timers(), current->sched_time has just
      been updated (via scheduler_tick(), which is invoked by
      update_process_times(), which subsequently invokes
      run_posix_cpu_timers()) So there is no special processing necessary
      wrt. that.
      
      In other contexts, we have to allot for the fact that tsk->sched_time
      might be a bit out of date if we are current.  And the
      posix-cpu-timers.c code uses current_sched_time() to deal with that.
      
      Unfortunately it does so in an erroneous and inconsistent manner in
      one spot which is what results in the early timer firing.
      
      In cpu_clock_sample_group_locked(), it does this:
      
      		cpu->sched = p->signal->sched_time;
      		/* Add in each other live thread.  */
      		while ((t = next_thread(t)) != p) {
      			cpu->sched += t->sched_time;
      		}
      		if (p->tgid == current->tgid) {
      			/*
      			 * We're sampling ourselves, so include the
      			 * cycles not yet banked.  We still omit
      			 * other threads running on other CPUs,
      			 * so the total can always be behind as
      			 * much as max(nthreads-1,ncpus) * (NSEC_PER_SEC/HZ).
      			 */
      			cpu->sched += current_sched_time(current);
      		} else {
      			cpu->sched += p->sched_time;
      		}
      
      The problem is the "p->tgid == current->tgid" test.  If "p" is
      not current, and the tgids are the same, we will add the process
      t->sched_time twice into cpu->sched and omit "p"'s sched_time
      which is very very very wrong.
      
      posix-cpu-timers.c has a helper function, sched_ns(p) which takes care
      of this, so my fix is to use that here instead of this special tgid
      test.
      
      The fact that current can be one of the sub-threads of "p" points out
      that we could make things a little bit more accurate, perhaps by using
      sched_ns() on every thread we process in these loops.  It also points
      out that we don't use the most accurate value for threads in the group
      actively running other cpus (and this is mentioned in the comment).
      
      But that is a future enhancement, and this fix here definitely makes
      sense.
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      0aec63e6
  2. 06 Jan, 2006 34 commits