05 Oct, 2011

12 commits

  • Linus Torvalds
     
  • * git://github.com/davem330/net:
    pch_gbe: Fixed the issue on which a network freezes
    pch_gbe: Fixed the issue on which PC was frozen when link was downed.
    make PACKET_STATISTICS getsockopt report consistently between ring and non-ring
    net: xen-netback: correctly restart Tx after a VM restore/migrate
    bonding: properly stop queuing work when requested
    can bcm: fix incomplete tx_setup fix
    RDSRDMA: Fix cleanup of rds_iw_mr_pool
    net: Documentation: Fix type of variables
    ibmveth: Fix oops on request_irq failure
    ipv6: nullify ipv6_ac_list and ipv6_fl_list when creating new socket
    cxgb4: Fix EEH on IBM P7IOC
    can bcm: fix tx_setup off-by-one errors
    MAINTAINERS: tehuti: Alexander Indenbaum's address bounces
    dp83640: reduce driver noise
    ptp: fix L2 event message recognition

    Linus Torvalds
     
  • * 'fix/asoc' of git://github.com/tiwai/sound:
    ASoC: omap_mcpdm_remove cannot be __devexit
    ASoC: Fix setting update bits for WM8753_LADC and WM8753_RADC
    ASoC: use a valid device for dev_err() in Zylonite

    Linus Torvalds
     
  • * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
    drm/radeon/kms: fix channel_remap setup (v2)
    drm/radeon: Set cursor x/y to 0 when x/yorigin > 0.
    drm/radeon: Update AVIVO cursor coordinate origin before x/yorigin calculation.
    drm/radeon: Simplify cursor x/yorigin calculation.
    drm/radeon/kms: fix cursor image off-by-one error
    drm/radeon/kms: Fix logic error in DP HPD handler
    drm/radeon/kms: add retry limits for native DP aux defer
    drm/radeon/kms: fix regression in DP aux defer handling

    Linus Torvalds
     
  • * 'spi/merge' of git://git.secretlab.ca/git/linux-2.6:
    spi-topcliff-pch: Fix overrun issue
    spi-topcliff-pch: Add recovery processing in case FIFO overrun error occurs
    spi-topcliff-pch: Fix CPU read complete condition issue
    spi-topcliff-pch: Fix SSN Control issue
    spi-topcliff-pch: add tx-memory clear after complete transmitting

    Linus Torvalds
     
  • Add the ability to disable PCI-E MPS turning and using the BIOS
    configured MPS defaults. Due to the number of issues recently
    discovered on some x86 chipsets, make this the default behavior.

    Also, add the option for peer to peer DMA MPS configuration. Peer to
    peer DMA is outside the scope of this patch, but MPS configuration could
    prevent it from working by having the MPS on one root port different
    than the MPS on another. To work around this, simply make the system
    wide MPS the smallest possible value (128B).

    Signed-off-by: Jon Mason
    Acked-by: Benjamin Herrenschmidt
    Signed-off-by: Linus Torvalds

    Jon Mason
     
  • Most asics just use the hw default value which requires
    no explicit programming. For those that need a different
    value, the vbios will program it properly. As such,
    there's no need to program these registers explicitly
    in the driver. Changing MC_SHARED_CHREMAP requires a reload
    of all data in vram otherwise its contents will be scambled.

    Fixes:
    https://bugs.freedesktop.org/show_bug.cgi?id=40103

    v2: drop now unused channel_remap functions.

    Signed-off-by: Alex Deucher
    Reviewed-by: Michel Dänzer
    Cc: stable@kernel.org
    Signed-off-by: Dave Airlie

    Alex Deucher
     
  • We found that adding load, Rx data sometimes drops.(with DMA transfer mode)
    The cause is that before starting Rx-DMA processing, Tx-DMA processing starts.
    This causes FIFO overrun occurs.

    This patch fixes the issue by modifying FIFO tx-threshold and DMA descriptor
    size like below.

    Current this patch
    Rx-descriptor 4Byte+12Byte*341 --> 12Byte*340-4Byte-12Byte
    Rx-threshold (Not modified)
    Tx-descriptor 4Byte+12Byte*341 --> 16Byte-12Byte*340
    Rx-threshold 12Byte --> 2Byte

    Signed-off-by: Tomoya MORINAGA
    Signed-off-by: Grant Likely

    Tomoya MORINAGA
     
  • Add recovery processing in case FIFO overrun error occurs with DMA transfer mode.

    Signed-off-by: Tomoya MORINAGA
    Signed-off-by: Grant Likely

    Tomoya MORINAGA
     
  • We found Rx data sometimes drops.(with non-DMA transfer mode)
    The cause is read complete condition is not true.

    This patch fixes the issue.

    Signed-off-by: Tomoya MORINAGA
    Signed-off-by: Grant Likely

    Tomoya MORINAGA
     
  • During processing 1 command/data series,
    SSN should keep LOW.
    However, currently, SSN becomes HIGH.
    This patch fixes the issue.

    Signed-off-by: Tomoya MORINAGA
    Signed-off-by: Grant Likely

    Tomoya MORINAGA
     
  • Currently, in case of reading date from SPI flash,
    command is sent twice.
    The cause is that tx-memory clear processing is missing .
    This patch adds the tx-momory clear processing.

    Signed-off-by: Tomoya MORINAGA
    Signed-off-by: Grant Likely

    Tomoya MORINAGA
     

