29 May, 2011

6 commits

  • …old', 'ec-asus' and 'thermal-fix' into release

    Len Brown
     
  • _SxW returns an Integer containing the lowest D-state supported in state
    Sx. If OSPM has not indicated that it supports _PR3, then the value “3”
    corresponds to D3. If it has indicated _PR3 support, the value “3”
    represents D3hot and the value “4” represents D3cold.

    Linux does set _OSC._PR3, so we should fix it to expect that _SxW can
    return 4.

    Signed-off-by: Lin Ming
    Acked-by: Jesse Barnes
    Signed-off-by: Len Brown

    Lin Ming
     
  • Usually, there are multiple processors defined in ACPI table, for
    example

    Scope (_PR)
    {
    Processor (CPU0, 0x00, 0x00000410, 0x06) {}
    Processor (CPU1, 0x01, 0x00000410, 0x06) {}
    Processor (CPU2, 0x02, 0x00000410, 0x06) {}
    Processor (CPU3, 0x03, 0x00000410, 0x06) {}
    }

    processor_physically_present(...) will be called to check whether those
    processors are physically present.

    Currently we have below codes in processor_physically_present,

    cpuid = acpi_get_cpuid(...);
    if ((cpuid == -1) && (num_possible_cpus() > 1))
    return false;
    return true;

    In UP kernel, acpi_get_cpuid(...) always return -1 and
    num_possible_cpus() always return 1, so
    processor_physically_present(...) always returns true for all passed in
    processor handles.

    This is wrong for UP processor or SMP processor running UP kernel.

    This patch removes the !SMP version of acpi_get_cpuid(), so both UP and
    SMP kernel use the same acpi_get_cpuid function.

    And for UP kernel, only processor 0 is valid.

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

    Tested-by: Anton Kochkov
    Tested-by: Ambroz Bizjak
    Signed-off-by: Lin Ming
    Signed-off-by: Len Brown

    Lin Ming
     
  • With /sys/kernel/debug/acpi/custom_method root can write
    to arbitrary memory and increase his priveleges, even if
    these are restricted.

    -> Make this an own debug .config option and warn about the
    security issue in the config description.

    -> Still keep acpi/debugfs.c which now only creates an empty
    /sys/kernel/debug/acpi directory. There might be other
    users of it later.

    Signed-off-by: Thomas Renninger
    Acked-by: Rafael J. Wysocki
    Acked-by: rui.zhang@intel.com
    Signed-off-by: Len Brown

    Thomas Renninger
     
  • - Move param aml_debug_output to other params into sysfs.c
    - Split acpi_debugfs_init to prepare custom_method to be
    an own .config option and driver.

    Signed-off-by: Thomas Renninger
    Acked-by: Rafael J. Wysocki
    Acked-by: rui.zhang@intel.com
    Signed-off-by: Len Brown

    Thomas Renninger
     
  • Enable MSI workaround for Quanta laptops.
    https://bugzilla.kernel.org/show_bug.cgi?id=20242

    Tested-by: Jan-Matthias Braun
    Signed-off-by: Zhang Rui
    Signed-off-by: Len Brown

    Zhang Rui
     

19 May, 2011

6 commits

  • Linus Torvalds
     
  • * 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2:
    configfs: Fix race between configfs_readdir() and configfs_d_iput()
    configfs: Don't try to d_delete() negative dentries.
    ocfs2/dlm: Target node death during resource migration leads to thread spin
    ocfs2: Skip mount recovery for hard-ro mounts
    ocfs2/cluster: Heartbeat mismatch message improved
    ocfs2/cluster: Increase the live threshold for global heartbeat
    ocfs2/dlm: Use negotiated o2dlm protocol version
    ocfs2: skip existing hole when removing the last extent_rec in punching-hole codes.
    ocfs2: Initialize data_ac (might be used uninitialized)

    Linus Torvalds
     
  • * 'devicetree/merge' of git://git.secretlab.ca/git/linux-2.6:
    drivercore: revert addition of of_match to struct device
    of: fix race when matching drivers

    Linus Torvalds
     
  • * 'upstream' of git://git.linux-mips.org/pub/scm/upstream-linus:
    MIPS: Kludge IP27 build for 2.6.39.
    MIPS: AR7: Fix GPIO register size for Titan variant.
    MIPS: Fix duplicate invocation of notify_die.
    MIPS: RB532: Fix iomap resource size miscalculation.

    Linus Torvalds
     
  • Commit b826291c, "drivercore/dt: add a match table pointer to struct
    device" added an of_match pointer to struct device to cache the
    of_match_table entry discovered at driver match time. This was unsafe
    because matching is not an atomic operation with probing a driver. If
    two or more drivers are attempted to be matched to a driver at the
    same time, then the cached matching entry pointer could get
    overwritten.

    This patch reverts the of_match cache pointer and reworks all users to
    call of_match_device() directly instead.

    Signed-off-by: Grant Likely

    Grant Likely
     
  • If two drivers are probing devices at the same time, both will write
    their match table result to the dev->of_match cache at the same time.

    Only write the result if the device matches.

    In a thread titled "SBus devices sometimes detected, sometimes not",
    Meelis reported his SBus hme was not detected about 50% of the time.
    From the debug suggested by Grant it was obvious another driver matched
    some devices between the call to match the hme and the hme discovery
    failling.

    Reported-by: Meelis Roos
    Signed-off-by: Milton Miller
    [grant.likely: modified to only call of_match_device() once]
    Signed-off-by: Grant Likely

    Milton Miller
     

