09 Sep, 2010

1 commit

  • During suspend, the power.completion is expected to be set when a
    device has not yet started suspending. Set it on init to fix a
    corner case where a device is resumed when its parent has never
    suspended.

    Consider three drivers, A, B, and C. The parent of A is C, and C
    has async_suspend set. On boot, C->power.completion is initialized
    to 0.

    During the first suspend:
    suspend_devices_and_enter(...)
    dpm_resume(...)
    device_suspend(A)
    device_suspend(B) returns error, aborts suspend
    dpm_resume_end(...)
    dpm_resume(...)
    device_resume(A)
    dpm_wait(A->parent == C)
    wait_for_completion(C->power.completion)

    The wait_for_completion will never complete, because
    complete_all(C->power.completion) will only be called from
    device_suspend(C) or device_resume(C), neither of which is called
    if suspend is aborted before C.

    After a successful suspend->resume cycle, where B doesn't abort
    suspend, C->power.completion is left in the completed state by the
    call to device_resume(C), and the same call path will work if B
    aborts suspend.

    Signed-off-by: Colin Cross
    Signed-off-by: Rafael J. Wysocki

    Colin Cross
     

24 Aug, 2010

1 commit

  • In the error path, _request_firmware sets
    firmware_p to NULL rather than *firmware_p,
    which leads to passing a freed firmware
    struct to drivers when the firmware file
    cannot be found. Fix this.

    Broken by commit f8a4bd3456b988fc73b2c.

    Reported-by: Wey-Yi Guy
    Signed-off-by: Johannes Berg
    Acked-by: Dmitry Torokhov
    Signed-off-by: Pekka Enberg
    Signed-off-by: Greg Kroah-Hartman

    Johannes Berg
     

10 Aug, 2010

1 commit


07 Aug, 2010

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6: (28 commits)
    driver core: device_rename's new_name can be const
    sysfs: Remove owner field from sysfs struct attribute
    powerpc/pci: Remove owner field from attribute initialization in PCI bridge init
    regulator: Remove owner field from attribute initialization in regulator core driver
    leds: Remove owner field from attribute initialization in bd2802 driver
    scsi: Remove owner field from attribute initialization in ARCMSR driver
    scsi: Remove owner field from attribute initialization in LPFC driver
    cgroupfs: create /sys/fs/cgroup to mount cgroupfs on
    Driver core: Add BUS_NOTIFY_BIND_DRIVER
    driver core: fix memory leak on one error path in bus_register()
    debugfs: no longer needs to depend on SYSFS
    sysfs: Fix one more signature discrepancy between sysfs implementation and docs.
    sysfs: fix discrepancies between implementation and documentation
    dcdbas: remove a redundant smi_data_buf_free in dcdbas_exit
    dmi-id: fix a memory leak in dmi_id_init error path
    sysfs: sysfs_chmod_file's attr can be const
    firmware: Update hotplug script
    Driver core: move platform device creation helpers to .init.text (if MODULE=n)
    Driver core: reduce duplicated code for platform_device creation
    Driver core: use kmemdup in platform_device_add_resources
    ...

    Linus Torvalds
     

06 Aug, 2010

