lkml.org 
[lkml]   [2013]   [Sep]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH 0/3] msi: fix kobject/sysfs removal from msi_list
    Date
    Currently, while removing msi_list's ->kobj, we just do kobject_put() on it
    and after that free the entry itself. However, kobject_put() doesn't
    guarantee that the kobject itself is freed - it can be used by someone else
    and thus, when we'll free the entry, we'll free the kobject too - leading
    to bugs in the other users (or when we'll finally release it).

    Also, in some cases we might fail to register the kobjects, but we forget
    to remove pdev->msi_kset, and this can lead to errors if we try to
    re-register it - cause we already have that kset initialized.

    Fix both issues by moving msi_kset/kobject deinitialization code completely
    to free_msi_irqs(), which is called every time we fail and need to roll
    back (and on the proper device irqs deinit). Also, move kfree-ing of the
    msi_list entry to kobject->release (msi_kobj_release()), so that the entry
    containing kobject will only be delisted in free_msi_irqs(), and free only
    when there are no other users of its kobject.

    CC: Bjorn Helgaas <bhelgaas@google.com>
    CC: linux-pci@vger.kernel.org
    CC: linux-kernel@vger.kernel.org
    Signed-off-by: Veaceslav Falico <vfalico@redhat.com>

    ---
    drivers/pci/msi.c | 38 +++++++++++++++-----------------------
    1 file changed, 15 insertions(+), 23 deletions(-)


    \
     
     \ /
      Last update: 2013-09-17 04:01    [W:3.232 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site