15 Apr, 2013

30 commits

  • kfree on NULL pointer is a no-op.

    Signed-off-by: Syam Sidhardhan
    Signed-off-by: Vinod Koul

    Syam Sidhardhan
     
  • Since commit 84c1e63c12 (dma: Remove erroneous __exit and __exit_p() references)
    the following section mismatch happens:

    WARNING: drivers/built-in.o(.text+0x20f94): Section mismatch in reference from the function ipu_remove() to the function .exit.text:ipu_idmac_exit()
    The function ipu_remove() references a function in an exit section.
    Often the function ipu_idmac_exit() has valid usage outside the exit section
    and the fix is to remove the __exit annotation of ipu_idmac_exit.

    Remove the '__exit' annotation from ipu_idmac_exit in order to fix it.

    Signed-off-by: Fabio Estevam
    Acked-by: Maxin B. John
    Signed-off-by: Vinod Koul

    Fabio Estevam
     
  • Tegra only supports, and always enables, device tree. Remove all ifdefs
    and runtime checks for DT support from the driver.

    Signed-off-by: Stephen Warren
    Signed-off-by: Vinod Koul

    Stephen Warren
     
  • Use the newly introduced devm_ioremap_resource() instead of
    devm_request_and_ioremap() which provides more consistent error handling.

    Signed-off-by: Sachin Kamat
    Reviewed-by: Thierry Reding
    Signed-off-by: Vinod Koul

    Sachin Kamat
     
  • Comparison between buffers is stored to the dedicated structure.

    Note that the verify result is now accessible only via file 'results' in the
    debugfs.

    Signed-off-by: Andy Shevchenko
    Signed-off-by: Vinod Koul

    Andy Shevchenko
     
  • The patch provides a storage for the test results in the linked list. The
    gathered data could be used after test is done.

    The new file 'results' represents gathered data of the in progress test. The
    messages collected are printed to the kernel log as well.

    Example of output:
    % cat /sys/kernel/debug/dmatest/results
    dma0chan0-copy0: #1: No errors with src_off=0x7bf dst_off=0x8ad len=0x3fea (0)

    The message format is unified across the different types of errors. A number in
    the parens represents additional information, e.g. error code, error counter,
    or status.

    Note that the buffer comparison is done in the old way, i.e. data is not
    collected and just printed out.

    Signed-off-by: Andy Shevchenko
    Signed-off-by: Vinod Koul

    Andy Shevchenko
     
  • Its meaning is to limit amount of error messages to be printed out when buffer
    mismatch is occured.

    Signed-off-by: Andy Shevchenko
    Signed-off-by: Vinod Koul

    Andy Shevchenko
     
  • The following command should return actual state of the test.
    % cat /sys/kernel/debug/dmatest/run

    To wait for test done the user may perform a busy loop that checks the state.
    % while [ $(cat /sys/kernel/debug/dmatest/run) = "Y" ]
    > do
    > echo -n "."
    > sleep 1
    > done
    > echo

    Signed-off-by: Andy Shevchenko
    Signed-off-by: Vinod Koul

    Andy Shevchenko
     
  • Instead of doing
    modprobe dmatest ...
    modprobe -r dmatest
    we allow user to run tests interactively.

    The dmatest could be built as module or inside kernel. Let's consider those
    cases.

    1. When dmatest is built as a module...

    After mounting debugfs and loading the module, the /sys/kernel/debug/dmatest
    folder with nodes will be created. They are the same as module parameters with
    addition of the 'run' node that controls run and stop phases of the test.

    Note that in this case test will not run on load automatically.

    Example of usage:
    % echo dma0chan0 > /sys/kernel/debug/dmatest/channel
    % echo 2000 > /sys/kernel/debug/dmatest/timeout
    % echo 1 > /sys/kernel/debug/dmatest/iterations
    % echo 1 > /sys/kernel/debug/dmatest/run

    After a while you will start to get messages about current status or error like
    in the original code.

    Note that running a new test will stop any in progress test.

    2. When built-in in the kernel...

    The module parameters that is supplied to the kernel command line will be used
    for the first performed test. After user gets a control, the test could be
    interrupted or re-run with same or different parameters. For the details see
    the above section "1. When dmatest is built as a module..."

    In both cases the module parameters are used as initial values for the test case.
    You always could check them at run-time by running
    % grep -H . /sys/module/dmatest/parameters/*

    Signed-off-by: Andy Shevchenko
    Signed-off-by: Vinod Koul

    Andy Shevchenko
     
  • Better to keep test parameters separate from internal variables.

    Signed-off-by: Andy Shevchenko
    Acked-by: Viresh Kumar
    Signed-off-by: Vinod Koul

    Andy Shevchenko
     
  • We don't need to have them global and later we would like to protect access to
    them as well.

    Signed-off-by: Andy Shevchenko
    Acked-by: Viresh Kumar
    Signed-off-by: Vinod Koul

    Andy Shevchenko
     
  • The proposed change will remove usage of the module parameters as global
    variables. In future it helps to run different test cases sequentially.

    The patch introduces the run_threaded_test() and stop_threaded_test() functions
    that could be used later outside of dmatest_init, dmatest_exit scope.

    Signed-off-by: Andy Shevchenko
    Acked-by: Viresh Kumar
    Signed-off-by: Vinod Koul

    Andy Shevchenko
     
  • This will help in future to hide a global variable usage.

    Signed-off-by: Andy Shevchenko
    Acked-by: Viresh Kumar
    Signed-off-by: Vinod Koul

    Andy Shevchenko
     
  • If user have the timeout alike issues and wants to cancel the thread
    immediately, the current call of wait_event_freezable_timeout is preventing to
    this until timeout is expired. Thus, user will experience the unnecessary
    delays.

    Adding kthread_should_stop() check inside wait_event_freezable_timeout() solves
    that.

    Signed-off-by: Andy Shevchenko
    Acked-by: Viresh Kumar
    Signed-off-by: Vinod Koul

    Andy Shevchenko
     
  • Looks like only the RAID channels are allowed to have irq coalescing support
    in the existing code. Fixing that. The ioat3 cleanup code can handle memcpy
    ops anyways

    Signed-off-by: Dave Jiang
    Acked-by: Dan Williams
    Signed-off-by: Vinod Koul

    Dave Jiang
     
  • Making OP field a hex instead of integer to make it more readable. Also add
    the dump out of the NEXT field.

    Signed-off-by: Dave Jiang
    Acked-by: Dan Williams
    Signed-off-by: Vinod Koul

    Dave Jiang
     
  • Removing the annotation with __exit and referencing with __exit_p()
    present in dma driver module remove hooks.

    Part of the __devexit and __devexit_p() purge.

    Signed-off-by: Maxin B. John
    Acked-by: Linus Walleij
    Signed-off-by: Vinod Koul

    Maxin B. John
     
  • Fix this compiler warning:
    warning: 'td_remove' defined but not used [-Wunused-function]

    Signed-off-by: Maxin B. John
    Signed-off-by: Vinod Koul

    Maxin B. John
     
  • pdc_desc_get() is called from pd_prep_slave_sg, and the function is
    called from interrupt context(e.g. Uart driver "pch_uart.c").
    In fact, I saw kernel error message.
    So, GFP_ATOMIC must be used not GFP_NOIO.

    Signed-off-by: Tomoya MORINAGA
    Signed-off-by: Vinod Koul

    Tomoya MORINAGA
     
  • Fix the logic to allow mc programming of second transfer after first
    has been done, by removing immediate return upon success and iterating
    until we detect QFull or DMAC dying.

    Reported-by: Alvaro Moran
    Tested-by: Alvaro Moran
    Signed-off-by: Jassi Brar
    Signed-off-by: Vinod Koul

    Jassi Brar
     
  • Linus Torvalds
     
  • Pull x86 fixes from Ingo Molnar:
    "Misc fixes"

    * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    x86/mm: Flush lazy MMU when DEBUG_PAGEALLOC is set
    x86/mm/cpa/selftest: Fix false positive in CPA self test
    x86/mm/cpa: Convert noop to functional fix
    x86, mm: Patch out arch_flush_lazy_mmu_mode() when running on bare metal
    x86, mm, paravirt: Fix vmalloc_fault oops during lazy MMU updates

    Linus Torvalds
     
  • Pull scheduler fixes from Ingo Molnar:
    "Misc fixlets"

    * 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    sched/cputime: Fix accounting on multi-threaded processes
    sched/debug: Fix sd->*_idx limit range avoiding overflow
    sched_clock: Prevent 64bit inatomicity on 32bit systems
    sched: Convert BUG_ON()s in try_to_wake_up_local() to WARN_ON_ONCE()s

    Linus Torvalds
     
  • Pull perf fixes from Ingo Molnar:
    "Misc fixlets"

    * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    perf: Fix error return code
    ftrace: Fix strncpy() use, use strlcpy() instead of strncpy()
    perf: Fix strncpy() use, use strlcpy() instead of strncpy()
    perf: Fix strncpy() use, always make sure it's NUL terminated
    perf: Fix ring_buffer perf_output_space() boundary calculation
    perf/x86: Fix uninitialized pt_regs in intel_pmu_drain_bts_buffer()

    Linus Torvalds
     
  • Pull drm fixes from Dave Airlie:
    "One fix for a hotplug locking regressions, and one fix for an oops if
    you unplug the monitor at an inopportune moment on the udl device."

    * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
    drm/fb-helper: Fix locking in drm_fb_helper_hotplug_event
    udl: handle EDID failure properly.

    Linus Torvalds
     
  • Pull m68knommu fix from Greg Ungerer:
    "This contains only a single compilation fix for ColdFire m68k targets
    that use local non-GPIOLIB support."

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu:
    m68k: define a local gpio_request_one() function

    Linus Torvalds
     
  • Pull watchdog fix from Wim Van Sebroeck:
    "It will fix compile errors for the at91rm9200_wdt driver"

    * git://www.linux-watchdog.org/linux-watchdog:
    watchdog: Revert the AT91RM9200_WATCHDOG dependency

    Linus Torvalds
     
  • Pull one more btrfs fix from Chris Mason:
    "This has a recent fix from Josef for our tree log replay code. It
    fixes problems where the inode counter for the number of bytes in the
    file wasn't getting updated properly during fsync replay.

    The commit did get rebased this morning, but it was only to clean up
    the subject line. The code hasn't changed."

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs:
    Btrfs: make sure nbytes are right after log replay

    Linus Torvalds
     
  • …git/rostedt/linux-trace

    Pull ftrace fixes from Steven Rostedt:
    "Namhyung Kim found and fixed a bug that can crash the kernel by simply
    doing: echo 1234 | tee -a /sys/kernel/debug/tracing/set_ftrace_pid

    Luckily, this can only be done by root, but still is a nasty bug."

    * tag 'trace-fixes-v3.9-rc-v3' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace:
    ftrace: Move ftrace_filter_lseek out of CONFIG_DYNAMIC_FTRACE section
    tracing: Fix possible NULL pointer dereferences

    Linus Torvalds
     
  • Nothing is using it yet, but this will allow us to delay the open-time
    checks to use time, without breaking the normal UNIX permission
    semantics where permissions are determined by the opener (and the file
    descriptor can then be passed to a different process, or the process can
    drop capabilities).

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

14 Apr, 2013

3 commits

  • Compiling the at91rm9200_wdt.c driver without at91rm9200
    support was leading to several errors:

    drivers/built-in.o: In function `at91_wdt_close':
    at91_adc.c:(.text+0xc9fe4): undefined reference to `at91_st_base'
    drivers/built-in.o: In function `at91_wdt_write':
    at91_adc.c:(.text+0xca004): undefined reference to `at91_st_base'
    drivers/built-in.o: In function `at91wdt_shutdown':
    at91_adc.c:(.text+0xca01c): undefined reference to `at91_st_base'
    drivers/built-in.o: In function `at91wdt_suspend':
    at91_adc.c:(.text+0xca038): undefined reference to `at91_st_base'
    drivers/built-in.o: In function `at91_wdt_open':
    at91_adc.c:(.text+0xca0cc): undefined reference to `at91_st_base'
    drivers/built-in.o:at91_adc.c:(.text+0xca2c8): more undefined references to
    `at91_st_base' follow

    So, reverting the modification of the "depends" Kconfig line
    introduced by patch a6a1bcd37 (watchdog: at91rm9200: add DT support)
    seems to be the good solution.

    Signed-off-by: Nicolas Ferre
    Acked-by: Guenter Roeck
    Signed-off-by: Wim Van Sebroeck

    Nicolas Ferre
     
  • Revert commit 62a3ddef6181 ("vfs: fix spinning prevention in prune_icache_sb").

    This commit doesn't look right: since we are looking at the tail of the
    list (sb->s_inode_lru.prev) if we want to skip an inode, we should put
    it back at the head of the list instead of the tail, otherwise we will
    keep spinning on it.

    Discovered when investigating why prune_icache_sb came top in perf
    reports of a swapping load.

    Signed-off-by: Suleiman Souhlal
    Signed-off-by: Hugh Dickins
    Cc: stable@vger.kernel.org # v3.2+
    Signed-off-by: Linus Torvalds

    Suleiman Souhlal
     
  • Anatol Pomozov identified a race condition that hits module unloading
    and re-loading. To quote Anatol:

    "This is a race codition that exists between kset_find_obj() and
    kobject_put(). kset_find_obj() might return kobject that has refcount
    equal to 0 if this kobject is freeing by kobject_put() in other
    thread.

    Here is timeline for the crash in case if kset_find_obj() searches for
    an object tht nobody holds and other thread is doing kobject_put() on
    the same kobject:

    THREAD A (calls kset_find_obj()) THREAD B (calls kobject_put())
    splin_lock()
    atomic_dec_return(kobj->kref), counter gets zero here
    ... starts kobject cleanup ....
    spin_lock() // WAIT thread A in kobj_kset_leave()
    iterate over kset->list
    atomic_inc(kobj->kref) (counter becomes 1)
    spin_unlock()
    spin_lock() // taken
    // it does not know that thread A increased counter so it
    remove obj from list
    spin_unlock()
    vfree(module) // frees module object with containing kobj

    // kobj points to freed memory area!!
    kobject_put(kobj) // OOPS!!!!

    The race above happens because module.c tries to use kset_find_obj()
    when somebody unloads module. The module.c code was introduced in
    commit 6494a93d55fa"

    Anatol supplied a patch specific for module.c that worked around the
    problem by simply not using kset_find_obj() at all, but rather than make
    a local band-aid, this just fixes kset_find_obj() to be thread-safe
    using the proper model of refusing the get a new reference if the
    refcount has already dropped to zero.

    See examples of this proper refcount handling not only in the kref
    documentation, but in various other equivalent uses of this pattern by
    grepping for atomic_inc_not_zero().

    [ Side note: the module race does indicate that module loading and
    unloading is not properly serialized wrt sysfs information using the
    module mutex. That may require further thought, but this is the
    correct fix at the kobject layer regardless. ]

    Reported-analyzed-and-tested-by: Anatol Pomozov
    Cc: Greg Kroah-Hartman
    Cc: Al Viro
    Cc: stable@vger.kernel.org
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

13 Apr, 2013

7 commits

  • While trying to track down a tree log replay bug I noticed that fsck was always
    complaining about nbytes not being right for our fsynced file. That is because
    the new fsync stuff doesn't wait for ordered extents to complete, so the inodes
    nbytes are not necessarily updated properly when we log it. So to fix this we
    need to set nbytes to whatever it is on the inode that is on disk, so when we
    replay the extents we can just add the bytes that are being added as we replay
    the extent. This makes it work for the case that we have the wrong nbytes or
    the case that we logged everything and nbytes is actually correct. With this
    I'm no longer getting nbytes errors out of btrfsck.

    Cc: stable@vger.kernel.org
    Signed-off-by: Josef Bacik
    Signed-off-by: Chris Mason

    Josef Bacik
     
  • This patch attempts to fix:

    https://bugzilla.kernel.org/show_bug.cgi?id=56461

    The symptom is a crash and messages like this:

    chrome: Corrupted page table at address 34a03000
    *pdpt = 0000000000000000 *pde = 0000000000000000
    Bad pagetable: 000f [#1] PREEMPT SMP

    Ingo guesses this got introduced by commit 611ae8e3f520 ("x86/tlb:
    enable tlb flush range support for x86") since that code started to free
    unused pagetables.

    On x86-32 PAE kernels, that new code has the potential to free an entire
    PMD page and will clear one of the four page-directory-pointer-table
    (aka pgd_t entries).

    The hardware aggressively "caches" these top-level entries and invlpg
    does not actually affect the CPU's copy. If we clear one we *HAVE* to
    do a full TLB flush, otherwise we might continue using a freed pmd page.
    (note, we do this properly on the population side in pud_populate()).

    This patch tracks whenever we clear one of these entries in the 'struct
    mmu_gather', and ensures that we follow up with a full tlb flush.

    BTW, I disassembled and checked that:

    if (tlb->fullmm == 0)
    and
    if (!tlb->fullmm && !tlb->need_flush_all)

    generate essentially the same code, so there should be zero impact there
    to the !PAE case.

    Signed-off-by: Dave Hansen
    Cc: Peter Anvin
    Cc: Ingo Molnar
    Cc: Artem S Tashkinov
    Signed-off-by: Linus Torvalds

    Dave Hansen
     
  • Pull SCSI target fixes from Nicholas Bellinger:
    "Here are remaining target-pending items for v3.9-rc7 code.

    The tcm_vhost patches are more than I'd usually include in a -rc7
    pull, but are changes required for v3.9 to work correctly with the
    pending vhost-scsi-pci QEMU upstream series merge. (Paolo CC'ed)

    Plus Asias's conversion to use vhost_virtqueue->private_data + RCU for
    managing vhost-scsi endpoints has gotten alot of review + testing over
    the past weeks, and MST has ACKed the full series.

    Also, there is a target patch to fix a long-standing bug within
    control CDB handling with Standby/Offline/Transition ALUA port access
    states, that had been incorrectly rejecting the control CDBs required
    for LUN scan to work during these port group states. CC'ing to
    stable."

    * git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending:
    target: Fix incorrect fallthrough of ALUA Standby/Offline/Transition CDBs
    tcm_vhost: Send bad target to guest when cmd fails
    tcm_vhost: Add vhost_scsi_send_bad_target() helper
    tcm_vhost: Fix tv_cmd leak in vhost_scsi_handle_vq
    tcm_vhost: Remove double check of response
    tcm_vhost: Initialize vq->last_used_idx when set endpoint
    tcm_vhost: Use vq->private_data to indicate if the endpoint is setup
    tcm_vhost: Use ACCESS_ONCE for vs->vs_tpg[target] access

    Linus Torvalds
     
  • Pull SCSI fixes from James Bottomley:
    "This is a set of ten bug fixes (and two consisting of copyright year
    update and version number change) pretty much all of which involve
    either a crash or a hang except the removal of the random sleep from
    the qla2xxx driver (which is a coding error so bad, we want it gone
    before anyone has a chance to copy it)."

    * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
    [SCSI] lpfc: fix potential NULL pointer dereference in lpfc_sli4_rq_put()
    [SCSI] libsas: fix handling vacant phy in sas_set_ex_phy()
    [SCSI] ibmvscsi: Fix slave_configure deadlock
    [SCSI] qla2xxx: Update the driver version to 8.04.00.13-k.
    [SCSI] qla2xxx: Remove debug code that msleeps for random duration.
    [SCSI] qla2xxx: Update copyright dates information in LICENSE.qla2xxx file.
    [SCSI] qla2xxx: Fix crash during firmware dump procedure.
    [SCSI] Revert "qla2xxx: Add setting of driver version string for vendor application."
    [SCSI] ipr: dlpar failed when adding an adapter back
    [SCSI] ipr: fix addition of abort command to HRRQ free queue
    [SCSI] st: Take additional queue ref in st_probe
    [SCSI] libsas: use right function to alloc smp response
    [SCSI] ipr: ipr_test_msi() fails when running with msi-x enabled adapter

    Linus Torvalds
     
  • Pull CIFS fix from Steve French:
    "Fixes a regression in cifs in which a password which begins with a
    comma is parsed incorrectly as a blank password"

    * 'for-next' of git://git.samba.org/sfrench/cifs-2.6:
    cifs: Allow passwords which begin with a delimitor

    Linus Torvalds
     
  • As ftrace_filter_lseek is now used with ftrace_pid_fops, it needs to
    be moved out of the #ifdef CONFIG_DYNAMIC_FTRACE section as the
    ftrace_pid_fops is defined when DYNAMIC_FTRACE is not.

    Cc: stable@vger.kernel.org
    Cc: Namhyung Kim
    Signed-off-by: Steven Rostedt

    Steven Rostedt (Red Hat)
     
  • Currently set_ftrace_pid and set_graph_function files use seq_lseek
    for their fops. However seq_open() is called only for FMODE_READ in
    the fops->open() so that if an user tries to seek one of those file
    when she open it for writing, it sees NULL seq_file and then panic.

    It can be easily reproduced with following command:

    $ cd /sys/kernel/debug/tracing
    $ echo 1234 | sudo tee -a set_ftrace_pid

    In this example, GNU coreutils' tee opens the file with fopen(, "a")
    and then the fopen() internally calls lseek().

    Link: http://lkml.kernel.org/r/1365663302-2170-1-git-send-email-namhyung@kernel.org

    Cc: Frederic Weisbecker
    Cc: Ingo Molnar
    Cc: Namhyung Kim
    Cc: stable@vger.kernel.org
    Signed-off-by: Namhyung Kim
    Signed-off-by: Steven Rostedt

    Namhyung Kim