24 Jun, 2009

2 commits

  • x86 throws away .discard section but no other archs do. Also,
    .discard is not thrown away while linking modules. Make every arch
    and module linking throw it away. This will be used to define dummy
    variables for percpu declarations and definitions.

    This patch is based on Ivan Kokshaysky's alpha percpu patch.

    [ Impact: always throw away everything in .discard ]

    Signed-off-by: Tejun Heo
    Cc: Ivan Kokshaysky
    Cc: Richard Henderson
    Cc: Russell King
    Cc: Haavard Skinnemoen
    Cc: Bryan Wu
    Cc: Mikael Starvik
    Cc: Jesper Nilsson
    Cc: David Howells
    Cc: Yoshinori Sato
    Cc: Tony Luck
    Cc: Hirokazu Takata
    Cc: Geert Uytterhoeven
    Cc: Michal Simek
    Cc: Ralf Baechle
    Cc: Kyle McMartin
    Cc: Benjamin Herrenschmidt
    Cc: Paul Mackerras
    Cc: Martin Schwidefsky
    Cc: Heiko Carstens
    Cc: Paul Mundt
    Cc: David S. Miller
    Cc: Jeff Dike
    Cc: Chris Zankel
    Cc: Rusty Russell
    Cc: Ingo Molnar

    Tejun Heo
     
  • This patch makes most !CONFIG_HAVE_SETUP_PER_CPU_AREA archs use
    dynamic percpu allocator. The first chunk is allocated using
    embedding helper and 8k is reserved for modules. This ensures that
    the new allocator behaves almost identically to the original allocator
    as long as static percpu variables are concerned, so it shouldn't
    introduce much breakage.

    s390 and alpha use custom SHIFT_PERCPU_PTR() to work around addressing
    range limit the addressing model imposes. Unfortunately, this breaks
    if the address is specified using a variable, so for now, the two
    archs aren't converted.

    The following architectures are affected by this change.

    * sh
    * arm
    * cris
    * mips
    * sparc(32)
    * blackfin
    * avr32
    * parisc (broken, under investigation)
    * m32r
    * powerpc(32)

    As this change makes the dynamic allocator the default one,
    CONFIG_HAVE_DYNAMIC_PER_CPU_AREA is replaced with its invert -
    CONFIG_HAVE_LEGACY_PER_CPU_AREA, which is added to yet-to-be converted
    archs. These archs implement their own setup_per_cpu_areas() and the
    conversion is not trivial.

    * powerpc(64)
    * sparc(64)
    * ia64
    * alpha
    * s390

    Boot and batch alloc/free tests on x86_32 with debug code (x86_32
    doesn't use default first chunk initialization). Compile tested on
    sparc(32), powerpc(32), arm and alpha.

    Kyle McMartin reported that this change breaks parisc. The problem is
    still under investigation and he is okay with pushing this patch
    forward and fixing parisc later.

    [ Impact: use dynamic allocator for most archs w/o custom percpu setup ]

    Signed-off-by: Tejun Heo
    Acked-by: Rusty Russell
    Acked-by: David S. Miller
    Acked-by: Benjamin Herrenschmidt
    Acked-by: Martin Schwidefsky
    Reviewed-by: Christoph Lameter
    Cc: Paul Mundt
    Cc: Russell King
    Cc: Mikael Starvik
    Cc: Ralf Baechle
    Cc: Bryan Wu
    Cc: Kyle McMartin
    Cc: Matthew Wilcox
    Cc: Grant Grundler
    Cc: Hirokazu Takata
    Cc: Richard Henderson
    Cc: Ivan Kokshaysky
    Cc: Heiko Carstens
    Cc: Ingo Molnar

    Tejun Heo
     

22 Jun, 2009

24 commits

  • On extreme configuration (e.g. 32bit 32-way NUMA machine), lpage
    percpu first chunk allocator can consume too much of vmalloc space.
    Make it fall back to 4k allocator if the consumption goes over 20%.

    [ Impact: add sanity check for lpage percpu first chunk allocator ]

    Signed-off-by: Tejun Heo
    Reported-by: Jan Beulich
    Cc: Andi Kleen
    Cc: Ingo Molnar

    Tejun Heo
     
  • According to Andi, it isn't clear whether lpage allocator is worth the
    trouble as there are many processors where PMD TLB is far scarcer than
    PTE TLB. The advantage or disadvantage probably depends on the actual
    size of percpu area and specific processor. As performance
    degradation due to TLB pressure tends to be highly workload specific
    and subtle, it is difficult to decide which way to go without more
    data.

    This patch implements percpu_alloc kernel parameter to allow selecting
    which first chunk allocator to use to ease debugging and testing.

    While at it, make sure all the failure paths report why something
    failed to help determining why certain allocator isn't working. Also,
    kill the "Great future plan" comment which had already been realized
    quite some time ago.

    [ Impact: allow explicit percpu first chunk allocator selection ]

    Signed-off-by: Tejun Heo
    Reported-by: Jan Beulich
    Cc: Andi Kleen
    Cc: Ingo Molnar

    Tejun Heo
     
  • lpage allocator aliases a PMD page for each cpu and returns whatever
    is unused to the page allocator. When the pageattr of the recycled
    pages are changed, this makes the two aliases point to the overlapping
    regions with different attributes which isn't allowed and known to
    cause subtle data corruption in certain cases.

    This can be handled in simliar manner to the x86_64 highmap alias.
    pageattr code should detect if the target pages have PMD alias and
    split the PMD alias and synchronize the attributes.

    pcpur allocator is updated to keep the allocated PMD pages map sorted
    in ascending address order and provide pcpu_lpage_remapped() function
    which binary searches the array to determine whether the given address
    is aliased and if so to which address. pageattr is updated to use
    pcpu_lpage_remapped() to detect the PMD alias and split it up as
    necessary from cpa_process_alias().

    Jan Beulich spotted the original problem and incorrect usage of vaddr
    instead of laddr for lookup.

    With this, lpage percpu allocator should work correctly. Re-enable
    it.

    [ Impact: fix subtle lpage pageattr bug and re-enable lpage ]

    Signed-off-by: Tejun Heo
    Reported-by: Jan Beulich
    Cc: Andi Kleen
    Cc: Ingo Molnar

    Tejun Heo
     
  • Reorganize cpa_process_alias() so that new alias condition can be
    added easily.

    Jan Beulich spotted problem in the original cleanup thread which
    incorrectly assumed the two existing conditions were mutially
    exclusive.

    [ Impact: code reorganization ]

    Signed-off-by: Tejun Heo
    Cc: Jan Beulich
    Cc: Andi Kleen
    Cc: Ingo Molnar

    Tejun Heo
     
  • Make the following changes in preparation of coming pageattr updates.

    * Define and use array of struct pcpul_ent instead of array of
    pointers. The only difference is ->cpu field which is set but
    unused yet.

    * Rename variables according to the above change.

    * Rename local variable vm to pcpul_vm and move it out of the
    function.

    [ Impact: no functional difference ]

    Signed-off-by: Tejun Heo
    Cc: Jan Beulich
    Cc: Andi Kleen
    Cc: Ingo Molnar

    Tejun Heo
     
  • The "remap" allocator remaps large pages to build the first chunk;
    however, the name isn't very good because 4k allocator remaps too and
    the whole point of the remap allocator is using large page mapping.
    The allocator will be generalized and exported outside of x86, rename
    it to lpage before that happens.

    percpu_alloc kernel parameter is updated to accept both "remap" and
    "lpage" for lpage allocator.

    [ Impact: code cleanup, kernel parameter argument updated ]

    Signed-off-by: Tejun Heo
    Cc: Ingo Molnar

    Tejun Heo
     
  • In the failure path, setup_pcpu_remap() tries to free the area which
    has already been freed to make holes in the large page. Fix it.

    [ Impact: fix duplicate free in failure path ]

    Signed-off-by: Tejun Heo
    Cc: Ingo Molnar

    Tejun Heo
     
  • In pcpu_unmap(), flushing virtual cache on vunmap can't be delayed as
    the page is going to be returned to the page allocator. Only TLB
    flushing can be put off such that vmalloc code can handle it lazily.
    Fix it.

    [ Impact: fix subtle virtual cache flush bug ]

    Signed-off-by: Tejun Heo
    Cc: Nick Piggin
    Cc: Ingo Molnar

    Tejun Heo
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc:
    sdhci: remove needless double parenthesis
    sdhci: Specific quirk vor VIA SDHCI controller in VX855ES
    s3cmci: fix dma configuration call
    mmc: Add new via-sdmmc host controller driver
    sdhci: Add support for hosts that are only capable of 1-bit transfers
    MAINTAINERS: add myself as atmel-mci maintainer (sd/mmc interface)
    sdhci: Add SDHCI_QUIRK_NO_MULTIBLOCK quirk
    sdhci: Add better ADMA error reporting
    sdhci-s3c: Samsung S3C based SDHCI controller glue

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
    crypto: aes-ni - Remove CRYPTO_TFM_REQ_MAY_SLEEP from fpu template
    crypto: aes-ni - Do not sleep when using the FPU
    crypto: aes-ni - Fix cbc mode IV saving
    crypto: padlock-aes - work around Nano CPU errata in CBC mode
    crypto: padlock-aes - work around Nano CPU errata in ECB mode

    Linus Torvalds
     
  • …/git/tip/linux-2.6-tip

    * 'core-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    lockdep: Select frame pointers on x86
    dma-debug: be more careful when building reference entries
    dma-debug: check for sg_call_ents in best-fit algorithm too

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
    ALSA: hda - Add model=6530g option
    ALSA: hda - Acer Inspire 6530G model for Realtek ALC888
    ALSA: snd_usb_caiaq: fix legacy input streaming
    ASoC: Kill BUS_ID_SIZE
    ALSA: HDA - Correct trivial typos in comments.
    ALSA: HDA - Name-fixes in code (tagra/targa)
    ALSA: HDA - Add pci-quirk for MSI MS-7350 motherboard.
    ALSA: hda - Fix memory leak at codec creation

    Linus Torvalds
     
  • This allows the callers to now pass down the full set of FAULT_FLAG_xyz
    flags to handle_mm_fault(). All callers have been (mechanically)
    converted to the new calling convention, there's almost certainly room
    for architectures to clean up their code and then add FAULT_FLAG_RETRY
    when that support is added.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • The fault handling routines really want more fine-grained flags than a
    single "was it a write fault" boolean - the callers will want to set
    flags like "you can return a retry error" etc.

    And that's actually how the VM works internally, but right now the
    top-level fault handling functions in mm/memory.c all pass just the
    'write_access' boolean around.

    This switches them over to pass around the FAULT_FLAG_xyzzy 'flags'
    variable instead. The 'write_access' calling convention still exists
    for the exported 'handle_mm_fault()' function, but that is next.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • 31a985f "ipc: use __ARCH_WANT_IPC_PARSE_VERSION in ipc/util.h" would
    choose the implementation of ipc_parse_version() based on a symbol
    defined in .

    But it failed to also include this header and thus broke
    IPC_64-passing 32-bit userspace because the flag wasn't masked out
    properly anymore and the command not understood.

    Include to give the architecture a chance to ask for
    the no-no-op ipc_parse_version().

    Signed-off-by: Johannes Weiner
    Acked-by: Arnd Bergmann
    Signed-off-by: Linus Torvalds

    Johannes Weiner
     
  • Signed-off-by: Pierre Ossman

    Pierre Ossman
     
  • The SDHCI controller found in the VX855ES requires 10ms
    delay between applying power and applying clock.

    This issue has been discovered and documented by the OLPC XO1.5 team.

    Signed-off-by: Harald Welte
    Signed-off-by: Pierre Ossman

    Harald Welte
     
  • This was missed in the DMA changes during the s3c24xx
    updates in commit 8970ef47d56fd3db28ee798b9d400caf08abd924.

    Signed-off-by: Ben Dooks
    Signed-off-by: Pierre Ossman

    Ben Dooks
     
  • This adds the via-sdmmc driver for the SD/MMC-controller of VIA,
    which is found in a number of recent integrated VIA chipset
    products.

    Signed-off-by: Harald Welte
    Signed-off-by: Pierre Ossman

    Harald Welte
     
  • Some hosts (hardware configurations, or particular SD/MMC slots) may
    not support 4-bit bus. For example, on MPC8569E-MDS boards we can
    switch between serial (1-bit only) and nibble (4-bit) modes, thought
    we have to disable more peripherals to work in 4-bit mode.

    Along with some small core changes, this patch modifies sdhci-of
    driver, so that now it looks for "sdhci,1-bit-only" property in the
    device-tree, and if specified we enable a proper quirk.

    Signed-off-by: Anton Vorontsov
    Acked-by: Grant Likely
    Signed-off-by: Pierre Ossman

    Anton Vorontsov
     
  • Add MAINTAINERS entry for atmel-mci driver.
    This driver was maintained by its author: Haavard Skinnemoen. I take the
    maintainance of it.

    Signed-off-by: Nicolas Ferre
    Acked-by: Haavard Skinnemoen
    Signed-off-by: Pierre Ossman

    Nicolas Ferre
     
  • Add quirk to show the controller cannot do multi-block IO.

    This is mainly for the Samsung SDHCI controller that currently
    cannot manage to do multi-block PIO without timing out.

    Signed-off-by: Ben Dooks
    Signed-off-by: Pierre Ossman

    Ben Dooks
     
  • Update the ADMA error reporting to not only show the
    overall controller state but also to print the ADMA
    descriptor list.

    Signed-off-by: Ben Dooks
    Signed-off-by: Pierre Ossman

    Ben Dooks
     
  • Add support for the 'HSMMC' block(s) in the Samsung SoC
    line. These are compatible with the SDHCI driver so add
    the necessary setup and driver binding for the platform
    devices.

    Signed-off-by: Ben Dooks
    Signed-off-by: Pierre Ossman

    Ben Dooks
     

21 Jun, 2009

14 commits

  • * topic/hda:
    ALSA: hda - Add model=6530g option
    ALSA: hda - Acer Inspire 6530G model for Realtek ALC888
    ALSA: HDA - Correct trivial typos in comments.
    ALSA: HDA - Name-fixes in code (tagra/targa)
    ALSA: HDA - Add pci-quirk for MSI MS-7350 motherboard.
    ALSA: hda - Fix memory leak at codec creation

    Takashi Iwai
     
  • * topic/caiaq:
    ALSA: snd_usb_caiaq: fix legacy input streaming

    Takashi Iwai
     
  • * topic/asoc:
    ASoC: Kill BUS_ID_SIZE

    Takashi Iwai
     
  • Add the new model string corresponding to the previous Acer Aspire
    6530G support.

    Signed-off-by: Takashi Iwai

    Takashi Iwai
     
  • The selected 4930G model seemed to keep the subwoofer 'tuba'
    function from operating correctly. Removing the existing PCI
    ID match made this work again, but it was mapped to 'Side'
    instead of to LFE as one would expect.
    This attempts to enable all functionality and keep the amount
    of available mixer sliders low. Any slider that had no audible
    effect on the output audio has been removed, and as such EAPD
    is not currently enabled.

    Signed-off-by: Tony Vroon
    Signed-off-by: Takashi Iwai

    Tony Vroon
     
  • x86 stack traces are a piece of crap without frame pointers, and its not
    like the 'performance gain' of not having stack pointers matters when you
    selected lockdep.

    Reported-by: Andrew Morton
    LKML-Reference:
    Cc:
    Signed-off-by: Peter Zijlstra
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     
  • da456f1 "page allocator: do not disable interrupts in free_page_mlock()" moved
    the PG_mlocked clearing after the flag sanity checking which makes mlocked
    pages always trigger 'bad page'. Fix this by clearing the bit up front.

    Reported--and-debugged-by: Peter Chubb
    Signed-off-by: Johannes Weiner
    Acked-by: Mel Gorman
    Tested-by: Maxim Levitsky
    Signed-off-by: Linus Torvalds

    Johannes Weiner
     
  • The discussion about using "access_ok()" in get_user_pages_fast() (see
    commit 7f8189068726492950bf1a2dcfd9b51314560abf: "x86: don't use
    'access_ok()' as a range check in get_user_pages_fast()" for details and
    end result), made us notice that x86-64 was really being very sloppy
    about virtual address checking.

    So be way more careful and straightforward about masking x86-64 virtual
    addresses:

    - All the VIRTUAL_MASK* variants now cover half of the address
    space, it's not like we can use the full mask on a signed
    integer, and the larger mask just invites mistakes when
    applying it to either half of the 48-bit address space.

    - /proc/kcore's kc_offset_to_vaddr() becomes a lot more
    obvious when it transforms a file offset into a
    (kernel-half) virtual address.

    - Unify/simplify the 32-bit and 64-bit USER_DS definition to
    be based on TASK_SIZE_MAX.

    This cleanup and more careful/obvious user virtual address checking also
    uncovered a buglet in the x86-64 implementation of strnlen_user(): it
    would do an "access_ok()" check on the whole potential area, even if the
    string itself was much shorter, and thus return an error even for valid
    strings. Our sloppy checking had hidden this.

    So this fixes 'strnlen_user()' to do this properly, the same way we
    already handled user strings in 'strncpy_from_user()'. Namely by just
    checking the first byte, and then relying on fault handling for the
    rest. That always works, since we impose a guard page that cannot be
    mapped at the end of the user space address space (and even if we
    didn't, we'd have the address space hole).

    Acked-by: Ingo Molnar
    Cc: Peter Zijlstra
    Cc: Andrew Morton
    Cc: Nick Piggin
    Cc: Hugh Dickins
    Cc: H. Peter Anvin
    Cc: Thomas Gleixner
    Cc: Alan Cox
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • …git/tip/linux-2.6-tip

    * 'irq-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    genirq, irq.h: Fix kernel-doc warnings
    genirq: fix comment to say IRQ_WAKE_THREAD

    Linus Torvalds
     
  • …x/kernel/git/tip/linux-2.6-tip

    * 'perfcounters-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (49 commits)
    perfcounter: Handle some IO return values
    perf_counter: Push perf_sample_data through the swcounter code
    perf_counter tools: Define and use our own u64, s64 etc. definitions
    perf_counter: Close race in perf_lock_task_context()
    perf_counter, x86: Improve interactions with fast-gup
    perf_counter: Simplify and fix task migration counting
    perf_counter tools: Add a data file header
    perf_counter: Update userspace callchain sampling uses
    perf_counter: Make callchain samples extensible
    perf report: Filter to parent set by default
    perf_counter tools: Handle lost events
    perf_counter: Add event overlow handling
    fs: Provide empty .set_page_dirty() aop for anon inodes
    perf_counter: tools: Makefile tweaks for 64-bit powerpc
    perf_counter: powerpc: Add processor back-end for MPC7450 family
    perf_counter: powerpc: Make powerpc perf_counter code safe for 32-bit kernels
    perf_counter: powerpc: Change how processor-specific back-ends get selected
    perf_counter: powerpc: Use unsigned long for register and constraint values
    perf_counter: powerpc: Enable use of software counters on 32-bit powerpc
    perf_counter tools: Add and use isprint()
    ...

    Linus Torvalds
     
  • …l/git/tip/linux-2.6-tip

    * 'sched-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    sched: Fix out of scope variable access in sched_slice()
    sched: Hide runqueues from direct refer at source code level
    sched: Remove unneeded __ref tag
    sched, x86: Fix cpufreq + sched_clock() TSC scaling

    Linus Torvalds
     
  • …nel/git/tip/linux-2.6-tip

    * 'tracing-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (24 commits)
    tracing/urgent: warn in case of ftrace_start_up inbalance
    tracing/urgent: fix unbalanced ftrace_start_up
    function-graph: add stack frame test
    function-graph: disable when both x86_32 and optimize for size are configured
    ring-buffer: have benchmark test print to trace buffer
    ring-buffer: do not grab locks in nmi
    ring-buffer: add locks around rb_per_cpu_empty
    ring-buffer: check for less than two in size allocation
    ring-buffer: remove useless compile check for buffer_page size
    ring-buffer: remove useless warn on check
    ring-buffer: use BUF_PAGE_HDR_SIZE in calculating index
    tracing: update sample event documentation
    tracing/filters: fix race between filter setting and module unload
    tracing/filters: free filter_string in destroy_preds()
    ring-buffer: use commit counters for commit pointer accounting
    ring-buffer: remove unused variable
    ring-buffer: have benchmark test handle discarded events
    ring-buffer: prevent adding write in discarded area
    tracing/filters: strloc should be unsigned short
    tracing/filters: operand can be negative
    ...

    Fix up kmemcheck-induced conflict in kernel/trace/ring_buffer.c manually

    Linus Torvalds
     
  • …el/git/tip/linux-2.6-tip

    * 'timers-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    NOHZ: Properly feed cpufreq ondemand governor

    Linus Torvalds
     
  • …git/tip/linux-2.6-tip

    * 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (45 commits)
    x86, mce: fix error path in mce_create_device()
    x86: use zalloc_cpumask_var for mce_dev_initialized
    x86: fix duplicated sysfs attribute
    x86: de-assembler-ize asm/desc.h
    i386: fix/simplify espfix stack switching, move it into assembly
    i386: fix return to 16-bit stack from NMI handler
    x86, ioapic: Don't call disconnect_bsp_APIC if no APIC present
    x86: Remove duplicated #include's
    x86: msr.h linux/types.h is only required for __KERNEL__
    x86: nmi: Add Intel processor 0x6f4 to NMI perfctr1 workaround
    x86, mce: mce_intel.c needs <asm/apic.h>
    x86: apic/io_apic.c: dmar_msi_type should be static
    x86, io_apic.c: Work around compiler warning
    x86: mce: Don't touch THERMAL_APIC_VECTOR if no active APIC present
    x86: mce: Handle banks == 0 case in K7 quirk
    x86, boot: use .code16gcc instead of .code16
    x86: correct the conversion of EFI memory types
    x86: cap iomem_resource to addressable physical memory
    x86, mce: rename _64.c files which are no longer 64-bit-specific
    x86, mce: mce.h cleanup
    ...

    Manually fix up trivial conflict in arch/x86/mm/fault.c

    Linus Torvalds