18 May, 2011

19 commits

  • * 'for-linus' of git://git.kernel.dk/linux-2.6-block:
    block: don't delay blk_run_queue_async
    scsi: remove performance regression due to async queue run
    blk-throttle: Use task_subsys_state() to determine a task's blkio_cgroup
    block: rescan partitions on invalidated devices on -ENOMEDIA too
    cdrom: always check_disk_change() on open
    block: unexport DISK_EVENT_MEDIA_CHANGE for legacy/fringe drivers

    Linus Torvalds
     
  • Signed-off-by: Ralf Baechle

    Ralf Baechle
     
  • The 'size' variable contains the correct register size for both AR7
    and Titan, but we never used it to ioremap the correct register size.
    This problem only shows up on Titan.

    [ralf@linux-mips.org: Fixed the fix. The original patch as in patchwork
    recognizes the problem correctly then fails to fix it ...]

    Reported-by: Alexander Clouter
    Signed-off-by: Florian Fainelli
    Patchwork: https://patchwork.linux-mips.org/patch/2380/
    Signed-off-by: Ralf Baechle

    Florian Fainelli
     
  • Initial patch by Yury Polyanskiy .

    Signed-off-by: Ralf Baechle
    Patchwork: https://patchwork.linux-mips.org/patch/2373/

    Ralf Baechle
     
  • This is the MIPS portion of Joe Perches 's
    https://patchwork.linux-mips.org/patch/2172/ which seems to have been
    lost in time and space.

    Signed-off-by: Ralf Baechle

    Ralf Baechle
     
  • configfs_readdir() will use the existing inode numbers of inodes in the
    dcache, but it makes them up for attribute files that aren't currently
    instantiated. There is a race where a closing attribute file can be
    tearing down at the same time as configfs_readdir() is trying to get its
    inode number.

    We want to get the inode number of open attribute files, because they
    should match while instantiated. We can't lock down the transition
    where dentry->d_inode is set to NULL, so we just check for NULL there.
    We can, however, ensure that an inode we find isn't iput() in
    configfs_d_iput() until after we've accessed it.

    Signed-off-by: Joel Becker

    Joel Becker
     
  • When configfs is faking mkdir() on its subsystem or default group
    objects, it starts by adding a negative dentry. It then tries to
    instantiate the group. If that should fail, it must clean up after
    itself.

    I was using d_delete() here, but configfs_attach_group() promises to
    return an empty dentry on error. d_delete() explodes with the entry
    dentry. Let's try d_drop() instead. The unhashing is what we want for
    our dentry.

    Signed-off-by: Joel Becker

    Joel Becker
     
  • Let's check a scenario:
    1. blk_delay_queue(q, SCSI_QUEUE_DELAY);
    2. blk_run_queue_async();
    the second one will became a noop, because q->delay_work already has
    WORK_STRUCT_PENDING_BIT set, so the delayed work will still run after
    SCSI_QUEUE_DELAY. But blk_run_queue_async actually hopes the delayed
    work runs immediately.

    Fix this by doing a cancel on potentially pending delayed work
    before queuing an immediate run of the workqueue.

    Signed-off-by: Shaohua Li
    Signed-off-by: Jens Axboe

    Shaohua Li
     
  • * 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6:
    [media] V4L: soc-camera: regression fix: calculate .sizeimage in soc_camera.c
    [media] v4l2-subdev: fix broken subdev control enumeration
    [media] Fix cx88 remote control input
    [media] v4l: Release module if subdev registration fails

    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, AMD: Fix ARAT feature setting again
    Revert "x86, AMD: Fix APIC timer erratum 400 affecting K8 Rev.A-E processors"
    x86, apic: Fix spurious error interrupts triggering on all non-boot APs
    x86, mce, AMD: Fix leaving freed data in a list
    x86: Fix UV BAU for non-consecutive nasids
    x86, UV: Fix NMI handler for UV platforms

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

    * 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    perf evlist: Fix per thread mmap setup
    perf tools: Honour the cpu list parameter when also monitoring a thread list
    kprobes, x86: Disable irqs during optimized callback

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6:
    cifs: fix cifsConvertToUCS() for the mapchars case
    cifs: add fallback in is_path_accessible for old servers

    Linus Torvalds
     
  • Provide a stub for proc_mkdir_mode() when CONFIG_PROC_FS is not
    enabled, just like the stub for proc_mkdir().

    Fixes this linux-next build error:

    drivers/net/wireless/airo.c:4504: error: implicit declaration of function 'proc_mkdir_mode'

    Signed-off-by: Randy Dunlap
    Cc: Stephen Rothwell
    Cc: Alexey Dobriyan
    Cc: "John W. Linville"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Randy Dunlap
     
  • os_dump_core() uses abort() to terminate UML in case of an fatal error.

    glibc's abort() calls raise(SIGABRT) which makes use of tgkill().
    tgkill() has no effect within UML's kernel threads because they are not
    pthreads. As fallback abort() executes an invalid instruction to
    terminate the process. Therefore UML gets killed by SIGSEGV and leaves a
    ugly log entry in the host's kernel ring buffer.

    To get rid of this we use our own abort routine.

    Signed-off-by: Richard Weinberger
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Richard Weinberger
     
  • ZONE_CONGESTED should be a state of global memory reclaim. If not, a busy
    memcg sets this and give unnecessary throttoling in wait_iff_congested()
    against memory recalim in other contexts. This makes system performance
    bad.

    I'll think about "memcg is congested!" flag is required or not, later.
    But this fix is required first.

    Signed-off-by: KAMEZAWA Hiroyuki
    Reviewed-by: Minchan Kim
    Cc: Daisuke Nishimura
    Acked-by: Ying Han
    Cc: Balbir Singh
    Cc: Johannes Weiner
    Cc: Michal Hocko
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    KAMEZAWA Hiroyuki
     
  • Adding the necessary MODULE_DEVICE_TABLE() information allows the driver
    to be automatically loaded by udev.

    Signed-off-by: Axel Lin
    Cc: Shreshtha Kumar SAHU
    Cc: Richard Purdie
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Axel Lin
     
  • Fix switch initialization to ensure that all switches have default routing
    disabled. This guarantees that no unexpected RapidIO packets arrive to
    the default port set by reset and there is no default routing destination
    until it is properly configured by software.

    This update also unifies handling of unmapped destinations by tsi57x, IDT
    Gen1 and IDT Gen2 switches.

    Signed-off-by: Alexandre Bounine
    Cc: Kumar Gala
    Cc: Matt Porter
    Cc: Li Yang
    Cc: Thomas Moll
    Cc: [2.6.37+]
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alexandre Bounine
     
  • As Metze pointed out, commit 84cdf74e broke mapchars option:

    Commit "cifs: fix unaligned accesses in cifsConvertToUCS"
    (84cdf74e8096a10dd6acbb870dd404b92f07a756) does multiple steps
    in just one commit (moving the function and changing it without
    testing).

    put_unaligned_le16(temp, &target[j]); is never called for any
    codepoint the goes via the 'default' switch statement. As a result
    we put just zero (or maybe uninitialized) bytes into the target
    buffer.

    His proposed patch looks correct, but doesn't apply to the current head
    of the tree. This patch should also fix it.

    Cc: # .38.x: 581ade4: cifs: clean up various nits in unicode routines (try #2)
    Reported-by: Stefan Metzmacher
    Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Jeff Layton
     
  • The is_path_accessible check uses a QPathInfo call, which isn't
    supported by ancient win9x era servers. Fall back to an older
    SMBQueryInfo call if it fails with the magic error codes.

    Cc: stable@kernel.org
    Reported-and-Tested-by: Sandro Bonazzola
    Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Jeff Layton
     

