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 X-Spam-Level: X-Spam-Status: No, score=-3.5 required=3.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CFDEAC388F9 for ; Sun, 8 Nov 2020 03:56:53 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 0BD0F20760 for ; Sun, 8 Nov 2020 03:56:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0BD0F20760 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=sina.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 1C2846B0036; Sat, 7 Nov 2020 22:56:52 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 1727C6B005D; Sat, 7 Nov 2020 22:56:52 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 088666B0068; Sat, 7 Nov 2020 22:56:52 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0097.hostedemail.com [216.40.44.97]) by kanga.kvack.org (Postfix) with ESMTP id D30C46B0036 for ; Sat, 7 Nov 2020 22:56:51 -0500 (EST) Received: from smtpin14.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id 60CBF362B for ; Sun, 8 Nov 2020 03:56:51 +0000 (UTC) X-FDA: 77459889822.14.news95_5314b6a272e0 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin14.hostedemail.com (Postfix) with ESMTP id 3DB2118229818 for ; Sun, 8 Nov 2020 03:56:51 +0000 (UTC) X-HE-Tag: news95_5314b6a272e0 X-Filterd-Recvd-Size: 3723 Received: from r3-22.sinamail.sina.com.cn (r3-22.sinamail.sina.com.cn [202.108.3.22]) by imf33.hostedemail.com (Postfix) with SMTP for ; Sun, 8 Nov 2020 03:56:48 +0000 (UTC) Received: from unknown (HELO localhost.localdomain)([111.194.183.129]) by sina.com with ESMTP id 5FA76C780002F909; Sun, 8 Nov 2020 11:56:43 +0800 (CST) X-Sender: hdanton@sina.com X-Auth-ID: hdanton@sina.com X-SMAIL-MID: 106056628758 From: Hillf Danton To: Jarkko Sakkinen Cc: x86@kernel.org, linux-sgx@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Jethro Beekman , Jordan Hand , Nathaniel McCallum , Chunyang Hui , Seth Moore , Sean Christopherson , akpm@linux-foundation.org, andriy.shevchenko@linux.intel.com, yaozhangx@google.com, mikko.ylinen@intel.com Subject: Re: [PATCH v40 21/24] x86/sgx: Add a page reclaimer Date: Sun, 8 Nov 2020 11:56:30 +0800 Message-Id: <20201108035630.11540-1-hdanton@sina.com> In-Reply-To: <20201104145430.300542-22-jarkko.sakkinen@linux.intel.com> References: <20201104145430.300542-1-jarkko.sakkinen@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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: On Wed, 4 Nov 2020 16:54:27 Jarkko Sakkinen wrote: [...] > +/** > + * sgx_alloc_epc_page() - Allocate an EPC page > + * @owner: the owner of the EPC page > + * @reclaim: reclaim pages if necessary > + * > + * Iterate through EPC sections and borrow a free EPC page to the call= er. When a > + * page is no longer needed it must be released with sgx_free_epc_page= (). If > + * @reclaim is set to true, directly reclaim pages when we are out of = pages. No > + * mm's can be locked when @reclaim is set to true. > + * > + * Finally, wake up ksgxswapd when the number of pages goes below the = watermark > + * before returning back to the caller. > + * > + * Return: > + * an EPC page, > + * -errno on error > + */ > +struct sgx_epc_page *sgx_alloc_epc_page(void *owner, bool reclaim) > +{ > + struct sgx_epc_page *entry; Nit: s/entry/epc_page/ > + > + for ( ; ; ) { > + entry =3D __sgx_alloc_epc_page(); > + if (!IS_ERR(entry)) { > + entry->owner =3D owner; > + break; > + } > + > + if (list_empty(&sgx_active_page_list)) > + return ERR_PTR(-ENOMEM); > + > + if (!reclaim) { > + entry =3D ERR_PTR(-EBUSY); > + break; > + } > + > + if (signal_pending(current)) { > + entry =3D ERR_PTR(-ERESTARTSYS); > + break; > + } > + > + sgx_reclaim_pages(); This is the direct reclaim mode with ksgxswapd that works in the background ignored in the entire for loop. But we can go with it in parallel, see below, if it tries as hard as it can to maitain the watermark in which allocators may have no interest. > + schedule(); To cut allocator's latency use cond_resched(); > + } > + > + if (sgx_should_reclaim(SGX_NR_LOW_PAGES)) > + wake_up(&ksgxswapd_waitq); Nit: s/ksgxswapd/sgxd/ as it seems to have nothing to do with swap, given sgx itself is clear and good enough. > + > + return entry; > +} struct sgx_epc_page *sgx_alloc_epc_page(void *owner, bool reclaim) { struct sgx_epc_page *epc_page; for (;;) { epc_page =3D __sgx_alloc_epc_page(); if (!IS_ERR(epc_page)) { epc_page->owner =3D owner; return epc_page; } if (signal_pending(current)) return ERR_PTR(-ERESTARTSYS); if (list_empty(&sgx_active_page_list) || !reclaim) return ERR_PTR(-ENOMEM); wake_up(&ksgxswapd_waitq); cond_resched(); } return ERR_PTR(-ENOMEM); }