30 Aug, 2005

23 commits

  • This patch fixes a rare memory leak found by Coverity.

    Signed-off-by: Joel Schopp
    Signed-off-by: Paul Mackerras

    Joel Schopp
     
  • Coverity found more unused code.

    Signed-off-by: Joel Schopp
    Signed-off-by: Paul Mackerras

    Joel Schopp
     
  • While ppc64 has the CONFIG_HZ Kconfig option, it wasnt actually being
    used. Connect it up and set all platforms to 250Hz.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Paul Mackerras

    Anton Blanchard
     
  • Here's the 970MP's PVR (processor version register) entry for oprofile.

    Signed-off-by: Jake Moilanen
    Signed-off-by: Paul Mackerras

    Jake Moilanen
     
  • Some RS64-based machines (p620, F80, others) have problems with firmware
    returning 0xdeadbeef instead of failure to allocations that end at the
    1GB mark.

    We have two options:
    1. Detect the undocumented 0xdeadbeef return value and interpret it as
    a failure.
    2. Avoid allocating that high.

    (2) is really the cleaner solution here. 768MB is plenty of room so use
    that as the max alloc_top instead of 1GB.

    Signed-off-by: Olof Johansson
    Signed-off-by: Paul Mackerras

    Olof Johansson
     
  • The ppc and ppc64 trees are hopefully going to merge over time, so this
    patch begins the process by creating a place for the merging of the
    header files.

    Create include/asm-powerpc (and move linkage.h into it from
    asm-{ppc,ppc64} since we don't like empty directories). Modify the
    ppc and ppc64 Makefiles to cope.

    Signed-off-by: Stephen Rothwell
    Signed-off-by: Paul Mackerras

    Stephen Rothwell
     
  • Make MODULE_DEVICE_TABLE work for vio devices.

    Signed-off-by: Stephen Rothwell
    Signed-off-by: Paul Mackerras

    Stephen Rothwell
     
  • Create vio_bus_ops so that we just pass a structure to vio_bus_init
    instead of three separate function pointers.

    Rearrange vio.h to avoid forward references. vio.h only needs
    struct device_node from prom.h so remove the include and just
    declare it.

    Signed-off-by: Stephen Rothwell
    Signed-off-by: Paul Mackerras

    Stephen Rothwell
     
  • Take some assignments out of vio_register_device_common and
    rename it to vio_register_device.

    Signed-off-by: Stephen Rothwell
    Signed-off-by: Paul Mackerras

    Stephen Rothwell
     
  • Formatting changes to vio.c to bring it closer to the
    kernel coding standard.

    Signed-off-by: Stephen Rothwell
    Signed-off-by: Paul Mackerras

    Stephen Rothwell
     
  • gcc 3.4 (at least the build we are using) puts the gcc generated .ident
    string into a .note section at the end of the files it compiles (gcc
    3.3.3-hammer and gcc 4.0.2 Debian puts it in the .text section). This
    means that the lparmap.s file we produce in the iSeries build may end with
    a .note section. When we include it into head.S, the assembler can no
    longer resolve some of the conditional branches since the target label
    ends up too far away. This patch just forces us back to the .text section
    after including lparmap.s.

    The breakage was caused by my patch "iSeries build with newer assemblers
    and compilers" (sha1-id: 2ad56496627630ebc99f06af5f81ca23e17e014e).

    Signed-off-by: Stephen Rothwell
    Signed-off-by: Paul Mackerras

    Stephen Rothwell
     
  • A mistake rebasing the series of ppc64 head.S cleanup patches meant
    the #include of lparmap.s, needed for iSeries was lost. This patch
    puts it back again.

    Signed-off-by: David Gibson
    Signed-off-by: Paul Mackerras

    David Gibson
     
  • Linus Torvalds
     
  • It appears that a memory barrier soon after a mispredicted
    branch, not just in the delay slot, can cause the hang
    condition of this cpu errata.

    So move them out-of-line, and explicitly put them into
    a "branch always, predict taken" delay slot which should
    fully kill this problem.

    Signed-off-by: David S. Miller

    David S. Miller
     
  • When the spinlock routines were moved out of line into
    kernel/spinlock.c this made it so that the debugging
    spinlocks record lock acquisition program counts in the
    kernel/spinlock.c functions not in their callers.
    This makes the debugging info kind of useless.

    So record the correct caller's program counter and
    now this feature is useful once more.

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Removed sparc architecture specific users of asm/segment.h and
    asm-sparc/segment.h itself

    Signed-off-by: Kumar Gala
    Signed-off-by: David S. Miller

    Kumar Gala
     
  • Removed sparc64 architecture specific users of asm/segment.h and
    asm-sparc64/segment.h itself

    Signed-off-by: Kumar Gala
    Signed-off-by: David S. Miller

    Kumar Gala
     
  • Current uncorrectable error handling was poor enough
    that the processor could just loop taking the same
    trap over and over again. Fix things up so that we
    at least get a log message and perhaps even some register
    state.

    In the process, much consolidation became possible,
    particularly with the correctable error handler.

    Prefix assembler and C function names with "spitfire"
    to indicate that these are for Ultra-I/II/IIi/IIe only.

    More work is needed to make these routines robust and
    featureful to the level of the Ultra-III error handlers.

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Verify we really are taking a data access exception trap, at TL1, from
    one of the window spill/fill handlers.

    Else call a new function, data_access_exception_tl1, to log the error.

    Signed-off-by: David S. Miller

    David S. Miller
     
  • 1) Read ASI_IMMU SFSR not ASI_DMMU.
    2) IMMU has no SFAR, read TPC instead
    3) Delete old and incorrect comment about the DTLB protection
    trap having a dependency on the SFSR contents in order to
    function correctly

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Linus Torvalds
     
  • Linus Torvalds
     
  • It has been reported that the way Linux handles NODEFER for signals is
    not consistent with the way other Unix boxes handle it. I've written a
    program to test the behavior of how this flag affects signals and had
    several reports from people who ran this on various Unix boxes,
    confirming that Linux seems to be unique on the way this is handled.

    The way NODEFER affects signals on other Unix boxes is as follows:

    1) If NODEFER is set, other signals in sa_mask are still blocked.

    2) If NODEFER is set and the signal is in sa_mask, then the signal is
    still blocked. (Note: this is the behavior of all tested but Linux _and_
    NetBSD 2.0 *).

    The way NODEFER affects signals on Linux:

    1) If NODEFER is set, other signals are _not_ blocked regardless of
    sa_mask (Even NetBSD doesn't do this).

    2) If NODEFER is set and the signal is in sa_mask, then the signal being
    handled is not blocked.

    The patch converts signal handling in all current Linux architectures to
    the way most Unix boxes work.

    Unix boxes that were tested: DU4, AIX 5.2, Irix 6.5, NetBSD 2.0, SFU
    3.5 on WinXP, AIX 5.3, Mac OSX, and of course Linux 2.6.13-rcX.

    * NetBSD was the only other Unix to behave like Linux on point #2. The
    main concern was brought up by point #1 which even NetBSD isn't like
    Linux. So with this patch, we leave NetBSD as the lonely one that
    behaves differently here with #2.

    Signed-off-by: Linus Torvalds

    Steven Rostedt
     