17 May, 2011

9 commits

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

    * 'timers-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    tick: Clear broadcast active bit when switching to oneshot
    rtc: mc13xxx: Don't call rtc_device_register while holding lock
    rtc: rp5c01: Initialize drvdata before registering device
    rtc: pcap: Initialize drvdata before registering device
    rtc: msm6242: Initialize drvdata before registering device
    rtc: max8998: Initialize drvdata before registering device
    rtc: max8925: Initialize drvdata before registering device
    rtc: m41t80: Initialize clientdata before registering device
    rtc: ds1286: Initialize drvdata before registering device
    rtc: ep93xx: Initialize drvdata before registering device
    rtc: davinci: Initialize drvdata before registering device
    rtc: mxc: Initialize drvdata before registering device
    clocksource: Install completely before selecting

    Linus Torvalds
     
  • Trying to enable the local APIC timer on early K8 revisions
    uncovers a number of other issues with it, in conjunction with
    the C1E enter path on AMD. Fixing those causes much more churn
    and troubles than the benefit of using that timer brings so
    don't enable it on K8 at all, falling back to the original
    functionality the kernel had wrt to that.

    Reported-and-bisected-by: Nick Bowler
    Cc: Boris Ostrovsky
    Cc: Andreas Herrmann
    Cc: Greg Kroah-Hartman
    Cc: Hans Rosenfeld
    Cc: Nick Bowler
    Cc: Joerg-Volker-Peetz
    Signed-off-by: Borislav Petkov
    Link: http://lkml.kernel.org/r/1305636919-31165-3-git-send-email-bp@amd64.org
    Signed-off-by: Ingo Molnar

    Borislav Petkov
     
  • This reverts commit e20a2d205c05cef6b5783df339a7d54adeb50962, as it crashes
    certain boxes with specific AMD CPU models.

    Moving the lower endpoint of the Erratum 400 check to accomodate
    earlier K8 revisions (A-E) opens a can of worms which is simply
    not worth to fix properly by tweaking the errata checking
    framework:

    * missing IntPenging MSR on revisions < CG cause #GP:

    http://marc.info/?l=linux-kernel&m=130541471818831

    * makes earlier revisions use the LAPIC timer instead of the C1E
    idle routine which switches to HPET, thus not waking up in
    deeper C-states:

    http://lkml.org/lkml/2011/4/24/20

    Therefore, leave the original boundary starting with K8-revF.

    Signed-off-by: Ingo Molnar

    Borislav Petkov
     
  • Commit c21e6beb removed our queue request_fn re-enter
    protection, and defaulted to always running the queues from
    kblockd to be safe. This was a known potential slow down,
    but should be safe.

    Unfortunately this is causing big performance regressions for
    some, so we need to improve this logic. Looking into the details
    of the re-enter, the real issue is on requeue of requests.

    Requeue of requests upon seeing a BUSY condition from the device
    ends up re-running the queue, causing traces like this:

    scsi_request_fn()
    scsi_dispatch_cmd()
    scsi_queue_insert()
    __scsi_queue_insert()
    scsi_run_queue()
    scsi_request_fn()
    ...

    potentially causing the issue we want to avoid. So special
    case the requeue re-run of the queue, but improve it to offload
    the entire run of local queue and starved queue from a single
    workqueue callback. This is a lot better than potentially
    kicking off a workqueue run for each device seen.

    This also fixes the issue of the local device going into recursion,
    since the above mentioned commit never moved that queue run out
    of line.

    Signed-off-by: Jens Axboe

    Jens Axboe
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
    net: Change netdev_fix_features messages loglevel
    vmxnet3: Fix inconsistent LRO state after initialization
    sfc: Fix oops in register dump after mapping change
    IPVS: fix netns if reading ip_vs_* procfs entries
    bridge: fix forwarding of IPv6

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc:
    Revert "mmc: fix a race between card-detect rescan and clock-gate work instances"

    Linus Torvalds
     
  • Fix new kernel-doc warning in mm/page_alloc.c:

    Warning(mm/page_alloc.c:2370): No description found for parameter 'nid'

    Signed-off-by: Randy Dunlap
    Signed-off-by: Linus Torvalds

    Randy Dunlap
     
  • During pci remove/rescan testing found:

    pci 0000:c0:03.0: PCI bridge to [bus c4-c9]
    pci 0000:c0:03.0: bridge window [io 0x1000-0x0fff]
    pci 0000:c0:03.0: bridge window [mem 0xf0000000-0xf00fffff]
    pci 0000:c0:03.0: bridge window [mem 0xfc180000000-0xfc197ffffff 64bit pref]
    pci 0000:c0:03.0: device not available (can't reserve [io 0x1000-0x0fff])
    pci 0000:c0:03.0: Error enabling bridge (-22), continuing
    pci 0000:c0:03.0: enabling bus mastering
    pci 0000:c0:03.0: setting latency timer to 64
    pcieport 0000:c0:03.0: device not available (can't reserve [io 0x1000-0x0fff])
    pcieport: probe of 0000:c0:03.0 failed with error -22

    This bug was caused by commit c8adf9a3e873 ("PCI: pre-allocate
    additional resources to devices only after successful allocation of
    essential resources.")

    After that commit, pci_hotplug_io_size is changed to additional_io_size
    from minium size. So it will not go through resource_size(res) != 0
    path, and will not be reset.

    The root cause is: pci_bridge_check_ranges will set RESOURCE_IO flag for
    pci bridge, and later if children do not need IO resource. those bridge
    resources will not need to be allocated. but flags is still there.
    that will confuse the the pci_enable_bridges later.

    related code:

    static void assign_requested_resources_sorted(struct resource_list *head,
    struct resource_list_x *fail_head)
    {
    struct resource *res;
    struct resource_list *list;
    int idx;

    for (list = head->next; list; list = list->next) {
    res = list->res;
    idx = res - &list->dev->resource[0];
    if (resource_size(res) && pci_assign_resource(list->dev, idx)) {
    ...
    reset_resource(res);
    }
    }
    }

    At last, We have to clear the flags in pbus_size_mem/io when requested
    size == 0 and !add_head. becasue this case it will not go through
    adjust_resources_sorted().

    Just make size1 = size0 when !add_head. it will make flags get cleared.

    At the same time when requested size == 0, add_size != 0, will still
    have in head and add_list. because we do not clear the flags for it.

    After this, we will get right result:

    pci 0000:c0:03.0: PCI bridge to [bus c4-c9]
    pci 0000:c0:03.0: bridge window [io disabled]
    pci 0000:c0:03.0: bridge window [mem 0xf0000000-0xf00fffff]
    pci 0000:c0:03.0: bridge window [mem 0xfc180000000-0xfc197ffffff 64bit pref]
    pci 0000:c0:03.0: enabling bus mastering
    pci 0000:c0:03.0: setting latency timer to 64
    pcieport 0000:c0:03.0: setting latency timer to 64
    pcieport 0000:c0:03.0: irq 160 for MSI/MSI-X
    pcieport 0000:c0:03.0: Signaling PME through PCIe PME interrupt
    pci 0000:c4:00.0: Signaling PME through PCIe PME interrupt
    pcie_pme 0000:c0:03.0:pcie01: service driver pcie_pme loaded
    aer 0000:c0:03.0:pcie02: service driver aer loaded
    pciehp 0000:c0:03.0:pcie04: Hotplug Controller:

    v3: more simple fix. also fix one typo in pbus_size_mem

    Signed-off-by: Yinghai Lu
    Reviewed-by: Ram Pai
    Cc: Jesse Barnes
    Cc: Bjorn Helgaas
    Signed-off-by: Linus Torvalds

    Yinghai Lu
     
  • The first cpu which switches from periodic to oneshot mode switches
    also the broadcast device into oneshot mode. The broadcast device
    serves as a backup for per cpu timers which stop in deeper
    C-states. To avoid starvation of the cpus which might be in idle and
    depend on broadcast mode it marks the other cpus as broadcast active
    and sets the brodcast expiry value of those cpus to the next tick.

    The oneshot mode broadcast bit for the other cpus is sticky and gets
    only cleared when those cpus exit idle. If a cpu was not idle while
    the bit got set in consequence the bit prevents that the broadcast
    device is armed on behalf of that cpu when it enters idle for the
    first time after it switched to oneshot mode.

    In most cases that goes unnoticed as one of the other cpus has usually
    a timer pending which keeps the broadcast device armed with a short
    timeout. Now if the only cpu which has a short timer active has the
    bit set then the broadcast device will not be armed on behalf of that
    cpu and will fire way after the expected timer expiry. In the case of
    Christians bug report it took ~145 seconds which is about half of the
    wrap around time of HPET (the limit for that device) due to the fact
    that all other cpus had no timers armed which expired before the 145
    seconds timeframe.

    The solution is simply to clear the broadcast active bit
    unconditionally when a cpu switches to oneshot mode after the first
    cpu switched the broadcast device over. It's not idle at that point
    otherwise it would not be executing that code.

    [ I fundamentally hate that broadcast crap. Why the heck thought some
    folks that when going into deep idle it's a brilliant concept to
    switch off the last device which brings the cpu back from that
    state? ]

    Thanks to Christian for providing all the valuable debug information!

    Reported-and-tested-by: Christian Hoffmann
    Cc: John Stultz
    Link: http://lkml.kernel.org/r/%3Calpine.LFD.2.02.1105161105170.3078%40ionos%3E
    Cc: stable@kernel.org
    Signed-off-by: Thomas Gleixner

    Thomas Gleixner