From patchwork Thu Aug 16 07:50:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wang, Wei W" X-Patchwork-Id: 10567143 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 494F9913 for ; Thu, 16 Aug 2018 08:19:19 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 363192A903 for ; Thu, 16 Aug 2018 08:19:19 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2A1B62A9F4; Thu, 16 Aug 2018 08:19:19 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BF0242A903 for ; Thu, 16 Aug 2018 08:19:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B64E16B0006; Thu, 16 Aug 2018 04:19:16 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id B16E66B0008; Thu, 16 Aug 2018 04:19:16 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A2D406B000A; Thu, 16 Aug 2018 04:19:16 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by kanga.kvack.org (Postfix) with ESMTP id 61F986B0006 for ; Thu, 16 Aug 2018 04:19:16 -0400 (EDT) Received: by mail-pg1-f197.google.com with SMTP id t5-v6so1718187pgp.17 for ; Thu, 16 Aug 2018 01:19:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references; bh=OoRrqMvtQOkcAAQCWiTy1rmqNcHIz22kqzFyQNCQfU4=; b=gAUf64ew+VX56zxPirZ53b5wHZMlfWeZ4WEoalXzPWkwk+gExSBzz3MdBVaMjWut3I /bWBoYqzZ2cEmNkl7xz1HwBJH2DnryDUBgiDyvyp7IcT1YJR3gI2bl83dXL82oYsBWiI wMTlpmVKjeSmSDaML1wqoAdZYsFqn2zbPaAdPzuJFuAmg8mgCpqggDui7SU8sM3Zmcp0 rrNqN0ZVGgMlHaTB5Nf1MxpJjTPvTE358agVj0leib7CdQ98zxDG2s31q+eSLMYEdlIl ATj0Qj+vt0p50BECHwuzagOuKKdgQB/YEzfztfY1fWyfd6gQrXipR/J3IAd2OWr9qyzH 8KJw== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of wei.w.wang@intel.com designates 134.134.136.100 as permitted sender) smtp.mailfrom=wei.w.wang@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Gm-Message-State: AOUpUlHpsoKkjkBdx/Rz3JhRzhwYw4JXB6kTZqCCOU+B5eR7YES+dcmk Je62l8x8Cfzv42fyrwGKjex1Yd5PntXb1NDUtS6+5elkeN3wyYa4YzkS0OzagSeNIkjARqoeT1W IJWevjWtFClS+ef65WcDksJV0XulKtmYlBHheRHGxKHXVLNjo8JXh+BUnwhrWRUl6Yg== X-Received: by 2002:a17:902:864b:: with SMTP id y11-v6mr28319074plt.335.1534407556067; Thu, 16 Aug 2018 01:19:16 -0700 (PDT) X-Google-Smtp-Source: AA+uWPzuGfpwnYziVx0bQi2JcKeO8atsjgBXUg5LMeYSekfVkgvX6NBG+ygd+XDH7jSZo7rC1Av7 X-Received: by 2002:a17:902:864b:: with SMTP id y11-v6mr28319045plt.335.1534407555473; Thu, 16 Aug 2018 01:19:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534407555; cv=none; d=google.com; s=arc-20160816; b=aLnjme7fDIkxJrQrU5wZCWfioiS4fHTQOsxujRqQjF/mISU++xKLkTcfllLKKNA7hH +0GjuKP6ORrUik7WyMm/5J/G7tpyGbRQSl2lIzpylZvY4qCDDljIfVaZXVVV97+mvfUA YP5CyMDMImsqT92DM58U7XcqIe4kZCyW4T/f3kIGxGCW3gp8eJ1acpSkkFlK+tqalAdv Jp9fP2v42pFFr61ogHnTRf3aRg88a77fZdL4dP5JQ5Nv3KeSHrk8ZP7HILmXKuFg3TWG mvc9abqFN+R0GEhW0nw0On6Q2kTv7jbyTz61JHgd5qd/Bmq4t+j0pudoChYLUIO4VraL sTQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=OoRrqMvtQOkcAAQCWiTy1rmqNcHIz22kqzFyQNCQfU4=; b=xT8ObBmaGzoeDiOgcqEra/9sA5l1TYpYKIKkpq9OsnyZsRVcASodnS8ZfrSCfy/W+n UY4+GwRShUzuLDLKqHg52y0qNYZNJbx0vyESWk5dTAWcexQM5H12hOvR5rJ+w86nreI/ qbSOoZH32Gqge07CmfGcnhOV+wRfxk1f+taFUfjvpyT0Q3UrUkVZ6YpkpAogH8TbzzFx IewZXCDgA9yyNpfotPFnQ6SvUBM4vd/Znwxrddvk4cXqDwUWy9RAFOrFJCJLZte15TxA ANWM5fTuwwSf7kn7KTatWK+Z4v5DgRwCQjx18rREgQW+WsnSz0Nh7+O7byprnhS0kJ0a i+cg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of wei.w.wang@intel.com designates 134.134.136.100 as permitted sender) smtp.mailfrom=wei.w.wang@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from mga07.intel.com (mga07.intel.com. [134.134.136.100]) by mx.google.com with ESMTPS id t7-v6si21504807pgp.18.2018.08.16.01.19.15 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 16 Aug 2018 01:19:15 -0700 (PDT) Received-SPF: pass (google.com: domain of wei.w.wang@intel.com designates 134.134.136.100 as permitted sender) client-ip=134.134.136.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of wei.w.wang@intel.com designates 134.134.136.100 as permitted sender) smtp.mailfrom=wei.w.wang@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 Aug 2018 01:19:15 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,246,1531810800"; d="scan'208";a="83781738" Received: from devel-ww.sh.intel.com ([10.239.48.110]) by orsmga002.jf.intel.com with ESMTP; 16 Aug 2018 01:19:13 -0700 From: Wei Wang To: virtio-dev@lists.oasis-open.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-mm@kvack.org, mst@redhat.com, mhocko@kernel.org, akpm@linux-foundation.org, penguin-kernel@I-love.SAKURA.ne.jp Cc: wei.w.wang@intel.com Subject: [PATCH v4 1/3] virtio-balloon: remove BUG() in init_vqs Date: Thu, 16 Aug 2018 15:50:56 +0800 Message-Id: <1534405858-27085-2-git-send-email-wei.w.wang@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1534405858-27085-1-git-send-email-wei.w.wang@intel.com> References: <1534405858-27085-1-git-send-email-wei.w.wang@intel.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP It's a bit overkill to use BUG when failing to add an entry to the stats_vq in init_vqs. So remove it and just return the error to the caller to bail out nicely. Signed-off-by: Wei Wang Cc: Michael S. Tsirkin --- drivers/virtio/virtio_balloon.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c index 3988c09..8100e77 100644 --- a/drivers/virtio/virtio_balloon.c +++ b/drivers/virtio/virtio_balloon.c @@ -455,9 +455,13 @@ static int init_vqs(struct virtio_balloon *vb) num_stats = update_balloon_stats(vb); sg_init_one(&sg, vb->stats, sizeof(vb->stats[0]) * num_stats); - if (virtqueue_add_outbuf(vb->stats_vq, &sg, 1, vb, GFP_KERNEL) - < 0) - BUG(); + err = virtqueue_add_outbuf(vb->stats_vq, &sg, 1, vb, + GFP_KERNEL); + if (err) { + dev_warn(&vb->vdev->dev, "%s: add stat_vq failed\n", + __func__); + return err; + } virtqueue_kick(vb->stats_vq); } return 0; From patchwork Thu Aug 16 07:50:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wang, Wei W" X-Patchwork-Id: 10567145 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 14052913 for ; Thu, 16 Aug 2018 08:19:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 00FAE2A903 for ; Thu, 16 Aug 2018 08:19:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E80182A9F4; Thu, 16 Aug 2018 08:19:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6A61C2A903 for ; Thu, 16 Aug 2018 08:19:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 720A56B0008; Thu, 16 Aug 2018 04:19:19 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 6D3486B000A; Thu, 16 Aug 2018 04:19:19 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 523876B000C; Thu, 16 Aug 2018 04:19:19 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pf1-f200.google.com (mail-pf1-f200.google.com [209.85.210.200]) by kanga.kvack.org (Postfix) with ESMTP id 110006B0008 for ; Thu, 16 Aug 2018 04:19:19 -0400 (EDT) Received: by mail-pf1-f200.google.com with SMTP id s1-v6so1756999pfm.22 for ; Thu, 16 Aug 2018 01:19:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references; bh=x+seWkwiIxvEy5cmffWwaiNSR7aMSGBbO+X8pExKk58=; b=oQ5/bXWf/eUXtn/tCRp7r55YoWtGoYGJwihtMos6tGaWjYz2IIc0KC3WmflCa9za2J jv0PkoZMRaeBLUKd+HRYXrygTsSGgw06l8ssh/Ry75Jj/TvlaQQ56d2cZqdRn+/VpkQG oAYuBiLz/1AHwXZgrEV+hn/c5DUeVymVcHJB/z/2W7Dr4x5LVeI4HPDxWTEJ9uygOBym xNhHkuM3zWTBuu4c6/mUSMvw/eUd88WPea05Qv61AofDOwREU6WsCDIgBk6/2WfkkAca 0mxCpB11wf7G3fePqH0zkX+3cGeD96+lR/bqid3e3nac7baBXNEn1wmozt+BYmURRnY8 wRLw== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of wei.w.wang@intel.com designates 134.134.136.100 as permitted sender) smtp.mailfrom=wei.w.wang@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Gm-Message-State: AOUpUlFqTkc37iBL9vKJlb794Odpj6xjPA0XFhY+WKzwmCJLb5Xcz8Hp +9EeyVWZvzYkNUqkskKeuJHBBkmkzKBomn7bFMj3Nk9pSBGJD1kIUHS0HX8X2i+asUjtA+ymxXp a6feIr4rk0mVf3URHev5U/8mSobj7GpALxJ5KcdTnxGIABUlaoLs5QxsttkysV13D7w== X-Received: by 2002:aa7:86d7:: with SMTP id h23-v6mr31250179pfo.132.1534407558662; Thu, 16 Aug 2018 01:19:18 -0700 (PDT) X-Google-Smtp-Source: AA+uWPzsehyGGfwDMhfNgnI57Ybnhk5HY5G/6dRKJgE/WNxbv8TVJdLm98NXXADbv34ELJJtPkTu X-Received: by 2002:aa7:86d7:: with SMTP id h23-v6mr31250122pfo.132.1534407557532; Thu, 16 Aug 2018 01:19:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534407557; cv=none; d=google.com; s=arc-20160816; b=CsxxMJsxoRL5IKGCaqW90+r1QDOvzlBXQ7iFgDrr9AFCvUAJzeLr49v3RvVD1CfoNe ld6GKBimSXLlSNu5MJhBXlib6mJu32Mnjs1i7l9GhJQNlRWC/Hja/tn1+CrEI910jvz2 zxoUDIaT7E6y4oNIN6GVY6V6oRJwlu5ugoMl6jI03fK5VP0BGV06n90pqBsEcuwLLU9A J2RXwkbnrIteAeqGezNqc9TS4WseshKGnEll9bXZxkbFm8bZdYVB6eBu17EESH4JRoGl 9ilkFGf3lHtuZct8SHx+KU6Z6fUneeQcJ5pySl+bqW/uPrtioPbKCATkhnHESyFOhg5O CNZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=x+seWkwiIxvEy5cmffWwaiNSR7aMSGBbO+X8pExKk58=; b=xeM2OCkLUDsmWbOYltWA39H71+oPAfTbUIRgvWFrGXGFSJbCZ3ETKaKrFKaSVWT1Sx kvL6pcQsF7ifUvUT02gUR4Dg/Gebqqn4iaBxuSae7SVsKQ6+td/cq1yM+ZCtKZZQyP1E zZXheWYC9T0+wBpu/2cfnMwIZBXfcM1w6Kw+g77dbi46h5mGGd/DdSjAEP7TOJFKqLHx 8IR6se0adO866NBkCk6s6x+wZdKqSnLvQ/MTXSKOKpHzcfxEV6kY1JxGyqjVelzChNKG DhpmFZBSQxeAt5gQ111uEuQ9+O+wUPtIOwy+sABAoIUvkj9spbzcmBdszN9/qdyC5tWT 5rSw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of wei.w.wang@intel.com designates 134.134.136.100 as permitted sender) smtp.mailfrom=wei.w.wang@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from mga07.intel.com (mga07.intel.com. [134.134.136.100]) by mx.google.com with ESMTPS id t7-v6si21504807pgp.18.2018.08.16.01.19.17 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 16 Aug 2018 01:19:17 -0700 (PDT) Received-SPF: pass (google.com: domain of wei.w.wang@intel.com designates 134.134.136.100 as permitted sender) client-ip=134.134.136.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of wei.w.wang@intel.com designates 134.134.136.100 as permitted sender) smtp.mailfrom=wei.w.wang@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 Aug 2018 01:19:17 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,246,1531810800"; d="scan'208";a="83781743" Received: from devel-ww.sh.intel.com ([10.239.48.110]) by orsmga002.jf.intel.com with ESMTP; 16 Aug 2018 01:19:15 -0700 From: Wei Wang To: virtio-dev@lists.oasis-open.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-mm@kvack.org, mst@redhat.com, mhocko@kernel.org, akpm@linux-foundation.org, penguin-kernel@I-love.SAKURA.ne.jp Cc: wei.w.wang@intel.com Subject: [PATCH v4 2/3] virtio-balloon: kzalloc the vb struct Date: Thu, 16 Aug 2018 15:50:57 +0800 Message-Id: <1534405858-27085-3-git-send-email-wei.w.wang@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1534405858-27085-1-git-send-email-wei.w.wang@intel.com> References: <1534405858-27085-1-git-send-email-wei.w.wang@intel.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000001, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Zero all the vb fields at alloaction, so that we don't need to zero-initialize each field one by one later. Signed-off-by: Wei Wang Cc: Michael S. Tsirkin Cc: Tetsuo Handa --- drivers/virtio/virtio_balloon.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c index 8100e77..d97d73c 100644 --- a/drivers/virtio/virtio_balloon.c +++ b/drivers/virtio/virtio_balloon.c @@ -561,7 +561,7 @@ static int virtballoon_probe(struct virtio_device *vdev) return -EINVAL; } - vdev->priv = vb = kmalloc(sizeof(*vb), GFP_KERNEL); + vdev->priv = vb = kzalloc(sizeof(*vb), GFP_KERNEL); if (!vb) { err = -ENOMEM; goto out; @@ -570,8 +570,6 @@ static int virtballoon_probe(struct virtio_device *vdev) INIT_WORK(&vb->update_balloon_stats_work, update_balloon_stats_func); INIT_WORK(&vb->update_balloon_size_work, update_balloon_size_func); spin_lock_init(&vb->stop_update_lock); - vb->stop_update = false; - vb->num_pages = 0; mutex_init(&vb->balloon_lock); init_waitqueue_head(&vb->acked); vb->vdev = vdev; @@ -602,7 +600,6 @@ static int virtballoon_probe(struct virtio_device *vdev) err = PTR_ERR(vb->vb_dev_info.inode); kern_unmount(balloon_mnt); unregister_oom_notifier(&vb->nb); - vb->vb_dev_info.inode = NULL; goto out_del_vqs; } vb->vb_dev_info.inode->i_mapping->a_ops = &balloon_aops; From patchwork Thu Aug 16 07:50:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wang, Wei W" X-Patchwork-Id: 10567147 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 583635A4 for ; Thu, 16 Aug 2018 08:19:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 43A372A903 for ; Thu, 16 Aug 2018 08:19:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 377FA2A9F4; Thu, 16 Aug 2018 08:19:25 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7E71F2A903 for ; Thu, 16 Aug 2018 08:19:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CA33D6B000C; Thu, 16 Aug 2018 04:19:21 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id C031C6B0010; Thu, 16 Aug 2018 04:19:21 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B15506B0266; Thu, 16 Aug 2018 04:19:21 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by kanga.kvack.org (Postfix) with ESMTP id 7158D6B000C for ; Thu, 16 Aug 2018 04:19:21 -0400 (EDT) Received: by mail-pg1-f199.google.com with SMTP id m4-v6so1731271pgq.19 for ; Thu, 16 Aug 2018 01:19:21 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-original-authentication-results:x-gm-message-state:from:to:cc :subject:date:message-id:in-reply-to:references; bh=J/RMIXBnTdBMKOSkr2dJNfl3qpB4CSf1SAzJAWweH0Y=; b=BNYqeWPh2EPaE2MB8cWzUhWqUAV4yvN4vxeg5w6IGJYvmGsEmkt6H9KJpGii8RTiYp HpsakLvzMUlbkUWk0oiqMLLSxpRAmJobsmQsc9JwoslV6o1tp0a8hJUsUGdQZCZKjh/p DRW8VUnPhJ1pSnvrNg8pFt/oBlRs9GCtlA+LiEMEVKsm9c+swW8sZTVt0pJPJN5jtRoi 2p1NhU3Q0Bs26prkS9zpi/Sg+uQP8SP1efruLmpaOiSDBQbnvgy+33UvOTnxSwiMtT0Q BIgFQPKHj3FQRsJjnrNBk1qbrK+Ia1os1qhAQf/FQl1b71iX+9YPL6cSmYOJKpVYxc+r CE3g== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of wei.w.wang@intel.com designates 134.134.136.100 as permitted sender) smtp.mailfrom=wei.w.wang@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Gm-Message-State: AOUpUlE10JnTNfrRohvnqs/OPsuBbivNwzeybTitgVSJRBbNhtEVZiWr idwGJDZTPwpxRuoDgRD+0nPbffkbhOutRlZJ4aouCXkLF4kXG8H2xS1PMRAfuUp4JVCjIP3+UEt y97eU7rXMrVsajvZMjsKzf/TTx22RouB3DTuX5pdc+vtdVu8zx4kmUXkeqrt61Fo3vw== X-Received: by 2002:a62:d1b:: with SMTP id v27-v6mr31488733pfi.87.1534407561103; Thu, 16 Aug 2018 01:19:21 -0700 (PDT) X-Google-Smtp-Source: AA+uWPwaN3xmrpHSdyc4J25ZZukkX6n0GeTwlCb4gHtFAKRfHl6+MdXZLHZuLM6WeuGytxgyv417 X-Received: by 2002:a62:d1b:: with SMTP id v27-v6mr31488674pfi.87.1534407559835; Thu, 16 Aug 2018 01:19:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534407559; cv=none; d=google.com; s=arc-20160816; b=eA4fv5i7c6LUroS06Uq69KX2tBc/NClEmbgYPDnpO6Ri7OfN/Q7Nm/++QaKhzmUw3N NPfR5zuYsF4paa5tcWh92GHrL6YXHROb424plsLTO8iGvrieQeQWc4Z/n6ACAVJCNUXK VQNrbD1PlFTZPOad13RgJK+ggBHYkqe7aFlMXv16NqF6CCSBf7nrb9BvlUhLwoF/6eps p1huodFBizlJJ8zUwwvPMCe1ZHpTZYP1cifVegeJzu+/cxx44KHr0h2HTK26K0bzGvXI x2l8LKy9LITPRGFYuyWW8zcGqZW7Iu14f4iQvCCIaheIGgK74TnwBRMGgWz39kgLWmhY gCNA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=J/RMIXBnTdBMKOSkr2dJNfl3qpB4CSf1SAzJAWweH0Y=; b=lBz/fKsmu1h1pWIv3AXDbRmndCIu2Rx/XbtBcowsu8p/evsVQlr0tVteqe+m/cBa5A xZiNZ+hpBjyZOAalKob69GStmm98GEI47Sc+5GQWO/j7SaAy0KcDTF8sNEJRwQY9rIMA 3it+Ami2mDPaYxtP8NNOlgksl9E6QA1iqjKPwStlx42e8i2vcLa0gH7JpboxDxZKB00I YHUUsMsgRdGJfChrEbiRH9fW/eAeThCiRtMaOgQAFKc6a4nfp9/ZWXKY7Pz6ZoNY7WDR 2kvQq3gYVHvyuZqZTfU2S7T7vkrsHC2Sicfz0CKkkuYSbs3uuWPoPkf8nO0+YkU7ySfz KprQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of wei.w.wang@intel.com designates 134.134.136.100 as permitted sender) smtp.mailfrom=wei.w.wang@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from mga07.intel.com (mga07.intel.com. [134.134.136.100]) by mx.google.com with ESMTPS id t7-v6si21504807pgp.18.2018.08.16.01.19.19 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 16 Aug 2018 01:19:19 -0700 (PDT) Received-SPF: pass (google.com: domain of wei.w.wang@intel.com designates 134.134.136.100 as permitted sender) client-ip=134.134.136.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of wei.w.wang@intel.com designates 134.134.136.100 as permitted sender) smtp.mailfrom=wei.w.wang@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 Aug 2018 01:19:19 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,246,1531810800"; d="scan'208";a="83781752" Received: from devel-ww.sh.intel.com ([10.239.48.110]) by orsmga002.jf.intel.com with ESMTP; 16 Aug 2018 01:19:17 -0700 From: Wei Wang To: virtio-dev@lists.oasis-open.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-mm@kvack.org, mst@redhat.com, mhocko@kernel.org, akpm@linux-foundation.org, penguin-kernel@I-love.SAKURA.ne.jp Cc: wei.w.wang@intel.com Subject: [PATCH v4 3/3] virtio_balloon: replace oom notifier with shrinker Date: Thu, 16 Aug 2018 15:50:58 +0800 Message-Id: <1534405858-27085-4-git-send-email-wei.w.wang@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1534405858-27085-1-git-send-email-wei.w.wang@intel.com> References: <1534405858-27085-1-git-send-email-wei.w.wang@intel.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP The OOM notifier is getting deprecated to use for the reasons: - As a callout from the oom context, it is too subtle and easy to generate bugs and corner cases which are hard to track; - It is called too late (after the reclaiming has been performed). Drivers with large amuont of reclaimable memory is expected to release them at an early stage of memory pressure; - The notifier callback isn't aware of oom contrains; Link: https://lkml.org/lkml/2018/7/12/314 This patch replaces the virtio-balloon oom notifier with a shrinker to release balloon pages on memory pressure. The balloon pages are given back to mm adaptively by returning the number of pages that the reclaimer is asking for (i.e. sc->nr_to_scan). Currently the max possible value of sc->nr_to_scan passed to the balloon shrinker is SHRINK_BATCH, which is 128. This is smaller than the limitation that only VIRTIO_BALLOON_ARRAY_PFNS_MAX (256) pages can be returned via one invocation of leak_balloon. But this patch still considers the case that SHRINK_BATCH or shrinker->batch could be changed to a value larger than VIRTIO_BALLOON_ARRAY_PFNS_MAX, which will need to do multiple invocations of leak_balloon. Historically, the feature VIRTIO_BALLOON_F_DEFLATE_ON_OOM has been used to release balloon pages on OOM. We continue to use this feature bit for the shrinker, so the shrinker is only registered when this feature bit has been negotiated with host. Signed-off-by: Wei Wang Cc: Michael S. Tsirkin Cc: Michal Hocko Cc: Andrew Morton Cc: Tetsuo Handa --- drivers/virtio/virtio_balloon.c | 110 +++++++++++++++++++++------------------- 1 file changed, 59 insertions(+), 51 deletions(-) diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c index d97d73c..d1c1f62 100644 --- a/drivers/virtio/virtio_balloon.c +++ b/drivers/virtio/virtio_balloon.c @@ -27,7 +27,6 @@ #include #include #include -#include #include #include #include @@ -40,13 +39,8 @@ */ #define VIRTIO_BALLOON_PAGES_PER_PAGE (unsigned)(PAGE_SIZE >> VIRTIO_BALLOON_PFN_SHIFT) #define VIRTIO_BALLOON_ARRAY_PFNS_MAX 256 -#define OOM_VBALLOON_DEFAULT_PAGES 256 #define VIRTBALLOON_OOM_NOTIFY_PRIORITY 80 -static int oom_pages = OOM_VBALLOON_DEFAULT_PAGES; -module_param(oom_pages, int, S_IRUSR | S_IWUSR); -MODULE_PARM_DESC(oom_pages, "pages to free on OOM"); - #ifdef CONFIG_BALLOON_COMPACTION static struct vfsmount *balloon_mnt; #endif @@ -86,8 +80,8 @@ struct virtio_balloon { /* Memory statistics */ struct virtio_balloon_stat stats[VIRTIO_BALLOON_S_NR]; - /* To register callback in oom notifier call chain */ - struct notifier_block nb; + /* To register a shrinker to shrink memory upon memory pressure */ + struct shrinker shrinker; }; static struct virtio_device_id id_table[] = { @@ -365,38 +359,6 @@ static void update_balloon_size(struct virtio_balloon *vb) &actual); } -/* - * virtballoon_oom_notify - release pages when system is under severe - * memory pressure (called from out_of_memory()) - * @self : notifier block struct - * @dummy: not used - * @parm : returned - number of freed pages - * - * The balancing of memory by use of the virtio balloon should not cause - * the termination of processes while there are pages in the balloon. - * If virtio balloon manages to release some memory, it will make the - * system return and retry the allocation that forced the OOM killer - * to run. - */ -static int virtballoon_oom_notify(struct notifier_block *self, - unsigned long dummy, void *parm) -{ - struct virtio_balloon *vb; - unsigned long *freed; - unsigned num_freed_pages; - - vb = container_of(self, struct virtio_balloon, nb); - if (!virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_DEFLATE_ON_OOM)) - return NOTIFY_OK; - - freed = parm; - num_freed_pages = leak_balloon(vb, oom_pages); - update_balloon_size(vb); - *freed += num_freed_pages; - - return NOTIFY_OK; -} - static void update_balloon_stats_func(struct work_struct *work) { struct virtio_balloon *vb; @@ -550,6 +512,52 @@ static struct file_system_type balloon_fs = { #endif /* CONFIG_BALLOON_COMPACTION */ +static unsigned long virtio_balloon_shrinker_scan(struct shrinker *shrinker, + struct shrink_control *sc) +{ + unsigned long pages_to_free, pages_freed = 0; + struct virtio_balloon *vb = container_of(shrinker, + struct virtio_balloon, shrinker); + + pages_to_free = sc->nr_to_scan * VIRTIO_BALLOON_PAGES_PER_PAGE; + + /* + * One invocation of leak_balloon can deflate at most + * VIRTIO_BALLOON_ARRAY_PFNS_MAX balloon pages, so we call it + * multiple times to deflate pages till reaching pages_to_free. + */ + while (vb->num_pages && pages_to_free) { + pages_to_free -= pages_freed; + pages_freed += leak_balloon(vb, pages_to_free); + } + update_balloon_size(vb); + + return pages_freed / VIRTIO_BALLOON_PAGES_PER_PAGE; +} + +static unsigned long virtio_balloon_shrinker_count(struct shrinker *shrinker, + struct shrink_control *sc) +{ + struct virtio_balloon *vb = container_of(shrinker, + struct virtio_balloon, shrinker); + + return vb->num_pages / VIRTIO_BALLOON_PAGES_PER_PAGE; +} + +static void virtio_balloon_unregister_shrinker(struct virtio_balloon *vb) +{ + unregister_shrinker(&vb->shrinker); +} + +static int virtio_balloon_register_shrinker(struct virtio_balloon *vb) +{ + vb->shrinker.scan_objects = virtio_balloon_shrinker_scan; + vb->shrinker.count_objects = virtio_balloon_shrinker_count; + vb->shrinker.seeks = DEFAULT_SEEKS; + + return register_shrinker(&vb->shrinker); +} + static int virtballoon_probe(struct virtio_device *vdev) { struct virtio_balloon *vb; @@ -580,17 +588,10 @@ static int virtballoon_probe(struct virtio_device *vdev) if (err) goto out_free_vb; - vb->nb.notifier_call = virtballoon_oom_notify; - vb->nb.priority = VIRTBALLOON_OOM_NOTIFY_PRIORITY; - err = register_oom_notifier(&vb->nb); - if (err < 0) - goto out_del_vqs; - #ifdef CONFIG_BALLOON_COMPACTION balloon_mnt = kern_mount(&balloon_fs); if (IS_ERR(balloon_mnt)) { err = PTR_ERR(balloon_mnt); - unregister_oom_notifier(&vb->nb); goto out_del_vqs; } @@ -599,12 +600,19 @@ static int virtballoon_probe(struct virtio_device *vdev) if (IS_ERR(vb->vb_dev_info.inode)) { err = PTR_ERR(vb->vb_dev_info.inode); kern_unmount(balloon_mnt); - unregister_oom_notifier(&vb->nb); goto out_del_vqs; } vb->vb_dev_info.inode->i_mapping->a_ops = &balloon_aops; #endif - + /* + * We continue to use VIRTIO_BALLOON_F_DEFLATE_ON_OOM to decide if a + * shrinker needs to be registered to relieve memory pressure. + */ + if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_DEFLATE_ON_OOM)) { + err = virtio_balloon_register_shrinker(vb); + if (err) + goto out_del_vqs; + } virtio_device_ready(vdev); if (towards_target(vb)) @@ -636,8 +644,8 @@ static void virtballoon_remove(struct virtio_device *vdev) { struct virtio_balloon *vb = vdev->priv; - unregister_oom_notifier(&vb->nb); - + if (virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_DEFLATE_ON_OOM)) + virtio_balloon_unregister_shrinker(vb); spin_lock_irq(&vb->stop_update_lock); vb->stop_update = true; spin_unlock_irq(&vb->stop_update_lock);