02 Jul, 2012

1 commit

  • We have a bug report where the kernel hits a warning in the cpumask
    code:

    WARNING: at include/linux/cpumask.h:107

    Which is:
    WARN_ON_ONCE(cpu >= nr_cpumask_bits);

    The backtrace is:
    cpu_cmd
    cmds
    xmon_core
    xmon
    die

    xmon is iterating through 0 to NR_CPUS. I'm not sure why we are still
    open coding this but iterating above nr_cpu_ids is definitely a bug.

    This patch iterates through all possible cpus, in case we issue a
    system reset and CPUs in an offline state call in.

    Perhaps the old code was trying to handle CPUs that were in the
    partition but were never started (eg kexec into a kernel with an
    nr_cpus= boot option). They are going to die way before we get into
    xmon since we haven't set any kernel state up for them.

    Signed-off-by: Anton Blanchard
    CC:
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     

29 Mar, 2012

2 commits

  • …m/linux/kernel/git/dhowells/linux-asm_system

    Pull "Disintegrate and delete asm/system.h" from David Howells:
    "Here are a bunch of patches to disintegrate asm/system.h into a set of
    separate bits to relieve the problem of circular inclusion
    dependencies.

    I've built all the working defconfigs from all the arches that I can
    and made sure that they don't break.

    The reason for these patches is that I recently encountered a circular
    dependency problem that came about when I produced some patches to
    optimise get_order() by rewriting it to use ilog2().

    This uses bitops - and on the SH arch asm/bitops.h drags in
    asm-generic/get_order.h by a circuituous route involving asm/system.h.

    The main difficulty seems to be asm/system.h. It holds a number of
    low level bits with no/few dependencies that are commonly used (eg.
    memory barriers) and a number of bits with more dependencies that
    aren't used in many places (eg. switch_to()).

    These patches break asm/system.h up into the following core pieces:

    (1) asm/barrier.h

    Move memory barriers here. This already done for MIPS and Alpha.

    (2) asm/switch_to.h

    Move switch_to() and related stuff here.

    (3) asm/exec.h

    Move arch_align_stack() here. Other process execution related bits
    could perhaps go here from asm/processor.h.

    (4) asm/cmpxchg.h

    Move xchg() and cmpxchg() here as they're full word atomic ops and
    frequently used by atomic_xchg() and atomic_cmpxchg().

    (5) asm/bug.h

    Move die() and related bits.

    (6) asm/auxvec.h

    Move AT_VECTOR_SIZE_ARCH here.

    Other arch headers are created as needed on a per-arch basis."

    Fixed up some conflicts from other header file cleanups and moving code
    around that has happened in the meantime, so David's testing is somewhat
    weakened by that. We'll find out anything that got broken and fix it..

    * tag 'split-asm_system_h-for-linus-20120328' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-asm_system: (38 commits)
    Delete all instances of asm/system.h
    Remove all #inclusions of asm/system.h
    Add #includes needed to permit the removal of asm/system.h
    Move all declarations of free_initmem() to linux/mm.h
    Disintegrate asm/system.h for OpenRISC
    Split arch_align_stack() out from asm-generic/system.h
    Split the switch_to() wrapper out of asm-generic/system.h
    Move the asm-generic/system.h xchg() implementation to asm-generic/cmpxchg.h
    Create asm-generic/barrier.h
    Make asm-generic/cmpxchg.h #include asm-generic/cmpxchg-local.h
    Disintegrate asm/system.h for Xtensa
    Disintegrate asm/system.h for Unicore32 [based on ver #3, changed by gxt]
    Disintegrate asm/system.h for Tile
    Disintegrate asm/system.h for Sparc
    Disintegrate asm/system.h for SH
    Disintegrate asm/system.h for Score
    Disintegrate asm/system.h for S390
    Disintegrate asm/system.h for PowerPC
    Disintegrate asm/system.h for PA-RISC
    Disintegrate asm/system.h for MN10300
    ...

    Linus Torvalds
     
  • Disintegrate asm/system.h for PowerPC.

    Signed-off-by: David Howells
    Acked-by: Benjamin Herrenschmidt
    cc: linuxppc-dev@lists.ozlabs.org

    David Howells
     

25 Mar, 2012

1 commit

  • Pull cleanup from Paul Gortmaker:
    "The changes shown here are to unify linux's BUG support under the one
    file. Due to historical reasons, we have some BUG code
    in bug.h and some in kernel.h -- i.e. the support for BUILD_BUG in
    linux/kernel.h predates the addition of linux/bug.h, but old code in
    kernel.h wasn't moved to bug.h at that time. As a band-aid, kernel.h
    was including to pseudo link them.

    This has caused confusion[1] and general yuck/WTF[2] reactions. Here
    is an example that violates the principle of least surprise:

    CC lib/string.o
    lib/string.c: In function 'strlcat':
    lib/string.c:225:2: error: implicit declaration of function 'BUILD_BUG_ON'
    make[2]: *** [lib/string.o] Error 1
    $
    $ grep linux/bug.h lib/string.c
    #include
    $

    We've included for the BUG infrastructure and yet we
    still get a compile fail! [We've not kernel.h for BUILD_BUG_ON.] Ugh -
    very confusing for someone who is new to kernel development.

    With the above in mind, the goals of this changeset are:

    1) find and fix any include/*.h files that were relying on the
    implicit presence of BUG code.
    2) find and fix any C files that were consuming kernel.h and hence
    relying on implicitly getting some/all BUG code.
    3) Move the BUG related code living in kernel.h to
    4) remove the asm/bug.h from kernel.h to finally break the chain.

    During development, the order was more like 3-4, build-test, 1-2. But
    to ensure that git history for bisect doesn't get needless build
    failures introduced, the commits have been reorderd to fix the problem
    areas in advance.

    [1] https://lkml.org/lkml/2012/1/3/90
    [2] https://lkml.org/lkml/2012/1/17/414"

    Fix up conflicts (new radeon file, reiserfs header cleanups) as per Paul
    and linux-next.

    * tag 'bug-for-3.4' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux:
    kernel.h: doesn't explicitly use bug.h, so don't include it.
    bug: consolidate BUILD_BUG_ON with other bug code
    BUG: headers with BUG/BUG_ON etc. need linux/bug.h
    bug.h: add include of it to various implicit C users
    lib: fix implicit users of kernel.h for TAINT_WARN
    spinlock: macroize assert_spin_locked to avoid bug.h dependency
    x86: relocate get/set debugreg fcns to include/asm/debugreg.

    Linus Torvalds
     

21 Mar, 2012

1 commit


09 Mar, 2012

2 commits

  • The current implementation of lazy interrupts handling has some
    issues that this tries to address.

    We don't do the various workarounds we need to do when re-enabling
    interrupts in some cases such as when returning from an interrupt
    and thus we may still lose or get delayed decrementer or doorbell
    interrupts.

    The current scheme also makes it much harder to handle the external
    "edge" interrupts provided by some BookE processors when using the
    EPR facility (External Proxy) and the Freescale Hypervisor.

    Additionally, we tend to keep interrupts hard disabled in a number
    of cases, such as decrementer interrupts, external interrupts, or
    when a masked decrementer interrupt is pending. This is sub-optimal.

    This is an attempt at fixing it all in one go by reworking the way
    we do the lazy interrupt disabling from the ground up.

    The base idea is to replace the "hard_enabled" field with a
    "irq_happened" field in which we store a bit mask of what interrupt
    occurred while soft-disabled.

    When re-enabling, either via arch_local_irq_restore() or when returning
    from an interrupt, we can now decide what to do by testing bits in that
    field.

    We then implement replaying of the missed interrupts either by
    re-using the existing exception frame (in exception exit case) or via
    the creation of a new one from an assembly trampoline (in the
    arch_local_irq_enable case).

    This removes the need to play with the decrementer to try to create
    fake interrupts, among others.

    In addition, this adds a few refinements:

    - We no longer hard disable decrementer interrupts that occur
    while soft-disabled. We now simply bump the decrementer back to max
    (on BookS) or leave it stopped (on BookE) and continue with hard interrupts
    enabled, which means that we'll potentially get better sample quality from
    performance monitor interrupts.

    - Timer, decrementer and doorbell interrupts now hard-enable
    shortly after removing the source of the interrupt, which means
    they no longer run entirely hard disabled. Again, this will improve
    perf sample quality.

    - On Book3E 64-bit, we now make the performance monitor interrupt
    act as an NMI like Book3S (the necessary C code for that to work
    appear to already be present in the FSL perf code, notably calling
    nmi_enter instead of irq_enter). (This also fixes a bug where BookE
    perfmon interrupts could clobber r14 ... oops)

    - We could make "masked" decrementer interrupts act as NMIs when doing
    timer-based perf sampling to improve the sample quality.

    Signed-off-by-yet: Benjamin Herrenschmidt
    ---

    v2:

    - Add hard-enable to decrementer, timer and doorbells
    - Fix CR clobber in masked irq handling on BookE
    - Make embedded perf interrupt act as an NMI
    - Add a PACA_HAPPENED_EE_EDGE for use by FSL if they want
    to retrigger an interrupt without preventing hard-enable

    v3:

    - Fix or vs. ori bug on Book3E
    - Fix enabling of interrupts for some exceptions on Book3E

    v4:

    - Fix resend of doorbells on return from interrupt on Book3E

    v5:

    - Rebased on top of my latest series, which involves some significant
    rework of some aspects of the patch.

    v6:
    - 32-bit compile fix
    - more compile fixes with various .config combos
    - factor out the asm code to soft-disable interrupts
    - remove the C wrapper around preempt_schedule_irq

    v7:
    - Fix a bug with hard irq state tracking on native power7

    Benjamin Herrenschmidt
     
  • Also use local_paca instead of get_paca() to avoid getting into
    the smp_processor_id() debugging code from the debugger

    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     

01 Mar, 2012

1 commit


25 Nov, 2011

2 commits


07 Nov, 2011

1 commit

  • * 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux: (230 commits)
    Revert "tracing: Include module.h in define_trace.h"
    irq: don't put module.h into irq.h for tracking irqgen modules.
    bluetooth: macroize two small inlines to avoid module.h
    ip_vs.h: fix implicit use of module_get/module_put from module.h
    nf_conntrack.h: fix up fallout from implicit moduleparam.h presence
    include: replace linux/module.h with "struct module" wherever possible
    include: convert various register fcns to macros to avoid include chaining
    crypto.h: remove unused crypto_tfm_alg_modname() inline
    uwb.h: fix implicit use of asm/page.h for PAGE_SIZE
    pm_runtime.h: explicitly requires notifier.h
    linux/dmaengine.h: fix implicit use of bitmap.h and asm/page.h
    miscdevice.h: fix up implicit use of lists and types
    stop_machine.h: fix implicit use of smp.h for smp_processor_id
    of: fix implicit use of errno.h in include/linux/of.h
    of_platform.h: delete needless include
    acpi: remove module.h include from platform/aclinux.h
    miscdevice.h: delete unnecessary inclusion of module.h
    device_cgroup.h: delete needless include
    net: sch_generic remove redundant use of
    net: inet_timewait_sock doesnt need
    ...

    Fix up trivial conflicts (other header files, and removal of the ab3550 mfd driver) in
    - drivers/media/dvb/frontends/dibx000_common.c
    - drivers/media/video/{mt9m111.c,ov6650.c}
    - drivers/mfd/ab3550-core.c
    - include/linux/dmaengine.h

    Linus Torvalds
     

01 Nov, 2011

1 commit


29 Sep, 2011

1 commit

  • Based on patch by David Gibson

    xmon has a longstanding bug on systems which are SMP-capable but lack
    the MSR[RI] bit. In these cases, xmon invoked by IPI on secondary
    CPUs will not properly keep quiet, but will print stuff, thereby
    garbling the primary xmon's output. This patch fixes it, by ignoring
    the RI bit if the processor does not support it.

    There's already a version of this for 4xx upstream, which we'll need
    to extend to other RI-lacking CPUs at some point. For now this adds
    Book3e processors to the mix.

    Signed-off-by: Jimi Xenidis
    Signed-off-by: Benjamin Herrenschmidt

    Jimi Xenidis
     

19 May, 2011

1 commit

  • The only user of MSG_ALL_BUT_SELF in the whole kernel tree is powerpc,
    and it only uses it to start the debugger. Both debuggers always call
    smp_send_debugger_break with MSG_ALL_BUT_SELF, and only mpic can do
    anything more optimal than a loop over all online cpus, but all message
    passing implementations have to code for this special delivery target.

    Convert smp_send_debugger_break to take void and loop calling the smp_ops
    message_pass function for each of the other cpus in the online cpumask.

    Use raw_smp_processor_id() because we are either entering the debugger
    or trying to start kdump and the additional warning it not useful were
    it to trigger.

    Signed-off-by: Milton Miller
    Signed-off-by: Benjamin Herrenschmidt

    Milton Miller
     

04 May, 2011

2 commits

  • Adapt new API.

    Almost change is trivial. Most important change is the below line
    because we plan to change task->cpus_allowed implementation.

    - ctx->cpus_allowed = current->cpus_allowed;

    Signed-off-by: KOSAKI Motohiro
    Signed-off-by: Benjamin Herrenschmidt

    KOSAKI Motohiro
     
  • Recent 64-bit server processors (POWER6 and POWER7) have a "Come-From
    Address Register" (CFAR), that records the address of the most recent
    branch or rfid (return from interrupt) instruction for debugging purposes.

    This saves the value of the CFAR in the exception entry code and stores
    it in the exception frame. We also make xmon print the CFAR value in
    its register dump code.

    Rather than extend the pt_regs struct at this time, we steal the orig_gpr3
    field, which is only used for system calls, and use it for the CFAR value
    for all exceptions/interrupts other than system calls. This means we
    don't save the CFAR on system calls, which is not a great problem since
    system calls tend not to happen unexpectedly, and also avoids adding the
    overhead of reading the CFAR to the system call entry path.

    Signed-off-by: Paul Mackerras
    Signed-off-by: Benjamin Herrenschmidt

    Paul Mackerras
     

27 Apr, 2011

2 commits


25 Mar, 2011

1 commit

  • Commit ddd588b5dd55 ("oom: suppress nodes that are not allowed from
    meminfo on oom kill") moved lib/show_mem.o out of lib/lib.a, which
    resulted in build warnings on all architectures that implement their own
    versions of show_mem():

    lib/lib.a(show_mem.o): In function `show_mem':
    show_mem.c:(.text+0x1f4): multiple definition of `show_mem'
    arch/sparc/mm/built-in.o:(.text+0xd70): first defined here

    The fix is to remove __show_mem() and add its argument to show_mem() in
    all implementations to prevent this breakage.

    Architectures that implement their own show_mem() actually don't do
    anything with the argument yet, but they could be made to filter nodes
    that aren't allowed in the current context in the future just like the
    generic implementation.

    Reported-by: Stephen Rothwell
    Reported-by: James Bottomley
    Suggested-by: Andrew Morton
    Signed-off-by: David Rientjes
    Signed-off-by: Linus Torvalds

    David Rientjes
     

13 Oct, 2010

1 commit


20 Aug, 2010

1 commit


14 Jul, 2010

1 commit


03 Feb, 2010

1 commit


24 Nov, 2009

1 commit


27 Oct, 2009

1 commit

  • Prior to the arch/ppc -> arch/powerpc transition, xmon had support for single
    stepping on 4xx boards. The functionality was lost when arch/ppc was removed.
    This patch restores single step support for 44x boards, and Book-E in general.

    Signed-off-by: Josh Boyer
    Signed-off-by: Benjamin Herrenschmidt

    Josh Boyer
     

24 Sep, 2009

1 commit

  • The xmon code relies on MSR_RI being non-zero to indicate that an exception
    is recoverable. If it is not, it prints a warning message. However, the
    PowerPC 4xx cores do not have an MSR_RI bit and this warning is produced for
    every xmon event.

    This introduces an unrecoverable_excp function to determine if an exception
    is recoverable or not. This gets rid of the erroneous warnings on 4xx.

    Signed-off-by: Josh Boyer
    Signed-off-by: Benjamin Herrenschmidt

    Josh Boyer
     

20 Aug, 2009

2 commits


16 Jun, 2009

1 commit

  • Add the option to build the code under arch/powerpc with -Werror.

    The intention is to make it harder for people to inadvertantly introduce
    warnings in the arch/powerpc code. It needs to be configurable so that
    if a warning is introduced, people can easily work around it while it's
    being fixed.

    The option is a negative, ie. don't enable -Werror, so that it will be
    turned on for allyes and allmodconfig builds.

    The default is n, in the hope that developers will build with -Werror,
    that will probably lead to some build breaks, I am prepared to be flamed.

    It's not enabled for math-emu, which is a steaming pile of warnings.

    Signed-off-by: Michael Ellerman
    Signed-off-by: Benjamin Herrenschmidt

    Michael Ellerman
     

09 Jun, 2009

1 commit


21 May, 2009

1 commit

  • Hello All,

    Quite a while back Michael Ellerman had posted a patch to add support to xmon to print the contents of the console log pointed to by __log_buf.
    Here's the link to that patch - http://ozlabs.org/pipermail/linuxppc64-dev/2005-March/003657.html
    I've ported the patch in the above link to 2.6.30-rc5 and have tested it.

    Thanks & regards,
    Vinay

    Signed-off-by: Michael Ellerman
    Signed-off-by: Benjamin Herrenschmidt

    Vinay Sridhar
     

23 Dec, 2008

1 commit


31 Oct, 2008

1 commit

  • This makes sure we don't try to call find_bug or is_warning_bug when
    CONFIG_BUG=n and CONFIG_XMON=y. Otherwise we get these errors:

    arch/powerpc/xmon/xmon.c: In function ‘print_bug_trap’:
    arch/powerpc/xmon/xmon.c:1364: error: implicit declaration of function ‘find_bug’
    arch/powerpc/xmon/xmon.c:1364: warning: assignment makes pointer from integer without a cast
    arch/powerpc/xmon/xmon.c:1367: error: implicit declaration of function ‘is_warning_bug’
    arch/powerpc/xmon/xmon.c:1374: error: dereferencing pointer to incomplete type
    make[2]: *** [arch/powerpc/xmon/xmon.o] Error 1
    make[1]: *** [arch/powerpc/xmon] Error 2
    make: *** [sub-make] Error 2

    Signed-off-by: Paul Mackerras

    Paul Mackerras
     

30 Jun, 2008

1 commit


16 Jun, 2008

1 commit

  • According to the CBEA, the SPU dsisr is not updated for class 0
    exceptions.

    spu_stopped() is testing the dsisr that was passed to it from the class
    0 exception handler, so we return a false positive here.

    This patch cleans up the interrupt handler and erroneous tests in
    spu_stopped. It also removes the fields from the csa since it is not
    needed to process class 0 events.

    Signed-off-by: Luke Browning
    Signed-off-by: Jeremy Kerr

    Luke Browning
     

14 May, 2008

2 commits

  • This is a little messier than I'd like because xmon.h only exists
    on powerpc and we can't have a static inline and an extern declaration
    visible at the same time.

    Signed-off-by: Michael Ellerman
    Signed-off-by: Paul Mackerras

    Michael Ellerman
     
  • warning: Using plain integer as NULL pointer
    warning: Using plain integer as NULL pointer
    warning: symbol 'excprint' was not declared. Should it be static?
    warning: symbol 'prregs' was not declared. Should it be static?
    warning: symbol 'cacheflush' was not declared. Should it be static?
    warning: symbol 'read_spr' was not declared. Should it be static?
    warning: symbol 'write_spr' was not declared. Should it be static?
    warning: symbol 'super_regs' was not declared. Should it be static?
    warning: symbol 'mread' was not declared. Should it be static?
    warning: symbol 'mwrite' was not declared. Should it be static?
    warning: symbol 'byterev' was not declared. Should it be static?
    warning: symbol 'memex' was not declared. Should it be static?
    warning: symbol 'bsesc' was not declared. Should it be static?
    warning: symbol 'dump' was not declared. Should it be static?
    warning: symbol 'prdump' was not declared. Should it be static?
    warning: symbol 'generic_inst_dump' was not declared. Should it be static?
    warning: symbol 'ppc_inst_dump' was not declared. Should it be static?
    warning: symbol 'memops' was not declared. Should it be static?
    warning: symbol 'memdiffs' was not declared. Should it be static?
    warning: symbol 'memlocate' was not declared. Should it be static?
    warning: symbol 'memzcan' was not declared. Should it be static?
    warning: symbol 'proccall' was not declared. Should it be static?
    warning: symbol 'scannl' was not declared. Should it be static?
    warning: symbol 'hexdigit' was not declared. Should it be static?
    warning: symbol 'flush_input' was not declared. Should it be static?
    warning: symbol 'inchar' was not declared. Should it be static?
    warning: symbol 'take_input' was not declared. Should it be static?
    warning: symbol 'xmon_init' was not declared. Should it be static?

    Signed-off-by: Michael Ellerman
    Signed-off-by: Paul Mackerras

    Michael Ellerman
     

05 May, 2008

1 commit


18 Apr, 2008

1 commit


15 Apr, 2008

1 commit