From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5A3DCC3DA49 for ; Thu, 25 Jul 2024 07:00:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CF5736B0085; Thu, 25 Jul 2024 03:00:16 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CA5476B0089; Thu, 25 Jul 2024 03:00:16 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B6E5A6B008C; Thu, 25 Jul 2024 03:00:16 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 97F7E6B0085 for ; Thu, 25 Jul 2024 03:00:16 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 4E50B80E2E for ; Thu, 25 Jul 2024 07:00:16 +0000 (UTC) X-FDA: 82377376032.13.93429D7 Received: from mail-vk1-f171.google.com (mail-vk1-f171.google.com [209.85.221.171]) by imf22.hostedemail.com (Postfix) with ESMTP id 7BCD9C0003 for ; Thu, 25 Jul 2024 07:00:14 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=knIaXiFE; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf22.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.221.171 as permitted sender) smtp.mailfrom=21cnbao@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1721890775; a=rsa-sha256; cv=none; b=O2fpDPPVAey3+YqF1zNhquqs6J73Wj+YrT0d/DQjJxFIpdcYd7gQ8gK9yPB79ow55g+ftq mNVndKv2uYCO4zAWPrs7Lbg2K5/AwxostpZCauekNo52xtSYeTnTsu+NhPw+PpcY8EQqxC uJHxFLENgTuik8Jb0U4PEJOGAIf3oEc= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=knIaXiFE; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf22.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.221.171 as permitted sender) smtp.mailfrom=21cnbao@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1721890775; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=qV/f4NBfUFd9uJAepvJzg2m9PwLZoTqyu3DOODQLyjc=; b=p+7rpwgdufzd821YMOh9tKd7uEawi6wbodj7K32p+gBJR5O62tBJt8HFu1vKrLq5lIQ1bk qGtZwE3JHjX6pQEjnEy2qQVbfvCzsJWbcfRzPy/0sC4iDUeSrY7hfACKBfa8hrmwhv+0Hw w2HR+T+ZM8XdSBQY0miN2+FPA6vD4zY= Received: by mail-vk1-f171.google.com with SMTP id 71dfb90a1353d-4f6b8b7d85bso235632e0c.1 for ; Thu, 25 Jul 2024 00:00:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1721890813; x=1722495613; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=qV/f4NBfUFd9uJAepvJzg2m9PwLZoTqyu3DOODQLyjc=; b=knIaXiFEstMR7BWCAfENqckKj3+Aq4FSWoovyu/SKp7vJxC4ra2pShnEUl5iF5nT5+ uLG5fINi/htmjdbI7w9Ef8rNmZz5zR9fiENH7RBrXkLJeRKfyTRXem4uUwpkjFEs4ukv 0u+ETlfjF4DEhYpaJBRkHMbHhr/XY0CA+GOjMvmTeZ8ymssLl5+vgr07HAgUbM46MnT1 fIsseC12gvcYzRY0xqAK7yxX7S4gGH0HALk2xs4QBUvCq314T50FjflT9eAQRFxRCRNx V2vVOCSA6EAFtuDA/8EdVD1J7hueNAwlOtuvRR8actlMfv+n0G5CC8k7cE8yBi0qKu1X JFhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721890813; x=1722495613; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qV/f4NBfUFd9uJAepvJzg2m9PwLZoTqyu3DOODQLyjc=; b=BXs3NsNWQZ1rlqNvsS3mhsA2gH5YTOCTTcwIP830bGjUKWV4aV+2kW6AufI5079rsN 6kvs6bn2HDcvk3Mao6F6oVhsr5aqqwHrXcSgUlSYlg7Kv4skqQCGPTqacFcfalQWA3Tf 8eTFE/Zv2LYrz6aQrqXVsY942fcrM9U3K2QDFdTaNCgG6cJPD2zwKglH4GGIasS2HGt6 LcufaJxqVKFtmvln5n+fIlHjAX9cLKFOcym7t+NQ4b65F4DoIqvAuMwBt5DOAi9sxEUj jqhV1HmFjL5mTYRMp3KF6C0B8ako4CZrZB6o+Vbqc67OJG/cGBjNZIjo9sbifICb701T Nl5A== X-Forwarded-Encrypted: i=1; AJvYcCXMkx6MEgGymiL59Y4W3rmbZ7R83nNoeW/oBK4lb/RxdETuMB4IWg9SAW6iJDj+UACnD3Pu/Zv9/5ToEMlwXYzOzcQ= X-Gm-Message-State: AOJu0YwMFpqeUnUbbEb83YFUWIFepTVp4klDC897cAycLP4uNWY7pD1+ CJBRUnXIeXLfPNm/v+tXNoN7AW6FIZnS3uBeTQaNjpmcXMOCQwe22w2TH/1ArSIJjk/DWZmCmst R/GWVfU5rYXICUymJGZ4YlTQs5hE= X-Google-Smtp-Source: AGHT+IHumo2GqIIeqiUctsxeloUYAcJ7t/cwEkcaWuL9SPuIEGK/BZu/XVYwb9DQnLhbg8wlEuUrr0yr35mHWTu9sMU= X-Received: by 2002:a05:6122:1311:b0:4f5:261a:bdc7 with SMTP id 71dfb90a1353d-4f6ca2c499emr1040648e0c.4.1721890813466; Thu, 25 Jul 2024 00:00:13 -0700 (PDT) MIME-Version: 1.0 References: <20240724085544.299090-1-21cnbao@gmail.com> <20240724085544.299090-2-21cnbao@gmail.com> In-Reply-To: From: Barry Song <21cnbao@gmail.com> Date: Thu, 25 Jul 2024 19:00:02 +1200 Message-ID: Subject: Re: [PATCH RFC 1/5] vpda: try to fix the potential crash due to misusing __GFP_NOFAIL To: Michal Hocko Cc: akpm@linux-foundation.org, linux-mm@kvack.org, 42.hyeyoo@gmail.com, cl@linux.com, hch@infradead.org, iamjoonsoo.kim@lge.com, lstoakes@gmail.com, penberg@kernel.org, rientjes@google.com, roman.gushchin@linux.dev, urezki@gmail.com, v-songbaohua@oppo.com, vbabka@suse.cz, virtualization@lists.linux.dev, hailong.liu@oppo.com, torvalds@linux-foundation.org, "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?Q?Eugenio_P=C3=A9rez?= , Maxime Coquelin Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 7BCD9C0003 X-Stat-Signature: uge44p131gk9rrstfjpm9rxrk1m56f8f X-Rspam-User: X-HE-Tag: 1721890814-864453 X-HE-Meta: U2FsdGVkX18crRiq5KOw1S80bMfGlZu/uhoVG1j3xiIuPx6DGTzN9DtayvYc0DZlrIKDqPuQV14DeVasaByLLaqIcRHuiZ/lzSamOzpEODXMo04lw+p2+zH7s4eW+wCq1xcA+Gf648Hr1+jdExKuZ/XElX97UZJzS2CfhyMVhL7dFJbjAl09Wo2O6kp7OiZDxwCPMiAH3Z8JDcRxtlkb8VIFUxCk17XMEh55HmP97jvfXSrZL7JlDmU4aNO2vODTkJZkP8zr96A48npKMRNvcJlA0Z5GidcCmJHO05VfHT/O0zf7vt/c37vm19ODPZGv47fCtAivyWLMOeU5VEo7psvzBtEwHx/chgeftCBfeLYH5XQ5I+QcFr3OgMrr+dDSwHMW2YZjKjyhJU4JPj/bl/R3bKnVQ2piKwgKz+/o6tlJIkK1z8PKBCsil8n1lIE1wkx06OpSOVIxwllazPxQY/MC7Xbo66IEknqTS7pHmXxx6jsEnQwirBpyk1MxdNbJhnaf7kn/+2zLsibfEK2BCvDqzqbfDsQbHu7FSfWrpPic0KwC4VYC7n6bLnXEYHv1CGDLz9pUNuguqPzZmazDZi0xRFn5KM1YDB8hQSgaV84ydLzawgTZ8faTJKBcOWqW6R9fJvV1Hb2dvNgvtkgxESxEYy+QASyEM9aA5XpQQr8K7egbIa9jyMjAhVCAvMujhIWdr6kDIVX9If/5OucoLxn2mhiOq5VjggYmq6FEYcaT+mJxs71PQ9vzV+YuiFoQchTxh8Vc+IKAzv+wGLG8yWGVMYAH1u+IEvAtpnT3+7BfI2XjmKt2GCmnLXRWyeQwclxYwmIsgHtB6bxe+xTn28HOsVfFYgbGX8FR5ObGrMwH5YkxT3ut6PoVqXQSKNWCraxscnhDILOe4Ty7xIsRl4tQPetPJbwzRL4svdfrUtOtS2YY8JM8/KAXbk7NdIlONpDn8OZO/PLbAvI43xe ybGQ6ZG+ 25SMn5ibOj1i/oL/EzA0ouqAWMWz5KRVcZsYaJ1f3qylqMq7itdAmXw8exc2TUoUDipZf7EJPW72rvD6PQ2T4V2QQTIjcae9HJ3cHU8kWDpEzSxroKmMACE9G2D7w+FnoLxCqWPFoSu+4vxb5BNvZoxUQQkhjAK+hhpXUhxdc7xy5kq/z7LglzdhB6zb7nsQTixxAH2hVgfxjKXuIdmUG3WbLgRYRqcMdE54fwXX88qxKb7Qiqie4lK3tsud4NY0j7bejEDFpknjxQ35Hpg4noPHmEe9b+fp958PUdTb5ciflk56o3Wzwr0pEpqQjGuxCcqU82It6SWUQtSIkjlqY2zwRyesqmZY9Cjn2y55SEQ/ykX8WV8UN7JCyL91KzFBCzYzgTiHGadsxG/cNIv0kgPQtIRA9OtrXMncRfC1cQwZyOxhG5V0uwewmN9KR+jvhO5wK7VR6EwB8Ee9d9xg20S6MNijHV3YpxiOw5UXEB6BKRVTqHY8neyPgRlwutRY8Ey9d 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: List-Subscribe: List-Unsubscribe: On Thu, Jul 25, 2024 at 6:08=E2=80=AFPM Michal Hocko wrot= e: > > On Thu 25-07-24 10:50:45, Barry Song wrote: > > On Thu, Jul 25, 2024 at 12:27=E2=80=AFAM Michal Hocko = wrote: > > > > > > On Wed 24-07-24 20:55:40, Barry Song wrote: > [...] > > > > diff --git a/drivers/vdpa/vdpa_user/iova_domain.c b/drivers/vdpa/vd= pa_user/iova_domain.c > > > > index 791d38d6284c..eff700e5f7a2 100644 > > > > --- a/drivers/vdpa/vdpa_user/iova_domain.c > > > > +++ b/drivers/vdpa/vdpa_user/iova_domain.c > > > > @@ -287,28 +287,44 @@ void vduse_domain_remove_user_bounce_pages(st= ruct vduse_iova_domain *domain) > > > > { > > > > struct vduse_bounce_map *map; > > > > unsigned long i, count; > > > > + struct page **pages =3D NULL; > > > > > > > > write_lock(&domain->bounce_lock); > > > > if (!domain->user_bounce_pages) > > > > goto out; > > > > - > > > > count =3D domain->bounce_size >> PAGE_SHIFT; > > > > + write_unlock(&domain->bounce_lock); > > > > + > > > > + pages =3D kmalloc_array(count, sizeof(*pages), GFP_KERNEL | _= _GFP_NOFAIL); > > > > + for (i =3D 0; i < count; i++) > > > > + pages[i] =3D alloc_page(GFP_KERNEL | __GFP_NOFAIL); > > > > > > AFAICS vduse_domain_release calls this function with > > > spin_lock(&domain->iotlb_lock) so dropping &domain->bounce_lock is no= t > > > sufficient. > > > > yes. this is true: > > > > static int vduse_domain_release(struct inode *inode, struct file *file) > > { > > struct vduse_iova_domain *domain =3D file->private_data; > > > > spin_lock(&domain->iotlb_lock); > > vduse_iotlb_del_range(domain, 0, ULLONG_MAX); > > vduse_domain_remove_user_bounce_pages(domain); > > vduse_domain_free_kernel_bounce_pages(domain); > > spin_unlock(&domain->iotlb_lock); > > put_iova_domain(&domain->stream_iovad); > > put_iova_domain(&domain->consistent_iovad); > > vhost_iotlb_free(domain->iotlb); > > vfree(domain->bounce_maps); > > kfree(domain); > > > > return 0; > > } > > > > This is quite a pain. I admit I don't have knowledge of this driver, an= d I don't > > think it's safe to release two locks and then reacquire them. The situa= tion is > > rather complex. Therefore, I would prefer if the VDPA maintainers could > > take the lead in implementing a proper fix. > > Would it be possible to move all that work to a deferred context? My understanding is that we need to be aware of both the iotlb_lock and bounce_lock to implement the correct changes. As long as we still need to acquire these two locks in a deferred context, there doesn't seem to be any difference. I can do the memory pre-allocation before spin_lock(&domain->iotlb_lock), but I have no knowledge whether the "count" will change after I make the preallocation. diff --git a/drivers/vdpa/vdpa_user/iova_domain.c b/drivers/vdpa/vdpa_user/iova_domain.c index 791d38d6284c..7ec87ef33d42 100644 --- a/drivers/vdpa/vdpa_user/iova_domain.c +++ b/drivers/vdpa/vdpa_user/iova_domain.c @@ -544,9 +544,12 @@ static int vduse_domain_release(struct inode *inode, struct file *file) { struct vduse_iova_domain *domain =3D file->private_data; + struct page **pages; + spin_lock(&domain->iotlb_lock); maybe also + bounce_lock? + count =3D domain->bounce_size >> PAGE_SHIFT; + spin_unlock(&domain->iotlb_lock); + + preallocate_count_pages(pages, count); + .... spin_lock(&domain->iotlb_lock); vduse_iotlb_del_range(domain, 0, ULLONG_MAX); - vduse_domain_remove_user_bounce_pages(domain); + vduse_domain_remove_user_bounce_pages(domain, pages); vduse_domain_free_kernel_bounce_pages(domain); spin_unlock(&domain->iotlb_lock); put_iova_domain(&domain->stream_iovad); > -- > Michal Hocko > SUSE Labs