21 Dec, 2013

1 commit

  • The ADM6996L switch and some Broadcom switches with two MII interfaces
    like the BCM5325F connected to two MACs on the SoC, used on some
    routers do not return a valid value when reading the PHY id register
    and Linux thinks there is no PHY at all, but that is wrong.
    This patch registers a fixed phy in the arch code and then searches it
    when there is no other phy in the Ethernet driver code.

    Signed-off-by: Hauke Mehrtens
    Signed-off-by: David S. Miller

    Hauke Mehrtens
     

19 Dec, 2013

1 commit


18 Dec, 2013

5 commits

  • Reported-by: Stephen Rothwell
    Signed-off-by: David S. Miller

    David S. Miller
     
  • Pull scheduler fixes from Ingo Molnar:
    "Three fixes for scheduler crashes, each triggers in relatively rare,
    hardware environment dependent situations"

    * 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    sched/fair: Rework sched_fair time accounting
    math64: Add mul_u64_u32_shr()
    sched: Remove PREEMPT_NEED_RESCHED from generic code
    sched: Initialize power_orig for overlapping groups

    Linus Torvalds
     
  • Pull perf fix from Ingo Molnar:
    "An x86/intel event constraint fix"

    * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    perf/x86: Fix constraint table end marker bug

    Linus Torvalds
     
  • Pull powerpc fixes from Ben Herrenschmidt:
    "Uli's patch fixes a regression in ptrace caused by a mis-merge of a
    previous LE patch. The rest are all more endian fixes, all fairly
    trivial, found during testing of 3.13-rc's"

    * 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
    powerpc/powernv: Fix OPAL LPC access in Little Endian
    powerpc/powernv: Fix endian issue in opal_xscom_read
    powerpc: Fix endian issues in crash dump code
    powerpc/pseries: Fix endian issues in MSI code
    powerpc/pseries: Fix PCIE link speed endian issue
    powerpc/pseries: Fix endian issues in nvram code
    powerpc/pseries: Fix endian issues in /proc/ppc64/lparcfg
    powerpc: Fix topology core_id endian issue on LE builds
    powerpc: Fix endian issue in setup-common.c
    powerpc: PTRACE_PEEKUSR always returns FPR0

    Linus Torvalds
     
  • We introduce a new hashing library that is meant to be used in
    the contexts where speed is more important than uniformity of the
    hashed values. The hash library leverages architecture specific
    implementation to achieve high performance and fall backs to
    jhash() for the generic case.

    On Intel-based x86 architectures, the library can exploit the crc32l
    instruction, part of the Intel SSE4.2 instruction set, if the
    instruction is supported by the processor. This implementation
    is twice as fast as the jhash() implementation on an i7 processor.

    Additional architectures, such as Arm64 provide instructions for
    accelerating the computation of CRC, so they could be added as well
    in follow-up work.

    Signed-off-by: Francesco Fusco
    Signed-off-by: Daniel Borkmann
    Signed-off-by: Thomas Graf
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: David S. Miller

    Francesco Fusco
     

16 Dec, 2013

1 commit

  • Pull x86 fixes from Peter Anvin:
    "This is a pretty small batch:

    The biggest single change is to stop using EFI time services on 32-bit
    platforms. This matches our current behavior on 64-bit platforms as
    we already had ruled them out there as being too unreliable. Turns
    out that affects 32-bit platforms, too.

    One NULL pointer fix for SGI UV.

    Two minor build fixes, one of which only affects icc and the other
    which affects icc and future versions or nonstandard default settings
    of gcc"

    * 'x86/urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    x86, efi: Don't use (U)EFI time services on 32 bit
    x86, build, icc: Remove uninitialized_var() from compiler-intel.h
    x86/UV: Fix NULL pointer dereference in uv_flush_tlb_others() if the 'nobau' boot option is used
    x86, build: Pass in additional -mno-mmx, -mno-sse options

    Linus Torvalds
     

14 Dec, 2013

