• Alex Williamson's avatar
    Revert "driver core: Fix unbalanced device reference in drivers_probe" · cbfd8c63
    Alex Williamson authored
    This reverts commit bb34cb6b.
    
    Wrong patch for the wrong branch, sorry for the noise...
    
    Cc: Alex Williamson <alex.williamson@redhat.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    driver core: Fix unbalanced device reference in drivers_probe
    
    bus_find_device_by_name() acquires a device reference which is never
    released.  This results in an object leak, which on older kernels
    results in failure to release all resources of PCI devices.  libvirt
    uses drivers_probe to re-attach devices to the host after assignment
    and is therefore a common trigger for this leak.
    
    Example:
    
    # cd /sys/bus/pci/
    # dmesg -C
    # echo 1 > devices/0000\:01\:00.0/sriov_numvfs
    # echo 0 > devices/0000\:01\:00.0/sriov_numvfs
    # dmesg | grep 01:10
     pci 0000:01:10.0: [8086:10ca] type 00 class 0x020000
     kobject: '0000:01:10.0' (ffff8801d79cd0a8): kobject_add_internal: parent: '0000:00:01.0', set: 'devices'
     kobject: '0000:01:10.0' (ffff8801d79cd0a8): kobject_uevent_env
     kobject: '0000:01:10.0' (ffff8801d79cd0a8): fill_kobj_path: path = '/devices/pci0000:00/0000:00:01.0/0000:01:10.0'
     kobject: '0000:01:10.0' (ffff8801d79cd0a8): kobject_uevent_env
     kobject: '0000:01:10.0' (ffff8801d79cd0a8): fill_kobj_path: path = '/devices/pci0000:00/0000:00:01.0/0000:01:10.0'
     kobject: '0000:01:10.0' (ffff8801d79cd0a8): kobject_uevent_env
     kobject: '0000:01:10.0' (ffff8801d79cd0a8): fill_kobj_path: path = '/devices/pci0000:00/0000:00:01.0/0000:01:10.0'
     kobject: '0000:01:10.0' (ffff8801d79cd0a8): kobject_cleanup, parent           (null)
     kobject: '0000:01:10.0' (ffff8801d79cd0a8): calling ktype release
     kobject: '0000:01:10.0': free name
    
    [kobject freed as expected]
    
    # dmesg -C
    # echo 1 > devices/0000\:01\:00.0/sriov_numvfs
    # echo 0000:01:10.0 > drivers_probe
    # echo 0 > devices/0000\:01\:00.0/sriov_numvfs
    # dmesg | grep 01:10
     pci 0000:01:10.0: [8086:10ca] type 00 class 0x020000
     kobject: '0000:01:10.0' (ffff8801d79ce0a8): kobject_add_internal: parent: '0000:00:01.0', set: 'devices'
     kobject: '0000:01:10.0' (ffff8801d79ce0a8): kobject_uevent_env
     kobject: '0000:01:10.0' (ffff8801d79ce0a8): fill_kobj_path: path = '/devices/pci0000:00/0000:00:01.0/0000:01:10.0'
     kobject: '0000:01:10.0' (ffff8801d79ce0a8): kobject_uevent_env
     kobject: '0000:01:10.0' (ffff8801d79ce0a8): fill_kobj_path: path = '/devices/pci0000:00/0000:00:01.0/0000:01:10.0'
     kobject: '0000:01:10.0' (ffff8801d79ce0a8): kobject_uevent_env
     kobject: '0000:01:10.0' (ffff8801d79ce0a8): fill_kobj_path: path = '/devices/pci0000:00/0000:00:01.0/0000:01:10.0'
    
    [no free]
    Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    pcmcia: sa1111: pass sa1111_dev to jornada720 code
    
    All other sa1111 platforms pass sa1111_dev instance to platform-specific
    code. Follow this approach for Jornada720 platform code.
    Signed-off-by: default avatarDmitry Eremin-Solenikov <dbaryshkov@gmail.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    pcmcia: sa1111: pass sa1111_dev to badge4-specific code
    
    Pass sa1111_dev to platform-specific init code, as it is done by lubbock
    and neponset. This removes a compilation warnings:
    
    drivers/pcmcia/sa1111_badge4.c: In function 'pcmcia_badge4_init':
    drivers/pcmcia/sa1111_badge4.c:147:5: warning: passing argument 1 of 'sa1111_pcmcia_add' from incompatible pointer type [enabled by default]
    In file included from drivers/pcmcia/sa1111_badge4.c:26:0:
    drivers/pcmcia/sa1111_generic.h:15:5: note: expected 'struct sa1111_dev *' but argument is of type 'struct device *'
    Signed-off-by: default avatarDmitry Eremin-Solenikov <dbaryshkov@gmail.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    hangcheck-timer: cleanup casting in hangcheck_init()
    
    The 32 bit addition "(hangcheck_margin + hangcheck_tick)" could
    potentially overflow.  It triggers a static checker warning to have an
    overflowed addition followed by a no-op cast.  I have moved the cast so
    that the addition can't overflow.
    
    Also I removed the unneeded cast on the following line since both
    "hangcheck_tsc_margin" and "TIMER_FREQ" are already 64 bit types.
    Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    W1: ds2490: Increase timeout when waiting for status
    
    Adjust the bulk message timeout to the other ones (1000ms). Otherwise the
    following dmesg errors can be seen on a Raspberry Pi:
    [   31.492386] Failed to read 1-wire data from 0x81: err=-110.
    [   31.504168] 0x81: count=-110, status:
    [   31.613404] Failed to read 1-wire data from 0x81: err=-110.
    [   31.621915] 0x81: count=-110, status:
    [   43.260968] Failed to read 1-wire data from 0x81: err=-110.
    [   43.270998] 0x81: count=-110, status:
    [   43.379959] Failed to read 1-wire data from 0x81: err=-110.
    [   43.388854] 0x81: count=-110, status:
    Signed-off-by: default avatarAlexander Stein <alexanders83@web.de>
    Acked-by: default avatarEvgeniy Polyakov <zbr@ioremap.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    driver core: Fix unbalanced device reference in drivers_probe
    
    bus_find_device_by_name() acquires a device reference which is never
    released.  This results in an object leak, which on older kernels
    results in failure to release all resources of PCI devices.  libvirt
    uses drivers_probe to re-attach devices to the host after assignment
    and is therefore a common trigger for this leak.
    
    Example:
    
    # cd /sys/bus/pci/
    # dmesg -C
    # echo 1 > devices/0000\:01\:00.0/sriov_numvfs
    # echo 0 > devices/0000\:01\:00.0/sriov_numvfs
    # dmesg | grep 01:10
     pci 0000:01:10.0: [8086:10ca] type 00 class 0x020000
     kobject: '0000:01:10.0' (ffff8801d79cd0a8): kobject_add_internal: parent: '0000:00:01.0', set: 'devices'
     kobject: '0000:01:10.0' (ffff8801d79cd0a8): kobject_uevent_env
     kobject: '0000:01:10.0' (ffff8801d79cd0a8): fill_kobj_path: path = '/devices/pci0000:00/0000:00:01.0/0000:01:10.0'
     kobject: '0000:01:10.0' (ffff8801d79cd0a8): kobject_uevent_env
     kobject: '0000:01:10.0' (ffff8801d79cd0a8): fill_kobj_path: path = '/devices/pci0000:00/0000:00:01.0/0000:01:10.0'
     kobject: '0000:01:10.0' (ffff8801d79cd0a8): kobject_uevent_env
     kobject: '0000:01:10.0' (ffff8801d79cd0a8): fill_kobj_path: path = '/devices/pci0000:00/0000:00:01.0/0000:01:10.0'
     kobject: '0000:01:10.0' (ffff8801d79cd0a8): kobject_cleanup, parent           (null)
     kobject: '0000:01:10.0' (ffff8801d79cd0a8): calling ktype release
     kobject: '0000:01:10.0': free name
    
    [kobject freed as expected]
    
    # dmesg -C
    # echo 1 > devices/0000\:01\:00.0/sriov_numvfs
    # echo 0000:01:10.0 > drivers_probe
    # echo 0 > devices/0000\:01\:00.0/sriov_numvfs
    # dmesg | grep 01:10
     pci 0000:01:10.0: [8086:10ca] type 00 class 0x020000
     kobject: '0000:01:10.0' (ffff8801d79ce0a8): kobject_add_internal: parent: '0000:00:01.0', set: 'devices'
     kobject: '0000:01:10.0' (ffff8801d79ce0a8): kobject_uevent_env
     kobject: '0000:01:10.0' (ffff8801d79ce0a8): fill_kobj_path: path = '/devices/pci0000:00/0000:00:01.0/0000:01:10.0'
     kobject: '0000:01:10.0' (ffff8801d79ce0a8): kobject_uevent_env
     kobject: '0000:01:10.0' (ffff8801d79ce0a8): fill_kobj_path: path = '/devices/pci0000:00/0000:00:01.0/0000:01:10.0'
     kobject: '0000:01:10.0' (ffff8801d79ce0a8): kobject_uevent_env
     kobject: '0000:01:10.0' (ffff8801d79ce0a8): fill_kobj_path: path = '/devices/pci0000:00/0000:00:01.0/0000:01:10.0'
    
    [no free]
    Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    pch_phub: Build context save/restore only for PM
    
    The pch_phub_save_reg_conf() and pch_phub_restore_reg_conf() functions
    are only used for suspend/resume support (i.e. when PM is enabled). If
    PM is disabled they don't need to be built.
    Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    misc: genwqe: check for error from get_user_pages_fast()
    
    `genwqe_user_vmap()` calls `get_user_pages_fast()` and if the return
    value is less than the number of pages requested, it frees the pages and
    returns an error (`-EFAULT`).  However, it fails to consider a negative
    error return value from `get_user_pages_fast()`.  In that case, the test
    `if (rc < m->nr_pages)` will be false (due to promotion of `rc` to a
    large `unsigned int`) and the code will continue on to call
    `genwqe_map_pages()` with an invalid list of page pointers.  Fix it by
    bailing out if `get_user_pages_fast()` returns a negative error value.
    Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
    Cc: <stable@vger.kernel.org> # 3.14.x # 3.15.x # 3.16.x # 3.17.x
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    char: misc: document behaviour of open()
    
    an open syscall now assignes file->private_data to a pointer to the
    miscdevice structure. This reminds driver developers not to duplicate
    code if they need this.
    Signed-off-by: default avatarMartin Kepplinger <martink@posteo.de>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    fbdev: pxa3xx-gcu: remove redundant implementation of open()
    
    the miscdevice core now does the work in any case.
    Signed-off-by: default avatarMartin Kepplinger <martink@posteo.de>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    misc: always assign miscdevice to file->private_data in open()
    
    As of now, a miscdevice driver has to provide an implementation of
    the open() file operation if it wants to have misc_open() assign a
    pointer to struct miscdevice to file->private_data for other file
    operations to use (given the user calls open()).
    
    This leads to situations where a miscdevice driver that doesn't need
    internal operations during open() has to implement open() that only
    returns immediately, in order to use the data in private_data in other
    fops.
    
    This provides consistent behaviour for miscdevice developers and will
    always provide the pointer in private_data. A driver's open() fop would,
    of course, just overwrite it, when using private_data itself.
    Signed-off-by: default avatarMartin Kepplinger <martink@posteo.de>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    Drivers: hv: vmbus: Fix a race condition when unregistering a device
    
    When build with Debug the following crash is sometimes observed:
    Call Trace:
     [<ffffffff812b9600>] string+0x40/0x100
     [<ffffffff812bb038>] vsnprintf+0x218/0x5e0
     [<ffffffff810baf7d>] ? trace_hardirqs_off+0xd/0x10
     [<ffffffff812bb4c1>] vscnprintf+0x11/0x30
     [<ffffffff8107a2f0>] vprintk+0xd0/0x5c0
     [<ffffffffa0051ea0>] ? vmbus_process_rescind_offer+0x0/0x110 [hv_vmbus]
     [<ffffffff8155c71c>] printk+0x41/0x45
     [<ffffffffa004ebac>] vmbus_device_unregister+0x2c/0x40 [hv_vmbus]
     [<ffffffffa0051ecb>] vmbus_process_rescind_offer+0x2b/0x110 [hv_vmbus]
    ...
    
    This happens due to the following race: between 'if (channel->device_obj)' check
    in vmbus_process_rescind_offer() and pr_debug() in vmbus_device_unregister() the
    device can disappear. Fix the issue by taking an additional reference to the
    device before proceeding to vmbus_device_unregister().
    Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    Drivers: hv: util: make struct hv_do_fcopy match Hyper-V host messages
    
    An attempt to fix fcopy on i586 (bc5a5b02 Drivers: hv: util: Properly pack the data
    for file copy functionality) led to a regression on x86_64 (and actually didn't fix
    i586 breakage). Fcopy messages from Hyper-V host come in the following format:
    
    struct do_fcopy_hdr   |   36 bytes
    0000                  |    4 bytes
    offset                |    8 bytes
    size                  |    4 bytes
    data                  | 6144 bytes
    
    On x86_64 struct hv_do_fcopy matched this format without ' __attribute__((packed))'
    and on i586 adding ' __attribute__((packed))' to it doesn't change anything. Keep
    the structure packed and add padding to match re reality. Tested both i586 and x86_64
    on Hyper-V Server 2012 R2.
    Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    tools: hv: introduce -n/--no-daemon option
    
    All tools/hv daemons do mandatory daemon() on startup. However, no pidfile
    is created, this make it difficult for an init system to track such daemons.
    Modern linux distros use systemd as their init system. It can handle the
    daemonizing by itself, however, it requires a daemon to stay in foreground
    for that. Some distros already carry distro-specific patch for hv tools
    which switches off daemon().
    
    Introduce -n/--no-daemon option for all 3 daemons in hv/tools. Parse options
    with getopt() to make this part easily expandable.
    Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    Tools: hv: vssdaemon: ignore the EBUSY on multiple freezing the same partition
    
    If a partition appears mounted more than once in /proc/mounts, vss_do_freeze()
    succeeds only for the first time and gets EBUSY (on freeze) or EINVAL (on
    thaw) for the second time. The patch ignores these to make the backup feature
    work.
    
    Also improved the error handling in case a freeze operation fails.
    Signed-off-by: default avatarDexuan Cui <decui@microsoft.com>
    Reviewed-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    uio: support memory sizes larger than 32 bits
    
    This is a completion to 27a90700
    The size field is also increased to allow values larger than 32 bits
    on platforms that have more than 32 bit physical addresses.
    Signed-off-by: default avatarCristian Stoica <cristian.stoica@freescale.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    devres: support sizes greater than an unsigned long
    
    As in 4f452e8a, use resource_size_t
    to accomodate sizes greater than the size of an unsigned long int on
    platforms that have more than 32 bit physical addresses.
    Signed-off-by: default avatarCristian Stoica <cristian.stoica@freescale.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    mei: fix hbm MEI_HBM_STARTED ambiguity
    
    We have MEI_HBM_STARTED in two contexts one
    after start message was received and second
    after enumeration was completed.
    Because after start message reception we move
    immediately to the enumeration state, we need
    only the later meaning.
    Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    mei: nfc: clean nfc internal struct on host exit
    
    NFC internal structure cleaning was dropped by commit
    
    commit 48705693
    Author: Tomas Winkler <tomas.winkler@intel.com>
    Date:   Mon Feb 17 15:13:19 2014 +0200
    
        mei: Remove all bus devices from the mei_dev list when stopping the MEI
    
        When stopping the MEI, we should remove and potentially unregister
        all bus devices queued on the mei_dev linked list.
    
    We allocate nfc_dev and free it across the reset
    so we do not keep it in dirty state
    Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
    Signed-off-by: default avatarAlexander Usyskin <alexander.usyskin@intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    i8k: Add MODULE_DEVICE_TABLE macro
    
    This patch adds MODULE_DEVICE_TABLE macro so i8k.ko module can be automatically
    loaded based on dmi system alias.
    Signed-off-by: default avatarPali Rohár <pali.rohar@gmail.com>
    Acked-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    i8k: Add support for Dell Latitude E6440
    
    Dell Latitude E6440 needs same settings as E6540.
    Signed-off-by: default avatarPali Rohár <pali.rohar@gmail.com>
    Acked-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    checkkconfigsymbols.sh: reimplementation in python
    
    The scripts/checkkconfigsymbols.sh script searches Kconfig features
    in the source code that are not defined in Kconfig. Such identifiers
    always evaluate to false and are the source of various kinds of bugs.
    However, the shell script is slow and it does not detect such broken
    references in Kbuild and Kconfig files (e.g., ``depends on UNDEFINED´´).
    Furthermore, it generates false positives. The script is also hard to
    read and understand, and is thereby difficult to maintain.
    
    This patch replaces the shell script with an implementation in Python,
    which:
        (a) detects the same bugs, but does not report previous false positives
        (b) additionally detects broken references in Kconfig and all
            non-Kconfig files, such as Kbuild, .[cSh], .txt, .sh, defconfig, etc.
        (c) is up to 75 times faster than the shell script
        (d) only checks files under version control
    
    The new script reduces the runtime on my machine (i7-2620M, 8GB RAM, SSD)
    from 3m47s to 0m3s, and reports 938 broken references in Linux v3.17-rc1;
    419 additional reports of which 16 are located in Kconfig files,
    287 in defconfigs, 63 in ./Documentation, 1 in Kbuild.
    
    Moreover, we intentionally include references in comments, which have been
    ignored until now. Such comments may be leftovers of features that have
    been removed or renamed in Kconfig (e.g., ``#endif /* CONFIG_MPC52xx */´´).
    These references can be misleading and should be removed or replaced.
    
    Note that the output format changed from (file list <tab> feature) to
    (feature <tab> file list) as it simplifies the detection of the Kconfig
    feature for long file lists.
    Signed-off-by: default avatarValentin Rothberg <valentinrothberg@gmail.com>
    Signed-off-by: default avatarStefan Hengelein <stefan.hengelein@fau.de>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    misc: atmel-ssc: prepare clock only when request
    
    Prepare SSC clock only when request SSC channel, the clock will be
    enabled when initialize the SSC.
    Signed-off-by: default avatarBo Shen <voice.shen@atmel.com>
    Acked-by: default avatarNicolas Ferre <nicolas.ferre@atmel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    mei: hbm: use client specific print functions
    
    We have host client in connect/disconnect response processors,
    so use client print functions to simplify and unify code.
    Signed-off-by: default avatarAlexander Usyskin <alexander.usyskin@intel.com>
    Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    mei: debugfs: display also connectionless clients
    
    <debugfs>meiX/meclients: display also fixed/connectionless clients
    
    Use better name for fixed client field:
    fixed_address is boolean and indicates whether a client
    is fixed or dynamic.
    Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    mei: use local cl variables in wd and amthif
    
    Use local cl variable instead of dev->iamthif_cl and dev->wd_cl
    as the first step to use dynamic allocation of these clients
    as their are not supported on all platforms
    Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    mei: drop unneeded client NULL check in cb structure
    
    The pointer to client in the callback structure (cb->cl)
    can't be NULL with current locking.
    We can drop check and warnings as in some cases this just
    uselessly complicates the code flow.
    Signed-off-by: default avatarAlexander Usyskin <alexander.usyskin@intel.com>
    Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    
    (cherry picked from commit f4c9485f
    bb34cb6b
    0372ffb3)
    Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
    cbfd8c63
bus.c 31.3 KB