10 commits

  • * 'next-devicetree' of git://git.secretlab.ca/git/linux-2.6: (63 commits)
    of/platform: Register of_platform_drivers with an "of:" prefix
    of/address: Clean up function declarations
    of/spi: call of_register_spi_devices() from spi core code
    of: Provide default of_node_to_nid() implementation.
    of/device: Make of_device_make_bus_id() usable by other code.
    of/irq: Fix endian issues in parsing interrupt specifiers
    of: Fix phandle endian issues
    of/flattree: fix of_flat_dt_is_compatible() to match the full compatible string
    of: remove of_default_bus_ids
    of: make of_find_device_by_node generic
    microblaze: remove references to of_device and to_of_device
    sparc: remove references to of_device and to_of_device
    powerpc: remove references to of_device and to_of_device
    of/device: Replace of_device with platform_device in includes and core code
    of/device: Protect against binding of_platform_drivers to non-OF devices
    of: remove asm/of_device.h
    of: remove asm/of_platform.h
    of/platform: remove all of_bus_type and of_platform_bus_type references
    of: Merge of_platform_bus_type with platform_bus_type
    drivercore/of: Add OF style matching to platform bus
    ...

    Fix up trivial conflicts in arch/microblaze/kernel/Makefile due to just
    some obj-y removals by the devicetree branch, while the microblaze
    updates added a new file.

    Linus Torvalds
     
  • The new_name argument to device_rename() can be
    const as kobject_rename's new_name argument is.

    Signed-off-by: Johannes Berg
    Signed-off-by: Greg Kroah-Hartman

    Johannes Berg
     
  • Add BUS_NOTIFY_BIND_DRIVER as a bus notifier event.

    For driver binding/unbinding we with this in
    place have the following bus notifier events:
    - BUS_NOTIFY_BIND_DRIVER - before ->probe()
    - BUS_NOTIFY_BOUND_DRIVER - after ->probe()
    - BUS_NOTIFY_UNBIND_DRIVER - before ->remove()
    - BUS_NOTIFY_UNBOUND_DRIVER - after ->remove()

    The event BUS_NOTIFY_BIND_DRIVER allows bus code
    to be notified that ->probe() is about to be called.

    Useful for bus code that needs to setup hardware before
    the driver gets to run. With this in place platform
    drivers can be loaded and unloaded as modules and the
    new BIND event allows bus code to control for instance
    device clocks that must be enabled before the driver
    can be executed.

    Without this patch there is no way for the bus code to
    get notified that a modular driver is about to be probed.

    Signed-off-by: Magnus Damm
    Signed-off-by: Greg Kroah-Hartman

    Magnus Damm
     
  • Reported-by: huangweibing@gmail.com
    Signed-off-by: Jike Song
    Signed-off-by: Greg Kroah-Hartman

    Jike Song
     
  • Platform devices should only be called by init code, so it should be
    possible to move creation helpers to .init.text -- at least if modules
    are disabled.

    Signed-off-by: Uwe Kleine-König
    Signed-off-by: Greg Kroah-Hartman

    Uwe Kleine-König
     
  • This makes the two similar functions platform_device_register_simple
    and platform_device_register_data one line inline functions using a new
    generic function platform_device_register_resndata.

    Signed-off-by: Uwe Kleine-König
    Signed-off-by: Greg Kroah-Hartman

    Uwe Kleine-König
     
  • This makes platform_device_add_resources look like
    platform_device_add_data.

    Signed-off-by: Uwe Kleine-König
    Signed-off-by: Greg Kroah-Hartman

    Uwe Kleine-König
     
  • Both these structures have the same lifetime rules so instead of allocating
    and managing them separately embed struct device into struct firmware_priv.
    Also make sure to delete sysfs attributes ourselves instead of expecting
    sysfs to clean up our mess.

    Signed-off-by: Dmitry Torokhov
    Signed-off-by: Greg Kroah-Hartman

    Dmitry Torokhov
     
  • There is no reason why we are using a template for binary attribute
    and copying it into per-firmware data before registering. Using the
    original works as well.

    Signed-off-by: Dmitry Torokhov
    Signed-off-by: Greg Kroah-Hartman

    Dmitry Torokhov
     
  • struct dma_coherent_mem in drivers/base/dma-coherent.c
    has member 'device_base' that is of type u32,
    but is assigned value of type dma_addr_t, which may be
    64 bits for x86_64. Change the type to dma_addr_t.

    Signed-off-by: Marin Mitov
    Signed-off-by: Greg Kroah-Hartman

    Marin Mitov
     

05 Aug, 2010

2 commits

  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1443 commits)
    phy/marvell: add 88ec048 support
    igb: Program MDICNFG register prior to PHY init
    e1000e: correct MAC-PHY interconnect register offset for 82579
    hso: Add new product ID
    can: Add driver for esd CAN-USB/2 device
    l2tp: fix export of header file for userspace
    can-raw: Fix skb_orphan_try handling
    Revert "net: remove zap_completion_queue"
    net: cleanup inclusion
    phy/marvell: add 88e1121 interface mode support
    u32: negative offset fix
    net: Fix a typo from "dev" to "ndev"
    igb: Use irq_synchronize per vector when using MSI-X
    ixgbevf: fix null pointer dereference due to filter being set for VLAN 0
    e1000e: Fix irq_synchronize in MSI-X case
    e1000e: register pm_qos request on hardware activation
    ip_fragment: fix subtracting PPPOE_SES_HLEN from mtu twice
    net: Add getsockopt support for TCP thin-streams
    cxgb4: update driver version
    cxgb4: add new PCI IDs
    ...

    Manually fix up conflicts in:
    - drivers/net/e1000e/netdev.c: due to pm_qos registration
    infrastructure changes
    - drivers/net/phy/marvell.c: conflict between adding 88ec048 support
    and cleaning up the IDs
    - drivers/net/wireless/ipw2x00/ipw2100.c: trivial ipw2100_pm_qos_req
    conflict (registration change vs marking it static)

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/suspend-2.6:
    PM / Runtime: Add runtime PM statistics (v3)
    PM / Runtime: Make runtime_status attribute not debug-only (v. 2)
    PM: Do not use dynamically allocated objects in pm_wakeup_event()
    PM / Suspend: Fix ordering of calls in suspend error paths
    PM / Hibernate: Fix snapshot error code path
    PM / Hibernate: Fix hibernation_platform_enter()
    pm_qos: Get rid of the allocation in pm_qos_add_request()
    pm_qos: Reimplement using plists
    plist: Add plist_last
    PM: Make it possible to avoid races between wakeup and system sleep
    PNPACPI: Add support for remote wakeup
    PM: describe kernel policy regarding wakeup defaults (v. 2)
    PM / Hibernate: Fix typos in comments in kernel/power/swap.c

    Linus Torvalds
     

