Received: by 2002:a25:e74b:0:0:0:0:0 with SMTP id e72csp962848ybh; Wed, 15 Jul 2020 22:12:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy3ffGse5uvHwQ/MgION67UeYxs/dcVAt+WdMF45ppX0e6+ELbE3ZW13iX7RAN2ukkN1z8S X-Received: by 2002:a17:906:160f:: with SMTP id m15mr2226753ejd.423.1594876321946; Wed, 15 Jul 2020 22:12:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594876321; cv=none; d=google.com; s=arc-20160816; b=OL+Y6U+mO/pA9Ty+0l2JhqZHYD/PtP2QKi15IsTAnsQ91ilmWw2jkNvhdHN02A19Hd KP+HsUFt12/gFKdZ7qpWlpTKRXBW+vjRq28HwiXju9lprc6J/TtU5PdkRruOrSmpR/1i AlTbYmpsNcZGWJZA7IMU/vGoHb1agFj1nZ1TiDox9MjWFy8OFp4P0Nh1MAdN1JclzSzV 0V2m57oa9vGlwaBG/R/FprVp47fAmVp43RWHZZB9X4AVVqFo/9O+pCRQp95BKtlwCduN x59HuHJ9W5lZYgK4lT7aXOY2aZC1qw6y2ksUdhTKZPpbEqj/WUS42I2gEhrZCk+2SPFP cUzA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:from:subject:mime-version :message-id:date:dkim-signature; bh=/ASv5dAELns8VVIKC04I8VtuZPqEPBD90P+R5xqH+S8=; b=MbVUPpWqRLqx8lozy6LkLWcCgNC35kYAH0jFUByA+w8dXe6csOCMASX+OgCD6Jsl1R tIBuvdWTgOEG5IhBSM9jCkB2GFAn78Hf1fVnYhbSRod/yFZ91p88pV0e8Bkbm7KH4o0j pU/6r6NPX3Xg3G/LENWDnMKr8OLoQuoFtl4/DHK6zf+frKcHeQCoIV/MvYetyOYJIrOg xoRyjRWp+A2GF7rmd5Ls0EWbnWHabTfImb8vQNzlKTstA0NlR4jc6HBLLKWUXDIUsilJ LDF6tS77OrqWqHR/uRwnrwtBG16RDOAYjPYPpnZIwqYkXsuJ2KSRDtmrXIaFo++Zhjy9 a6FQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=nx5KryYW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i21si2431048edb.402.2020.07.15.22.11.39; Wed, 15 Jul 2020 22:12:01 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=nx5KryYW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726279AbgGPFIu (ORCPT + 99 others); Thu, 16 Jul 2020 01:08:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45732 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725921AbgGPFIu (ORCPT ); Thu, 16 Jul 2020 01:08:50 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 280B7C061755 for ; Wed, 15 Jul 2020 22:08:50 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id i203so5787585yba.9 for ; Wed, 15 Jul 2020 22:08:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=/ASv5dAELns8VVIKC04I8VtuZPqEPBD90P+R5xqH+S8=; b=nx5KryYWxGY5HdEReewTvGrAt4vEZgN1uDIJMhQ9FCh3mF09JRhkfjlOqs1YPrNxwa ivUgcpI92V1THDb7Fxnstt/ZVp8CRQoRk8GwLKf3mSjb1Xgk/6M2e45qJahFMsh5nH57 yBn3jjz6RwM+CJU5P7kZmgIhHKU07BufDxNmxMGRasG+UjdD0oThKS8KQ9VAJ0I6QFQO 0E/CDhc9Ox+WNcfP5kwP+HJUVb+ffzTHGdl2AGlGvE099kp45nSRSOgCTHU8g5sEb4Yo xHwttBJ75WsgoWCFtHn0FAoEHOeioMMa7cxSlGIQtcg76aYXPRpJYrn9nxjDN2oVUezC CDdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=/ASv5dAELns8VVIKC04I8VtuZPqEPBD90P+R5xqH+S8=; b=hkHa87kzjvN10cO1tsr7ZJ8F3ZwFp+CpgsuvYitqcb7UBeoTxrUo4UvKgfiEN14Zdv DNrNetTAkfumHmvYl+zmF84502PkkAdaQ8abioWwQXuNDsNqoLrYAKqUkq4ODHqc8wqc ZhT6O3sJz9ZRqXn3/wKo9wAvGe5wxtV1JP26KSFcvPJ0poqsx5C9bd7AtSock7qMTrsj cXeJHCRwDTlsV9YZmkoThtRCXyEa3XqTAhVEs4o1I7HZ7H1BWhMySOrFWEYpXyHMpsAl P0lPBO4Ld0i9sO87Jy+zGDYllsefynj+Y0wB2DBOnCqr0wgkHuDSUHMXush3/c4NQrYR MAnw== X-Gm-Message-State: AOAM533D8PmGbgz7OJLOcQ9uqNAbM5ALwT5C3Zh764bKB/06DIOi8rWv XC8mM8YmIS/lvQxHCWTUP0GpySXEnjrtYuc= X-Received: by 2002:a25:e78f:: with SMTP id e137mr3755515ybh.153.1594876129385; Wed, 15 Jul 2020 22:08:49 -0700 (PDT) Date: Wed, 15 Jul 2020 22:08:46 -0700 Message-Id: <20200716050846.2047110-1-saravanak@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.28.0.rc0.105.gf9edc3c819-goog Subject: [PATCH v1] driver core: Fix scheduling while atomic warnings during device link deletion From: Saravana Kannan To: Greg Kroah-Hartman , "Rafael J. Wysocki" , Saravana Kannan Cc: Marek Szyprowski , Guenter Roeck , kernel-team@android.com, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Marek and Guenter reported that commit 287905e68dd2 ("driver core: Expose device link details in sysfs") caused sleeping/scheduling while atomic warnings. BUG: sleeping function called from invalid context at kernel/locking/mutex.c:935 in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 12, name: kworker/0:1 2 locks held by kworker/0:1/12: #0: ee8074a8 ((wq_completion)rcu_gp){+.+.}-{0:0}, at: process_one_work+0x174/0x7dc #1: ee921f20 ((work_completion)(&sdp->work)){+.+.}-{0:0}, at: process_one_work+0x174/0x7dc Preemption disabled at: [] srcu_invoke_callbacks+0xc0/0x154 ----- 8< ----- SNIP [] (device_del) from [] (device_unregister+0x24/0x64) [] (device_unregister) from [] (srcu_invoke_callbacks+0xcc/0x154) [] (srcu_invoke_callbacks) from [] (process_one_work+0x234/0x7dc) [] (process_one_work) from [] (worker_thread+0x44/0x51c) [] (worker_thread) from [] (kthread+0x158/0x1a0) [] (kthread) from [] (ret_from_fork+0x14/0x20) Exception stack(0xee921fb0 to 0xee921ff8) This was caused by the device link device being released in the context of srcu_invoke_callbacks(). There is no need to wait till the RCU callback to release the device link device. So release the device earlier and revert the RCU callback code to what it was before commit 287905e68dd2 ("driver core: Expose device link details in sysfs") Fixes: 287905e68dd2 ("driver core: Expose device link details in sysfs") Reported-by: Marek Szyprowski Reported-by: Guenter Roeck Signed-off-by: Saravana Kannan --- Marek and Guenter, It haven't had a chance to test this yet. Can one of you please test it and confirm it fixes the issue? Thanks, Saravana drivers/base/core.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/drivers/base/core.c b/drivers/base/core.c index 5373ddd029f6..ccb2ce11f5b5 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -306,16 +306,10 @@ static struct attribute *devlink_attrs[] = { }; ATTRIBUTE_GROUPS(devlink); -static void devlink_dev_release(struct device *dev) -{ - kfree(to_devlink(dev)); -} - static struct class devlink_class = { .name = "devlink", .owner = THIS_MODULE, .dev_groups = devlink_groups, - .dev_release = devlink_dev_release, }; static int devlink_add_symlinks(struct device *dev, @@ -737,7 +731,7 @@ static void device_link_free(struct device_link *link) put_device(link->consumer); put_device(link->supplier); - device_unregister(&link->link_dev); + kfree(link); } #ifdef CONFIG_SRCU @@ -756,6 +750,7 @@ static void __device_link_del(struct kref *kref) if (link->flags & DL_FLAG_PM_RUNTIME) pm_runtime_drop_link(link->consumer); + device_unregister(&link->link_dev); list_del_rcu(&link->s_node); list_del_rcu(&link->c_node); call_srcu(&device_links_srcu, &link->rcu_head, __device_link_free_srcu); @@ -771,6 +766,7 @@ static void __device_link_del(struct kref *kref) if (link->flags & DL_FLAG_PM_RUNTIME) pm_runtime_drop_link(link->consumer); + device_unregister(&link->link_dev); list_del(&link->s_node); list_del(&link->c_node); device_link_free(link); -- 2.28.0.rc0.105.gf9edc3c819-goog