02 Jun, 2009

1 commit


27 May, 2009

4 commits

  • The implementation we just revived has issues, such as using a
    Kconfig-defined virtual address area in kernel space that nothing
    actually carves out (and thus will overlap whatever is there),
    or having some dependencies on being self contained in a single
    PTE page which adds unnecessary constraints on the kernel virtual
    address space.

    This fixes it by using more classic PTE accessors and automatically
    locating the area for consistent memory, carving an appropriate hole
    in the kernel virtual address space, leaving only the size of that
    area as a Kconfig option. It also brings some dma-mask related fixes
    from the ARM implementation which was almost identical initially but
    grew its own fixes.

    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     
  • Make FIXADDR_TOP a compile time constant and cleanup a
    couple of definitions relative to the layout of the kernel
    address space on ppc32. We also print out that layout at
    boot time for debugging purposes.

    This is a pre-requisite for properly fixing non-coherent
    DMA allocactions.

    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     
  • (pre-requisite to make the next patches more palatable)

    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     
  • This reverts commit 33f00dcedb0e22cdb156a23632814fc580fcfcf8.

    While it was a good idea to try to use the mm/vmalloc.c allocator instead
    of our own (in fact, ours is itself a dup on an old variant of the vmalloc
    one), unfortunately, the approach is terminally busted since
    dma_alloc_coherent() can be called at interrupt time or in atomic contexts
    and there's little chances we'll make the code in mm/vmalloc.c cope with\ that :-(

    Until we can get the generic code to forbid that idiocy and fix all
    drivers abusing it, we pretty much have no choice but revert to
    our custom virtual space allocator.

    There's also a problem with SMP safety since freeing such mapping
    would require an IPI which cannot be done at interrupt time.

    However, right now, I don't think we support any platform that is
    both SMP and has non-coherent DMA (don't laugh, I know such things
    do exist !) so we can sort that out later.

    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     

26 May, 2009

1 commit

  • The recent rework of the MMU PID handling for non-hash CPUs has a
    subtle bug in the !SMP "optimized" variant of the PID stealing
    function. It clears the PID in the mm context before it calls
    local_flush_tlb_mm(). However, the later will not flush anything
    if the PID in the context is clear...

    Signed-off-by: Hideo Saito
    Signed-off-by: Benjamin Herrenschmidt

    Hideo Saito
     

22 May, 2009

1 commit


18 May, 2009

5 commits

  • I don't think anything guarantees that the objects in data.page_aligned
    are a multiple of PAGE_SIZE, thus the section may end on any boundary.

    So the following section, .data.cacheline_aligned needs an explicit
    alignment.

    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     
  • Refresh and set these options:

    CONFIG_SYSFS_DEPRECATED_V2: y -> n
    CONFIG_INPUT_JOYSTICK: y -> n
    CONFIG_HID_SONY: n -> m
    CONFIG_RTC_DRV_PS3: - -> m

    Signed-off-by: Geoff Levand
    Signed-off-by: Benjamin Herrenschmidt

    Geoff Levand
     
  • After upgrading my distcc boxes from gcc 4.2.2 to 4.4.0, the function
    graph tracer broke. This was discovered on my x86 boxes.

    The issue is that gcc used the same register for an output as it did for
    an input in an asm statement. I first thought this was a bug in gcc and
    reported it. I was notified that gcc was correct and that the output had
    to be flagged as an "early clobber".

    I noticed that powerpc had the same issue and this patch fixes it.

    Signed-off-by: Steven Rostedt
    Signed-off-by: Benjamin Herrenschmidt

    Steven Rostedt
     
  • pr_debug() can now result in code being generated even when #DEBUG
    is not defined. That's not really desirable in the ftrace code
    which we want to be snappy.

    With CONFIG_DYNAMIC_DEBUG=y:

    size before:
    text data bss dec hex filename
    3334 672 4 4010 faa arch/powerpc/kernel/ftrace.o

    size after:
    text data bss dec hex filename
    2616 360 4 2980 ba4 arch/powerpc/kernel/ftrace.o

    Signed-off-by: Michael Ellerman
    Acked-by: Steven Rostedt
    Signed-off-by: Benjamin Herrenschmidt

    Michael Ellerman
     
  • With CONFIG_DEBUG_VM, an assertion is made when changing the protection
    flags of a PTE that the PTE is locked. Huge pages use a different pagetable
    format and the assertion is bogus and will always trigger with a bug looking
    something like

    Unable to handle kernel paging request for data at address 0xf1a00235800006f8
    Faulting instruction address: 0xc000000000034a80
    Oops: Kernel access of bad area, sig: 11 [#1]
    SMP NR_CPUS=32 NUMA Maple
    Modules linked in: dm_snapshot dm_mirror dm_region_hash
    dm_log dm_mod loop evdev ext3 jbd mbcache sg sd_mod ide_pci_generic
    pata_amd ata_generic ipr libata tg3 libphy scsi_mod windfarm_pid
    windfarm_smu_sat windfarm_max6690_sensor windfarm_lm75_sensor
    windfarm_cpufreq_clamp windfarm_core i2c_powermac
    NIP: c000000000034a80 LR: c000000000034b18 CTR: 0000000000000003
    REGS: c000000003037600 TRAP: 0300 Not tainted (2.6.30-rc3-autokern1)
    MSR: 9000000000009032 CR: 28002484 XER: 200fffff
    DAR: f1a00235800006f8, DSISR: 0000000040010000
    TASK = c0000002e54cc740[2960] 'map_high_trunca' THREAD: c000000003034000 CPU: 2
    GPR00: 4000000000000000 c000000003037880 c000000000895d30 c0000002e5a2e500
    GPR04: 00000000a0000000 c0000002edc40880 0000005700000393 0000000000000001
    GPR08: f000000011ac0000 01a00235800006e8 00000000000000f5 f1a00235800006e8
    GPR12: 0000000028000484 c0000000008dd780 0000000000001000 0000000000000000
    GPR16: fffffffffffff000 0000000000000000 00000000a0000000 c000000003037a20
    GPR20: c0000002e5f4ece8 0000000000001000 c0000002edc40880 0000000000000000
    GPR24: c0000002e5f4ece8 0000000000000000 00000000a0000000 c0000002e5f4ece8
    GPR28: 0000005700000393 c0000002e5a2e500 00000000a0000000 c000000003037880
    NIP [c000000000034a80] .assert_pte_locked+0xa4/0xd0
    LR [c000000000034b18] .ptep_set_access_flags+0x6c/0xb4
    Call Trace:
    [c000000003037880] [c000000003037990] 0xc000000003037990 (unreliable)
    [c000000003037910] [c000000000034b18] .ptep_set_access_flags+0x6c/0xb4
    [c0000000030379b0] [c00000000014bef8] .hugetlb_cow+0x124/0x674
    [c000000003037b00] [c00000000014c930] .hugetlb_fault+0x4e8/0x6f8
    [c000000003037c00] [c00000000013443c] .handle_mm_fault+0xac/0x828
    [c000000003037cf0] [c0000000000340a8] .do_page_fault+0x39c/0x584
    [c000000003037e30] [c0000000000057b0] handle_page_fault+0x20/0x5c
    Instruction dump:
    7d29582a 7d200074 7800d182 0b000000 3c004000 3960ffff 780007c6 796b00c4
    7d290214 7929a302 1d290068 7d6b4a14 7c000074 7800d182 0b000000

    This patch fixes the problem by not asseting the PTE is locked for VMAs
    backed by huge pages.

    Signed-off-by: Mel Gorman
    Signed-off-by: Benjamin Herrenschmidt

    Mel Gorman
     

15 May, 2009

13 commits

  • * 'for-linus' of git://git.kernel.dk/linux-2.6-block:
    Revert "mm: add /proc controls for pdflush threads"
    viocd: needs to depend on BLOCK
    block: fix the bio_vec array index out-of-bounds test

    Linus Torvalds
     
  • * 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
    powerpc: Fix PCI ROM access
    powerpc/pseries: Really fix the oprofile CPU type on pseries
    serial/nwpserial: Fix wrong register read address and add interrupt acknowledge.
    powerpc/cell: Make ptcal more reliable
    powerpc: Allow mem=x cmdline to work with 4G+
    powerpc/mpic: Fix incorrect allocation of interrupt rev-map
    powerpc: Fix oprofile sampling of marked events on POWER7
    powerpc/iseries: Fix pci breakage due to bad dma_data initialization
    powerpc: Fix mktree build error on Mac OS X host
    powerpc/virtex: Fix duplicate level irq events.
    powerpc/virtex: Add uImage to the default images list
    powerpc/boot: add simpleImage.* to clean-files list
    powerpc/8xx: Update defconfigs
    powerpc/embedded6xx: Update defconfigs
    powerpc/86xx: Update defconfigs
    powerpc/85xx: Update defconfigs
    powerpc/83xx: Update defconfigs
    powerpc/fsl_soc: Remove mpc83xx_wdt_init, again

    Linus Torvalds
     
  • A couple of issues crept in since about 2.6.27 related to accessing PCI
    device ROMs on various powerpc machines.

    First, historically, we don't allocate the ROM resource in the resource
    tree. I'm not entirely certain of why, I susepct they often contained
    garbage on x86 but it's hard to tell. This causes the current generic
    code to always call pci_assign_resource() when trying to access the said
    ROM from sysfs, which will try to re-assign some new address regardless
    of what the ROM BAR was already set to at boot time. This can be a
    problem on hypervisor platforms like pSeries where we aren't supposed
    to move PCI devices around (and in fact probably can't).

    Second, our code that generates the PCI tree from the OF device-tree
    (instead of doing config space probing) which we mostly use on pseries
    at the moment, didn't set the (new) flag IORESOURCE_SIZEALIGN on any
    resource. That means that any attempt at re-assigning such a resource
    with pci_assign_resource() would fail due to resource_alignment()
    returning 0.

    This fixes this by doing these two things:

    - The code that calculates resource flags based on the OF device-node
    is improved to set IORESOURCE_SIZEALIGN on any valid BAR, and while at
    it also set IORESOURCE_READONLY for ROMs since we were lacking that too

    - We now allocate ROM resources as part of the resource tree. However
    to limit the chances of nasty conflicts due to busted firmwares, we
    only do it on the second pass of our two-passes allocation scheme,
    so that all valid and enabled BARs get precedence.

    This brings pSeries back the ability to access PCI ROMs via sysfs (and
    thus initialize various video cards from X etc...).

    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     
  • My previous pach for fixing the oprofile CPU type got somewhat mismerged
    (by my fault) when it collided with another related patch. This should
    finally (fingers crossed) fix the whole thing.

    We make sure we keep the -old- oprofile type and CPU type whenever
    one of them was specified in the first pass through the function.

    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     
  • There have been a series of checkstops on QS21 related to
    ptcal being set up incorrectly. On systems that only
    have memory on a single node, ptcal fails when it gets
    a pointer to memory on the remote node.

    Moreover, agressive prefetching in memcpy and other
    functions may accidentally touch the first cache line
    of the page that we reserve for ptcal, which causes
    an ECC checkstop.

    We now allocate pages only from the specified node, moves the
    ptcal area into the middle of the allocated page to avoid
    potential prefetch problems and prints the address of the
    ptcal area to facilitate diagnostics.

    Signed-off-by: Gerhard Stenzel
    Signed-off-by: Arnd Bergmann
    Signed-off-by: Benjamin Herrenschmidt

    Gerhard Stenzel
     
  • We're currently choking on mem=4g (and above) due to memory_limit
    being specified as an unsigned long. Make memory_limit
    phys_addr_t to fix this.

    Signed-off-by: Becky Bruce
    Signed-off-by: Benjamin Herrenschmidt

    Becky Bruce
     
  • Before when we were setting up the irq host map for mpic we passed in
    just isu_size for the size of the linear map. However, for a number of
    mpic implementations we have no isu (thus pass in 0) and will end up
    with a no linear map (size = 0). This causes us to always call
    irq_find_mapping() from mpic_get_irq().

    By moving the allocation of the host map to after we've determined the
    number of sources we can actually benefit from having a linear map for
    the non-isu users that covers all the interrupt sources.

    Signed-off-by: Kumar Gala
    Signed-off-by: Benjamin Herrenschmidt

    Kumar Gala
     
  • Description
    -----------
    Change ppc64 oprofile kernel driver to use the SLOT bits (MMCRA[37:39]only on
    older processors where those bits are defined.

    Background
    ----------
    The performance monitor unit of the 64-bit POWER processor family has the
    ability to collect accurate instruction-level samples when profiling on marked
    events (i.e., "PM_MRK_"). In processors prior to POWER6, the MMCRA
    register contained "slot information" that the oprofile kernel driver used to
    adjust the value latched in the SIAR at the time of a PMU interrupt. But as of
    POWER6, these slot bits in MMCRA are no longer necessary for oprofile to use,
    since the SIAR itself holds the accurate sampled instruction address. With
    POWER6, these MMCRA slot bits were zero'ed out by hardware so oprofile's use of
    these slot bits was, in effect, a NOP. But with POWER7, these bits are no
    longer zero'ed out; however, they serve some other purpose rather than slot
    information. Thus, using these bits on POWER7 to adjust the SIAR value results
    in samples being attributed to the wrong instructions. The attached patch
    changes the oprofile kernel driver to ignore these slot bits on all newer
    processors starting with POWER6.

    Signed-off-by: Maynard Johnson
    Signed-off-by: Michael Wolf
    Signed-off-by: Benjamin Herrenschmidt

    Maynard Johnson
     
  • Commit 4fc665b88a79a45bae8bbf3a05563c27c7337c3d "powerpc: Merge 32 and
    64-bit dma code" made changes to the PCI initialisation code that added
    an assignment to archdata.dma_data but only for 32 bit code. Commit
    7eef440a545c7f812ed10b49d4a10a351df9cad6 "powerpc/pci: Cosmetic cleanups
    of pci-common.c" removed the conditional compilation. Unfortunately,
    the iSeries code setup the archdata.dma_data before that assignment was
    done - effectively overwriting the dma_data with NULL.

    Fix this up by moving the iSeries setup of dma_data into a
    pci_dma_dev_setup callback.

    Signed-off-by: Stephen Rothwell
    Signed-off-by: Benjamin Herrenschmidt

    Stephen Rothwell x
     
  • The mktree utility defines some variables as "uint", although this is not a
    standard C type, and so cross-compiling on Mac OS X fails. Change this to
    "unsigned int".

    Signed-off-by: Timur Tabi
    Acked-by: Josh Boyer
    Signed-off-by: Benjamin Herrenschmidt

    Timur Tabi
     
  • The interrupt controller was not handling level interrupts correctly
    such that duplicate interrupts were happening. This fixes the problem
    and adds edge type interrupts which are needed in Xilinx hardware.

    Signed-off-by: John Linn
    Signed-off-by: Grant Likely

    John Linn
     
  • It is common to use U-Boot on Xilinx Virtex platforms. This patch
    ensures that CONFIG_DEFAULT_UIMAGE is selected for virtex

    Signed-off-by: Grant Likely

    Grant Likely
     
  • Signed-off-by: Grant Likely

    Grant Likely
     

14 May, 2009

5 commits


12 May, 2009

1 commit

  • Fix this build error when CONFIG_BLOCK is not set:
    drivers/cdrom/viocd.c: In function 'viocd_blk_open':
    drivers/cdrom/viocd.c:156: error: dereferencing pointer to incomplete type
    drivers/cdrom/viocd.c: In function 'viocd_blk_release':
    drivers/cdrom/viocd.c:162: error: dereferencing pointer to incomplete type
    drivers/cdrom/viocd.c: In function 'viocd_blk_ioctl':
    drivers/cdrom/viocd.c:170: error: dereferencing pointer to incomplete type
    drivers/cdrom/viocd.c: In function 'viocd_blk_media_changed':
    drivers/cdrom/viocd.c:176: error: dereferencing pointer to incomplete type
    ...

    Signed-off-by: Alexander Beregalov
    Signed-off-by: Jens Axboe

    Alexander Beregalov
     

09 May, 2009

1 commit

  • commit b31a1d8b41513b96e9c7ec2f68c5734cef0b26a4 ("gianfar: Convert
    gianfar to an of_platform_driver"), possibly due merge issues,
    reintroduced completely unneded mpc83xx_wdt_init call, which
    I removed some time ago in commit 20d38e01d48019c578ab0ec1464454c0
    ("powerpc/fsl_soc: remove mpc83xx_wdt code").

    Remove it once again.

    Signed-off-by: Anton Vorontsov
    Signed-off-by: Kumar Gala

    Anton Vorontsov
     

05 May, 2009

1 commit


03 May, 2009

2 commits

  • The powerpc kernel always requires an Open Firmware like device tree
    to supply device information. On systems without OF, this comes from
    a flattened device tree blob. This blob is usually generated by dtc,
    a tool which compiles a text description of the device tree into the
    flattened format used by the kernel. Sometimes, the bootwrapper makes
    small changes to the pre-compiled device tree blob (e.g. filling in
    the size of RAM). To do this it uses the libfdt library.

    Because these are only used on powerpc, the code for both these tools
    is included under arch/powerpc/boot (these were imported and are
    periodically updated from the upstream dtc tree).

    However, the microblaze architecture, currently being prepared for
    merging to mainline also uses dtc to produce device tree blobs. A few
    other archs have also mentioned some interest in using dtc.
    Therefore, this patch moves dtc and libfdt from arch/powerpc into
    scripts, where it can be used by any architecture.

    The vast bulk of this patch is a literal move, the rest is adjusting
    the various Makefiles to use dtc and libfdt correctly from their new
    locations.

    Signed-off-by: David Gibson
    Signed-off-by: Linus Torvalds

    David Gibson
     
  • Some drivers using of_register_platform_driver() wrapper break on sparc
    because the wrapper isn't in the header file. This patch moves it from
    Microblaze and PowerPC implementations and makes it common code.

    Fixes this sparc64 allmodconfig build error (at least):

    drivers/leds/leds-gpio.c: In function `gpio_led_init':
    drivers/leds/leds-gpio.c:295: error: implicit declaration of function `of_register_platform_driver'
    drivers/leds/leds-gpio.c: In function `gpio_led_exit':
    drivers/leds/leds-gpio.c:311: error: implicit declaration of function `of_unregister_platform_driver'

    Signed-off-by: Grant Likely
    Acked-by: David S. Miller
    Cc: Michal Simek
    Cc: Benjamin Herrenschmidt
    Cc: Stephen Rothwell
    Cc: Richard Purdie
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Grant Likely
     

01 May, 2009

2 commits

  • commit 2657dd4e301d4841ed67a4fac7d145ad8f3e1b28 introduced a
    bug where we would now always override the "real" oprofile CPU
    type with the "compatible" one provided by a pseudo-PVR in the
    device-tree which is incorrect and breaks oprofile on all current
    configs since the "compatible" ones aren't yet recognized.

    This fixes it.

    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     
  • Oprofile is changing the naming it is using for the compatibility modes.
    Instead of having compat-power, oprofile will go to family naming
    convention and use ibm-compat-v. Currently only ibm-compat-v1 will
    be defined.
    The notion of compatibility events just started with POWER6. So there is
    no way that any other tool could exist that is using these
    oprofile_cpu_type strings we want to change.

    Signed-off-by: Mike Wolf
    Signed-off-by: Benjamin Herrenschmidt

    Michael Wolf
     

29 Apr, 2009

2 commits

  • * 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc:
    powerpc/ps3: Fix build error on UP
    powerpc/cell: Select PCI for IBM_CELL_BLADE AND CELLEB
    powerpc: ppc32 needs elf_read_implies_exec()
    powerpc/86xx: Add device_type entry to soc for ppc9a
    powerpc/44x: Correct memory size calculation for denali-based boards
    maintainers: Fix PowerPC 4xx git tree
    powerpc: fix for long standing bug noticed by gcc 4.4.0
    Revert "powerpc: Add support for early tlbilx opcode"

    Linus Torvalds
     
  • Commit edada399 broke the build on 64-bit powerpc because it moved the
    __ftr_alt_* sections of a file away from the .text section, causing
    link failures due to relative conditional branch targets being too far
    away from the branch instructions. This happens on pretty much all
    64-bit powerpc configs.

    This change reverts commit edada399 while preserving the update from
    the *.refok sections to .ref.text that has happened since.

    Signed-off-by: Tim Abbott
    Requested-by: Paul Mackerras
    Signed-off-by: Linus Torvalds

    Tim Abbott
     

28 Apr, 2009

1 commit

  • A non-SMP version of smp_send_stop() is now included in smp.h.
    Remove the unneeded definition in the PS3 smp.c.

    Fixes build errors like these when CONFIG_SMP=n:

    arch/powerpc/platforms/ps3/setup.c:49: error: redefinition of 'smp_send_stop'
    include/linux/smp.h:125: error: previous definition of 'smp_send_stop' was here

    Reported-by: Subrata Modak
    Signed-off-by: Geoff Levand
    Signed-off-by: Paul Mackerras

    Geoff Levand