23 Oct, 2008

3 commits

  • Latest mainline gives this section mismatch on sparc:

    The function current_pc() references
    the variable __init no_sun4u_here.
    This is often because current_pc lacks a __init
    annotation or the annotation of no_sun4u_here is wrong.

    Since current_pc() is used only in early time, it is correct to
    put it in .init section.

    Signed-off-by: Frederic Weisbecker
    Signed-off-by: David S. Miller

    Frederic Weisbecker
     
  • The latest mainline gives this section mismatch on sparc:

    The function __devinit apc_probe() references
    a variable __initdata apc_no_idle.
    If apc_no_idle is only used by apc_probe then
    annotate apc_no_idle with a matching annotation.

    Since the commit 7e7e2f035663c5ceb029bfb9d91e75099b0a5625,
    apc_probe() is on __devinit so we have to correct apc_no_idle
    which is referenced by this function.

    Signed-off-by: Frederic Weisbecker
    Signed-off-by: David S. Miller

    Frederic Weisbecker
     
  • Make arch/sparc64/kernel/trampoline.S in 2.6.27.1 lock prom_entry_lock
    when calling the PROM. This prevents a race condition that I observed
    causing a hang on startup on a 12-CPU E4500.

    I am not subscribed to this list, so please CC me on replies.

    Signed-off-by: Andrea Shepard
    Signed-off-by: David S. Miller

    Andrea Shepard
     

21 Oct, 2008

