15 Jan, 2012

1 commit

  • * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: (119 commits)
    MIPS: Delete unused function add_temporary_entry.
    MIPS: Set default pci cache line size.
    MIPS: Flush huge TLB
    MIPS: Octeon: Remove SYS_SUPPORTS_HIGHMEM.
    MIPS: Octeon: Add support for OCTEON II PCIe
    MIPS: Octeon: Update PCI Latency timer and enable more error reporting.
    MIPS: Alchemy: Update cpu-feature-overrides
    MIPS: Alchemy: db1200: Improve PB1200 detection.
    MIPS: Alchemy: merge Au1000 and Au1300-style IRQ controller code.
    MIPS: Alchemy: chain IRQ controllers to MIPS IRQ controller
    MIPS: Alchemy: irq: register pm at irq init time
    MIPS: Alchemy: Touchscreen support on DB1100
    MIPS: Alchemy: Hook up IrDA on DB1000/DB1100
    net/irda: convert au1k_ir to platform driver.
    MIPS: Alchemy: remove unused board headers
    MTD: nand: make au1550nd.c a platform_driver
    MIPS: Netlogic: Mark Netlogic chips as SMT capable
    MIPS: Netlogic: Add support for XLP 3XX cores
    MIPS: Netlogic: Merge some of XLR/XLP wakup code
    MIPS: Netlogic: Add default XLP config.
    ...

    Fix up trivial conflicts in arch/mips/kernel/{perf_event_mipsxx.c,
    traps.c} and drivers/tty/serial/Makefile

    Linus Torvalds
     

08 Dec, 2011

4 commits

  • Simplify the code by changing the place of event->destroy().

    Signed-off-by: Deng-Cheng Zhu
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    Cc: Ingo Molnar
    Cc: Arnaldo Carvalho de Melo
    Cc: David Daney
    Cc: Eyal Barzilay
    Cc: Zenon Fortuna
    Patchwork: https://patchwork.linux-mips.org/patch/3109/
    Signed-off-by: Ralf Baechle

    Deng-Cheng Zhu
     
  • Why removing pmu checking:
    Since 3.2-rc1, when arch level event init is called, the event is already
    connected to its PMU. Also, validate_event() is _only_ called by
    validate_group() in event init, so there is no need of checking or
    temporarily assigning event pmu during validate_group().

    Why removing event state checking:
    Events could be created in PERF_EVENT_STATE_OFF (attr->disabled == 1), when
    these events go through this checking, validate_group() does dummy work.
    But we do need to do group scheduling emulation for them in event init.
    Again, validate_event() is _only_ called by validate_group().

    Reference: http://www.spinics.net/lists/mips/msg42190.html
    Signed-off-by: Deng-Cheng Zhu
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    Cc: Ingo Molnar
    Cc: Arnaldo Carvalho de Melo
    Cc: David Daney
    Cc: Eyal Barzilay
    Cc: Zenon Fortuna
    Patchwork: https://patchwork.linux-mips.org/patch/3108/
    Signed-off-by: Ralf Baechle

    Deng-Cheng Zhu
     
  • Port the following patch for ARM by Mark Rutland:

    - 57ce9bb39b476accf8fba6e16aea67ed76ea523d
    ARM: 6902/1: perf: Remove erroneous check on active_events

    When initialising a PMU, there is a check to protect against races with
    other CPUs filling all of the available event slots. Since armpmu_add
    checks that an event can be scheduled, we do not need to do this at
    initialisation time. Furthermore the current code is broken because it
    assumes that atomic_inc_not_zero will unconditionally increment
    active_counts and then tries to decrement it again on failure.

    This patch removes the broken, redundant code.

    Signed-off-by: Deng-Cheng Zhu
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    Cc: Ingo Molnar
    Cc: Arnaldo Carvalho de Melo
    Cc: David Daney
    Cc: Eyal Barzilay
    Cc: Zenon Fortuna
    Patchwork: https://patchwork.linux-mips.org/patch/3106/
    Signed-off-by: Ralf Baechle

    Deng-Cheng Zhu
     
  • MIPS licensees may want to modify performance counters to count extra
    events. Also, now that the user is working on raw events, the manual is
    being used for sure. And feeding unsupported events shouldn't cause
    hardware failure and the like.

    [ralf@linux-mips.org: performance events also being used in internal
    performance evaluation and have a tendency to change as the micro-
    architecture evolves, even for minor revisions that may not be
    distinguishable by PrID. It's not very practicable to maintain a list
    of all events and there is no real benefit.]

    Signed-off-by: Deng-Cheng Zhu
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    Cc: Ingo Molnar
    Cc: Arnaldo Carvalho de Melo
    Cc: David Daney
    Cc: Eyal Barzilay
    Cc: Zenon Fortuna
    Patchwork: https://patchwork.linux-mips.org/patch/3107/
    Signed-off-by: Ralf Baechle

    Deng-Cheng Zhu
     