26 Jul, 2010

1 commit

  • This fixes the regression in 2.6.35-rcX where bluetooth network devices
    would fail to be deleted from sysfs, causing their destruction and
    recreation to fail. In addition this fixes the mac80211_hwsim driver
    where it would leave around sysfs files when the driver was removed.

    This problem is discussed at
    https://bugzilla.kernel.org/show_bug.cgi?id=16257

    The reason for the regression is that the network namespace support
    added to sysfs expects and requires that network devices be put in
    directories that can contain only network devices.

    Today get_device_parent almost provides that guarantee for all class
    devices, except for a specific exception when the parent of a class
    devices is a class device. It would be nice to simply remove that
    arguably incorrect special case, but apparently the input devices depend
    on it being there. So I have only removed it for class devices with
    network namespace support. Which today are the network devices.

    It has been suggested that a better fix would be to change the parent
    device from a class device to a bus device, which in the case of the
    bluetooth driver would change /sys/class/bluetooth to /sys/bus/bluetoth,
    I can not see how we would avoid significant userspace breakage if we
    were to make that change.

    Adding an extra directory in the path to the device will also be
    userspace visible but it is much less likely to break things.
    Everything is still accessible from /sys/class (for example), and it
    fixes two bugs. Adding an extra directory fixes a 3 year old regression
    introduced with the new sysfs layout that makes it impossible to rename
    bnep0 network devices to names that conflict with hci device attributes
    like hci_revsion. Adding an additional directory removes the new
    failure modes introduced by the network namespace code.

    If it weren't for the regession in the renaming of network devices I
    would figure out how to just make the sysfs code deal with this
    configuration of devices.

    In summary this patch fixes regressions by changing:
    "/sys/class/bluetooth/hci0/bnep0" to "/sys/class/bluetooth/hci0/net/bnep0".

    Reported-by: Johannes Berg
    Reported-by: Janusz Krzysztofik
    Signed-off-by: Eric W. Biederman
    Signed-off-by: Linus Torvalds

    Eric W. Biederman
     

24 Jul, 2010

2 commits

  • of_platform_bus was being used in the same manner as the platform_bus.
    The only difference being that of_platform_bus devices are generated
    from data in the device tree, and platform_bus devices are usually
    statically allocated in platform code. Having them separate causes
    the problem of device drivers having to be registered twice if it
    was possible for the same device to appear on either bus.

    This patch removes of_platform_bus_type and registers all of_platform
    bus devices and drivers on the platform bus instead. A previous patch
    made the of_device structure an alias for the platform_device structure,
    and a shim is used to adapt of_platform_drivers to the platform bus.

    After all of of_platform_bus drivers are converted to be normal platform
    drivers, the shim code can be removed.

    Signed-off-by: Grant Likely
    Acked-by: David S. Miller

    Grant Likely
     
  • As part of the merge between platform bus and of_platform bus, add the
    ability to do of-style matching to the platform bus.

    Signed-off-by: Grant Likely
    Acked-by: Greg Kroah-Hartman
    CC: Michal Simek
    CC: Grant Likely
    CC: Benjamin Herrenschmidt
    CC: Stephen Rothwell
    CC: linux-kernel@vger.kernel.org
    CC: microblaze-uclinux@itee.uq.edu.au
    CC: linuxppc-dev@ozlabs.org
    CC: devicetree-discuss@lists.ozlabs.org

    Grant Likely
     

19 Jul, 2010