18 commits

  • __FUNCTION__ is gcc-specific, use __func__

    Signed-off-by: Harvey Harrison
    Acked-by: Randy Dunlap
    Signed-off-by: Linus Torvalds

    Harvey Harrison
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6:
    parisc: convert to generic compat_sys_ptrace
    parisc: add rtc platform driver
    parisc: initialize unwinder much earlier
    parisc: add new syscalls
    parisc: hijack jump to start_kernel
    parisc: add pdc_coproc_cfg_unlocked and set_firmware_width_unlocked
    parisc: move include/asm-parisc to arch/parisc/include/asm
    parisc: move pdc_result to real2.S
    parisc: unify CCIO_COLLECT_STATS implementation
    parisc: add arch/parisc/kernel/.gitignore
    parisc: ropes.h - fix ->
    parisc: parisc-agp - fix ->

    Resolve remove/rename conflict: include/asm-parisc/a.out.h is no longer
    relevant.

    Linus Torvalds
     
  • * 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6: (41 commits)
    PCI: fix pci_ioremap_bar() on s390
    PCI: fix AER capability check
    PCI: use pci_find_ext_capability everywhere
    PCI: remove #ifdef DEBUG around dev_dbg call
    PCI hotplug: fix get_##name return value problem
    PCI: document the pcie_aspm kernel parameter
    PCI: introduce an pci_ioremap(pdev, barnr) function
    powerpc/PCI: Add legacy PCI access via sysfs
    PCI: Add ability to mmap legacy_io on some platforms
    PCI: probing debug message uniformization
    PCI: support PCIe ARI capability
    PCI: centralize the capabilities code in probe.c
    PCI: centralize the capabilities code in pci-sysfs.c
    PCI: fix 64-vbit prefetchable memory resource BARs
    PCI: replace cfg space size (256/4096) by macros.
    PCI: use resource_size() everywhere.
    PCI: use same arg names in PCI_VDEVICE comment
    PCI hotplug: rpaphp: make debug var unique
    PCI: use %pF instead of print_fn_descriptor_symbol() in quirks.c
    PCI: fix hotplug get_##name return value problem
    ...

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

    * 'tracing-v28-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (131 commits)
    tracing/fastboot: improve help text
    tracing/stacktrace: improve help text
    tracing/fastboot: fix initcalls disposition in bootgraph.pl
    tracing/fastboot: fix bootgraph.pl initcall name regexp
    tracing/fastboot: fix issues and improve output of bootgraph.pl
    tracepoints: synchronize unregister static inline
    tracepoints: tracepoint_synchronize_unregister()
    ftrace: make ftrace_test_p6nop disassembler-friendly
    markers: fix synchronize marker unregister static inline
    tracing/fastboot: add better resolution to initcall debug/tracing
    trace: add build-time check to avoid overrunning hex buffer
    ftrace: fix hex output mode of ftrace
    tracing/fastboot: fix initcalls disposition in bootgraph.pl
    tracing/fastboot: fix printk format typo in boot tracer
    ftrace: return an error when setting a nonexistent tracer
    ftrace: make some tracers reentrant
    ring-buffer: make reentrant
    ring-buffer: move page indexes into page headers
    tracing/fastboot: only trace non-module initcalls
    ftrace: move pc counter in irqtrace
    ...

    Manually fix conflicts:
    - init/main.c: initcall tracing
    - kernel/module.c: verbose level vs tracepoints
    - scripts/bootgraph.pl: fallout from cherry-picking commits.

    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:
    x86 ACPI: fix breakage of resume on 64-bit UP systems with SMP kernel
    Introduce is_vmalloc_or_module_addr() and use with DEBUG_VIRTUAL

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

    This merges branches irq/genirq, irq/sparseirq-v4, timers/hpet-percpu
    and x86/uv.

    The sparseirq branch is just preliminary groundwork: no sparse IRQs are
    actually implemented by this tree anymore - just the new APIs are added
    while keeping the old way intact as well (the new APIs map 1:1 to
    irq_desc[]). The 'real' sparse IRQ support will then be a relatively
    small patch ontop of this - with a v2.6.29 merge target.

    * 'genirq-v28-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (178 commits)
    genirq: improve include files
    intr_remapping: fix typo
    io_apic: make irq_mis_count available on 64-bit too
    genirq: fix name space collisions of nr_irqs in arch/*
    genirq: fix name space collision of nr_irqs in autoprobe.c
    genirq: use iterators for irq_desc loops
    proc: fixup irq iterator
    genirq: add reverse iterator for irq_desc
    x86: move ack_bad_irq() to irq.c
    x86: unify show_interrupts() and proc helpers
    x86: cleanup show_interrupts
    genirq: cleanup the sparseirq modifications
    genirq: remove artifacts from sparseirq removal
    genirq: revert dynarray
    genirq: remove irq_to_desc_alloc
    genirq: remove sparse irq code
    genirq: use inline function for irq_to_desc
    genirq: consolidate nr_irqs and for_each_irq_desc()
    x86: remove sparse irq from Kconfig
    genirq: define nr_irqs for architectures with GENERIC_HARDIRQS=n
    ...

    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:
    m32r: fix build due to notify_cpu_starting() change
    powerpc: fix linux-next build failure

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6: (36 commits)
    ide: re-add TRM290 fix lost during ide_build_dmatable() cleanup
    scc_pata: kill unused variables
    sgiioc4: kill duplicate ioremap()
    sgiioc4: kill useless address checks
    delkin_cb: add PM support
    ide: remove broken hpt34x driver
    ide-floppy: remove idefloppy_floppy_t typedef
    sgiioc4: remove maskproc() method
    hpt366: cleanup maskproc() method
    ide: mask interrupt in ide_config_drive_speed()
    hpt366: fix compile warning
    ide: remove unused macros from
    ide: remove M68K_IDE_SWAPW define from
    ide: remove dead
    ide: fix support for IDE PCI controllers using MMIO on frv
    ide-cd: remove stale comment
    ide-cd: small drive type print fix
    ide-cd: debug log enhancements
    ide: add generic ATA/ATAPI disk driver
    ide: allow device drivers to specify per-device type /proc settings
    ...

    Linus Torvalds
     
  • Update assorted email addresses and related info to point
    to a single current, valid address.

    additionally
    - trivial CREDITS entry updates. (Not that this file means much any more)
    - remove arjans dead redhat.com address from powernow driver

    Signed-off-by: Dave Jones
    Signed-off-by: Linus Torvalds

    Dave Jones
     
  • The generated 'capflags.c' file wasn't properly ignored, and the list of
    files in scripts/basic/ wasn't up-to-date.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • This patch adds support for legacy_io and legacy_mem files in
    bus class directories in sysfs for powerpc

    Signed-off-by: Benjamin Herrenschmidt
    Signed-off-by: Jesse Barnes

    Benjamin Herrenschmidt
     
  • This adds the ability to mmap legacy IO space to the legacy_io files
    in sysfs on platforms that support it. This will allow to clean up
    X to use this instead of /dev/mem for legacy IO accesses such as
    those performed by Int10.

    While at it I moved pci_create/remove_legacy_files() to pci-sysfs.c
    where I think they belong, thus making more things statis in there
    and cleaned up some spurrious prototypes in the ia64 pci.h file

    Signed-off-by: Benjamin Herrenschmidt
    Signed-off-by: Jesse Barnes

    Benjamin Herrenschmidt
     
  • This patch updates the Intel Ibex Peak (PCH) LPC and SMBus Controller
    DeviceIDs.

    The LPC Controller ID is set by Firmware within the range of
    0x3b00-3b1f. This range is included in pci_ids.h using min and max
    values, and irq.c now has code to handle the range (in lieu of 32
    additions to a SWITCH statement).

    The SMBus Controller ID is a fixed-value and will not change.

    Signed-off-by: Seth Heasley
    Acked-by: Jean Delvare
    Signed-off-by: Jesse Barnes

    Seth Heasley
     
  • Use "[%04x:%04x]" for PCI vendor/device IDs to follow the format
    used by lspci(8).

    Signed-off-by: Bjorn Helgaas
    Signed-off-by: Jesse Barnes

    Bjorn Helgaas
     
  • * 'for-next' of git://git.o-hand.com/linux-mfd:
    mfd: further unbork the ucb1400 ac97_bus dependencies
    mfd: ucb1400 needs GPIO
    mfd: ucb1400 sound driver uses/depends on AC97_BUS:
    mfd: Don't use NO_IRQ in WM8350
    mfd: update TMIO drivers to use the clock API
    mfd: twl4030-core irq simplification
    mfd: add base support for Dialog DA9030/DA9034 PMICs
    mfd: TWL4030 core driver
    mfd: support tmiofb cell on tc6393xb
    mfd: add OHCI cell to tc6393xb
    mfd: Fix htc-egpio compile warning
    mfd: do tcb6393xb state restore on resume only if requested
    mfd: provide and use setup hook for tc6393xb
    mfd: update sm501 debugging/low information messages
    mfd: reduce stack usage in mfd-core.c

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6: (112 commits)
    sh: Move SH-4 CPU headers down one more level.
    sh: Only build in gpio.o when CONFIG_GENERIC_GPIO is selected.
    sh: Migrate common board headers to mach-common/.
    sh: Move the CPU definition headers from asm/ to cpu/.
    serial: sh-sci: Add support SCIF of SH7723
    video: add sh_mobile_lcdc platform flags
    video: remove unused sh_mobile_lcdc platform data
    sh: remove consistent alloc cruft
    sh: add dynamic crash base address support
    sh: reduce Migo-R smc91x overruns
    sh: Fix up some merge damage.
    Fix debugfs_create_file's error checking method for arch/sh/mm/
    Fix debugfs_create_dir's error checking method for arch/sh/kernel/
    sh: ap325rxa: Add support RTC RX-8564LC in AP325RXA board
    sh: Use sh7720 GPIO on magicpanelr2 board
    sh: Add sh7720 pinmux code
    sh: Use sh7203 GPIO on rsk7203 board
    sh: Add sh7203 pinmux code
    sh: Use sh7723 GPIO on AP325RXA board
    sh: Add sh7723 pinmux code
    ...

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
    ALSA: ASoC: OMAP: Fix DSP DAI format in McBSP DAI driver
    go7007 - Add missing dependency on sound subsystem
    ALSA: ps3: Add support for SPDIF/HDMI passthru
    ps3: Add passthru support for non-audio streams
    ps3: Add ps3av_audio_mute_analog()
    ALSA: misc typo fixes
    sound: add missing pcm kernel-doc

    Linus Torvalds
     
  • * git://git.infradead.org/mtd-2.6: (69 commits)
    Revert "[MTD] m25p80.c code cleanup"
    [MTD] [NAND] GPIO driver depends on ARM... for now.
    [MTD] [NAND] sh_flctl: fix compile error
    [MTD] [NOR] AT49BV6416 has swapped erase regions
    [MTD] [NAND] GPIO NAND flash driver
    [MTD] cmdlineparts documentation change - explain where mtd-id comes from
    [MTD] cfi_cmdset_0002.c: Add Macronix CFI V1.0 TopBottom detection
    [MTD] [NAND] Fix compilation warnings in drivers/mtd/nand/cs553x_nand.c
    [JFFS2] Write buffer offset adjustment for NOR-ECC (Sibley) flash
    [MTD] mtdoops: Fix a bug where block may not be erased
    [MTD] mtdoops: Add a magic number to logged kernel oops
    [MTD] mtdoops: Fix an off by one error
    [JFFS2] Correct parameter names of jffs2_compress() in comments
    [MTD] [NAND] sh_flctl: add support for Renesas SuperH FLCTL
    [MTD] [NAND] Bug on atmel_nand HW ECC : OOB info not correctly written
    [MTD] [MAPS] Remove unused variable after ROM API cleanup.
    [MTD] m25p80.c extended jedec support (v2)
    [MTD] remove unused mtd parameter in of_mtd_parse_partitions()
    [MTD] [NAND] remove dead Kconfig associated with !CONFIG_PPC_MERGE
    [MTD] [NAND] driver extension to support NAND on TQM85xx modules
    ...

    Linus Torvalds
     

20 Oct, 2008

19 commits

  • Change mn10300 to use the new bcd2bin/bin2bcd functions instead of the
    obsolete BCD_TO_BIN/BIN_TO_BCD macros.

    Signed-off-by: Adrian Bunk
    Acked-by: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Adrian Bunk
     
  • Changes mips to use the new bcd2bin/bin2bcd functions instead of the
    obsolete BCD_TO_BIN/BIN_TO_BCD/BCD2BIN/BIN2BCD macros.

    Signed-off-by: Adrian Bunk
    Cc: Ralf Baechle
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Adrian Bunk
     
  • Change various rtc related code to use the new bcd2bin/bin2bcd functions
    instead of the obsolete BCD_TO_BIN/BIN_TO_BCD/BCD2BIN/BIN2BCD macros.

    Signed-off-by: Adrian Bunk
    Acked-by: Alessandro Zummo
    Cc: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Adrian Bunk
     
  • Change cris to use the new bcd2bin/bin2bcd functions instead of the
    obsolete BCD_TO_BIN/BIN_TO_BCD macros.

    Signed-off-by: Adrian Bunk
    Cc: Chris Zankel
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Adrian Bunk
     
  • Change alpha to use the new bcd2bin/bin2bcd functions instead of the
    obsolete BCD_TO_BIN/BIN_TO_BCD macros.

    Signed-off-by: Adrian Bunk
    Cc: Richard Henderson
    Cc: Ivan Kokshaysky
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Adrian Bunk
     
  • elfcore header memory needs to be reserved in a crash kernel. This means
    that the relevant code should be protected by CONFIG_CRASH_DUMP rather
    than CONFIG_PROC_VMCORE.

    Signed-off-by: Simon Horman
    Cc: Vivek Goyal
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Simon Horman
     
  • The usage of elfcorehdr_addr has changed recently such that being set to
    ELFCORE_ADDR_MAX is used by is_kdump_kernel() to indicate if the code is
    executing in a kernel executed as a crash kernel.

    However, arch/ia64/kernel/setup.c:reserve_elfcorehdr will rest
    elfcorehdr_addr to ELFCORE_ADDR_MAX on error, which means any subsequent
    calls to is_kdump_kernel() will return 0, even though they should return
    1.

    Ok, at this point in time there are no subsequent calls, but I think its
    fair to say that there is ample scope for error or at the very least
    confusion.

    This patch add an extra state, ELFCORE_ADDR_ERR, which indicates that
    elfcorehdr_addr was passed on the command line, and thus execution is
    taking place in a crashdump kernel, but vmcore can't be used for some
    reason. This is tested for using is_vmcore_usable() and set using
    vmcore_unusable(). A subsequent patch makes use of this new code.

    To summarise, the states that elfcorehdr_addr can now be in are as follows:

    ELFCORE_ADDR_MAX: not a crashdump kernel
    ELFCORE_ADDR_ERR: crashdump kernel but vmcore is unusable
    any other value: crash dump kernel and vmcore is usable

    Signed-off-by: Simon Horman
    Cc: Vivek Goyal
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Simon Horman
     
  • o Make use of is_kdump_kernel() rather than checking elfcorehdr_addr directly.

    o Remove CONFIG_CRASH_DUMP as is_kdump_kernel() is safe to call anywhere

    o Remove CONFIG_PROC_FS as it is bogus, the check
    should occur regardless of if CONFIG_PROC_FS is set or not.

    Signed-off-by: Simon Horman
    Acked-by: Vivek Goyal
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Simon Horman
     
  • o elfcorehdr_addr is used by not only the code under CONFIG_PROC_VMCORE
    but also by the code which is not inside CONFIG_PROC_VMCORE. For
    example, is_kdump_kernel() is used by powerpc code to determine if
    kernel is booting after a panic then use previous kernel's TCE table.
    So even if CONFIG_PROC_VMCORE is not set in second kernel, one should be
    able to correctly determine that we are booting after a panic and setup
    calgary iommu accordingly.

    o So remove the assumption that elfcorehdr_addr is under
    CONFIG_PROC_VMCORE.

    o Move definition of elfcorehdr_addr to arch dependent crash files.
    (Unfortunately crash dump does not have an arch independent file
    otherwise that would have been the best place).

    o kexec.c is not the right place as one can Have CRASH_DUMP enabled in
    second kernel without KEXEC being enabled.

    o I don't see sh setup code parsing the command line for
    elfcorehdr_addr. I am wondering how does vmcore interface work on sh.
    Anyway, I am atleast defining elfcoredhr_addr so that compilation is not
    broken on sh.

    Signed-off-by: Vivek Goyal
    Acked-by: "Eric W. Biederman"
    Acked-by: Simon Horman
    Acked-by: Paul Mundt
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Vivek Goyal
     
  • Fix

    arch/um/sys-i386/signal.c: In function 'copy_sc_from_user':
    arch/um/sys-i386/signal.c:182: warning: dereferencing 'void *' pointer
    arch/um/sys-i386/signal.c:182: error: request for member '_fxsr_env' in something not a structure or union

    Signed-off-by: WANG Cong
    Cc: Jeff Dike
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    WANG Cong
     
  • Removed duplicated include file in
    arch/m68k/bvme6000/rtc.c.

    Signed-off-by: Huang Weiyi
    Cc: Geert Uytterhoeven
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Huang Weiyi
     
  • This patch implements a new freezer subsystem in the control groups
    framework. It provides a way to stop and resume execution of all tasks in
    a cgroup by writing in the cgroup filesystem.

    The freezer subsystem in the container filesystem defines a file named
    freezer.state. Writing "FROZEN" to the state file will freeze all tasks
    in the cgroup. Subsequently writing "RUNNING" will unfreeze the tasks in
    the cgroup. Reading will return the current state.

    * Examples of usage :

    # mkdir /containers/freezer
    # mount -t cgroup -ofreezer freezer /containers
    # mkdir /containers/0
    # echo $some_pid > /containers/0/tasks

    to get status of the freezer subsystem :

    # cat /containers/0/freezer.state
    RUNNING

    to freeze all tasks in the container :

    # echo FROZEN > /containers/0/freezer.state
    # cat /containers/0/freezer.state
    FREEZING
    # cat /containers/0/freezer.state
    FROZEN

    to unfreeze all tasks in the container :

    # echo RUNNING > /containers/0/freezer.state
    # cat /containers/0/freezer.state
    RUNNING

    This is the basic mechanism which should do the right thing for user space
    task in a simple scenario.

    It's important to note that freezing can be incomplete. In that case we
    return EBUSY. This means that some tasks in the cgroup are busy doing
    something that prevents us from completely freezing the cgroup at this
    time. After EBUSY, the cgroup will remain partially frozen -- reflected
    by freezer.state reporting "FREEZING" when read. The state will remain
    "FREEZING" until one of these things happens:

    1) Userspace cancels the freezing operation by writing "RUNNING" to
    the freezer.state file
    2) Userspace retries the freezing operation by writing "FROZEN" to
    the freezer.state file (writing "FREEZING" is not legal
    and returns EIO)
    3) The tasks that blocked the cgroup from entering the "FROZEN"
    state disappear from the cgroup's set of tasks.

    [akpm@linux-foundation.org: coding-style fixes]
    [akpm@linux-foundation.org: export thaw_process]
    Signed-off-by: Cedric Le Goater
    Signed-off-by: Matt Helsley
    Acked-by: Serge E. Hallyn
    Tested-by: Matt Helsley
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Matt Helsley
     
  • This patch series introduces a cgroup subsystem that utilizes the swsusp
    freezer to freeze a group of tasks. It's immediately useful for batch job
    management scripts. It should also be useful in the future for
    implementing container checkpoint/restart.

    The freezer subsystem in the container filesystem defines a cgroup file
    named freezer.state. Reading freezer.state will return the current state
    of the cgroup. Writing "FROZEN" to the state file will freeze all tasks
    in the cgroup. Subsequently writing "RUNNING" will unfreeze the tasks in
    the cgroup.

    * Examples of usage :

    # mkdir /containers/freezer
    # mount -t cgroup -ofreezer freezer /containers
    # mkdir /containers/0
    # echo $some_pid > /containers/0/tasks

    to get status of the freezer subsystem :

    # cat /containers/0/freezer.state
    RUNNING

    to freeze all tasks in the container :

    # echo FROZEN > /containers/0/freezer.state
    # cat /containers/0/freezer.state
    FREEZING
    # cat /containers/0/freezer.state
    FROZEN

    to unfreeze all tasks in the container :

    # echo RUNNING > /containers/0/freezer.state
    # cat /containers/0/freezer.state
    RUNNING

    This patch:

    The first step in making the refrigerator() available to all
    architectures, even for those without power management.

    The purpose of such a change is to be able to use the refrigerator() in a
    new control group subsystem which will implement a control group freezer.

    [akpm@linux-foundation.org: fix sparc]
    Signed-off-by: Cedric Le Goater
    Signed-off-by: Matt Helsley
    Acked-by: Pavel Machek
    Acked-by: Serge E. Hallyn
    Acked-by: Rafael J. Wysocki
    Acked-by: Nigel Cunningham
    Tested-by: Matt Helsley
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Matt Helsley
     
  • Rewrite the vmap allocator to use rbtrees and lazy tlb flushing, and
    provide a fast, scalable percpu frontend for small vmaps (requires a
    slightly different API, though).

    The biggest problem with vmap is actually vunmap. Presently this requires
    a global kernel TLB flush, which on most architectures is a broadcast IPI
    to all CPUs to flush the cache. This is all done under a global lock. As
    the number of CPUs increases, so will the number of vunmaps a scaled
    workload will want to perform, and so will the cost of a global TLB flush.
    This gives terrible quadratic scalability characteristics.

    Another problem is that the entire vmap subsystem works under a single
    lock. It is a rwlock, but it is actually taken for write in all the fast
    paths, and the read locking would likely never be run concurrently anyway,
    so it's just pointless.

    This is a rewrite of vmap subsystem to solve those problems. The existing
    vmalloc API is implemented on top of the rewritten subsystem.

    The TLB flushing problem is solved by using lazy TLB unmapping. vmap
    addresses do not have to be flushed immediately when they are vunmapped,
    because the kernel will not reuse them again (would be a use-after-free)
    until they are reallocated. So the addresses aren't allocated again until
    a subsequent TLB flush. A single TLB flush then can flush multiple
    vunmaps from each CPU.

    XEN and PAT and such do not like deferred TLB flushing because they can't
    always handle multiple aliasing virtual addresses to a physical address.
    They now call vm_unmap_aliases() in order to flush any deferred mappings.
    That call is very expensive (well, actually not a lot more expensive than
    a single vunmap under the old scheme), however it should be OK if not
    called too often.

    The virtual memory extent information is stored in an rbtree rather than a
    linked list to improve the algorithmic scalability.

    There is a per-CPU allocator for small vmaps, which amortizes or avoids
    global locking.

    To use the per-CPU interface, the vm_map_ram / vm_unmap_ram interfaces
    must be used in place of vmap and vunmap. Vmalloc does not use these
    interfaces at the moment, so it will not be quite so scalable (although it
    will use lazy TLB flushing).

    As a quick test of performance, I ran a test that loops in the kernel,
    linearly mapping then touching then unmapping 4 pages. Different numbers
    of tests were run in parallel on an 4 core, 2 socket opteron. Results are
    in nanoseconds per map+touch+unmap.

    threads vanilla vmap rewrite
    1 14700 2900
    2 33600 3000
    4 49500 2800
    8 70631 2900

    So with a 8 cores, the rewritten version is already 25x faster.

    In a slightly more realistic test (although with an older and less
    scalable version of the patch), I ripped the not-very-good vunmap batching
    code out of XFS, and implemented the large buffer mapping with vm_map_ram
    and vm_unmap_ram... along with a couple of other tricks, I was able to
    speed up a large directory workload by 20x on a 64 CPU system. I believe
    vmap/vunmap is actually sped up a lot more than 20x on such a system, but
    I'm running into other locks now. vmap is pretty well blown off the
    profiles.

    Before:
    1352059 total 0.1401
    798784 _write_lock 8320.6667
    Cc: Jeremy Fitzhardinge
    Cc: Krzysztof Helt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nick Piggin
     
  • There is nothing architecture specific about remove_memory().
    remove_memory() function is common for all architectures which support
    hotplug memory remove. Instead of duplicating it in every architecture,
    collapse them into arch neutral function.

    [akpm@linux-foundation.org: fix the export]
    Signed-off-by: Badari Pulavarty
    Cc: Yasunori Goto
    Cc: Gary Hade
    Cc: Mel Gorman
    Cc: Yasunori Goto
    Cc: "Luck, Tony"
    Cc: Benjamin Herrenschmidt
    Cc: Paul Mackerras
    Cc: Heiko Carstens
    Cc: Martin Schwidefsky
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Badari Pulavarty
     
  • …taging-fixes' into for-linus

    Takashi Iwai
     
  • Add support for the channel status bit setting so that non-PCM
    data stream can be sent (i.e. pass-through) via SPDIF/HDMI.

    Signed-off-by: Masakazu Mokuno
    Acked-by: Geert Uytterhoeven
    Signed-off-by: Takashi Iwai

    Takashi Iwai
     
  • Add support for muting the analog output so that it does not
    play noises while non-PCM data is played.

    Signed-off-by: Masakazu Mokuno
    Signed-off-by: Takashi Iwai

    Masakazu Mokuno
     
  • These accidentally got placed in to cpu-sh4 instead of cpu-sh4/cpu, push
    them down one more level.

    Signed-off-by: Paul Mundt

    Paul Mundt