14 Nov, 2011

1 commit

  • People (Linus) objected to using -ENOSPC to signal not having enough
    resources on the PMU to satisfy the request. Use -EINVAL.

    Requested-by: Linus Torvalds
    Cc: Stephane Eranian
    Cc: Will Deacon
    Cc: Deng-Cheng Zhu
    Cc: David Daney
    Cc: Ralf Baechle
    Signed-off-by: Peter Zijlstra
    Link: http://lkml.kernel.org/n/tip-xv8geaz2zpbjhlx0svmpp28n@git.kernel.org
    [ merged to newer kernel, fixed up MIPS impact ]
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     

25 Oct, 2011

4 commits

  • Enable hardware counters for Octeon, and add the corresponding event
    mappings.

    Signed-off-by: David Daney
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    Cc: Ingo Molnar
    Cc: Arnaldo Carvalho de Melo
    Cc: Deng-Cheng Zhu
    To: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/2790/
    Signed-off-by: Ralf Baechle

    David Daney
     
  • The hard coded constants are moved to struct mips_pmu. All counter
    register access move to the read_counter and write_counter function
    pointers, which are set to either 32-bit or 64-bit access methods at
    initialization time.

    Many of the function pointers in struct mips_pmu were not needed as
    there was only a single implementation, these were removed.

    I couldn't figure out what made struct cpu_hw_events.msbs[] at all
    useful, so I removed it too.

    Some functions and other declarations were reordered to reduce the
    need for forward declarations.

    Signed-off-by: David Daney
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    Cc: Ingo Molnar
    Cc: Arnaldo Carvalho de Melo
    Cc: Deng-Cheng Zhu
    To: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/2792/
    Signed-off-by: Ralf Baechle

    David Daney
     
  • The contents of arch/mips/kernel/perf_event.c and
    arch/mips/kernel/perf_event_mipsxx.c were divided in a seemingly ad
    hoc manner, with the first including the second.

    I moved all the hardware counter support code to perf_event_mipsxx.c
    and removed the gating #ifdefs to the Kconfig and Makefile.

    Now perf_event.c contains only the callchain support, everything else
    is in perf_event_mipsxx.c

    There are no code changes, only moving of functions from one file to
    the other, or removing empty unneeded functions.

    Signed-off-by: David Daney
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    Cc: Ingo Molnar
    Cc: Arnaldo Carvalho de Melo
    Cc: Dezhong Diao
    Cc: Gabor Juhos
    Cc: Deng-Cheng Zhu
    To: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/2791/
    Signed-off-by: Ralf Baechle

    David Daney
     
  • Get rid of a bunch of useless inline declarations, and join a bunch of
    improperly split lines.

    Signed-off-by: David Daney
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    Cc: Ingo Molnar
    Cc: Arnaldo Carvalho de Melo
    Cc: Deng-Cheng Zhu
    To: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/2793/
    Signed-off-by: Ralf Baechle

    David Daney
     

01 Jul, 2011

1 commit

  • Add a NODE level to the generic cache events which is used to measure
    local vs remote memory accesses. Like all other cache events, an
    ACCESS is HIT+MISS, if there is no way to distinguish between reads
    and writes do reads only etc..

    The below needs filling out for !x86 (which I filled out with
    unsupported events).

    I'm fairly sure ARM can leave it like that since it doesn't strike me as
    an architecture that even has NUMA support. SH might have something since
    it does appear to have some NUMA bits.

    Sparc64, PowerPC and MIPS certainly want a good look there since they
    clearly are NUMA capable.

    Signed-off-by: Peter Zijlstra
    Cc: David Miller
    Cc: Anton Blanchard
    Cc: David Daney
    Cc: Deng-Cheng Zhu
    Cc: Paul Mundt
    Cc: Will Deacon
    Cc: Robert Richter
    Cc: Stephane Eranian
    Link: http://lkml.kernel.org/r/1303508226.4865.8.camel@laptop
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     

31 Mar, 2011

1 commit


15 Mar, 2011

