1. 11 4月, 2006 9 次提交
  2. 10 4月, 2006 1 次提交
    • J
      [PATCH] x86_64: Fix drift with HPET timer enabled · b20367a6
      Jordan Hargrave 提交于
      If the HPET timer is enabled, the clock can drift by ~3 seconds a day.
      This is due to the HPET timer not being initialized with the correct
      setting (still using PIT count).
      
      If HZ changes, this drift can become even more pronounced.
      
      HPET patch initializes tick_nsec with correct tick_nsec settings for
      HPET timer.
      
      Vojtech comments:
      
        "It's not entirely correct (it assumes the HPET ticks totally
         exactly), but it's significantly better than assuming the PIT error
         there."
      Signed-off-by: NAndi Kleen <ak@suse.de>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      b20367a6
  3. 02 4月, 2006 3 次提交
  4. 01 4月, 2006 27 次提交
    • K
      Fix comments: s/granuality/granularity/ · 8ba8e95e
      Kalin KOZHUHAROV 提交于
      I was grepping through the code and some `grep ganularity -R .` didn't
      catch what I thought. Then looking closer I saw the term "granuality"
      used in only four places (in comments) and granularity in many more
      places describing the same idea. Some other facts:
      
      dictionary.com does not know such a word
      define:granuality on google is not found (and pages for granuality are
      mostly related to patches to the kernel)
      it has not been discussed as a term on LKML, AFAICS (=Can Search)
      
      To be consistent, I think granularity should be used everywhere.
      Signed-off-by: NKalin KOZHUHAROV <kalin@thinrope.net>
      Signed-off-by: NAdrian Bunk <bunk@stusta.de>
      8ba8e95e
    • E
      BUG_ON() Conversion in kernel/printk.c · 8abd8e29
      Eric Sesterhenn 提交于
      this changes if() BUG(); constructs to BUG_ON() which is
      cleaner, contains unlikely() and can better optimized away.
      Signed-off-by: NEric Sesterhenn <snakebyte@gmx.de>
      Signed-off-by: NAdrian Bunk <bunk@stusta.de>
      8abd8e29
    • A
      help text: SOFTWARE_SUSPEND doesn't need ACPI · 3e6e952d
      Adrian Bunk 提交于
      The note that SOFTWARE_SUSPEND doesn't need APM is helpful, but nowadays
      the information that it doesn't need ACPI, too, is even more helpful.
      Signed-off-by: NAdrian Bunk <bunk@stusta.de>
      3e6e952d
    • K
      [PATCH] wrong error path in dup_fd() leading to oopses in RCU · 42862298
      Kirill Korotaev 提交于
      Wrong error path in dup_fd() - it should return NULL on error,
      not an address of already freed memory :/
      
      Triggered by OpenVZ stress test suite.
      
      What is interesting is that it was causing different oopses in RCU like
      below:
      Call Trace:
         [<c013492c>] rcu_do_batch+0x2c/0x80
         [<c0134bdd>] rcu_process_callbacks+0x3d/0x70
         [<c0126cf3>] tasklet_action+0x73/0xe0
         [<c01269aa>] __do_softirq+0x10a/0x130
         [<c01058ff>] do_softirq+0x4f/0x60
         =======================
         [<c0113817>] smp_apic_timer_interrupt+0x77/0x110
         [<c0103b54>] apic_timer_interrupt+0x1c/0x24
        Code:  Bad EIP value.
         <0>Kernel panic - not syncing: Fatal exception in interrupt
      Signed-Off-By: NPavel Emelianov <xemul@sw.ru>
      Signed-Off-By: NDmitry Mishin <dim@openvz.org>
      Signed-Off-By: NKirill Korotaev <dev@openvz.org>
      Signed-Off-By: NLinus Torvalds <torvalds@osdl.org>
      42862298
    • E
      [PATCH] pidhash: Refactor the pid hash table · 92476d7f
      Eric W. Biederman 提交于
      Simplifies the code, reduces the need for 4 pid hash tables, and makes the
      code more capable.
      
      In the discussions I had with Oleg it was felt that to a large extent the
      cleanup itself justified the work.  With struct pid being dynamically
      allocated meant we could create the hash table entry when the pid was
      allocated and free the hash table entry when the pid was freed.  Instead of
      playing with the hash lists when ever a process would attach or detach to a
      process.
      
      For myself the fact that it gave what my previous task_ref patch gave for free
      with simpler code was a big win.  The problem is that if you hold a reference
      to struct task_struct you lock in 10K of low memory.  If you do that in a user
      controllable way like /proc does, with an unprivileged but hostile user space
      application with typical resource limits of 1000 fds and 100 processes I can
      trigger the OOM killer by consuming all of low memory with task structs, on a
      machine wight 1GB of low memory.
      
      If I instead hold a reference to struct pid which holds a pointer to my
      task_struct, I don't suffer from that problem because struct pid is 2 orders
      of magnitude smaller.  In fact struct pid is small enough that most other
      kernel data structures dwarf it, so simply limiting the number of referring
      data structures is enough to prevent exhaustion of low memory.
      
      This splits the current struct pid into two structures, struct pid and struct
      pid_link, and reduces our number of hash tables from PIDTYPE_MAX to just one.
      struct pid_link is the per process linkage into the hash tables and lives in
      struct task_struct.  struct pid is given an indepedent lifetime, and holds
      pointers to each of the pid types.
      
      The independent life of struct pid simplifies attach_pid, and detach_pid,
      because we are always manipulating the list of pids and not the hash table.
      In addition in giving struct pid an indpendent life it makes the concept much
      more powerful.
      
      Kernel data structures can now embed a struct pid * instead of a pid_t and
      not suffer from pid wrap around problems or from keeping unnecessarily
      large amounts of memory allocated.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      92476d7f
    • E
      [PATCH] task: RCU protect task->usage · 8c7904a0
      Eric W. Biederman 提交于
      A big problem with rcu protected data structures that are also reference
      counted is that you must jump through several hoops to increase the reference
      count.  I think someone finally implemented atomic_inc_not_zero(&count) to
      automate the common case.  Unfortunately this means you must special case the
      rcu access case.
      
      When data structures are only visible via rcu in a manner that is not
      determined by the reference count on the object (i.e.  tasks are visible until
      their zombies are reaped) there is a much simpler technique we can employ.
      Simply delaying the decrement of the reference count until the rcu interval is
      over.
      
      What that means is that the proc code that looks up a task and later
      wants to sleep can now do:
      
      rcu_read_lock();
      task = find_task_by_pid(some_pid);
      if (task) {
      	get_task_struct(task);
      }
      rcu_read_unlock();
      
      The effect on the rest of the kernel is that put_task_struct becomes cheaper
      and immediate, and in the case where the task has been reaped it frees the
      task immediate instead of unnecessarily waiting an until the rcu interval is
      over.
      
      Cleanup of task_struct does not happen when its reference count drops to
      zero, instead cleanup happens when release_task is called.  Tasks can only
      be looked up via rcu before release_task is called.  All rcu protected
      members of task_struct are freed by release_task.
      
      Therefore we can move call_rcu from put_task_struct into release_task.  And
      we can modify release_task to not immediately release the reference count
      but instead have it call put_task_struct from the function it gives to
      call_rcu.
      
      The end result:
      
      - get_task_struct is safe in an rcu context where we have just looked
        up the task.
      
      - put_task_struct() simplifies into its old pre rcu self.
      
      This reorganization also makes put_task_struct uncallable from modules as
      it is not exported but it does not appear to be called from any modules so
      this should not be an issue, and is trivially fixed.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      8c7904a0
    • A
      [PATCH] resurrect __put_task_struct · 158d9ebd
      Andrew Morton 提交于
      This just got nuked in mainline.  Bring it back because Eric's patches use it.
      
      Cc: "Eric W. Biederman" <ebiederm@xmission.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      158d9ebd
    • E
      [PATCH] Make setsid() more robust · 390e2ff0
      Eric W. Biederman 提交于
      The core problem: setsid fails if it is called by init.  The effect in 2.6.16
      and the earlier kernels that have this problem is that if you do a "ps -j 1 or
      ps -ej 1" you will see that init and several of it's children have process
      group and session == 0.  Instead of process group == session == 1.  Despite
      init calling setsid.
      
      The reason it fails is that daemonize calls set_special_pids(1,1) on kernel
      threads that are launched before /sbin/init is called.
      
      The only remaining effect in that current->signal->leader == 0 for init
      instead of 1.  And the setsid call fails.  No one has noticed because
      /sbin/init does not check the return value of setsid.
      
      In 2.4 where we don't have the pidhash table, and daemonize doesn't exist
      setsid actually works for init.
      
      I care a lot about pid == 1 not being a special case that we leave broken,
      because of the container/jail work that I am doing.
      
      - Carefully allow init (pid == 1) to call setsid despite the kernel using
        its session.
      
      - Use find_task_by_pid instead of find_pid because find_pid taking a
        pidtype is going away.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      390e2ff0
    • T
      [PATCH] futex: check and validate timevals · 9741ef96
      Thomas Gleixner 提交于
      The futex timeval is not checked for correctness.  The change does not
      break existing applications as the timeval is supplied by glibc (and glibc
      always passes a correct value), but the glibc-internal tests for this
      functionality fail.
      Signed-off-by: NThomas Gleixner <tglx@tglx.de>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      9741ef96
    • C
      [PATCH] sched: activate SCHED BATCH expired · d425b274
      Con Kolivas 提交于
      To increase the strength of SCHED_BATCH as a scheduling hint we can
      activate batch tasks on the expired array since by definition they are
      latency insensitive tasks.
      Signed-off-by: NCon Kolivas <kernel@kolivas.org>
      Acked-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      d425b274
    • C
      [PATCH] sched: remove on runqueue requeueing · 7c4bb1f9
      Con Kolivas 提交于
      On runqueue time is used to elevate priority in schedule().
      
      In the code it currently requeues tasks even if their priority is not
      elevated, which would end up placing them at the end of their runqueue
      array effectively delaying them instead of improving their priority.
      
      Bug spotted by Mike Galbraith <efault@gmx.de>
      
      This patch removes this requeueing.
      Signed-off-by: NCon Kolivas <kernel@kolivas.org>
      Acked-by: NIngo Molnar <mingo@elte.hu>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Nick Piggin <nickpiggin@yahoo.com.au>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      7c4bb1f9
    • C
      [PATCH] sched: include noninteractive sleep in idle detect · 5138930e
      Con Kolivas 提交于
      Tasks waiting in SLEEP_NONINTERACTIVE state can now get to best priority so
      they need to be included in the idle detection code.
      Signed-off-by: NCon Kolivas <kernel@kolivas.org>
      Acked-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      5138930e
    • C
      [PATCH] sched: dont decrease idle sleep avg · e72ff0bb
      Con Kolivas 提交于
      We watch for tasks that sleep extended periods and don't allow one single
      prolonged sleep period from elevating priority to maximum bonus to prevent cpu
      bound tasks from getting high priority with single long sleeps.  There is a
      bug in the current code that also penalises tasks that already have high
      priority.  Correct that bug.
      Signed-off-by: NCon Kolivas <kernel@kolivas.org>
      Acked-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      e72ff0bb
    • C
      [PATCH] sched: make task_noninteractive use sleep_type · e7c38cb4
      Con Kolivas 提交于
      Alterations to the pipe code in the kernel made it possible for relative
      starvation to occur with tasks that slept waiting on a pipe getting unfair
      priority bonuses even if they were otherwise fully cpu bound so the
      TASK_NONINTERACTIVE flag was introduced which prevented any change to
      sleep_avg while sleeping waiting on a pipe.  This change also leads to the
      converse though, preventing any priority boost from occurring in truly
      interactive tasks that wait on pipes.
      
      Convert the TASK_NONINTERACTIVE flag to set sleep_type to SLEEP_NONINTERACTIVE
      which will allow a linear bonus to priority based on sleep time thus allowing
      interactive tasks to get high priority if they sleep enough.
      Signed-off-by: NCon Kolivas <kernel@kolivas.org>
      Acked-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      e7c38cb4
    • C
      [PATCH] sched: cleanup task_activated() · 3dee386e
      Con Kolivas 提交于
      The activated flag in task_struct is used to track different sleep types and
      its usage is somewhat obfuscated.  Convert the variable to an enum with more
      descriptive names without altering the function.
      Signed-off-by: NCon Kolivas <kernel@kolivas.org>
      Acked-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      3dee386e
    • J
      [PATCH] sched: reduce overhead of calc_load · db1b1fef
      Jack Steiner 提交于
      Currently, count_active_tasks() calls both nr_running() &
      nr_interruptible().  Each of these functions does a "for_each_cpu" & reads
      values from the runqueue of each cpu.  Although this is not a lot of
      instructions, each runqueue may be located on different node.  Depending on
      the architecture, a unique TLB entry may be required to access each
      runqueue.
      
      Since there may be more runqueues than cpu TLB entries, a scan of all
      runqueues can trash the TLB.  Each memory reference incurs a TLB miss &
      refill.
      
      In addition, the runqueue cacheline that contains nr_running &
      nr_uninterruptible may be evicted from the cache between the two passes.
      This causes unnecessary cache misses.
      
      Combining nr_running() & nr_interruptible() into a single function
      substantially reduces the TLB & cache misses on large systems.  This should
      have no measureable effect on smaller systems.
      
      On a 128p IA64 system running a memory stress workload, the new function
      reduced the overhead of calc_load() from 605 usec/call to 324 usec/call.
      Signed-off-by: NJack Steiner <steiner@sgi.com>
      Acked-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      db1b1fef
    • D
      [PATCH] hrtimer: call get_softirq_time() only when necessary in run_hrtimer_queue() · 3055adda
      Dimitri Sivanich 提交于
      It seems that run_hrtimer_queue() is calling get_softirq_time() more
      often than it needs to.
      
      With this patch, it only calls get_softirq_time() if there's a
      pending timer.
      Signed-off-by: NDimitri Sivanich <sivanich@sgi.com>
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      3055adda
    • T
      [PATCH] hrtimer: use generic sleeper for nanosleep · 669d7868
      Thomas Gleixner 提交于
      Replace the nanosleep private sleeper functionality by the generic hrtimer
      sleeper.
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      669d7868
    • T
      [PATCH] hrtimer: create generic sleeper · 00362e33
      Thomas Gleixner 提交于
      The removal of the data field in the hrtimer structure enforces the
      embedding of the timer into another data structure.  nanosleep now uses a
      private implementation of the most common used timer callback function
      (simple task wakeup).
      
      In order to avoid the reimplentation of such functionality all over the
      place a generic hrtimer_sleeper functionality is created.
      Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      00362e33
    • A
      [PATCH] modules: permit Dual-MIT/GPL licenses · 7529c301
      Andrew Morton 提交于
      One of the LEDs driver files wants to use this.
      
      Probably drivers/mtd/maps/ipaq-flash.c wants to convert as well - right now
      it'll be tainting the kernel.
      
      Cc: David Woodhouse <dwmw2@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: John Bowler <jbowler@acm.org>
      Cc: "'Richard Purdie'" <rpurdie@rpsys.net>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      7529c301
    • P
      [PATCH] cpuset: memory migration interaction fix · e4e364e8
      Paul Jackson 提交于
      Fix memory migration so that it works regardless of what cpuset the invoking
      task is in.
      
      If a task invoked a memory migration, by doing one of:
      
             1) writing a different nodemask to a cpuset 'mems' file, or
      
             2) writing a tasks pid to a different cpuset's 'tasks' file,
                where the cpuset had its 'memory_migrate' option turned on, then the
                allocation of the new pages for the migrated task(s) was constrained
                by the invoking tasks cpuset.
      
      If this task wasn't in a cpuset that allowed the requested memory nodes, the
      memory migration would happen to some other nodes that were in that invoking
      tasks cpuset.  This was usually surprising and puzzling behaviour: Why didn't
      the pages move?  Why did the pages move -there-?
      
      To fix this, temporarilly change the invoking tasks 'mems_allowed' task_struct
      field to the nodes the migrating tasks is moving to, so that new pages can be
      allocated there.
      Signed-off-by: NPaul Jackson <pj@sgi.com>
      Acked-by: NChristoph Lameter <clameter@sgi.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      e4e364e8
    • P
      [PATCH] cpuset: unsafe mm reference fix · 2741a559
      Paul Jackson 提交于
      Fix unsafe reference to a tasks mm struct, by moving the reference inside of a
      convenient nearby properly guarded code block.
      Signed-off-by: NPaul Jackson <pj@sgi.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      2741a559
    • P
      [PATCH] cpuset: task_lock comment fix · 4a01c8d5
      Paul Jackson 提交于
      Fix cpuset comment involving case of a tasks cpuset pointer being NULL.
      Thanks to "the_top_cpuset_hack", this code no longer sees NULL task->cpuset
      pointers.
      Signed-off-by: NPaul Jackson <pj@sgi.com>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      4a01c8d5
    • K
      [PATCH] Fix pacct bug in multithreading case. · bb231fe3
      KaiGai Kohei 提交于
      I noticed a bug on the process accounting facility.  In multi-threading
      process, some data would be recorded incorrectly when the group_leader dies
      earlier than one or more threads.  The attached patch fixes this problem.
      
      See below.  'bugacct' is a test program that create a worker thread after 4
      seconds sleeping, then the group_leader dies soon.  The worker thread
      consume CPU/Memory for 6 seconds, then exit.  We can estimate 10 seconds as
      etime and 6 seconds as stime + utime.  This is a sample program which the
      group_leader dies earlier than other threads.
      
      The results of same binary execution on different kernel are below.
      -- accounted records --------------------
               |   btime  | utime | stime | etime | minflt | majflt |   comm  |
      original | 13:16:40 |  0.00 |  0.00 |  6.10 |    171 |      0 | bugacct |
       patched | 13:20:21 |  5.83 |  0.18 | 10.03 |  32776 |      0 | bugacct |
      (*) bugacct allocates 128MB memory, thus 128MB / 4KB = 32768 of minflt is
          appropriate.
      
      -- Test results in original kernel ------
      $ date; time -p ./bugacct
      Tue Mar 28 13:16:36 JST 2006  <- But pacct said btime is 13:16:40
      real 10.11                    <- But pacct said etime is 6.10
      user 5.96                     <- But pacct said utime is 0.00
      sys 0.14                      <- But pacct said stime is 0.00
      $
      -- Test results in patched kernel -------
      $ date; time -p ./bugacct
      Tue Mar 28 13:20:21 JST 2006
      real 10.04
      user 5.83
      sys 0.19
      $
      
      In the original 2.6.16 kernel, pacct records btime, utime, stime, etime and
      minflt incorrectly.  In my opinion, this problem is caused by an assumption
      that group_leader dies last.
      
      The following section calculates process running time for etime and btime.
      But it means running time of the thread that dies last, not process.  The
      start_time of the first thread in the process (group_leader) should be
      reduced from uptime to calculate etime and btime correctly.
      
         ---- do_acct_process() in kernel/acct.c:
         /* calculate run_time in nsec*/
         do_posix_clock_monotonic_gettime(&uptime);
         run_time = (u64)uptime.tv_sec*NSEC_PER_SEC + uptime.tv_nsec;
         run_time -= (u64)current->start_time.tv_sec*NSEC_PER_SEC
                                         + current->start_time.tv_nsec;
         ----
      
      The following section calculates stime and utime of the process.
      But it might count the utime and stime of the group_leader duplicatly
      and ignore the utime and stime of the thread dies last, when one or
      more threads remain after group_leader dead.
      The ac_utime should be calculated as the sum of the signal->utime
      and utime of the thread dies last. The ac_stime should be done also.
      
         ---- do_acct_process() in kernel/acct.c:
         jiffies = cputime_to_jiffies(cputime_add(current->group_leader->utime,
                                                  current->signal->utime));
         ac.ac_utime = encode_comp_t(jiffies_to_AHZ(jiffies));
         jiffies = cputime_to_jiffies(cputime_add(current->group_leader->stime,
                                                  current->signal->stime));
         ac.ac_stime = encode_comp_t(jiffies_to_AHZ(jiffies));
         ----
      
      The part of the minflt/majflt calculation has same problem.
      This patch solves those problems, I think.
      
      Cc: Ingo Molnar <mingo@elte.hu>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      bb231fe3
    • O
      [PATCH] Don't pass boot parameters to argv_init[] · 9b41046c
      OGAWA Hirofumi 提交于
      The boot cmdline is parsed in parse_early_param() and
      parse_args(,unknown_bootoption).
      
      And __setup() is used in obsolete_checksetup().
      
      	start_kernel()
      		-> parse_args()
      			-> unknown_bootoption()
      				-> obsolete_checksetup()
      
      If __setup()'s callback (->setup_func()) returns 1 in
      obsolete_checksetup(), obsolete_checksetup() thinks a parameter was
      handled.
      
      If ->setup_func() returns 0, obsolete_checksetup() tries other
      ->setup_func().  If all ->setup_func() that matched a parameter returns 0,
      a parameter is seted to argv_init[].
      
      Then, when runing /sbin/init or init=app, argv_init[] is passed to the app.
      If the app doesn't ignore those arguments, it will warning and exit.
      
      This patch fixes a wrong usage of it, however fixes obvious one only.
      Signed-off-by: NOGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      9b41046c
    • O
      [PATCH] __mod_timer: simplify ->base changing · a2c348fe
      Oleg Nesterov 提交于
      Since base and new_base are of the same type now, we can save one 'if'
      branch and simplify the code a bit.
      Signed-off-by: NOleg Nesterov <oleg@tv-sign.ru>
      Acked-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      a2c348fe
    • O
      [PATCH] kill __init_timer_base in favor of boot_tvec_bases · 3691c519
      Oleg Nesterov 提交于
      Commit a4a6198b:
      	[PATCH] tvec_bases too large for per-cpu data
      
      introduced "struct tvec_t_base_s boot_tvec_bases" which is visible at
      compile time.  This means we can kill __init_timer_base and move
      timer_base_s's content into tvec_t_base_s.
      Signed-off-by: NOleg Nesterov <oleg@tv-sign.ru>
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      3691c519