4 commits

  • In order for PowerTOP to be able to report how well the new runtime PM is
    working for the various drivers, the kernel needs to export some basic
    statistics in sysfs.

    This patch adds two sysfs files in the runtime PM domain that expose the
    total time a device has been active, and the time a device has been
    suspended.

    With this PowerTOP can compute the activity percentage

    Active %age = 100 * (delta active) / (delta active + delta suspended)

    and present the information to the user.

    I've written the PowerTOP code (slated for version 1.12) already, and the
    output looks like this:

    Runtime Device Power Management statistics
    Active Device name
    10.0% 06:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller

    [version 2: fix stat update bugs noticed by Alan Stern]
    [version 3: rebase to -next and move the sysfs declaration]

    Signed-off-by: Arjan van de Ven
    Signed-off-by: Rafael J. Wysocki

    Arjan van de Ven
     
  • This patch (as1404b) makes the runtime_status sysfs attribute available
    even in the absence of CONFIG_PM_ADVANCED_DEBUG, and it changes the
    routine to display "unsupported" when runtime PM is disabled for a
    device. Although not strictly 100% accurate, this will almost always
    be correct.

    Signed-off-by: Alan Stern
    Acked-by: Dominik Brodowski
    Signed-off-by: Rafael J. Wysocki

    Alan Stern
     
  • Originally, pm_wakeup_event() uses struct delayed_work objects,
    allocated with GFP_ATOMIC, to schedule the execution of pm_relax()
    in future. However, as noted by Alan Stern, it is not necessary to
    do that, because all pm_wakeup_event() calls can use one static timer
    that will always be set to expire at the latest time passed to
    pm_wakeup_event().

    The modifications are based on the example code posted by Alan.

    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     
  • One of the arguments during the suspend blockers discussion was that
    the mainline kernel didn't contain any mechanisms making it possible
    to avoid races between wakeup and system suspend.

    Generally, there are two problems in that area. First, if a wakeup
    event occurs exactly when /sys/power/state is being written to, it
    may be delivered to user space right before the freezer kicks in, so
    the user space consumer of the event may not be able to process it
    before the system is suspended. Second, if a wakeup event occurs
    after user space has been frozen, it is not generally guaranteed that
    the ongoing transition of the system into a sleep state will be
    aborted.

    To address these issues introduce a new global sysfs attribute,
    /sys/power/wakeup_count, associated with a running counter of wakeup
    events and three helper functions, pm_stay_awake(), pm_relax(), and
    pm_wakeup_event(), that may be used by kernel subsystems to control
    the behavior of this attribute and to request the PM core to abort
    system transitions into a sleep state already in progress.

    The /sys/power/wakeup_count file may be read from or written to by
    user space. Reads will always succeed (unless interrupted by a
    signal) and return the current value of the wakeup events counter.
    Writes, however, will only succeed if the written number is equal to
    the current value of the wakeup events counter. If a write is
    successful, it will cause the kernel to save the current value of the
    wakeup events counter and to abort the subsequent system transition
    into a sleep state if any wakeup events are reported after the write
    has returned.

    [The assumption is that before writing to /sys/power/state user space
    will first read from /sys/power/wakeup_count. Next, user space
    consumers of wakeup events will have a chance to acknowledge or
    veto the upcoming system transition to a sleep state. Finally, if
    the transition is allowed to proceed, /sys/power/wakeup_count will
    be written to and if that succeeds, /sys/power/state will be written
    to as well. Still, if any wakeup events are reported to the PM core
    by kernel subsystems after that point, the transition will be
    aborted.]

    Additionally, put a wakeup events counter into struct dev_pm_info and
    make these per-device wakeup event counters available via sysfs,
    so that it's possible to check the activity of various wakeup event
    sources within the kernel.

    To illustrate how subsystems can use pm_wakeup_event(), make the
    low-level PCI runtime PM wakeup-handling code use it.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Jesse Barnes
    Acked-by: Greg Kroah-Hartman
    Acked-by: markgross
    Reviewed-by: Alan Stern

    Rafael J. Wysocki
     

05 Jul, 2010

1 commit

  • Reduces an x86 defconfig text and data ~55k, .6% smaller.

    $ size vmlinux*
    text data bss dec hex filename
    7205273 716016 1366288 9287577 8db799 vmlinux
    7258890 719768 1366288 9344946 8e97b2 vmlinux.master

    Uses %pV and struct va_format
    Format arguments are verified before printk

    The dev_info macro is converted to _dev_info because there are
    existing uses of variables named dev_info in the kernel tree
    like drivers/net/pcmcia/pcnet_cs.c

    A dev_info macro is created to call _dev_info

    Signed-off-by: Joe Perches
    Acked-by: Greg Kroah-Hartman
    Signed-off-by: David S. Miller

    Joe Perches
     

28 May, 2010

1 commit


25 May, 2010

1 commit

  • Add a per-node sysfs file called compact. When the file is written to,
    each zone in that node is compacted. The intention that this would be
    used by something like a job scheduler in a batch system before a job
    starts so that the job can allocate the maximum number of hugepages
    without significant start-up cost.

    Signed-off-by: Mel Gorman
    Acked-by: Rik van Riel
    Reviewed-by: KOSAKI Motohiro
    Reviewed-by: Christoph Lameter
    Reviewed-by: Minchan Kim
    Reviewed-by: KAMEZAWA Hiroyuki
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mel Gorman
     

22 May, 2010

14 commits