29 Aug, 2005

17 commits

  • Paulus, I think this is now a reasonable candidate for the post-2.6.13
    queue.

    Relax address restrictions for hugepages on ppc64

    Presently, 64-bit applications on ppc64 may only use hugepages in the
    address region from 1-1.5T. Furthermore, if hugepages are enabled in
    the kernel config, they may only use hugepages and never normal pages
    in this area. This patch relaxes this restriction, allowing any
    address to be used with hugepages, but with a 1TB granularity. That
    is if you map a hugepage anywhere in the region 1TB-2TB, that entire
    area will be reserved exclusively for hugepages for the remainder of
    the process's lifetime. This works analagously to hugepages in 32-bit
    applications, where hugepages can be mapped anywhere, but with 256MB
    (mmu segment) granularity.

    This patch applies on top of the four level pagetable patch
    (http://patchwork.ozlabs.org/linuxppc64/patch?id=1936).

    Signed-off-by: David Gibson
    Signed-off-by: Paul Mackerras

    David Gibson
     
  • You can't call get_property() on a NULL node, so check if of_chosen is set
    in check_for_initrd().

    Signed-off-by: Michael Ellerman

    arch/ppc64/kernel/setup.c | 20 ++++++++++++--------
    1 files changed, 12 insertions(+), 8 deletions(-)
    Signed-off-by: Paul Mackerras

    Michael Ellerman
     
  • unflatten_device_tree() doesn't check if lmb_alloc() succeeds or not, it
    should. All it can do is panic, but at least there's an error message
    (assuming you have some sort of console at that point).

    Signed-off-by: Michael Ellerman

    arch/ppc64/kernel/prom.c | 9 +++++++--
    1 files changed, 7 insertions(+), 2 deletions(-)
    Signed-off-by: Paul Mackerras

    Michael Ellerman
     
  • When unflatten_dt_node() fails to find an OF_DT_END_NODE tag it prints
    "Weird tag at start of node", this should be "Weird tag at end of node".

    Signed-off-by: Michael Ellerman

    arch/ppc64/kernel/prom.c | 2 +-
    1 files changed, 1 insertion(+), 1 deletion(-)
    Signed-off-by: Paul Mackerras

    Michael Ellerman
     
  • This patch moves power4_enable_pmcs() to arch/ppc64/kernel/pmc.c.

    I've tested it on P5 LPAR and P4. It does what it used to.

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

    Michael Ellerman
     
  • If both CONFIG_XMON and CONFIG_XMON_DEFAULT is enabled in the .config,
    there is no way to disable xmon again. setup_system calls first xmon_init,
    later parse_early_param. So a new 'xmon=off' cmdline option will do the right
    thing.

    Signed-off-by: Olaf Hering
    Signed-off-by: Paul Mackerras

    Olaf Hering
     
  • We can now remove CONFIG_MSCHUNKS as it doesn't do anything interesting
    anymore.

    The only macro in abs_addr.h which is called by non-iSeries code is
    phys_to_abs(), so remove the other dummy implementations, and we add a
    firmware feature check to phys_to_abs().

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

    Michael Ellerman
     
  • lmb_phys_mem_size() can always return lmb.memory.size, as long as it's called
    after lmb_analyze(), which it is. There's no need to recalculate the size on
    every call.

    lmb_analyze() was calculating a few things we then threw away, so just don't
    calculate them to start with.

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

    Michael Ellerman
     
  • We no longer need the lmb code to know about abs and phys addresses, so
    remove the physbase variable from the lmb_property struct.

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

    Michael Ellerman
     
  • abs_to_phys() is a macro that turns out to do nothing, and also has the
    unfortunate property that it's not the inverse of phys_to_abs() on iSeries.

    The following is for my benefit as much as everyone else.

    With CONFIG_MSCHUNKS enabled, the lmb code is changed such that it keeps
    a physbase variable for each lmb region. This is used to take the possibly
    discontiguous lmb regions and present them as a contiguous address space
    beginning from zero.

    In this context each lmb region's base address is its "absolute" base
    address, and its physbase is it's "physical" address (from Linux's point of
    view). The abs_to_phys() macro does the mapping from "absolute" to "physical".

    Note: This is not related to the iSeries mapping of physical to absolute
    (ie. Hypervisor) addresses which is maintained with the msChunks structure.
    And the msChunks structure is not controlled via CONFIG_MSCHUNKS.

    Once upon a time you could compile for non-iSeries with CONFIG_MSCHUNKS
    enabled. But these days CONFIG_MSCHUNKS depends on CONFIG_PPC_ISERIES, so
    for non-iSeries code abs_to_phys() is a no-op.

    On iSeries we always have one lmb region which spans from 0 to
    systemcfg->physicalMemorySize (arch/ppc64/kernel/iSeries_setup.c line 383).
    This region has a base (ie. absolute) address of 0, and a physbase address
    of 0 (as calculated in lmb_analyze() (arch/ppc64/kernel/lmb.c line 144)).

    On iSeries, abs_to_phys(aa) is defined as lmb_abs_to_phys(aa), which finds
    the lmb region containing aa (and there's only one, ie. 0), and then does:

    return lmb.memory.region[0].physbase + (aa - lmb.memory.region[0].base)

    physbase == base == 0, so you're left with "return aa".

    So remove abs_to_phys(), and lmb_abs_to_phys() which is the implementation
    of abs_to_phys() for iSeries.

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

    Michael Ellerman
     
  • The lmb code is all written to use a pointer to an lmb struct. But it's always
    the same lmb struct, called "lmb". So we take the address of lmb, call it
    _lmb and then start using _lmb->foo everywhere, which is silly.

    This patch removes the _lmb pointers and replaces them with direct references
    to the one "lmb" struct. We do the same for some _mem and _rsv pointers which
    point to lmb.memory and lmb.reserved respectively.

    This patch looks quite busy, but it's basically just:
    s/_lmb->/lmb./g
    s/_mem->/lmb.memory./g
    s/_rsv->/lmb.reserved./g
    s/_rsv/&lmb.reserved/g
    s/mem->/lmb.memory./g

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

    Michael Ellerman
     
  • physRpn_to_absRpn is a no-op on non-iSeries platforms, remove the two
    redundant calls.

    There's only one caller on iSeries so fold the logic in there so we can get
    rid of it completely.

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

    Michael Ellerman
     
  • Rename the msChunks struct to get rid of the StUdlY caps and make it a bit
    clearer what it's for.

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

    Michael Ellerman
     
  • Chunks are 256KB, so use constants for the size/shift/mask, rather than
    getting them from the msChunks struct. The iSeries debugger (??) might still
    need access to the values in the msChunks struct, so we keep them around
    for now, but set them from the constant values.

    Replace msChunks_entry typedef with regular u32.

    Simplify msChunks_alloc() to manipulate klimit directly, rather than via
    a parameter.

    Move msChunks_alloc() and msChunks into iSeries_setup.c, as that's where
    they're used.

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

    Michael Ellerman
     
  • The msChunks code was written to work on pSeries, but now it's only used on
    iSeries. This means there's no need to do PTRRELOC anymore, so remove it all.

    A few places were getting "extern reloc_offset()" from abs_addr.h, move it
    into system.h instead.

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

    Michael Ellerman
     
  • Signed-off-by: Stephen Rothwell
    Signed-off-by: Paul Mackerras

    Stephen Rothwell
     
  • Make firmware_has_feature() evaluate at compile time for the non pSeries
    case and tidy up code where possible.

    Signed-off-by: Stephen Rothwell
    Signed-off-by: Paul Mackerras

    Stephen Rothwell