04 Oct, 2011

17 commits

  • Commit 2a7fade7e03 ("hwmon: lis3: Power on corrections") caused a
    regression on HP laptops with 8bit chip. Writing CTRL2_BOOT_8B bit seems
    clearing the BIOS setup, and no proper interrupt for DriveGuard will be
    triggered any more.

    Since the init code there is basically only for embedded devices, put a
    pdata check so that the problematic initialization will be skipped for
    hp_accel stuff.

    Signed-off-by: Takashi Iwai
    Cc: Eric Piel
    Cc: Samu Onkalo
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Takashi Iwai
     
  • * 'hwmon-for-linus' of git://github.com/groeck/linux:
    hwmon: (coretemp) Avoid leaving around dangling pointer
    hwmon: (coretemp) Fixup platform device ID change

    Linus Torvalds
     
  • * git://github.com/davem330/ide:
    ide-disk: Fix request requeuing

    Linus Torvalds
     
  • * 'btrfs-3.0' of git://github.com/chrismason/linux:
    Btrfs: force a page fault if we have a shorty copy on a page boundary

    Linus Torvalds
     
  • Simon Kirby reported that on his RAID setup with idedisk underneath
    the box OOMs after a couple of days of runtime. Running with
    CONFIG_DEBUG_KMEMLEAK pointed to idedisk_prep_fn() which unconditionally
    allocates an ide_cmd struct. However, ide_requeue_and_plug() can be
    called more than once per request, either from the request issue or the
    IRQ handler path and do blk_peek_request() ends up in idedisk_prep_fn()
    repeatedly, allocating a struct ide_cmd everytime and "forgetting" the
    previous pointer.

    Make sure the code reuses the old allocated chunk.

    Reported-and-tested-by: Simon Kirby
    Cc: [ 39.x, 3.0.x ]
    Link: http://marc.info/?l=linux-kernel&m=131667641517919
    Link: http://lkml.kernel.org/r/20110922072643.GA27232@hostway.ca
    Signed-off-by: Borislav Petkov
    Signed-off-by: David S. Miller

    Borislav Petkov
     
  • The pch_gbe driver has an issue which a network stops,
    when receiving traffic is high.
    In the case, The link down and up are necessary to return a network.

    This patch fixed this issue.

    Signed-off-by: Toshiharu Okada
    Signed-off-by: David S. Miller

    Toshiharu Okada
     
  • When a link was downed during network use,
    there is an issue on which PC freezes.

    This patch fixed this issue.

    Signed-off-by: Toshiharu Okada
    Signed-off-by: David S. Miller

    Toshiharu Okada
     
  • This is a minor change.

    Up until kernel 2.6.32, getsockopt(fd, SOL_PACKET, PACKET_STATISTICS,
    ...) would return total and dropped packets since its last invocation. The
    introduction of socket queue overflow reporting [1] changed drop
    rate calculation in the normal packet socket path, but not when using a
    packet ring. As a result, the getsockopt now returns different statistics
    depending on the reception method used. With a ring, it still returns the
    count since the last call, as counts are incremented in tpacket_rcv and
    reset in getsockopt. Without a ring, it returns 0 if no drops occurred
    since the last getsockopt and the total drops over the lifespan of
    the socket otherwise. The culprit is this line in packet_rcv, executed
    on a drop:

    drop_n_acct:
    po->stats.tp_drops = atomic_inc_return(&sk->sk_drops);

    As it shows, the new drop number it taken from the socket drop counter,
    which is not reset at getsockopt. I put together a small example
    that demonstrates the issue [2]. It runs for 10 seconds and overflows
    the queue/ring on every odd second. The reported drop rates are:
    ring: 16, 0, 16, 0, 16, ...
    non-ring: 0, 15, 0, 30, 0, 46, 0, 60, 0 , 74.

    Note how the even ring counts monotonically increase. Because the
    getsockopt adds tp_drops to tp_packets, total counts are similarly
    reported cumulatively. Long story short, reinstating the original code, as
    the below patch does, fixes the issue at the cost of additional per-packet
    cycles. Another solution that does not introduce per-packet overhead
    is be to keep the current data path, record the value of sk_drops at
    getsockopt() at call N in a new field in struct packetsock and subtract
    that when reporting at call N+1. I'll be happy to code that, instead,
    it's just more messy.

    [1] http://patchwork.ozlabs.org/patch/35665/
    [2] http://kernel.googlecode.com/files/test-packetsock-getstatistics.c

    Signed-off-by: Willem de Bruijn
    Signed-off-by: David S. Miller

    Willem de Bruijn
     
  • If a VM is saved and restored (or migrated) the netback driver will no
    longer process any Tx packets from the frontend. xenvif_up() does not
    schedule the processing of any pending Tx requests from the front end
    because the carrier is off. Without this initial kick the frontend
    just adds Tx requests to the ring without raising an event (until the
    ring is full).

    This was caused by 47103041e91794acdbc6165da0ae288d844c820b (net:
    xen-netback: convert to hw_features) which reordered the calls to
    xenvif_up() and netif_carrier_on() in xenvif_connect().

    Signed-off-by: David Vrabel
    Cc: Ian Campbell
    Acked-by: Ian Campbell
    Signed-off-by: David S. Miller

    David Vrabel
     
  • During a test where a pair of bonding interfaces using ARP monitoring
    were both brought up and torn down (with an rmmod) repeatedly, a panic
    in the timer code was noticed. I tracked this down and determined that
    any of the bonding functions that ran as workqueue handlers and requeued
    more work might not properly exit when the module was removed.

    There was a flag protected by the bond lock called kill_timers that is
    set when the interface goes down or the module is removed, but many of
    the functions that monitor link status now unlock the bond lock to take
    rtnl first. There is a chance that another CPU running the rmmod could
    get the lock and set kill_timers after the first check has passed.

    This patch does not allow any function to queue work that will make
    itself run unless kill_timers is not set. I also noticed while doing
    this work that bond_resend_igmp_join_requests did not have a check for
    kill_timers, so I added the needed call there as well.

    Signed-off-by: Andy Gospodarek
    Reported-by: Liang Zheng
    Signed-off-by: David S. Miller

    Andy Gospodarek
     
  • Apart from the obvious cleanup, this should make the line

    cursor_end = x - xorigin + w;

    correct now.

    Signed-off-by: Michel Dänzer
    Reviewed-by: Alex Deucher
    Signed-off-by: Dave Airlie

    Michel Dänzer
     
  • Fixes cursor disappearing prematurely when moving off a top/left edge which
    is not located at the desktop top/left edge.

    Signed-off-by: Michel Dänzer
    Cc: stable@kernel.org
    Reviewed-by: Alex Deucher
    Signed-off-by: Dave Airlie

    Michel Dänzer
     
  • Signed-off-by: Michel Dänzer
    Reviewed-by: Alex Deucher
    Signed-off-by: Dave Airlie

    Michel Dänzer
     
  • The mouse cursor hotspot calculation when the cursor is partially off the
    top or left side of the screen was off by one.

    Fixes https://bugs.freedesktop.org/show_bug.cgi?id=41158

    Signed-off-by: Nicholas Miell
    Reviewed-by: Michel Dänzer
    Reviewed-by: Alex Deucher
    Signed-off-by: Dave Airlie

    Nicholas Miell
     
  • Only disable the pipe if the monitor is physically
    disconnected. The previous logic also disabled the
    pipe if the link was trained.

    Fixes:
    https://bugs.freedesktop.org/show_bug.cgi?id=41248

    Signed-off-by: Alex Deucher
    Cc: stable@kernel.org
    Signed-off-by: Dave Airlie

    Alex Deucher
     
  • The previous code could potentially loop forever. Limit
    the number of DP aux defer retries to 4 for native aux
    transactions, same as i2c over aux transactions.

    Noticed by: Brad Campbell

    Signed-off-by: Alex Deucher
    Cc: Brad Campbell
    Cc: stable@kernel.org
    Signed-off-by: Dave Airlie

    Alex Deucher
     
  • An incorrect ordering in the error checking code lead
    to DP aux defer being skipped in the aux native write
    path. Move the bytes transferred check (ret == 0)
    below the defer check.

    Tracked down by: Brad Campbell

    Fixes:
    https://bugs.freedesktop.org/show_bug.cgi?id=41121

    Signed-off-by: Alex Deucher
    Cc: Brad Campbell
    Cc: stable@kernel.org
    Signed-off-by: Dave Airlie

    Alex Deucher
     

