Skip to content
  1. Jan 26, 2008
    • Ingo Molnar's avatar
      softlockup: automatically detect hung TASK_UNINTERRUPTIBLE tasks · 82a1fcb9
      Ingo Molnar authored
      
      
      this patch extends the soft-lockup detector to automatically
      detect hung TASK_UNINTERRUPTIBLE tasks. Such hung tasks are
      printed the following way:
      
       ------------------>
       INFO: task prctl:3042 blocked for more than 120 seconds.
       "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message
       prctl         D fd5e3793     0  3042   2997
              f6050f38 00000046 00000001 fd5e3793 00000009 c06d8264 c06dae80 00000286
              f6050f40 f6050f00 f7d34d90 f7d34fc8 c1e1be80 00000001 f6050000 00000000
              f7e92d00 00000286 f6050f18 c0489d1a f6050f40 00006605 00000000 c0133a5b
       Call Trace:
        [<c04883a5>] schedule_timeout+0x6d/0x8b
        [<c04883d8>] schedule_timeout_uninterruptible+0x15/0x17
        [<c0133a76>] msleep+0x10/0x16
        [<c0138974>] sys_prctl+0x30/0x1e2
        [<c0104c52>] sysenter_past_esp+0x5f/0xa5
        =======================
       2 locks held by prctl/3042:
       #0:  (&sb->s_type->i_mutex_key#5){--..}, at: [<c0197d11>] do_fsync+0x38/0x7a
       #1:  (jbd_handle){--..}, at: [<c01ca3d2>] journal_start+0xc7/0xe9
       <------------------
      
      the current default timeout is 120 seconds. Such messages are printed
      up to 10 times per bootup. If the system has crashed already then the
      messages are not printed.
      
      if lockdep is enabled then all held locks are printed as well.
      
      this feature is a natural extension to the softlockup-detector (kernel
      locked up without scheduling) and to the NMI watchdog (kernel locked up
      with IRQs disabled).
      
      [ Gautham R Shenoy <ego@in.ibm.com>: CPU hotplug fixes. ]
      [ Andrew Morton <akpm@linux-foundation.org>: build warning fix. ]
      
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      Signed-off-by: default avatarArjan van de Ven <arjan@linux.intel.com>
      82a1fcb9
    • Ingo Molnar's avatar
      cpu-hotplug: fix build on !CONFIG_SMP · d0d23b54
      Ingo Molnar authored
      
      
      fix build on !CONFIG_SMP.
      
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      d0d23b54
    • Gautham R Shenoy's avatar
      cpu-hotplug: replace per-subsystem mutexes with get_online_cpus() · 95402b38
      Gautham R Shenoy authored
      
      
      This patch converts the known per-subsystem mutexes to get_online_cpus
      put_online_cpus. It also eliminates the CPU_LOCK_ACQUIRE and
      CPU_LOCK_RELEASE hotplug notification events.
      
      Signed-off-by: default avatarGautham R Shenoy <ego@in.ibm.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      95402b38
    • Gautham R Shenoy's avatar
      cpu-hotplug: replace lock_cpu_hotplug() with get_online_cpus() · 86ef5c9a
      Gautham R Shenoy authored
      
      
      Replace all lock_cpu_hotplug/unlock_cpu_hotplug from the kernel and use
      get_online_cpus and put_online_cpus instead as it highlights the
      refcount semantics in these operations.
      
      The new API guarantees protection against the cpu-hotplug operation, but
      it doesn't guarantee serialized access to any of the local data
      structures. Hence the changes needs to be reviewed.
      
      In case of pseries_add_processor/pseries_remove_processor, use
      cpu_maps_update_begin()/cpu_maps_update_done() as we're modifying the
      cpu_present_map there.
      
      Signed-off-by: default avatarGautham R Shenoy <ego@in.ibm.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      86ef5c9a
    • Gautham R Shenoy's avatar
      cpu-hotplug: refcount based cpu hotplug · d221938c
      Gautham R Shenoy authored
      
      
      This patch implements a Refcount + Waitqueue based model for
      cpu-hotplug.
      
      Now, a thread which wants to prevent cpu-hotplug, will bump up a global
      refcount and the thread which wants to perform a cpu-hotplug operation
      will block till the global refcount goes to zero.
      
      The readers, if any, during an ongoing cpu-hotplug operation are blocked
      until the cpu-hotplug operation is over.
      
      Signed-off-by: default avatarGautham R Shenoy <ego@in.ibm.com>
      Signed-off-by: Paul Jackson <pj@sgi.com> [For !CONFIG_HOTPLUG_CPU ]
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      d221938c
    • Srivatsa Vaddagiri's avatar
      sched: group scheduler, fix fairness of cpu bandwidth allocation for task groups · 6b2d7700
      Srivatsa Vaddagiri authored
      
      
      The current load balancing scheme isn't good enough for precise
      group fairness.
      
      For example: on a 8-cpu system, I created 3 groups as under:
      
      	a = 8 tasks (cpu.shares = 1024)
      	b = 4 tasks (cpu.shares = 1024)
      	c = 3 tasks (cpu.shares = 1024)
      
      a, b and c are task groups that have equal weight. We would expect each
      of the groups to receive 33.33% of cpu bandwidth under a fair scheduler.
      
      This is what I get with the latest scheduler git tree:
      
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      --------------------------------------------------------------------------------
      Col1  | Col2    | Col3  |  Col4
      ------|---------|-------|-------------------------------------------------------
      a     | 277.676 | 57.8% | 54.1%  54.1%  54.1%  54.2%  56.7%  62.2%  62.8% 64.5%
      b     | 116.108 | 24.2% | 47.4%  48.1%  48.7%  49.3%
      c     |  86.326 | 18.0% | 47.5%  47.9%  48.5%
      --------------------------------------------------------------------------------
      
      Explanation of o/p:
      
      Col1 -> Group name
      Col2 -> Cumulative execution time (in seconds) received by all tasks of that
      	group in a 60sec window across 8 cpus
      Col3 -> CPU bandwidth received by the group in the 60sec window, expressed in
              percentage. Col3 data is derived as:
      		Col3 = 100 * Col2 / (NR_CPUS * 60)
      Col4 -> CPU bandwidth received by each individual task of the group.
      		Col4 = 100 * cpu_time_recd_by_task / 60
      
      [I can share the test case that produces a similar o/p if reqd]
      
      The deviation from desired group fairness is as below:
      
      	a = +24.47%
      	b = -9.13%
      	c = -15.33%
      
      which is quite high.
      
      After the patch below is applied, here are the results:
      
      --------------------------------------------------------------------------------
      Col1  | Col2    | Col3  |  Col4
      ------|---------|-------|-------------------------------------------------------
      a     | 163.112 | 34.0% | 33.2%  33.4%  33.5%  33.5%  33.7%  34.4%  34.8% 35.3%
      b     | 156.220 | 32.5% | 63.3%  64.5%  66.1%  66.5%
      c     | 160.653 | 33.5% | 85.8%  90.6%  91.4%
      --------------------------------------------------------------------------------
      
      Deviation from desired group fairness is as below:
      
      	a = +0.67%
      	b = -0.83%
      	c = +0.17%
      
      which is far better IMO. Most of other runs have yielded a deviation within
      +-2% at the most, which is good.
      
      Why do we see bad (group) fairness with current scheuler?
      =========================================================
      
      Currently cpu's weight is just the summation of individual task weights.
      This can yield incorrect results. For ex: consider three groups as below
      on a 2-cpu system:
      
      	CPU0	CPU1
      ---------------------------
      	A (10)  B(5)
      		C(5)
      ---------------------------
      
      Group A has 10 tasks, all on CPU0, Group B and C have 5 tasks each all
      of which are on CPU1. Each task has the same weight (NICE_0_LOAD =
      1024).
      
      The current scheme would yield a cpu weight of 10240 (10*1024) for each cpu and
      the load balancer will think both CPUs are perfectly balanced and won't
      move around any tasks. This, however, would yield this bandwidth:
      
      	A = 50%
      	B = 25%
      	C = 25%
      
      which is not the desired result.
      
      What's changing in the patch?
      =============================
      
      	- How cpu weights are calculated when CONFIF_FAIR_GROUP_SCHED is
      	  defined (see below)
      	- API Change
      		- Two tunables introduced in sysfs (under SCHED_DEBUG) to
      		  control the frequency at which the load balance monitor
      		  thread runs.
      
      The basic change made in this patch is how cpu weight (rq->load.weight) is
      calculated. Its now calculated as the summation of group weights on a cpu,
      rather than summation of task weights. Weight exerted by a group on a
      cpu is dependent on the shares allocated to it and also the number of
      tasks the group has on that cpu compared to the total number of
      (runnable) tasks the group has in the system.
      
      Let,
      	W(K,i)  = Weight of group K on cpu i
      	T(K,i)  = Task load present in group K's cfs_rq on cpu i
      	T(K)    = Total task load of group K across various cpus
      	S(K) 	= Shares allocated to group K
      	NRCPUS	= Number of online cpus in the scheduler domain to
      	 	  which group K is assigned.
      
      Then,
      	W(K,i) = S(K) * NRCPUS * T(K,i) / T(K)
      
      A load balance monitor thread is created at bootup, which periodically
      runs and adjusts group's weight on each cpu. To avoid its overhead, two
      min/max tunables are introduced (under SCHED_DEBUG) to control the rate
      at which it runs.
      
      Fixes from: Peter Zijlstra <a.p.zijlstra@chello.nl>
      
      - don't start the load_balance_monitor when there is only a single cpu.
      - rename the kthread because its currently longer than TASK_COMM_LEN
      
      Signed-off-by: default avatarSrivatsa Vaddagiri <vatsa@linux.vnet.ibm.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      6b2d7700
    • Srivatsa Vaddagiri's avatar
      sched: introduce a mutex and corresponding API to serialize access to doms_curarray · a1835615
      Srivatsa Vaddagiri authored
      
      
      doms_cur[] array represents various scheduling domains which are
      mutually exclusive. Currently cpusets code can modify this array (by
      calling partition_sched_domains()) as a result of user modifying
      sched_load_balance flag for various cpusets.
      
      This patch introduces a mutex and corresponding API (only when
      CONFIG_FAIR_GROUP_SCHED is defined) which allows a reader to safely read
      the doms_cur[] array w/o worrying abt concurrent modifications to the
      array.
      
      The fair group scheduler code (introduced in next patch of this series)
      makes use of this mutex to walk thr' doms_cur[] array while rebalancing
      shares of task groups across cpus.
      
      Signed-off-by: default avatarSrivatsa Vaddagiri <vatsa@linux.vnet.ibm.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      a1835615
    • Srivatsa Vaddagiri's avatar
      sched: group scheduling, change how cpu load is calculated · 58e2d4ca
      Srivatsa Vaddagiri authored
      
      
      This patch changes how the cpu load exerted by fair_sched_class tasks
      is calculated. Load exerted by fair_sched_class tasks on a cpu is now
      a summation of the group weights, rather than summation of task weights.
      Weight exerted by a group on a cpu is dependent on the shares allocated
      to it.
      
      This version of patch has a minor impact on code size, but should have
      no runtime/functional impact for !CONFIG_FAIR_GROUP_SCHED.
      
      Signed-off-by: default avatarSrivatsa Vaddagiri <vatsa@linux.vnet.ibm.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      58e2d4ca
    • Srivatsa Vaddagiri's avatar
      sched: group scheduling, minor fixes · ec2c507f
      Srivatsa Vaddagiri authored
      
      
      Minor bug fixes for the group scheduler:
      
      - Use a mutex to serialize add/remove of task groups and also when
        changing shares of a task group. Use the same mutex when printing
        cfs_rq debugging stats for various task groups.
      
      - Use list_for_each_entry_rcu in for_each_leaf_cfs_rq macro (when
        walking task group list)
      
      Signed-off-by: default avatarSrivatsa Vaddagiri <vatsa@linux.vnet.ibm.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      ec2c507f
    • Srivatsa Vaddagiri's avatar
      sched: group scheduling code cleanup · 93f992cc
      Srivatsa Vaddagiri authored
      
      
      Minor cleanups:
      
      - Fix coding style
      - remove obsolete comment
      
      Signed-off-by: default avatarSrivatsa Vaddagiri <vatsa@linux.vnet.ibm.com>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      93f992cc
    • Ingo Molnar's avatar
      sched: remove printk_clock references from ia64 · 86faf39d
      Ingo Molnar authored
      
      
      remove remaining printk_clock references from ia64.
      
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      86faf39d
    • Ingo Molnar's avatar
      sched: remove printk_clock() · b842271f
      Ingo Molnar authored
      
      
      printk_clock() is obsolete - it has been replaced with cpu_clock().
      
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      b842271f
    • Ingo Molnar's avatar
      sched: fix CONFIG_PRINT_TIME's reliance on sched_clock() · d713f519
      Ingo Molnar authored
      Stefano Brivio reported weird printk timestamp behavior during
      CPU frequency changes:
      
        http://bugzilla.kernel.org/show_bug.cgi?id=9475
      
      
      
      fix CONFIG_PRINT_TIME's reliance on sched_clock() and use cpu_clock()
      instead.
      
      Reported-and-bisected-by: default avatarStefano Brivio <stefano.brivio@polimi.it>
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      d713f519
    • Ingo Molnar's avatar
      printk: make printk more robust by not allowing recursion · 32a76006
      Ingo Molnar authored
      
      
      make printk more robust by allowing recursion only if there's a crash
      going on. Also add recursion detection.
      
      I've tested it with an artificially injected printk recursion - instead
      of a lockup or spontaneous reboot or other crash, the output was a well
      controlled:
      
      [   41.057335] SysRq : <2>BUG: recent printk recursion!
      [   41.057335] loglevel0-8 reBoot Crashdump show-all-locks(D) tErm Full kIll saK showMem Nice powerOff showPc show-all-timers(Q) unRaw Sync showTasks Unmount shoW-blocked-tasks
      
      also do all this printk-debug logic with irqs disabled.
      
      Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
      Reviewed-by: default avatarNick Piggin <npiggin@suse.de>
      32a76006
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/selinux-2.6 · b47711bf
      Linus Torvalds authored
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/selinux-2.6:
        selinux: make mls_compute_sid always polyinstantiate
        security/selinux: constify function pointer tables and fields
        security: add a secctx_to_secid() hook
        security: call security_file_permission from rw_verify_area
        security: remove security_sb_post_mountroot hook
        Security: remove security.h include from mm.h
        Security: remove security_file_mmap hook sparse-warnings (NULL as 0).
        Security: add get, set, and cloning of superblock security information
        security/selinux: Add missing "space"
      b47711bf
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hskinnemoen/avr32-2.6 · 7556afa0
      Linus Torvalds authored
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hskinnemoen/avr32-2.6:
        [AVR32] extint: Set initial irq type to low level
        [AVR32] extint: change set_irq_type() handling
        [AVR32] NMI debugging
        [AVR32] constify function pointer tables
        [AVR32] ATNGW100: Update defconfig
        [AVR32] ATSTK1002: Update defconfig
        [AVR32] Kconfig: Choose daughterboard instead of CPU
        [AVR32] Add support for ATSTK1003 and ATSTK1004
        [AVR32] Clean up external DAC setup code
        [AVR32] ATSTK1000: Move gpio-leds setup to setup.c
        [AVR32] Add support for AT32AP7001 and AT32AP7002
        [AVR32] Provide more CPU information in /proc/cpuinfo and dmesg
        [AVR32] Oprofile support
        [AVR32] Include instrumentation menu
        Disable VGA text console for AVR32 architecture
        [AVR32] Enable debugging only when needed
        ptrace: Call arch_ptrace_attach() when request=PTRACE_TRACEME
        [AVR32] Remove redundant try_to_freeze() call from do_signal()
        [AVR32] Drop GFP_COMP for DMA memory allocations
      7556afa0
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw · e07dd2ad
      Linus Torvalds authored
      * git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw: (56 commits)
        [GFS2] Allow journal recovery on read-only mount
        [GFS2] Lockup on error
        [GFS2] Fix page_mkwrite truncation race path
        [GFS2] Fix typo
        [GFS2] Fix write alloc required shortcut calculation
        [GFS2] gfs2_alloc_required performance
        [GFS2] Remove unneeded i_spin
        [GFS2] Reduce inode size by moving i_alloc out of line
        [GFS2] Fix assert in log code
        [GFS2] Fix problems relating to execution of files on GFS2
        [GFS2] Initialize extent_list earlier
        [GFS2] Allow page migration for writeback and ordered pages
        [GFS2] Remove unused variable
        [GFS2] Fix log block mapper
        [GFS2] Minor correction
        [GFS2] Eliminate the no longer needed sd_statfs_mutex
        [GFS2] Incremental patch to fix compiler warning
        [GFS2] Function meta_read optimization
        [GFS2] Only fetch the dinode once in block_map
        [GFS2] Reorganize function gfs2_glmutex_lock
        ...
      e07dd2ad
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 · eba0e319
      Linus Torvalds authored
      * git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (125 commits)
        [CRYPTO] twofish: Merge common glue code
        [CRYPTO] hifn_795x: Fixup container_of() usage
        [CRYPTO] cast6: inline bloat--
        [CRYPTO] api: Set default CRYPTO_MINALIGN to unsigned long long
        [CRYPTO] tcrypt: Make xcbc available as a standalone test
        [CRYPTO] xcbc: Remove bogus hash/cipher test
        [CRYPTO] xcbc: Fix algorithm leak when block size check fails
        [CRYPTO] tcrypt: Zero axbuf in the right function
        [CRYPTO] padlock: Only reset the key once for each CBC and ECB operation
        [CRYPTO] api: Include sched.h for cond_resched in scatterwalk.h
        [CRYPTO] salsa20-asm: Remove unnecessary dependency on CRYPTO_SALSA20
        [CRYPTO] tcrypt: Add select of AEAD
        [CRYPTO] salsa20: Add x86-64 assembly version
        [CRYPTO] salsa20_i586: Salsa20 stream cipher algorithm (i586 version)
        [CRYPTO] gcm: Introduce rfc4106
        [CRYPTO] api: Show async type
        [CRYPTO] chainiv: Avoid lock spinning where possible
        [CRYPTO] seqiv: Add select AEAD in Kconfig
        [CRYPTO] scatterwalk: Handle zero nbytes in scatterwalk_map_and_copy
        [CRYPTO] null: Allow setkey on digest_null 
        ...
      eba0e319
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6 · df8dc74e
      Linus Torvalds authored
      This can be broken down into these major areas:
       - Documentation updates (language translations and fixes, as
         well as kobject and kset documenatation updates.)
       - major kset/kobject/ktype rework and fixes.  This cleans up the
         kset and kobject and ktype relationship and architecture,
         making sense of things now, and good documenation and samples
         are provided for others to use.  Also the attributes for
         kobjects are much easier to handle now.  This cleaned up a LOT
         of code all through the kernel, making kobjects easier to use
         if you want to.
       - struct bus_type has been reworked to now handle the lifetime
         rules properly, as the kobject is properly dynamic.
       - struct driver has also been reworked, and now the lifetime
         issues are resolved.
       - the block subsystem has been converted to use struct device
         now, and not "raw" kobjects.  This patch has been in the -mm
         tree for over a year now, and finally all the issues are
         worked out with it.  Older distros now properly work with new
         kernels, and no userspace updates are needed at all.
       - nozomi driver is added.  This has also been in -mm for a long
         time, and many people have asked for it to go in.  It is now
         in good enough shape to do so.
       - lots of class_device conversions to use struct device instead.
         The tree is almost all cleaned up now, only SCSI and IB is the
         remaining code to fix up...
      
      * git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6: (196 commits)
        Driver core: coding style fixes
        Kobject: fix coding style issues in kobject c files
        Kobject: fix coding style issues in kobject.h
        Driver core: fix coding style issues in device.h
        spi: use class iteration api
        scsi: use class iteration api
        rtc: use class iteration api
        power supply : use class iteration api
        ieee1394: use class iteration api
        Driver Core: add class iteration api
        Driver core: Cleanup get_device_parent() in device_add() and device_move()
        UIO: constify function pointer tables
        Driver Core: constify the name passed to platform_device_register_simple
        driver core: fix build with SYSFS=n
        sysfs: make SYSFS_DEPRECATED depend on SYSFS
        Driver core: use LIST_HEAD instead of call to INIT_LIST_HEAD in __init
        kobject: add sample code for how to use ksets/ktypes/kobjects
        kobject: add sample code for how to use kobjects in a simple manner.
        kobject: update the kobject/kset documentation
        kobject: remove old, outdated documentation.
        ...
      df8dc74e
    • Pekka Enberg's avatar
      slab: fix bootstrap on memoryless node · 556a169d
      Pekka Enberg authored
      
      
      If the node we're booting on doesn't have memory, bootstrapping kmalloc()
      caches resorts to fallback_alloc() which requires ->nodelists set for all
      nodes.  Fix that by calling set_up_list3s() for CACHE_CACHE in
      kmem_cache_init().
      
      As kmem_getpages() is called with GFP_THISNODE set, this used to work before
      because of breakage in 2.6.22 and before with GFP_THISNODE returning pages from
      the wrong node if a node had no memory. So it may have worked accidentally and
      in an unsafe manner because the pages would have been associated with the wrong
      node which could trigger bug ons and locking troubles.
      
      Tested-by: default avatarMel Gorman <mel@csn.ul.ie>
      Tested-by: default avatarOlaf Hering <olaf@aepfle.de>
      Reviewed-by: default avatarChristoph Lameter <clameter@sgi.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cs.helsinki.fi>
      [ With additional one-liner by Olaf Hering  - Linus ]
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      556a169d
    • Karsten Keil's avatar
      fix oops on rmmod capidrv · eb36f4fc
      Karsten Keil authored
      
      
      Fix overwriting the stack with the version string
      (it is currently 10 bytes + zero) when unloading the
      capidrv module. Safeguard against overwriting it
      should the version string grow in the future.
      
      Should fix Kernel Bug Tracker Bug 9696.
      
      Signed-off-by: default avatarGerd v. Egidy <gerd.von.egidy@intra2net.com>
      Acked-by: default avatarKarsten Keil <kkeil@suse.de>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      eb36f4fc
  2. Jan 25, 2008