3 commits

  • Pull ARM fixes from Russell King:
    "This resolves some further issues with the dma mask changes on ARM
    which have been found by TI and others, and also some corner cases
    with the updates to the virtual to physical address translations.

    Konstantin also found some problems with the unwinder, which now
    performs tighter verification that the stack is valid while unwinding"

    * 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm:
    ARM: fix asm/memory.h build error
    ARM: 7917/1: cacheflush: correctly limit range of memory region being flushed
    ARM: 7913/1: fix framepointer check in unwind_frame
    ARM: 7912/1: check stack pointer in get_wchan
    ARM: 7909/1: mm: Call setup_dma_zone() post early_paging_init()
    ARM: 7908/1: mm: Fix the arm_dma_limit calculation
    ARM: another fix for the DMA mapping checks

    Linus Torvalds
     
  • Pull ARC fixes from Vineet Gupta:
    "These are couple of weeks old already, but I just couldn't get them to
    you earlier.

    - couple of fixes for recently added perf code
    - build time extable sort"

    * tag 'arc-fixes-for-3.13' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc:
    ARC: [perf] Fix a few thinkos
    ARC: Add guard macro to uapi/asm/unistd.h
    ARC: extable: Enable sorting at build time

    Linus Torvalds
     
  • Jason Gunthorpe reports a build failure when ARM_PATCH_PHYS_VIRT is
    not defined:

    In file included from arch/arm/include/asm/page.h:163:0,
    from include/linux/mm_types.h:16,
    from include/linux/sched.h:24,
    from arch/arm/kernel/asm-offsets.c:13:
    arch/arm/include/asm/memory.h: In function '__virt_to_phys':
    arch/arm/include/asm/memory.h:244:40: error: 'PHYS_OFFSET' undeclared (first use in this function)
    arch/arm/include/asm/memory.h:244:40: note: each undeclared identifier is reported only once for each function it appears in
    arch/arm/include/asm/memory.h: In function '__phys_to_virt':
    arch/arm/include/asm/memory.h:249:13: error: 'PHYS_OFFSET' undeclared (first use in this function)

    Fixes: ca5a45c06cd4 ("ARM: mm: use phys_addr_t appropriately in p2v and v2p conversions")
    Tested-By: Jason Gunthorpe
    Signed-off-by: Russell King

    Russell King
     

13 Dec, 2013