03 Oct, 2011

5 commits


02 Oct, 2011

1 commit


01 Oct, 2011

3 commits

  • …for-linus' of git://tesla.tglx.de/git/linux-2.6-tip

    * 'irq-urgent-for-linus' of git://tesla.tglx.de/git/linux-2.6-tip:
    irq: Fix check for already initialized irq_domain in irq_domain_add
    irq: Add declaration of irq_domain_simple_ops to irqdomain.h

    * 'x86-urgent-for-linus' of git://tesla.tglx.de/git/linux-2.6-tip:
    x86/rtc: Don't recursively acquire rtc_lock

    * 'sched-urgent-for-linus' of git://tesla.tglx.de/git/linux-2.6-tip:
    posix-cpu-timers: Cure SMP wobbles
    sched: Fix up wchan borkage
    sched/rt: Migrate equal priority tasks to available CPUs

    Linus Torvalds
     
  • A user reported a problem where ceph was getting into 100% cpu usage while doing
    some writing. It turns out it's because we were doing a short write on a not
    uptodate page, which means we'd fall back at one page at a time and fault the
    page in. The problem is our position is on the page boundary, so our fault in
    logic wasn't actually reading the page, so we'd just spin forever or until the
    page got read in by somebody else. This will force a readpage if we end up
    doing a short copy. Alexandre could reproduce this easily with ceph and reports
    it fixes his problem. I also wrote a reproducer that no longer hangs my box
    with this patch. Thanks,

    Reported-and-tested-by: Alexandre Oliva
    Signed-off-by: Josef Bacik
    Signed-off-by: Chris Mason

    Josef Bacik
     
  • Ingo Molnar
     

