1. May 04, 2010
    • Robert Richter's avatar
      oprofile/x86: remove CONFIG_SMP macros · 216f3d9b
      Robert Richter authored
      
      
      CPU notifier register functions also exist if CONFIG_SMP is
      disabled. This change is part of hotplug code rework and also
      necessary for later patches.
      
      Cc: Andi Kleen <andi@firstfloor.org>
      Signed-off-by: default avatarRobert Richter <robert.richter@amd.com>
      216f3d9b
    • Robert Richter's avatar
      oprofile/x86: fix uninitialized counter usage during cpu hotplug · 2623a1d5
      Robert Richter authored
      
      
      This fixes a NULL pointer dereference that is triggered when taking a
      cpu offline after oprofile was initialized, e.g.:
      
       $ opcontrol --init
       $ opcontrol --start-daemon
       $ opcontrol --shutdown
       $ opcontrol --deinit
       $ echo 0 > /sys/devices/system/cpu/cpu1/online
      
      See the crash dump below. Though the counter has been disabled the cpu
      notifier is still active and trying to use already freed counter data.
      
      This fix is for linux-stable. To proper fix this, the hotplug code
      must be rewritten. Thus I will leave a WARN_ON_ONCE() message with
      this patch.
      
      BUG: unable to handle kernel NULL pointer dereference at (null)
      IP: [<ffffffff8132ad57>] op_amd_stop+0x2d/0x8e
      PGD 0
      Oops: 0000 [#1] SMP
      last sysfs file: /sys/devices/system/cpu/cpu1/online
      CPU 1
      Modules linked in:
      
      Pid: 0, comm: swapper Not tainted 2.6.34-rc5-oprofile-x86_64-standard-00210-g8c00f06 #16 Anaheim/Anaheim
      RIP: 0010:[<ffffffff8132ad57>]  [<ffffffff8132ad57>] op_amd_stop+0x2d/0x8e
      RSP: 0018:ffff880001843f28  EFLAGS: 00010006
      RAX: 0000000000000000 RBX: 0000000000000000 RCX: dead000000200200
      RDX: ffff880001843f68 RSI: dead000000100100 RDI: 0000000000000000
      RBP: ffff880001843f48 R08: 0000000000000000 R09: ffff880001843f08
      R10: ffffffff8102c9a5 R11: ffff88000184ea80 R12: 0000000000000000
      R13: ffff88000184f6c0 R14: 0000000000000000 R15: 0000000000000000
      FS:  00007fec6a92e6f0(0000) GS:ffff880001840000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
      CR2: 0000000000000000 CR3: 000000000163b000 CR4: 00000000000006e0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
      Process swapper (pid: 0, threadinfo ffff88042fcd8000, task ffff88042fcd51d0)
      Stack:
       ffff880001843f48 0000000000000001 ffff88042e9f7d38 ffff880001843f68
      <0> ffff880001843f58 ffffffff8132a602 ffff880001843f98 ffffffff810521b3
      <0> ffff880001843f68 ffff880001843f68 ffff880001843f88 ffff88042fcd9fd8
      Call Trace:
       <IRQ>
       [<ffffffff8132a602>] nmi_cpu_stop+0x21/0x23
       [<ffffffff810521b3>] generic_smp_call_function_single_interrupt+0xdf/0x11b
       [<ffffffff8101804f>] smp_call_function_single_interrupt+0x22/0x31
       [<ffffffff810029f3>] call_function_single_interrupt+0x13/0x20
       <EOI>
       [<ffffffff8102c9a5>] ? wake_up_process+0x10/0x12
       [<ffffffff81008701>] ? default_idle+0x22/0x37
       [<ffffffff8100896d>] c1e_idle+0xdf/0xe6
       [<ffffffff813f1170>] ? atomic_notifier_call_chain+0x13/0x15
       [<ffffffff810012fb>] cpu_idle+0x4b/0x7e
       [<ffffffff813e8a4e>] start_secondary+0x1ae/0x1b2
      Code: 89 e5 41 55 49 89 fd 41 54 45 31 e4 53 31 db 48 83 ec 08 89 df e8 be f8 ff ff 48 98 48 83 3c c5 10 67 7a 81 00 74 1f 49 8b 45 08 <42> 8b 0c 20 0f 32 48 c1 e2 20 25 ff ff bf ff 48 09 d0 48 89 c2
      RIP  [<ffffffff8132ad57>] op_amd_stop+0x2d/0x8e
       RSP <ffff880001843f28>
      CR2: 0000000000000000
      ---[ end trace 679ac372d674b757 ]---
      Kernel panic - not syncing: Fatal exception in interrupt
      Pid: 0, comm: swapper Tainted: G      D    2.6.34-rc5-oprofile-x86_64-standard-00210-g8c00f06 #16
      Call Trace:
       <IRQ>  [<ffffffff813ebd6a>] panic+0x9e/0x10c
       [<ffffffff810474b0>] ? up+0x34/0x39
       [<ffffffff81031ccc>] ? kmsg_dump+0x112/0x12c
       [<ffffffff813eeff1>] oops_end+0x81/0x8e
       [<ffffffff8101efee>] no_context+0x1f3/0x202
       [<ffffffff8101f1b7>] __bad_area_nosemaphore+0x1ba/0x1e0
       [<ffffffff81028d24>] ? enqueue_task_fair+0x16d/0x17a
       [<ffffffff810264dc>] ? activate_task+0x42/0x53
       [<ffffffff8102c967>] ? try_to_wake_up+0x272/0x284
       [<ffffffff8101f1eb>] bad_area_nosemaphore+0xe/0x10
       [<ffffffff813f0f3f>] do_page_fault+0x1c8/0x37c
       [<ffffffff81028d24>] ? enqueue_task_fair+0x16d/0x17a
       [<ffffffff813ee55f>] page_fault+0x1f/0x30
       [<ffffffff8102c9a5>] ? wake_up_process+0x10/0x12
       [<ffffffff8132ad57>] ? op_amd_stop+0x2d/0x8e
       [<ffffffff8132ad46>] ? op_amd_stop+0x1c/0x8e
       [<ffffffff8132a602>] nmi_cpu_stop+0x21/0x23
       [<ffffffff810521b3>] generic_smp_call_function_single_interrupt+0xdf/0x11b
       [<ffffffff8101804f>] smp_call_function_single_interrupt+0x22/0x31
       [<ffffffff810029f3>] call_function_single_interrupt+0x13/0x20
       <EOI>  [<ffffffff8102c9a5>] ? wake_up_process+0x10/0x12
       [<ffffffff81008701>] ? default_idle+0x22/0x37
       [<ffffffff8100896d>] c1e_idle+0xdf/0xe6
       [<ffffffff813f1170>] ? atomic_notifier_call_chain+0x13/0x15
       [<ffffffff810012fb>] cpu_idle+0x4b/0x7e
       [<ffffffff813e8a4e>] start_secondary+0x1ae/0x1b2
      ------------[ cut here ]------------
      WARNING: at /local/rrichter/.source/linux/arch/x86/kernel/smp.c:118 native_smp_send_reschedule+0x27/0x53()
      Hardware name: Anaheim
      Modules linked in:
      Pid: 0, comm: swapper Tainted: G      D    2.6.34-rc5-oprofile-x86_64-standard-00210-g8c00f06 #16
      Call Trace:
       <IRQ>  [<ffffffff81017f32>] ? native_smp_send_reschedule+0x27/0x53
       [<ffffffff81030ee2>] warn_slowpath_common+0x77/0xa4
       [<ffffffff81030f1e>] warn_slowpath_null+0xf/0x11
       [<ffffffff81017f32>] native_smp_send_reschedule+0x27/0x53
       [<ffffffff8102634b>] resched_task+0x60/0x62
       [<ffffffff8102653a>] check_preempt_curr_idle+0x10/0x12
       [<ffffffff8102c8ea>] try_to_wake_up+0x1f5/0x284
       [<ffffffff8102c986>] default_wake_function+0xd/0xf
       [<ffffffff810a110d>] pollwake+0x57/0x5a
       [<ffffffff8102c979>] ? default_wake_function+0x0/0xf
       [<ffffffff81026be5>] __wake_up_common+0x46/0x75
       [<ffffffff81026ed0>] __wake_up+0x38/0x50
       [<ffffffff81031694>] printk_tick+0x39/0x3b
       [<ffffffff8103ac37>] update_process_times+0x3f/0x5c
       [<ffffffff8104dc63>] tick_periodic+0x5d/0x69
       [<ffffffff8104dc90>] tick_handle_periodic+0x21/0x71
       [<ffffffff81018fd0>] smp_apic_timer_interrupt+0x82/0x95
       [<ffffffff81002853>] apic_timer_interrupt+0x13/0x20
       [<ffffffff81030cb5>] ? panic_blink_one_second+0x0/0x7b
       [<ffffffff813ebdd6>] ? panic+0x10a/0x10c
       [<ffffffff810474b0>] ? up+0x34/0x39
       [<ffffffff81031ccc>] ? kmsg_dump+0x112/0x12c
       [<ffffffff813eeff1>] ? oops_end+0x81/0x8e
       [<ffffffff8101efee>] ? no_context+0x1f3/0x202
       [<ffffffff8101f1b7>] ? __bad_area_nosemaphore+0x1ba/0x1e0
       [<ffffffff81028d24>] ? enqueue_task_fair+0x16d/0x17a
       [<ffffffff810264dc>] ? activate_task+0x42/0x53
       [<ffffffff8102c967>] ? try_to_wake_up+0x272/0x284
       [<ffffffff8101f1eb>] ? bad_area_nosemaphore+0xe/0x10
       [<ffffffff813f0f3f>] ? do_page_fault+0x1c8/0x37c
       [<ffffffff81028d24>] ? enqueue_task_fair+0x16d/0x17a
       [<ffffffff813ee55f>] ? page_fault+0x1f/0x30
       [<ffffffff8102c9a5>] ? wake_up_process+0x10/0x12
       [<ffffffff8132ad57>] ? op_amd_stop+0x2d/0x8e
       [<ffffffff8132ad46>] ? op_amd_stop+0x1c/0x8e
       [<ffffffff8132a602>] ? nmi_cpu_stop+0x21/0x23
       [<ffffffff810521b3>] ? generic_smp_call_function_single_interrupt+0xdf/0x11b
       [<ffffffff8101804f>] ? smp_call_function_single_interrupt+0x22/0x31
       [<ffffffff810029f3>] ? call_function_single_interrupt+0x13/0x20
       <EOI>  [<ffffffff8102c9a5>] ? wake_up_process+0x10/0x12
       [<ffffffff81008701>] ? default_idle+0x22/0x37
       [<ffffffff8100896d>] ? c1e_idle+0xdf/0xe6
       [<ffffffff813f1170>] ? atomic_notifier_call_chain+0x13/0x15
       [<ffffffff810012fb>] ? cpu_idle+0x4b/0x7e
       [<ffffffff813e8a4e>] ? start_secondary+0x1ae/0x1b2
      ---[ end trace 679ac372d674b758 ]---
      
      Cc: Andi Kleen <andi@firstfloor.org>
      Cc: stable <stable@kernel.org>
      Signed-off-by: default avatarRobert Richter <robert.richter@amd.com>
      2623a1d5
    • Robert Richter's avatar
      oprofile/x86: remove duplicate IBS capability check · 5bdb7934
      Robert Richter authored
      
      
      The check is already done in ibs_exit().
      
      Signed-off-by: default avatarRobert Richter <robert.richter@amd.com>
      5bdb7934
    • Robert Richter's avatar
      oprofile/x86: move IBS code · da759fe5
      Robert Richter authored
      
      
      Moving code to make future changes easier. This groups all IBS code
      together.
      
      Signed-off-by: default avatarRobert Richter <robert.richter@amd.com>
      da759fe5
    • Robert Richter's avatar
      oprofile/x86: return -EBUSY if counters are already reserved · 8617f98c
      Robert Richter authored
      
      
      In case a counter is already reserved by the watchdog or perf_event
      subsystem, oprofile ignored this counters silently. This case is
      handled now and oprofile_setup() now reports an error.
      
      Signed-off-by: default avatarRobert Richter <robert.richter@amd.com>
      8617f98c
    • Robert Richter's avatar
      oprofile/x86: moving shutdown functions · 83300ce0
      Robert Richter authored
      
      
      Moving some code in preparation of the next patch.
      
      Signed-off-by: default avatarRobert Richter <robert.richter@amd.com>
      83300ce0
    • Robert Richter's avatar
      oprofile/x86: reserve counter msrs pairwise · d0e4120f
      Robert Richter authored
      
      
      For AMD's and Intel's P6 generic performance counters have pairwise
      counter and control msrs. This patch changes the counter reservation
      in a way that both msrs must be registered. It joins some counter
      loops and also removes the unnecessary NUM_CONTROLS macro in the AMD
      implementation.
      
      Signed-off-by: default avatarRobert Richter <robert.richter@amd.com>
      d0e4120f
    • Robert Richter's avatar
      oprofile/x86: rework error handler in nmi_setup() · 8f5a2dd8
      Robert Richter authored
      
      
      This patch improves the error handler in nmi_setup(). Most parts of
      the code are moved to allocate_msrs(). In case of an error
      allocate_msrs() also frees already allocated memory. nmi_setup()
      becomes easier and better extendable.
      
      Signed-off-by: default avatarRobert Richter <robert.richter@amd.com>
      8f5a2dd8
    • Robert Richter's avatar
      oprofile: update file list in MAINTAINERS file · 81c4a8a6
      Robert Richter authored
      
      
      File list now catches:
      
       $ xargs | eval ls -d $(cat) | sort -u
       arch/*/include/asm/oprofile*.h
       arch/*/oprofile/
       drivers/oprofile/
       include/linux/oprofile.h
      
       arch/alpha/oprofile/
       arch/arm/oprofile/
       arch/avr32/oprofile/
       arch/blackfin/oprofile/
       arch/ia64/oprofile/
       arch/m32r/oprofile/
       arch/microblaze/oprofile/
       arch/mips/oprofile/
       arch/mn10300/oprofile/
       arch/parisc/oprofile/
       arch/powerpc/include/asm/oprofile_impl.h
       arch/powerpc/oprofile/
       arch/s390/oprofile/
       arch/sh/oprofile/
       arch/sparc/oprofile/
       arch/x86/oprofile/
       drivers/oprofile/
       include/linux/oprofile.h
      
      Signed-off-by: default avatarRobert Richter <robert.richter@amd.com>
      81c4a8a6
    • Phil Carmody's avatar
      oprofile: protect from not being in an IRQ context · 9414e996
      Phil Carmody authored
      http://lkml.org/lkml/2010/4/27/285
      
      
      
      Protect against dereferencing regs when it's NULL, and
      force a magic number into pc to prevent too deep processing.
      This approach permits the dropped samples to be tallied as
      invalid Instruction Pointer events.
      
      e.g. output from about 15mins at 10kHz sample rate:
      Nr. samples received: 2565380
      Nr. samples lost invalid pc: 4
      
      Signed-off-by: default avatarPhil Carmody <ext-phil.2.carmody@nokia.com>
      Signed-off-by: default avatarRobert Richter <robert.richter@amd.com>
      9414e996
  2. Apr 23, 2010
  3. Apr 20, 2010
    • Linus Torvalds's avatar
      Linux 2.6.34-rc5 · 01bf0b64
      Linus Torvalds authored
      01bf0b64
    • Rik van Riel's avatar
      rmap: add exclusively owned pages to the newest anon_vma · e8a03feb
      Rik van Riel authored
      
      
      The recent anon_vma fixes cause many anonymous pages to end up
      in the parent process anon_vma, even when the page is exclusively
      owned by the current process.
      
      Adding exclusively owned anonymous pages to the top anon_vma
      reduces rmap scanning overhead, especially in workloads with
      forking servers.
      
      This patch adds a parameter to __page_set_anon_rmap that can
      be used to indicate whether or not the added page is exclusively
      owned by the current process.
      
      Pages added through page_add_new_anon_rmap are exclusively
      owned by the current process, and can be added to the top
      anon_vma.
      
      Pages added through page_add_anon_rmap can be either shared
      or exclusively owned, so we do the conservative thing and
      add it to the oldest anon_vma.
      
      A next step would be to add the exclusive parameter to
      page_add_anon_rmap, to be used from functions where we do
      know for sure whether a page is exclusively owned.
      
      Signed-off-by: default avatarRik van Riel <riel@redhat.com>
      Reviewed-by: Joha...
      e8a03feb
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ecryptfs/ecryptfs-2.6 · 9b030e20
      Linus Torvalds authored
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ecryptfs/ecryptfs-2.6:
        eCryptfs: Turn lower lookup error messages into debug messages
        eCryptfs: Copy lower directory inode times and size on link
        ecryptfs: fix use with tmpfs by removing d_drop from ecryptfs_destroy_inode
        ecryptfs: fix error code for missing xattrs in lower fs
        eCryptfs: Decrypt symlink target for stat size
        eCryptfs: Strip metadata in xattr flag in encrypted view
        eCryptfs: Clear buffer before reading in metadata xattr
        eCryptfs: Rename ecryptfs_crypt_stat.num_header_bytes_at_front
        eCryptfs: Fix metadata in xattr feature regression
      9b030e20
    • Tyler Hicks's avatar
      eCryptfs: Turn lower lookup error messages into debug messages · 9f37622f
      Tyler Hicks authored
      
      
      Vaugue warnings about ENAMETOOLONG errors when looking up an encrypted
      file name have caused many users to become concerned about their data.
      Since this is a rather harmless condition, I'm moving this warning to
      only be printed when the ecryptfs_verbosity module param is 1.
      
      Signed-off-by: default avatarTyler Hicks <tyhicks@linux.vnet.ibm.com>
      9f37622f
    • Tyler Hicks's avatar
      eCryptfs: Copy lower directory inode times and size on link · 3a8380c0
      Tyler Hicks authored
      
      
      The timestamps and size of a lower inode involved in a link() call was
      being copied to the upper parent inode.  Instead, we should be
      copying lower parent inode's timestamps and size to the upper parent
      inode.  I discovered this bug using the POSIX test suite at Tuxera.
      
      Signed-off-by: default avatarTyler Hicks <tyhicks@linux.vnet.ibm.com>
      3a8380c0
    • Jeff Mahoney's avatar
      ecryptfs: fix use with tmpfs by removing d_drop from ecryptfs_destroy_inode · 133b8f9d
      Jeff Mahoney authored
      Since tmpfs has no persistent storage, it pins all its dentries in memory
      so they have d_count=1 when other file systems would have d_count=0.
      ->lookup is only used to create new dentries. If the caller doesn't
      instantiate it, it's freed immediately at dput(). ->readdir reads
      directly from the dcache and depends on the dentries being hashed.
      
      When an ecryptfs mount is mounted, it associates the lower file and dentry
      with the ecryptfs files as they're accessed. When it's umounted and
      destroys all the in-memory ecryptfs inodes, it fput's the lower_files and
      d_drop's the lower_dentries. Commit 4981e081 added this and a d_delete in
      2008 and several months later commit caeeeecf removed the d_delete. I
      believe the d_drop() needs to be removed as well.
      
      The d_drop effectively hides any file that has been accessed via ecryptfs
      from the underlying tmpfs since it depends on it being hashed for it to
      be accessible. I've removed the d_drop on my development node and see no
      ill effects with basic testing on both tmpfs and persistent storage.
      
      As a side effect, after ecryptfs d_drops the dentries on tmpfs, tmpfs
      BUGs on umount. This is due to the dentries being unhashed.
      tmpfs->kill_sb is kill_litter_super which calls d_genocide to drop
      the reference pinning the dentry. It skips unhashed and negative dentries,
      but shrink_dcache_for_umount_subtree doesn't. Since those dentries
      still have an elevated d_count, we get a BUG().
      
      This patch removes the d_drop call and fixes both issues.
      
      This issue was reported at:
      https://bugzilla.novell.com/show_bug.cgi?id=567887
      
      
      
      Reported-by: default avatarÁrpád Bíró <biroa@demasz.hu>
      Signed-off-by: default avatarJeff Mahoney <jeffm@suse.com>
      Cc: Dustin Kirkland <kirkland@canonical.com>
      Cc: stable@kernel.org
      Signed-off-by: default avatarTyler Hicks <tyhicks@linux.vnet.ibm.com>
      133b8f9d
    • Christian Pulvermacher's avatar
      ecryptfs: fix error code for missing xattrs in lower fs · cfce08c6
      Christian Pulvermacher authored
      
      
      If the lower file system driver has extended attributes disabled,
      ecryptfs' own access functions return -ENOSYS instead of -EOPNOTSUPP.
      This breaks execution of programs in the ecryptfs mount, since the
      kernel expects the latter error when checking for security
      capabilities in xattrs.
      
      Signed-off-by: default avatarChristian Pulvermacher <pulvermacher@gmx.de>
      Cc: stable@kernel.org
      Signed-off-by: default avatarTyler Hicks <tyhicks@linux.vnet.ibm.com>
      cfce08c6
    • Tyler Hicks's avatar
      eCryptfs: Decrypt symlink target for stat size · 3a60a168
      Tyler Hicks authored
      Create a getattr handler for eCryptfs symlinks that is capable of
      reading the lower target and decrypting its path.  Prior to this patch,
      a stat's st_size field would represent the strlen of the encrypted path,
      while readlink() would return the strlen of the decrypted path.  This
      could lead to confusion in some userspace applications, since the two
      values should be equal.
      
      https://bugs.launchpad.net/bugs/524919
      
      
      
      Reported-by: default avatarLoïc Minier <loic.minier@canonical.com>
      Cc: stable@kernel.org
      Signed-off-by: default avatarTyler Hicks <tyhicks@linux.vnet.ibm.com>
      3a60a168
    • Linus Torvalds's avatar
      Fix ISDN/Gigaset build failure · 76e506a7
      Linus Torvalds authored
      Commit b91ecb00
      
       ("gigaset: include cleanup cleanup") removed an implicit
      sched.h inclusion that came in via slab.h, and caused various compile
      problems as a result.
      
      This should fix it.
      
      Reported-by: default avatarIngo Molnar <mingo@elte.hu>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      76e506a7
  4. Apr 19, 2010
  5. Apr 18, 2010