09 Jan, 2006

40 commits

  • ppc64 has its own version of sys_time. It looks pretty scary, touching
    a whole bunch of variables without any locking or memory ordering.

    In fact, a recent bugreport has shown it can actually go backwards. Time
    to remove it and just use the generic sys_time, which is implemented on
    top of do_gettimeofday.

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

    Anton Blanchard
     
  • In 2.6.14, we had the following definition of _GLOBAL() in
    include/asm-ppc/processor.h:

    #define _GLOBAL(n)\
    .stabs __stringify(n:F-1),N_FUN,0,0,n;\
    .globl n;\
    n:

    In 2.6.15, as part of the great powerpc merge, we moved this definition to
    include/asm-powerpc/ppc_asm.h, where it appears (to 32-bit code) as:

    #define _GLOBAL(n) \
    .text; \
    .stabs __stringify(n:F-1),N_FUN,0,0,n;\
    .globl n; \
    n:

    Mostly, this is fine. However, we also have the following, in
    arch/ppc/boot/common/util.S:

    .section ".relocate_code","xa"
    [...]
    _GLOBAL(flush_instruction_cache)
    [...]
    _GLOBAL(flush_data_cache)
    [...]

    The addition of the .text section definition in the definition of
    _GLOBAL overrides the .relocate_code section definition. As a result,
    these two functions don't end up in .relocate_code, so they don't get
    relocated correctly, and the boot fails.

    There's another suspicious-looking usage at kernel/swsusp.S:37 that
    someone should look into. I did not exhaustively search the source
    tree, though.

    The following is the minimal patch that fixes the immediate problem.
    I could easily be convinced that the _GLOBAL definition should be
    modified to remove the ".text;" line either instead of, or in addition
    to, this fix.

    Signed-off-by: Paul Janzen
    Signed-off-by: Paul Mackerras

    Paul Janzen
     
  • For far, all SPU triggered interrupts always end up on
    the first SMT thread, which is a bad solution.

    This patch implements setting the affinity to the
    CPU that was running last when entering execution on
    an SPU. This should result in a significant reduction
    in IPI calls and better cache locality for SPE thread
    specific data.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     
  • The size of the local store is architecture defined
    and independent from the page size, so it should
    not be defined in terms of pages in the first place.

    This mistake broke a few places when building for
    64kb pages.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     
  • One local variable is missing an __iomem modifier,
    in another place, we pass a completely unused argument
    with a missing __user modifier.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     
  • In a hypervisor based setup, direct access to the first
    priviledged register space can typically not be allowed
    to the kernel and has to be implemented through hypervisor
    calls.

    As suggested by Masato Noguchi, let's abstract the register
    access trough a number of function calls. Since there is
    currently no public specification of actual hypervisor
    calls to implement this, I only provide a place that
    makes it easier to hook into.

    Cc: Masato Noguchi
    Cc: Geoff Levand
    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     
  • The logic for sys_spu_run keeps growing and it does
    not really belong into file.c any more since we
    moved away from using regular file operations to our
    own syscall.

    No functional change in here.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     
  • checking bits manually might not be synchonized with
    the use of set_bit/clear_bit. Make sure we always use
    the correct bitops by removing the unnecessary
    identifiers.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     
  • If creating one entry failed in spufs_fill_dir,
    we never cleaned up the freshly created entries.
    Fix this by calling the cleanup function on error.

    Noticed by Al Viro.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     
  • If get_unused_fd failed in sys_spu_create, we never cleaned
    up the created directory. Fix that by restructuring the
    error path.

    Noticed by Al Viro.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     
  • When spu_activate fails in spu_acquire_runnable, the
    state must still be SPU_STATE_SAVED, we were
    incorrectly setting it to SPU_STATE_RUNNABLE.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     
  • During an earlier cleanup, we lost the serialization
    of multiple spu_run calls performed on the same
    spu_context. In order to get this back, introduce a
    mutex in the spu_context that is held inside of spu_run.

    Noticed by Al Viro.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     
  • Only checking for SPUFS_MAGIC is not reliable, because
    it might not be unique in theory. Worse than that,
    we accidentally allow spu_run to be performed on
    any file in spufs, not just those returned from
    spu_create as intended.

    Noticed by Al Viro.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     
  • spu_forget will do mmput on the DMA address space,
    which can lead to lots of other stuff getting triggered.
    We better not hold a semaphore here that we might
    need in the process.

    Noticed by Al Viro.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     
  • We need to check for validity of owner under down_write,
    down_read is not enough.

    Noticed by Al Viro.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     
  • This patch enables support for pause(0) power management state
    for the Cell Broadband Processor, which is import for power efficient
    operation. The pervasive infrastructure will in the future enable
    us to introduce more functionality specific to the Cell's
    pervasive unit.

    From: Maximino Aguilar
    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     
  • Only build in support for ISA and PCI cases if we have enabled CONFIG_ISA
    and CONFIG_PCI. Additionally, isa_bridge is a global so we shouldn't use
    it a parameter name since it gets redefined to NULL when !CONFIG_PCI.

    Signed-off-by: Kumar Gala
    Signed-off-by: Paul Mackerras

    Kumar Gala
     
  • while using SCC as uart and as serial console at same time I got this:

    [ 138.214258] Oops: kernel access of bad area, sig: 11 [#1]
    [ 138.218832] PREEMPT
    [ 138.221021] NIP: C0105C48 LR: C0105E60 SP: C03D5D10 REGS: c03d5c60 TRAP: 0300 Not tainted
    [ 138.229280] MSR: 00009032 EE: 1 PR: 0 FP: 0 ME: 1 IR/DR: 11
    [ 138.234713] DAR: 00000000, DSISR: C0000000
    [ 138.238745] TASK = c0349420[693] 'sh' THREAD: c03d4000
    [ 138.243754] Last syscall: 6
    [ 138.246402] GPR00: FEFFFFFF C03D5D10 C0349420 C01FB094 00000011 00000000 C1ECFBBC C01F24B0
    [ 138.254602] GPR08: FF002820 00000000 FF0028C0 00000000 19133615 A0CBCD5E 02000300 00000000
    [ 138.262804] GPR16: 00000000 01FF9E4C 00000000 7FA9A770 00000000 00000000 1003E2A8 00000000
    [ 138.271003] GPR24: 100562F4 7F9B6EF4 C0210000 C02A5338 C01FB094 00000000 C01FB094 C1F14574
    [ 138.279376] NIP [c0105c48] cpm_uart_tx_pump+0x4c/0x22c
    [ 138.284419] LR [c0105e60] cpm_uart_start_tx+0x38/0xb0
    [ 138.289361] Call trace:
    [ 138.291762] [c0105e60] cpm_uart_start_tx+0x38/0xb0
    [ 138.296547] [c010277c] uart_send_xchar+0x88/0x118
    [ 138.301244] [c01029a0] uart_unthrottle+0x6c/0x138
    [ 138.305942] [c00ece10] check_unthrottle+0x60/0x64
    [ 138.310641] [c00ecec4] reset_buffer_flags+0xb0/0x138
    [ 138.315595] [c00ecf64] n_tty_flush_buffer+0x18/0x78
    [ 138.320465] [c00e81b0] tty_ldisc_flush+0x64/0x7c
    [ 138.325078] [c010410c] uart_close+0xf0/0x2c8
    [ 138.329348] [c00e9c48] release_dev+0x724/0x8d4
    [ 138.333790] [c00e9e18] tty_release+0x20/0x3c
    [ 138.338061] [c006e544] __fput+0x178/0x1e0
    [ 138.342076] [c006c43c] filp_close+0x54/0xac
    [ 138.346261] [c0002d90] ret_from_syscall+0x0/0x44
    [ 138.352386] note: sh[693] exited with preempt_count 2

    a easy way to reproduce it is log into the system using ssh and do:
    cat >/dev/ttyCPM0
    then, switch to minicom and write some stuff on it back to ssh, a control C
    produce the oops

    this happens because uart_close calls uart_shutdown which frees xmit.buf,
    currently used by xchar sending in cpm_uart_tx_pump(), which seems wrong.

    the attached patch fixes the oops and also fixes xchar sending.

    Signed-off-by: Paul Mackerras

    Aristeu Sergio Rozanski Filho
     
  • Undefined symbols (eeh_add_device_tree_early and eeh_remove_bus_device)
    when EEH is not enabled. This small patch will fix this.

    Acked-by: Linas Vepstas

    Signed-off-by: Paul Mackerras

    Haren Myneni
     
  • At present, we are not looking at all interrupt controller nodes in the
    device tree even though the proper node was not found. This is causing
    the system panic. The attached patch will scan all nodes until it finds
    the proper interrupt controller type.

    Signed-off-by: Haren Myneni
    Signed-off-by: Paul Mackerras

    Haren Myneni
     
  • In setup_arch and setup_system call find_legacy_serial_ports() if we
    build in support for 8250 serial ports instead of basing it on PPC_MULTIPLATFORM.

    Signed-off-by: Kumar Gala
    Signed-off-by: Paul Mackerras

    Kumar Gala
     
  • Added a common udbg_progress for use by ppc_md.progress()

    Signed-off-by: Kumar Gala
    Signed-off-by: Paul Mackerras

    Kumar Gala
     
  • Add the ability to configure and initialize legacy 8250 serials
    ports on an SOC bus. Also, fixed an issue that we would not
    configure any serial ports if "linux,stdout-path" was not found.

    Signed-off-by: Kumar Gala
    Signed-off-by: Paul Mackerras

    Kumar Gala
     
  • The checking of the baudrate in udbg_probe_uart_speed was
    too tight and would cause reporting back of the default
    baud rate in cases where the computed speed was valid.

    Signed-off-by: Kumar Gala
    Signed-off-by: Paul Mackerras

    Kumar Gala
     
  • The system will oops if an attempt is made to add memory to an
    empty node/zone. This patch prevents adding memory to an empty
    node. The code to dynamically add a node/zone is non-trivial.
    This patch is temporary and will be removed when the ability
    to dynamically add a node/zone is complete.

    Signed-off-by: Mike Kravetz
    Signed-off-by: Paul Mackerras

    Mike Kravetz
     
  • Building the arch/powerpc tree currently gives me
    two warnings with gcc-4.0:

    arch/powerpc/mm/imalloc.c: In function '__im_get_area':
    arch/powerpc/mm/imalloc.c:225: warning: 'tmp' may be used uninitialized in this function
    arch/powerpc/mm/hugetlbpage.c: In function 'hugetlb_get_unmapped_area':
    arch/powerpc/mm/hugetlbpage.c:608: warning: unused variable 'vma'

    both fixes are trivial.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     
  • Grrr....

    Signed-off-by: Paul Mackerras

    Paul Mackerras
     
  • include/asm-ppc/ had #ifdef __KERNEL__ in all header files that
    are not meant for use by user space, include/asm-powerpc does
    not have this yet.

    This patch gets us a lot closer there. There are a few cases
    where I was not sure, so I left them out. I have verified
    that no CONFIG_* symbols are used outside of __KERNEL__
    any more and that there are no obvious compile errors when
    including any of the headers in user space libraries.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Paul Mackerras

    Arnd Bergmann
     
  • Oops, forgot to compile the VMALLOCBASE/VMALLOC_START patch on
    iSeries. VMALLOC_START is defined in pgtable.h whereas previously
    VMALLOCBASE was previously defined in page.h. lparmap.c needs to be
    updated appropriately.

    Booted on iSeries RS64 (now).

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

    David Gibson
     
  • This patch adds oprofile support for the 7450 and all its multitudinous
    derivatives.

    * Added 7450 (and derivatives) support for oprofile
    * Changed e500 cputable to have oprofile model and cpu_type fields
    * Added support for classic 32-bit performance monitor interrupt
    * Cleaned up common powerpc oprofile code to be as common as possible
    * Cleaned up oprofile_impl.h to reflect 32 bit classic code
    * Added 32-bit MMCRx bitfield definitions and SPR numbers

    Signed-off-by: Andy Fleming
    Signed-off-by: Paul Mackerras

    Andy Fleming
     
  • pci_address_to_pio is missing a closing curly brace

    Signed-off-by: Kumar Gala
    Signed-off-by: Paul Mackerras

    Kumar Gala
     
  • This fixes pci_address_to_pio() to return an unsigned long (to be safe)
    and fixes a bug in the implementation that caused it to return a bogus
    IO port number

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

    Benjamin Herrenschmidt
     
  • Fix compilation of via-pmu.c without Power Management support.

    Signed-off-by: Paul Mackerras

    Kristian Mueller
     
  • On ppc64, we independently define VMALLOCBASE and VMALLOC_START to be
    the same thing: the start of the vmalloc() area at 0xd000000000000000.
    VMALLOC_START is used much more widely, including in generic code, so
    this patch gets rid of the extraneous VMALLOCBASE.

    This does require moving the definitions of region IDs from page_64.h
    to pgtable.h, but they don't clearly belong in the former rather than
    the latter, anyway. While we're moving them, clean up the definitions
    of the REGION_IDs:
    - Abolish REGION_SIZE, it was only used once, to define
    REGION_MASK anyway
    - Define the specific region ids in terms of the REGION_ID()
    macro.
    - Define KERNEL_REGION_ID in terms of PAGE_OFFSET rather than
    KERNELBASE. It amounts to the same thing, but conceptually this is
    about the region of the linear mapping (which starts at PAGE_OFFSET)
    rather than of the kernel text itself (which is at KERNELBASE).

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

    David Gibson
     
  • The patch enabling the new G5's with U4 broke initialization of the DART
    driver, causing it to trigger a BUG_ON for a case that is actually
    valid. This patch fixes it:

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

    Benjamin Herrenschmidt
     
  • This adds some very basic support for the new machines, including the
    Quad G5 (tested), and other new dual core based machines and iMac G5
    iSight (untested). This is still experimental ! There is no thermal
    control yet, there is no proper handing of MSIs, etc.. but it
    boots, I have all 4 cores up on my machine. Compared to the previous
    version of this patch, this one adds DART IOMMU support for the U4
    chipset and thus should work fine on setups with more than 2Gb of RAM.

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

    Benjamin Herrenschmidt
     
  • Added the ability to determine if an outbound window in the PCI host
    controller is for prefetchable memory and report it as such.

    Signed-off-by: Kumar Gala
    Signed-off-by: Paul Mackerras

    Kumar Gala
     
  • There is code in the RPAPHP directory that is identical to this routine;
    I'll be removing that code in an upcoming patch, but this patch is needed
    to expose the function to make it callable.

    Signed-off-by: Linas Vepstas
    Signed-off-by: Paul Mackerras

    linas
     
  • Cleanup the MPIC IO-APIC workarounds, make them a bit more generic,
    smaller and faster.

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

    Segher Boessenkool
     
  • The pre-parsed addrs/n_addrs fields in struct device_node are finally
    gone. Remove the dodgy heuristics that did that parsing at boot and
    remove the fields themselves since we now have a good replacement with
    the new OF parsing code. This patch also fixes a bunch of drivers to use
    the new code instead, so that at least pmac32, pseries, iseries and g5
    defconfigs build.

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

    Benjamin Herrenschmidt