15 commits

  • We are passing pointers to the firmware for reads, we need to properly
    convert the result as OPAL is always BE.

    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     
  • opal_xscom_read uses a pointer to return the data so we need
    to byteswap it on LE builds.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • A couple more device tree properties that need byte swapping.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • The MSI code is miscalculating quotas in little endian mode.
    Add required byteswaps to fix this.

    Before we claimed a quota of 65536, after the patch we
    see the correct value of 256.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • We need to byteswap ibm,pcie-link-speed-stats.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • The NVRAM code has a number of endian issues. I noticed a very
    confused error log count:

    RTAS: 100663330 -------- RTAS event begin --------

    100663330 == 0x06000022. 0x6 LE error logs and 0x22 BE error logs.

    The pstore code has similar issues - if we write an oops in one
    endian and attempt to read it in another we get junk.

    Make both of these formats big endian, and byteswap as required.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • Some obvious issues:

    cat /proc/ppc64/lparcfg
    ...
    partition_id=16777216
    ...
    partition_potential_processors=268435456

    Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • cpu_to_core_id() is missing a byteswap:

    cat /sys/devices/system/cpu/cpu63/topology/core_id
    201326592

    Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • During on LE boot we see:

    Partition configured for 1073741824 cpus, operating system maximum is 2048.

    Clearly missing a byteswap here.

    Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt

    Anton Blanchard
     
  • There is a bug in using ptrace to access FPRs via PTRACE_PEEKUSR /
    PTRACE_POKEUSR. In effect, trying to access any of the FPRs always
    really accesses FPR0, which does seriously break debugging :-)

    The problem seems to have been introduced by commit 3ad26e5c4459d
    (Merge branch 'for-kvm' into next).

    [ It is indeed a merge conflict between Paul's FPU/VSX state rework
    and my LE patches - Anton ]

    Signed-off-by: Ulrich Weigand
    Signed-off-by: Anton Blanchard
    Signed-off-by: Benjamin Herrenschmidt

    Ulrich Weigand
     
  • Pull kvm fixes from Paolo Bonzini:
    "Four security fixes for KVM on x86. Thanks to Andrew Honig and Lars
    Bull from Google for reporting them"

    * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
    KVM: x86: fix guest-initiated crash with x2apic (CVE-2013-6376)
    KVM: x86: Convert vapic synchronization to _cached functions (CVE-2013-6368)
    KVM: x86: Fix potential divide by 0 in lapic (CVE-2013-6367)
    KVM: Improve create VCPU parameter (CVE-2013-4587)

    Linus Torvalds
     
  • Pull ARM SoC fixes from Olof Johansson:
    "Another week, another batch of fixes.

    Again, OMAP regressions due to move to DT is the bulk of the changes
    here, but this should be the last of it for 3.13. There are also a
    handful of OMAP hwmod changes (power management, reset handling) for
    USB on OMAP3 that fixes some longish-standing bugs around USB resets.

    There are a couple of other changes that also add up line count a bit:
    One is a long-standing bug with the keyboard layout on one of the PXA
    platforms. The other is a fix for highbank that moves their
    power-off/reset button handling to be done in-kernel since relying on
    userspace to handle it was fragile and awkward"

    * tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc:
    ARM: sun6i: dt: Fix interrupt trigger types
    ARM: sun7i: dt: Fix interrupt trigger types
    MAINTAINERS: merge IMX6 entry into IMX
    ARM: tegra: add missing break to fuse initialization code
    ARM: pxa: prevent PXA270 occasional reboot freezes
    ARM: pxa: tosa: fix keys mapping
    ARM: OMAP2+: omap_device: add fail hook for runtime_pm when bad data is detected
    ARM: OMAP2+: hwmod: Fix usage of invalid iclk / oclk when clock node is not present
    ARM: OMAP3: hwmod data: Don't prevent RESET of USB Host module
    ARM: OMAP2+: hwmod: Fix SOFTRESET logic
    ARM: OMAP4+: hwmod data: Don't prevent RESET of USB Host module
    ARM: dts: Fix booting for secure omaps
    ARM: OMAP2+: Fix the machine entry for am3517
    ARM: dts: Fix missing entries for am3517
    ARM: OMAP2+: Fix overwriting hwmod data with data from device tree
    ARM: davinci: Fix McASP mem resource names
    ARM: highbank: handle soft poweroff and reset key events
    ARM: davinci: fix number of resources passed to davinci_gpio_register()
    gpio: davinci: fix check for unbanked gpio

    Linus Torvalds
     
  • A guest can cause a BUG_ON() leading to a host kernel crash.
    When the guest writes to the ICR to request an IPI, while in x2apic
    mode the following things happen, the destination is read from
    ICR2, which is a register that the guest can control.

    kvm_irq_delivery_to_apic_fast uses the high 16 bits of ICR2 as the
    cluster id. A BUG_ON is triggered, which is a protection against
    accessing map->logical_map with an out-of-bounds access and manages
    to avoid that anything really unsafe occurs.

    The logic in the code is correct from real HW point of view. The problem
    is that KVM supports only one cluster with ID 0 in clustered mode, but
    the code that has the bug does not take this into account.

    Reported-by: Lars Bull
    Cc: stable@vger.kernel.org
    Signed-off-by: Gleb Natapov
    Signed-off-by: Paolo Bonzini

    Gleb Natapov
     
  • In kvm_lapic_sync_from_vapic and kvm_lapic_sync_to_vapic there is the
    potential to corrupt kernel memory if userspace provides an address that
    is at the end of a page. This patches concerts those functions to use
    kvm_write_guest_cached and kvm_read_guest_cached. It also checks the
    vapic_address specified by userspace during ioctl processing and returns
    an error to userspace if the address is not a valid GPA.

    This is generally not guest triggerable, because the required write is
    done by firmware that runs before the guest. Also, it only affects AMD
    processors and oldish Intel that do not have the FlexPriority feature
    (unless you disable FlexPriority, of course; then newer processors are
    also affected).

    Fixes: b93463aa59d6 ('KVM: Accelerated apic support')

    Reported-by: Andrew Honig
    Cc: stable@vger.kernel.org
    Signed-off-by: Andrew Honig
    Signed-off-by: Paolo Bonzini

    Andy Honig
     
  • Under guest controllable circumstances apic_get_tmcct will execute a
    divide by zero and cause a crash. If the guest cpuid support
    tsc deadline timers and performs the following sequence of requests
    the host will crash.
    - Set the mode to periodic
    - Set the TMICT to 0
    - Set the mode bits to 11 (neither periodic, nor one shot, nor tsc deadline)
    - Set the TMICT to non-zero.
    Then the lapic_timer.period will be 0, but the TMICT will not be. If the
    guest then reads from the TMCCT then the host will perform a divide by 0.

    This patch ensures that if the lapic_timer.period is 0, then the division
    does not occur.

    Reported-by: Andrew Honig
    Cc: stable@vger.kernel.org
    Signed-off-by: Andrew Honig
    Signed-off-by: Paolo Bonzini

    Andy Honig
     