30 Sep, 2011

2 commits

  • David reported:

    Attached below is a watered-down version of rt/tst-cpuclock2.c from
    GLIBC. Just build it with "gcc -o test test.c -lpthread -lrt" or
    similar.

    Run it several times, and you will see cases where the main thread
    will measure a process clock difference before and after the nanosleep
    which is smaller than the cpu-burner thread's individual thread clock
    difference. This doesn't make any sense since the cpu-burner thread
    is part of the top-level process's thread group.

    I've reproduced this on both x86-64 and sparc64 (using both 32-bit and
    64-bit binaries).

    For example:

    [davem@boricha build-x86_64-linux]$ ./test
    process: before(0.001221967) after(0.498624371) diff(497402404)
    thread: before(0.000081692) after(0.498316431) diff(498234739)
    self: before(0.001223521) after(0.001240219) diff(16698)
    [davem@boricha build-x86_64-linux]$

    The diff of 'process' should always be >= the diff of 'thread'.

    I make sure to wrap the 'thread' clock measurements the most tightly
    around the nanosleep() call, and that the 'process' clock measurements
    are the outer-most ones.

    ---
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include

    static pthread_barrier_t barrier;

    static void *chew_cpu(void *arg)
    {
    pthread_barrier_wait(&barrier);
    while (1)
    __asm__ __volatile__("" : : : "memory");
    return NULL;
    }

    int main(void)
    {
    clockid_t process_clock, my_thread_clock, th_clock;
    struct timespec process_before, process_after;
    struct timespec me_before, me_after;
    struct timespec th_before, th_after;
    struct timespec sleeptime;
    unsigned long diff;
    pthread_t th;
    int err;

    err = clock_getcpuclockid(0, &process_clock);
    if (err)
    return 1;

    err = pthread_getcpuclockid(pthread_self(), &my_thread_clock);
    if (err)
    return 1;

    pthread_barrier_init(&barrier, NULL, 2);
    err = pthread_create(&th, NULL, chew_cpu, NULL);
    if (err)
    return 1;

    err = pthread_getcpuclockid(th, &th_clock);
    if (err)
    return 1;

    pthread_barrier_wait(&barrier);

    err = clock_gettime(process_clock, &process_before);
    if (err)
    return 1;

    err = clock_gettime(my_thread_clock, &me_before);
    if (err)
    return 1;

    err = clock_gettime(th_clock, &th_before);
    if (err)
    return 1;

    sleeptime.tv_sec = 0;
    sleeptime.tv_nsec = 500000000;
    nanosleep(&sleeptime, NULL);

    err = clock_gettime(th_clock, &th_after);
    if (err)
    return 1;

    err = clock_gettime(my_thread_clock, &me_after);
    if (err)
    return 1;

    err = clock_gettime(process_clock, &process_after);
    if (err)
    return 1;

    diff = process_after.tv_nsec - process_before.tv_nsec;
    printf("process: before(%lu.%.9lu) after(%lu.%.9lu) diff(%lu)\n",
    process_before.tv_sec, process_before.tv_nsec,
    process_after.tv_sec, process_after.tv_nsec, diff);
    diff = th_after.tv_nsec - th_before.tv_nsec;
    printf("thread: before(%lu.%.9lu) after(%lu.%.9lu) diff(%lu)\n",
    th_before.tv_sec, th_before.tv_nsec,
    th_after.tv_sec, th_after.tv_nsec, diff);
    diff = me_after.tv_nsec - me_before.tv_nsec;
    printf("self: before(%lu.%.9lu) after(%lu.%.9lu) diff(%lu)\n",
    me_before.tv_sec, me_before.tv_nsec,
    me_after.tv_sec, me_after.tv_nsec, diff);

    return 0;
    }

    This is due to us using p->se.sum_exec_runtime in
    thread_group_cputime() where we iterate the thread group and sum all
    data. This does not take time since the last schedule operation (tick
    or otherwise) into account. We can cure this by using
    task_sched_runtime() at the cost of having to take locks.

    This also means we can (and must) do away with
    thread_group_sched_runtime() since the modified thread_group_cputime()
    is now more accurate and would deadlock when called from
    thread_group_sched_runtime().

    Aside of that it makes the function safe on 32 bit systems. The old
    code added t->se.sum_exec_runtime unprotected. sum_exec_runtime is a
    64bit value and could be changed on another cpu at the same time.

    Reported-by: David Miller
    Signed-off-by: Peter Zijlstra
    Cc: stable@kernel.org
    Link: http://lkml.kernel.org/r/1314874459.7945.22.camel@twins
    Tested-by: David Miller
    Signed-off-by: Thomas Gleixner

    Peter Zijlstra
     
  • The commit a810364a0424c297242c6c66071a42f7675a5568
    ALSA: hda - Handle -1 as invalid position, too
    caused a regression on some machines that require the position-buffer
    instead of LPIB, e.g. resulting in noises with mic recording with
    PulseAudio.

    This patch fixes the detection by delaying the test at the timing as
    same as 3.0, i.e. doing the position check only when requested in
    azx_position_ok().

    Reported-and-tested-by: Rocko Requin
    Signed-off-by: Takashi Iwai

    Takashi Iwai