2 commits

  • This is the MIPS part of the following commits by Peter Zijlstra:

    - a4eaf7f14675cb512d69f0c928055e73d0c6d252
    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.

    - 33696fc0d141bbbcb12f75b69608ea83282e3117
    perf: Per PMU disable

    Changes perf_disable() into perf_pmu_disable().

    - 24cd7f54a0d47e1d5b3de29e2456bfbd2d8447b7
    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.

    - b0a873ebbf87bf38bf70b5e39a7cadc96099fa13
    perf: Register PMU implementations

    Simple registration interface for struct pmu, this provides the
    infrastructure for removing all the weak functions.

    - 51b0fe39549a04858001922919ab355dee9bdfcf
    perf: Deconstify struct pmu

    sed -ie 's/const struct pmu\>/struct pmu/g' `git grep -l "const struct pmu\>"`

    Reported-by: Wu Zhangjin
    Acked-by: David Daney
    Signed-off-by: Deng-Cheng Zhu
    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: Ralf Baechle

    Deng-Cheng Zhu
     
  • This is the MIPS part of the following commit by Peter Zijlstra:

    - e360adbe29241a0194e10e20595360dd7b98a2b3
    irq_work: Add generic hardirq context callbacks

    Provide a mechanism that allows running code in IRQ context. It is
    most useful for NMI code that needs to interact with the rest of the
    system -- like wakeup a task to drain buffers.

    Perf currently has such a mechanism, so extract that and provide it as
    a generic feature, independent of perf so that others may also
    benefit.

    The IRQ context callback is generated through self-IPIs where
    possible, or on architectures like powerpc the decrementer (the
    built-in timer facility) is set to generate an interrupt immediately.

    Architectures that don't have anything like this get to do with a
    callback from the timer tick. These architectures can call
    irq_work_run() at the tail of any IRQ handlers that might enqueue such
    work (like the perf IRQ handler) to avoid undue latencies in
    processing the work.

    For MIPSXX, we need to call irq_work_run() at the tail of the perf IRQ
    handler as described above.

    Reported-by: Wu Zhangjin
    Acked-by: Peter Zijlstra
    Acked-by: David Daney
    Signed-off-by: Deng-Cheng Zhu
    To: fweisbec@gmail.com
    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: matt@console-pimps.org
    Cc: sshtylyov@mvista.com,
    Patchwork: http://patchwork.linux-mips.org/patch/2011/
    Signed-off-by: Ralf Baechle

    Deng-Cheng Zhu
     

26 Nov, 2010

1 commit

  • The perf hardware pmu got initialized at various points in the boot,
    some before early_initcall() some after (notably arch_initcall).

    The problem is that the NMI lockup detector is ran from early_initcall()
    and expects the hardware pmu to be present.

    Sanitize this by moving all architecture hardware pmu implementations to
    initialize at early_initcall() and move the lockup detector to an explicit
    initcall right after that.

    Cc: paulus
    Cc: davem
    Cc: Michael Cree
    Cc: Deng-Cheng Zhu
    Acked-by: Paul Mundt
    Acked-by: Will Deacon
    Signed-off-by: Peter Zijlstra
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     

30 Oct, 2010

1 commit

  • This patch adds the mipsxx Perf-events support based on the skeleton.
    Generic hardware events and cache events are now fully implemented for
    the 24K/34K/74K/1004K cores. To support other cores in mipsxx (such as
    R10000/SB1), the generic hardware event tables and cache event tables
    need to be filled out. To support other CPUs which have different PMU
    than mipsxx, such as RM9000 and LOONGSON2, the additional files
    perf_event_$cpu.c need to be created.

    Raw event is an important part of Perf-events. It helps the user collect
    performance data for events that are not listed as the generic hardware
    events and cache events but ARE supported by the CPU's PMU.

    This patch also adds this feature for mipsxx 24K/34K/74K/1004K. For how to
    use it, please refer to processor core software user's manual and the
    comments for mipsxx_pmu_map_raw_event() for more details.

    Please note that this is a "precise" implementation, which means the
    kernel will check whether the requested raw events are supported by this
    CPU and which hardware counters can be assigned for them.

    To test the functionality of Perf-event, you may want to compile the tool
    "perf" for your MIPS platform. You can refer to the following URL:
    http://www.linux-mips.org/archives/linux-mips/2010-10/msg00126.html

    You also need to customize the CFLAGS and LDFLAGS in tools/perf/Makefile
    for your libs, includes, etc.

    In case you encounter the boot failure in SMVP kernel on multi-threading
    CPUs, you may take a look at:
    http://www.linux-mips.org/git?p=linux-mti.git;a=commitdiff;h=5460815027d802697b879644c74f0e8365254020

    Signed-off-by: Deng-Cheng Zhu
    To: linux-mips@linux-mips.org
    Cc: a.p.zijlstra@chello.nl
    Cc: paulus@samba.org
    Cc: mingo@elte.hu
    Cc: acme@redhat.com
    Cc: jamie.iles@picochip.com
    Cc: ddaney@caviumnetworks.com
    Cc: matt@console-pimps.org
    Patchwork: https://patchwork.linux-mips.org/patch/1689/
    Signed-off-by: Ralf Baechle

    create mode 100644 arch/mips/kernel/perf_event_mipsxx.c

    Deng-Cheng Zhu