12 Dec, 2013

5 commits

  • The Allwinner A31 uses the ARM GIC as its internal interrupts controller. The
    GIC can work on several interrupt triggers, and the A31 was actually setting it
    up to use a rising edge as a trigger, while it was actually a level high
    trigger, leading to some interrupts that would be completely ignored if the
    edge was missed.

    Signed-off-by: Maxime Ripard
    Acked-by: Hans de Goede
    Cc: stable@vger.kernel.org # 3.12+
    Signed-off-by: Olof Johansson

    Maxime Ripard
     
  • The Allwinner A20 uses the ARM GIC as its internal interrupts controller. The
    GIC can work on several interrupt triggers, and the A20 was actually setting it
    up to use a rising edge as a trigger, while it was actually a level high
    trigger, leading to some interrupts that would be completely ignored if the
    edge was missed.

    Signed-off-by: Maxime Ripard
    Acked-by: Hans de Goede
    Cc: stable@vger.kernel.org #3.12+
    Signed-off-by: Olof Johansson

    Maxime Ripard
     
  • Add a missing break to the switch in tegra_init_fuse() which determines
    which SoC the code is running on. This prevents the Tegra30+ fuse
    handling code from running on Tegra20.

    Fixes: 3bd1ae57f7bb ("ARM: tegra: add fuses as device randomness")
    Signed-off-by: Stephen Warren
    Signed-off-by: Olof Johansson

    Stephen Warren
     
  • Erratum 71 of PXA270M Processor Family Specification Update
    (April 19, 2010) explains that watchdog reset time is just
    8us insead of 10ms in EMTS.

    If SDRAM is not reset, it causes memory bus congestion and
    the device hangs. We put SDRAM in selfresh mode before watchdog
    reset, removing potential freezes.

    Without this patch PXA270-based ICP DAS LP-8x4x hangs after up to 40
    reboots. With this patch it has successfully rebooted 500 times.

    Signed-off-by: Sergei Ianovich
    Tested-by: Marek Vasut
    Signed-off-by: Haojian Zhuang
    Cc: stable@vger.kernel.org
    Signed-off-by: Olof Johansson

    Sergei Ianovich
     
  • When converting from tosa-keyboard driver to matrix keyboard, tosa keys
    received extra 1 column shift. Replace that with correct values to make
    keyboard work again.

    Fixes: f69a6548c9d5 ('[ARM] pxa/tosa: make use of the matrix keypad driver')
    Signed-off-by: Dmitry Eremin-Solenikov
    Signed-off-by: Haojian Zhuang
    Cc: stable@vger.kernel.org
    Signed-off-by: Olof Johansson

    Dmitry Eremin-Solenikov
     

