1. 28 3月, 2011 4 次提交
    • D
      btrfs: properly access unaligned checksum buffer · 7e75bf3f
      David Sterba 提交于
      On Fri, Mar 18, 2011 at 11:56:53AM -0400, Chris Mason wrote:
      > Thanks for fielding this one.  Does put_unaligned_le32 optimize away on
      > platforms with efficient access?  It would be great if we didn't need
      > the #ifdef.
      
      (quicktest: assembly output is same for put_unaligned_le32 and direct
      assignment on my x86_64)
      I was originally following examples in
      Documentation/unaligned-memory-access.txt. From other code it seems to me that
      the define CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is intended for larger
      portions of code. Macros/wrappers for {put,get}_unaligned* are chosen via
      arch/<arch>/include/asm/unaligned.h accordingly, therefore it's safe to use
      put_unaligned_le32 without the ifdef.
      
      dave
      Signed-off-by: NChris Mason <chris.mason@oracle.com>
      7e75bf3f
    • T
      Btrfs: cleanup some BUG_ON() · db5b493a
      Tsutomu Itoh 提交于
      This patch changes some BUG_ON() to the error return.
      (but, most callers still use BUG_ON())
      Signed-off-by: NTsutomu Itoh <t-itoh@jp.fujitsu.com>
      Signed-off-by: NChris Mason <chris.mason@oracle.com>
      db5b493a
    • L
      Btrfs: add initial tracepoint support for btrfs · 1abe9b8a
      liubo 提交于
      Tracepoints can provide insight into why btrfs hits bugs and be greatly
      helpful for debugging, e.g
                    dd-7822  [000]  2121.641088: btrfs_inode_request: root = 5(FS_TREE), gen = 4, ino = 256, blocks = 8, disk_i_size = 0, last_trans = 8, logged_trans = 0
                    dd-7822  [000]  2121.641100: btrfs_inode_new: root = 5(FS_TREE), gen = 8, ino = 257, blocks = 0, disk_i_size = 0, last_trans = 0, logged_trans = 0
       btrfs-transacti-7804  [001]  2146.935420: btrfs_cow_block: root = 2(EXTENT_TREE), refs = 2, orig_buf = 29368320 (orig_level = 0), cow_buf = 29388800 (cow_level = 0)
       btrfs-transacti-7804  [001]  2146.935473: btrfs_cow_block: root = 1(ROOT_TREE), refs = 2, orig_buf = 29364224 (orig_level = 0), cow_buf = 29392896 (cow_level = 0)
       btrfs-transacti-7804  [001]  2146.972221: btrfs_transaction_commit: root = 1(ROOT_TREE), gen = 8
         flush-btrfs-2-7821  [001]  2155.824210: btrfs_chunk_alloc: root = 3(CHUNK_TREE), offset = 1103101952, size = 1073741824, num_stripes = 1, sub_stripes = 0, type = DATA
         flush-btrfs-2-7821  [001]  2155.824241: btrfs_cow_block: root = 2(EXTENT_TREE), refs = 2, orig_buf = 29388800 (orig_level = 0), cow_buf = 29396992 (cow_level = 0)
         flush-btrfs-2-7821  [001]  2155.824255: btrfs_cow_block: root = 4(DEV_TREE), refs = 2, orig_buf = 29372416 (orig_level = 0), cow_buf = 29401088 (cow_level = 0)
         flush-btrfs-2-7821  [000]  2155.824329: btrfs_cow_block: root = 3(CHUNK_TREE), refs = 2, orig_buf = 20971520 (orig_level = 0), cow_buf = 20975616 (cow_level = 0)
       btrfs-endio-wri-7800  [001]  2155.898019: btrfs_cow_block: root = 5(FS_TREE), refs = 2, orig_buf = 29384704 (orig_level = 0), cow_buf = 29405184 (cow_level = 0)
       btrfs-endio-wri-7800  [001]  2155.898043: btrfs_cow_block: root = 7(CSUM_TREE), refs = 2, orig_buf = 29376512 (orig_level = 0), cow_buf = 29409280 (cow_level = 0)
      
      Here is what I have added:
      
      1) ordere_extent:
              btrfs_ordered_extent_add
              btrfs_ordered_extent_remove
              btrfs_ordered_extent_start
              btrfs_ordered_extent_put
      
      These provide critical information to understand how ordered_extents are
      updated.
      
      2) extent_map:
              btrfs_get_extent
      
      extent_map is used in both read and write cases, and it is useful for tracking
      how btrfs specific IO is running.
      
      3) writepage:
              __extent_writepage
              btrfs_writepage_end_io_hook
      
      Pages are cirtical resourses and produce a lot of corner cases during writeback,
      so it is valuable to know how page is written to disk.
      
      4) inode:
              btrfs_inode_new
              btrfs_inode_request
              btrfs_inode_evict
      
      These can show where and when a inode is created, when a inode is evicted.
      
      5) sync:
              btrfs_sync_file
              btrfs_sync_fs
      
      These show sync arguments.
      
      6) transaction:
              btrfs_transaction_commit
      
      In transaction based filesystem, it will be useful to know the generation and
      who does commit.
      
      7) back reference and cow:
      	btrfs_delayed_tree_ref
      	btrfs_delayed_data_ref
      	btrfs_delayed_ref_head
      	btrfs_cow_block
      
      Btrfs natively supports back references, these tracepoints are helpful on
      understanding btrfs's COW mechanism.
      
      8) chunk:
      	btrfs_chunk_alloc
      	btrfs_chunk_free
      
      Chunk is a link between physical offset and logical offset, and stands for space
      infomation in btrfs, and these are helpful on tracing space things.
      
      9) reserved_extent:
      	btrfs_reserved_extent_alloc
      	btrfs_reserved_extent_free
      
      These can show how btrfs uses its space.
      Signed-off-by: NLiu Bo <liubo2009@cn.fujitsu.com>
      Signed-off-by: NChris Mason <chris.mason@oracle.com>
      1abe9b8a
    • C
      Btrfs: use RCU instead of a spinlock to protect the root node · 240f62c8
      Chris Mason 提交于
      The pointer to the extent buffer for the root of each tree
      is protected by a spinlock so that we can safely read the pointer
      and take a reference on the extent buffer.
      
      But now that the extent buffers are freed via RCU, we can safely
      use rcu_read_lock instead.
      Signed-off-by: NChris Mason <chris.mason@oracle.com>
      240f62c8
  2. 26 3月, 2011 3 次提交
    • J
      Btrfs: mark the bio with an error if we have a failure in dio · c0da7aa1
      Josef Bacik 提交于
      I noticed that dio_end_io calls the appropriate endio function with an error,
      but the endio functions don't actually do anything with that error, they assume
      that if there was an error then the bio will not be uptodate.  So if we had
      checksum failures we would never pass back EIO.  So if there is an error in our
      endio functions make sure to clear the uptodate flag on the bio.  Thanks,
      Signed-off-by: NJosef Bacik <josef@redhat.com>
      c0da7aa1
    • J
      Btrfs: don't allocate dip->csums when doing writes · 98bc3149
      Josef Bacik 提交于
      When doing direct writes we store the checksums in the ordered sum stuff in the
      ordered extent for writing them when the write completes, so we don't even use
      the dip->csums array.  So if we're writing, don't bother allocating dip->csums
      since we won't use it anyway.  Thanks,
      Signed-off-by: NJosef Bacik <josef@redhat.com>
      98bc3149
    • J
      Btrfs: cleanup how we setup free space clusters · 4e69b598
      Josef Bacik 提交于
      This patch makes the free space cluster refilling code a little easier to
      understand, and fixes some things with the bitmap part of it.  Currently we
      either want to refill a cluster with
      
      1) All normal extent entries (those without bitmaps)
      2) A bitmap entry with enough space
      
      The current code has this ugly jump around logic that will first try and fill up
      the cluster with extent entries and then if it can't do that it will try and
      find a bitmap to use.  So instead split this out into two functions, one that
      tries to find only normal entries, and one that tries to find bitmaps.
      
      This also fixes a suboptimal thing we would do with bitmaps.  If we used a
      bitmap we would just tell the cluster that we were pointing at a bitmap and it
      would do the tree search in the block group for that entry every time we tried
      to make an allocation.  Instead of doing that now we just add it to the clusters
      group.
      
      I tested this with my ENOSPC tests and xfstests and it survived.
      Signed-off-by: NJosef Bacik <josef@redhat.com>
      4e69b598
  3. 21 3月, 2011 3 次提交
    • J
      Btrfs: don't be as aggressive about using bitmaps · 32cb0840
      Josef Bacik 提交于
      We have been creating bitmaps for small extents unconditionally forever.  This
      was great when testing to make sure the bitmap stuff was working, but is
      overkill normally.  So instead of always adding small chunks of free space to
      bitmaps, only start doing it if we go past half of our extent threshold.  This
      will keeps us from creating a bitmap for just one small free extent at the front
      of the block group, and will make the allocator a little faster as a result.
      Thanks,
      Signed-off-by: NJosef Bacik <josef@redhat.com>
      32cb0840
    • J
      Btrfs: deal with min_bytes appropriately when looking for a cluster · d0a365e8
      Josef Bacik 提交于
      We do all this fun stuff with min_bytes, but either don't use it in the case of
      just normal extents, or use it completely wrong in the case of bitmaps.  So fix
      this for both cases
      
      1) In the extent case, stop looking for space with window_free >= min_bytes
      instead of bytes + empty_size.
      
      2) In the bitmap case, we were looking for streches of free space that was at
      least min_bytes in size, which was not right at all.  So instead search for
      stretches of free space that are at least bytes in size (this will make a
      difference when we have > page size blocks) and then only search for min_bytes
      amount of free space.
      
      Thanks,
      Reviewed-by: NLi Zefan <lizf@cn.fujitsu.com>
      Signed-off-by: NJosef Bacik <josef@redhat.com>
      d0a365e8
    • J
      Btrfs: check free space in block group before searching for a cluster · 7d0d2e8e
      Josef Bacik 提交于
      The free space cluster stuff is heavy duty, so there is no sense in going
      through the entire song and dance if there isn't enough space in the block group
      to begin with.  Thanks,
      Signed-off-by: NJosef Bacik <josef@redhat.com>
      7d0d2e8e
  4. 18 3月, 2011 16 次提交
  5. 15 3月, 2011 14 次提交
    • L
      Linux 2.6.38 · 521cb40b
      Linus Torvalds 提交于
      521cb40b
    • L
      Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-2.6-mn10300 · 59766edc
      Linus Torvalds 提交于
      * 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-2.6-mn10300:
        MN10300: atomic_read() should ensure it emits a load
        MN10300: The SMP_ICACHE_INV_FLUSH_RANGE IPI command does not exist
        MN10300: Proper use of macros get_user() in the case of incremented pointers
      59766edc
    • L
      Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/upstream-linus · 2990821d
      Linus Torvalds 提交于
      * 'upstream' of git://git.linux-mips.org/pub/scm/upstream-linus: (26 commits)
        MIPS: Alchemy: Fix reset for MTX-1 and XXS1500
        MIPS: MTX-1: Make au1000_eth probe all PHY addresses
        MIPS: Jz4740: Add HAVE_CLK
        MIPS: Move idle task creation to work queue
        MIPS, Perf-events: Use unsigned delta for right shift in event update
        MIPS, Perf-events: Work with the new callchain interface
        MIPS, Perf-events: Fix event check in validate_event()
        MIPS, Perf-events: Work with the new PMU interface
        MIPS, Perf-events: Work with irq_work
        MIPS: Fix always CONFIG_LOONGSON_UART_BASE=y
        MIPS: Loongson: Fix potentially wrong string handling
        MIPS: Fix GCC-4.6 'set but not used' warning in arch/mips/mm/init.c
        MIPS: Fix GCC-4.6 'set but not used' warning in ieee754int.h
        MIPS: Remove unused code from arch/mips/kernel/syscall.c
        MIPS: Fix GCC-4.6 'set but not used' warning in signal*.c
        MIPS: MSP: Fix MSP71xx bpci interrupt handler return value
        MIPS: Select R4K timer lib for all MSP platforms
        MIPS: Loongson: Remove ad-hoc cmdline default
        MIPS: Clear the correct flag in sysmips(MIPS_FIXADE, ...).
        MIPS: Add an unreachable return statement to satisfy buggy GCCs.
        ...
      2990821d
    • L
      Merge branch 'x86-fixes-for-linus' of... · 869c34f5
      Linus Torvalds 提交于
      Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
      
      * 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
        x86: ce4100: Set pci ops via callback instead of module init
        x86/mm: Fix pgd_lock deadlock
        x86/mm: Handle mm_fault_error() in kernel space
        x86: Don't check for BIOS corruption in first 64K when there's no need to
      869c34f5
    • L
      Revert "oom: oom_kill_process: fix the child_points logic" · 52d3c036
      Linus Torvalds 提交于
      This reverts the parent commit.  I hate doing that, but it's generating
      some discussion ("half of it is right"), and since I am planning on
      doing the 2.6.38 release later today we can punt it to stable if
      required. Let's not rock the boat right now.
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      52d3c036
    • O
      oom: oom_kill_process: fix the child_points logic · dc1b83ab
      Oleg Nesterov 提交于
      oom_kill_process() starts with victim_points == 0.  This means that
      (most likely) any child has more points and can be killed erroneously.
      
      Also, "children has a different mm" doesn't match the reality, we should
      check child->mm != t->mm.  This check is not exactly correct if t->mm ==
      NULL but this doesn't really matter, oom_kill_task() will kill them
      anyway.
      
      Note: "Kill all processes sharing p->mm" in oom_kill_task() is wrong
      too.
      Signed-off-by: NOleg Nesterov <oleg@redhat.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      dc1b83ab
    • F
      MIPS: Alchemy: Fix reset for MTX-1 and XXS1500 · 9ced9757
      Florian Fainelli 提交于
      Since commit 32fd6901 (MIPS: Alchemy: get rid of common/reset.c)
      Alchemy-based boards use their own reset function. For MTX-1 and XXS1500,
      the reset function pokes at the BCSR.SYSTEM_RESET register, but this does
      not work. According to Bruno Randolf, this was not tested when written.
      
      Previously, the generic au1000_restart() routine called the board specific
      reset function, which for MTX-1 and XXS1500 did not work, but finally made
      a jump to the reset vector, which really triggers a system restart. Fix
      reboot for both targets by jumping to the reset vector.
      Signed-off-by: NFlorian Fainelli <florian@openwrt.org>
      To: linux-mips@linux-mips.org
      Patchwork: https://patchwork.linux-mips.org/patch/2093/Acked-by: NBruno Randolf <br1@einfach.org>
      Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      9ced9757
    • F
      MIPS: MTX-1: Make au1000_eth probe all PHY addresses · bf3a1eb8
      Florian Fainelli 提交于
      When au1000_eth probes the MII bus for PHY address, if we do not set
      au1000_eth platform data's phy_search_highest_address, the MII probing
      logic will exit early and will assume a valid PHY is found at address 0.
      For MTX-1, the PHY is at address 31, and without this patch, the link
      detection/speed/duplex would not work correctly.
      
      CC: stable@kernel.org
      Signed-off-by: NFlorian Fainelli <florian@openwrt.org>
      To: linux-mips@linux-mips.org
      Patchwork: https://patchwork.linux-mips.org/patch/2111/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      bf3a1eb8
    • M
      MIPS: Jz4740: Add HAVE_CLK · ab5330eb
      Maurus Cuelenaere 提交于
      Jz4740 supports the clock framework but doesn't have HAVE_CLK defined,
      so define it!
      Signed-off-by: NMaurus Cuelenaere <mcuelenaere@gmail.com>
      To: linux-mips@linux-mips.org
      To: linux-kernel@vger.kernel.org
      Patchwork: https://patchwork.linux-mips.org/patch/2112/Acked-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      ab5330eb
    • M
      MIPS: Move idle task creation to work queue · 6667deb6
      Maksim Rayskiy 提交于
      To avoid forking usermode thread when creating an idle task, move fork_idle
      to a work queue.
      
      If kernel starts with maxcpus= option which does not bring all available
      cpus online at boot time, idle tasks for offline cpus are not created. If
      later offline cpus are hotplugged through sysfs, __cpu_up is called in
      the context of the user task, and fork_idle copies its non-zero mm
      pointer.  This causes BUG() in per_cpu_trap_init.
      
      This also avoids issues with resource limits of the CPU writing to sysfs,
      containers, maybe others.
      Signed-off-by: NMaksim Rayskiy <mrayskiy@broadcom.com>
      To: linux-mips@linux-mips.org
      Patchwork: https://patchwork.linux-mips.org/patch/2070/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      6667deb6
    • D
      MIPS, Perf-events: Use unsigned delta for right shift in event update · ba9786f3
      Deng-Cheng Zhu 提交于
      Leverage the commit for ARM by Will Deacon:
      
      - 446a5a8b
          ARM: 6205/1: perf: ensure counter delta is treated as unsigned
      
          Hardware performance counters on ARM are 32-bits wide but atomic64_t
          variables are used to represent counter data in the hw_perf_event structure.
      
          The armpmu_event_update function right-shifts a signed 64-bit delta variable
          and adds the result to the event count. This can lead to shifting in sign-bits
          if the MSB of the 32-bit counter value is set. This results in perf output
          such as:
      
           Performance counter stats for 'sleep 20':
      
           18446744073460670464  cycles             <-- 0xFFFFFFFFF12A6000
                  7783773  instructions             #      0.000 IPC
                      465  context-switches
                      161  page-faults
                  1172393  branches
      
             20.154242147  seconds time elapsed
      
          This patch ensures that the delta value is treated as unsigned so that the
          right shift sets the upper bits to zero.
      Acked-by: NWill Deacon <will.deacon@arm.com>
      Acked-by: NDavid Daney <ddaney@caviumnetworks.com>
      Signed-off-by: NDeng-Cheng Zhu <dengcheng.zhu@gmail.com>
      To: a.p.zijlstra@chello.nl
      To: fweisbec@gmail.com
      To: will.deacon@arm.com
      Cc: linux-mips@linux-mips.org
      Cc: linux-kernel@vger.kernel.org
      Cc: wuzhangjin@gmail.com
      Cc: paulus@samba.org
      Cc: mingo@elte.hu
      Cc: acme@redhat.com
      Cc: matt@console-pimps.org
      Cc: sshtylyov@mvista.com
      Patchwork: http://patchwork.linux-mips.org/patch/2015/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      ba9786f3
    • D
      MIPS, Perf-events: Work with the new callchain interface · 98f92f2f
      Deng-Cheng Zhu 提交于
      This is the MIPS part of the following commits by Frederic Weisbecker:
      
      - f72c1a93
          perf: Factorize callchain context handling
      
          Store the kernel and user contexts from the generic layer instead
          of archs, this gathers some repetitive code.
      
      - 56962b44
          perf: Generalize some arch callchain code
      
          - Most archs use one callchain buffer per cpu, except x86 that needs
            to deal with NMIs. Provide a default perf_callchain_buffer()
            implementation that x86 overrides.
      
          - Centralize all the kernel/user regs handling and invoke new arch
            handlers from there: perf_callchain_user() / perf_callchain_kernel()
            That avoid all the user_mode(), current->mm checks and so...
      
          - Invert some parameters in perf_callchain_*() helpers: entry to the
            left, regs to the right, following the traditional (dst, src).
      
      - 70791ce9
          perf: Generalize callchain_store()
      
          callchain_store() is the same on every archs, inline it in
          perf_event.h and rename it to perf_callchain_store() to avoid
          any collision.
      
          This removes repetitive code.
      
      - c1a65932
          perf: Drop unappropriate tests on arch callchains
      
          Drop the TASK_RUNNING test on user tasks for callchains as
          this check doesn't seem to make any sense.
      
          Also remove the tests for !current that is not supposed to
          happen and current->pid as this should be handled at the
          generic level, with exclude_idle attribute.
      Reported-by: NWu Zhangjin <wuzhangjin@gmail.com>
      Acked-by: NFrederic Weisbecker <fweisbec@gmail.com>
      Acked-by: NDavid Daney <ddaney@caviumnetworks.com>
      Signed-off-by: NDeng-Cheng Zhu <dengcheng.zhu@gmail.com>
      To: a.p.zijlstra@chello.nl
      To: will.deacon@arm.com
      Cc: linux-mips@linux-mips.org
      Cc: linux-kernel@vger.kernel.org
      Cc: paulus@samba.org
      Cc: mingo@elte.hu
      Cc: acme@redhat.com
      Cc: dengcheng.zhu@gmail.com
      Cc: matt@console-pimps.org
      Cc: sshtylyov@mvista.com
      Patchwork: http://patchwork.linux-mips.org/patch/2014/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      98f92f2f
    • D
      MIPS, Perf-events: Fix event check in validate_event() · c049b6a5
      Deng-Cheng Zhu 提交于
      Ignore events that are in off/error state or belong to a different PMU.
      
      This patch originates from the following commit for ARM by Will Deacon:
      
      - 65b4711f
          ARM: 6352/1: perf: fix event validation
      
          The validate_event function in the ARM perf events backend has the
          following problems:
      
          1.) Events that are disabled count towards the cost.
          2.) Events associated with other PMUs [for example, software events or
              breakpoints] do not count towards the cost, but do fail validation,
              causing the group to fail.
      
          This patch changes validate_event so that it ignores events in the
          PERF_EVENT_STATE_OFF state or that are scheduled for other PMUs.
      Acked-by: NWill Deacon <will.deacon@arm.com>
      Acked-by: NDavid Daney <ddaney@caviumnetworks.com>
      Signed-off-by: NDeng-Cheng Zhu <dengcheng.zhu@gmail.com>
      To: a.p.zijlstra@chello.nl
      To: fweisbec@gmail.com
      To: will.deacon@arm.com
      Cc: linux-mips@linux-mips.org
      Cc: linux-kernel@vger.kernel.org
      Cc: wuzhangjin@gmail.com
      Cc: paulus@samba.org
      Cc: mingo@elte.hu
      Cc: acme@redhat.com
      Cc: dengcheng.zhu@gmail.com
      Cc: matt@console-pimps.org
      Cc: sshtylyov@mvista.com
      Cc: ddaney@caviumnetworks.com
      Patchwork: http://patchwork.linux-mips.org/patch/2013/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      c049b6a5
    • D
      MIPS, Perf-events: Work with the new PMU interface · 404ff638
      Deng-Cheng Zhu 提交于
      This is the MIPS part of the following commits by Peter Zijlstra:
      
      - a4eaf7f1
          perf: Rework the PMU methods
      
          Replace pmu::{enable,disable,start,stop,unthrottle} with
          pmu::{add,del,start,stop}, all of which take a flags argument.
      
          The new interface extends the capability to stop a counter while
          keeping it scheduled on the PMU. We replace the throttled state with
          the generic stopped state.
      
          This also allows us to efficiently stop/start counters over certain
          code paths (like IRQ handlers).
      
          It also allows scheduling a counter without it starting, allowing for
          a generic frozen state (useful for rotating stopped counters).
      
          The stopped state is implemented in two different ways, depending on
          how the architecture implemented the throttled state:
      
           1) We disable the counter:
              a) the pmu has per-counter enable bits, we flip that
              b) we program a NOP event, preserving the counter state
      
           2) We store the counter state and ignore all read/overflow events
      
      For MIPSXX, the stopped state is implemented in the way of 1.b as above.
      
      - 33696fc0
          perf: Per PMU disable
      
          Changes perf_disable() into perf_pmu_disable().
      
      - 24cd7f54
          perf: Reduce perf_disable() usage
      
          Since the current perf_disable() usage is only an optimization,
          remove it for now. This eases the removal of the __weak
          hw_perf_enable() interface.
      
      - b0a873eb
          perf: Register PMU implementations
      
          Simple registration interface for struct pmu, this provides the
          infrastructure for removing all the weak functions.
      
      - 51b0fe39
          perf: Deconstify struct pmu
      
          sed -ie 's/const struct pmu\>/struct pmu/g' `git grep -l "const struct pmu\>"`
      Reported-by: NWu Zhangjin <wuzhangjin@gmail.com>
      Acked-by: NDavid Daney <ddaney@caviumnetworks.com>
      Signed-off-by: NDeng-Cheng Zhu <dengcheng.zhu@gmail.com>
      To: a.p.zijlstra@chello.nl
      To: fweisbec@gmail.com
      To: will.deacon@arm.com
      Cc: linux-mips@linux-mips.org
      Cc: linux-kernel@vger.kernel.org
      Cc: wuzhangjin@gmail.com
      Cc: paulus@samba.org
      Cc: mingo@elte.hu
      Cc: acme@redhat.com
      Cc: dengcheng.zhu@gmail.com
      Cc: matt@console-pimps.org
      Cc: sshtylyov@mvista.com
      Cc: ddaney@caviumnetworks.com
      Patchwork: http://patchwork.linux-mips.org/patch/2012/Signed-off-by: NRalf Baechle <ralf@linux-mips.org>
      404ff638