11 Dec, 2013

6 commits

  • Introduce mul_u64_u32_shr() as proposed by Andy a while back; it
    allows using 64x64->128 muls on 64bit archs and recent GCC
    which defines __SIZEOF_INT128__ and __int128.

    (This new method will be used by the scheduler.)

    Signed-off-by: Peter Zijlstra
    Cc: fweisbec@gmail.com
    Cc: Andy Lutomirski
    Cc: Linus Torvalds
    Link: http://lkml.kernel.org/n/tip-hxjoeuzmrcaumR0uZwjpe2pv@git.kernel.org
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     
  • While hunting a preemption issue with Alexander, Ben noticed that the
    currently generic PREEMPT_NEED_RESCHED stuff is horribly broken for
    load-store architectures.

    We currently rely on the IPI to fold TIF_NEED_RESCHED into
    PREEMPT_NEED_RESCHED, but when this IPI lands while we already have
    a load for the preempt-count but before the store, the store will erase
    the PREEMPT_NEED_RESCHED change.

    The current preempt-count only works on load-store archs because
    interrupts are assumed to be completely balanced wrt their preempt_count
    fiddling; the previous preempt_count load will match the preempt_count
    state after the interrupt and therefore nothing gets lost.

    This patch removes the PREEMPT_NEED_RESCHED usage from generic code and
    pushes it into x86 arch code; the generic code goes back to relying on
    TIF_NEED_RESCHED.

    Boot tested on x86_64 and compile tested on ppc64.

    Reported-by: Benjamin Herrenschmidt
    Reported-and-Tested-by: Alexander Graf
    Signed-off-by: Peter Zijlstra
    Cc: Linus Torvalds
    Link: http://lkml.kernel.org/r/20131128132641.GP10022@twins.programming.kicks-ass.net
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     
  • UEFI time services are often broken once we're in virtual mode. We were
    already refusing to use them on 64-bit systems, but it turns out that
    they're also broken on some 32-bit firmware, including the Dell Venue.
    Disable them for now, we can revisit once we have the 1:1 mappings code
    incorporated.

    Signed-off-by: Matthew Garrett
    Link: http://lkml.kernel.org/r/1385754283-2464-1-git-send-email-matthew.garrett@nebula.com
    Cc:
    Cc: Matt Fleming
    Signed-off-by: H. Peter Anvin

    Matthew Garrett
     
  • Pull AVR32 fixes from Hans-Christian Egtvedt.

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/egtvedt/linux-avr32:
    avr32: favr-32: clk_round_rate() can return a zero upon error
    avr32: remove deprecated IRQF_DISABLED
    cpufreq_ at32ap-cpufreq.c: Fix section mismatch
    avr32: pm: Fix section mismatch
    avr32: Kill CONFIG_MTD_PARTITIONS

    Linus Torvalds
     
  • Pull s390 fixes from Martin Schwidefsky:
    "One patch to increase the number of possible CPUs to 256, with the
    latest machine a single LPAR can have up to 101 CPUs. Plus a number
    of bug fixes, the clock_gettime patch fixes a regression added in the
    3.13 merge window"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
    s390/time,vdso: fix clock_gettime for CLOCK_MONOTONIC
    s390/vdso: ectg gettime support for CLOCK_THREAD_CPUTIME_ID
    s390/vdso: fix access-list entry initialization
    s390: increase CONFIG_NR_CPUS limit
    s390/smp,sclp: fix size of sclp_cpu_info structure
    s390/sclp: replace uninitialized early_event_mask_sccb variable with sccb_early
    s390/dasd: fix memory leak caused by dangling references to request_queue

    Linus Torvalds
     
  • Due to the cross dependencies between hwmod for automanaged device
    information for OMAP and dts node definitions, we can run into scenarios
    where the dts node is defined, however it's hwmod entry is yet to be
    added. In these cases:
    a) omap_device does not register a pm_domain (since it cannot find
    hwmod entry).
    b) driver does not know about (a), does a pm_runtime_get_sync which
    never fails
    c) It then tries to do some operation on the device (such as read the
    revision register (as part of probe) without clock or adequate OMAP
    generic PM operation performed for enabling the module.

    This causes a crash such as that reported in:
    https://bugzilla.kernel.org/show_bug.cgi?id=66441

    When 'ti,hwmod' is provided in dt node, it is expected that the device
    will not function without the OMAP's power automanagement. Hence, when
    we hit a fail condition (due to hwmod entries not present or other
    similar scenario), fail at pm_domain level due to lack of data, provide
    enough information for it to be fixed, however, it allows for the driver
    to take appropriate measures to prevent crash.

    Reported-by: Tobias Jakobi
    Signed-off-by: Nishanth Menon
    Acked-by: Kevin Hilman
    Acked-by: Tony Lindgren
    Signed-off-by: Kevin Hilman

    Nishanth Menon
     

10 Dec, 2013

3 commits

  • …nel/git/pjw/omap-pending into fixes

    From Paul Walmsley:
    ARM: OMAP2+: hwmod code/data: fixes for v3.13-rc

    Fix a few hwmod code problems involving recovery with bad data and bad
    IP block OCP reset handling. Also, fix the hwmod data to enable IP
    block OCP reset for the OMAP USBHOST devices on OMAP3+.

    Basic build, boot, and PM tests are available here:

    http://www.pwsan.com/omap/testlogs/prcm_fixes_a_v3.13-rc/20131209030611/

    * tag 'for-v3.13-rc/hwmod-fixes-a' of git://git.kernel.org/pub/scm/linux/kernel/git/pjw/omap-pending:
    ARM: OMAP2+: hwmod: Fix usage of invalid iclk / oclk when clock node is not present
    ARM: OMAP3: hwmod data: Don't prevent RESET of USB Host module
    ARM: OMAP2+: hwmod: Fix SOFTRESET logic
    ARM: OMAP4+: hwmod data: Don't prevent RESET of USB Host module

    Signed-off-by: Kevin Hilman <khilman@linaro.org>

    Kevin Hilman
     
  • The SGI UV tlb shootdown code panics the system with a NULL
    pointer deference if 'nobau' is specified on the boot
    commandline.

    uv_flush_tlb_other() gets called for every flush, whether the
    BAU is disabled or not. It should not be keeping the s_enters
    statistic while the BAU is disabled.

    The panic occurs because during initialization
    init_per_cpu_tunables() does not set the bcp->statp pointer if
    'nobau' was specified.

    Signed-off-by: Cliff Wickman
    Cc: # 3.12.x
    Link: http://lkml.kernel.org/r/E1VnzBi-0005yF-MU@eag09.americas.sgi.com
    Signed-off-by: Ingo Molnar

    cpw
     
  • Treat both negative and zero return values from clk_round_rate() as
    errors. This is needed since subsequent patches will convert
    clk_round_rate()'s return value to be an unsigned type, rather than a
    signed type, since some clock sources can generate rates higher than
    (2^31)-1 Hz.

    Eventually, when calling clk_round_rate(), only a return value of zero
    will be considered a error. All other values will be considered valid
    rates. The comparison against values less than 0 is kept to preserve
    the correct behavior in the meantime.

    Signed-off-by: Paul Walmsley
    Cc: Nicolas Ferre
    Cc: Håvard Skinnemoen
    Cc: Hans-Christian Egtvedt
    Cc: Jean-Christophe PLAGNIOL-VILLARD
    Acked-by: Hans-Christian Egtvedt

    Paul Walmsley