Received: by 2002:a05:6a10:6744:0:0:0:0 with SMTP id w4csp3979555pxu; Mon, 12 Oct 2020 06:32:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx3F4ZO6+xsCSdRSwoiYlb3MB/d9hFl9PeFQw+gQ0l6rsDKMxTRBBAsHZV3TGEEKvlzdu0s X-Received: by 2002:aa7:c948:: with SMTP id h8mr12385681edt.171.1602509539585; Mon, 12 Oct 2020 06:32:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1602509539; cv=none; d=google.com; s=arc-20160816; b=iAI636DUj6IJPYJM6uvUNfSdPPYMrEJxW8Gxdgjx/V3XfJQ01mNZ54Ps/bh5YZLPtr BENWLCCYtjN/pIJ3en6GX9nXYzIxBi11fw4yp08KsX/9uHF/6B/GRjA4afh+DkiJ7hAU 8vT4ugWHbKQjk9xJsr9UVrI0aWPnEOXJDt1pkmA6VZkUt3SzLZc3TwPJvO7hZJ4cFgt9 m4CCJj3aouMZ5m4U/LDL604yxwg2n9vN3J74R18yGKdNO94SxjcNYQgSoSyfymqa+ysQ /roGXKDTvnDhM62EeBybA/mjnblLRvl6bJEzfh4FRD/ID/ll+CYYIuOyAIyk34ZuH1xV a/Jw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=GRNzaKNhWih50ca6Rdrr2BHB9XOrtl2sT3OFPr5P+gI=; b=G17koXCd16SPObLI3s3Q45VPCt/Y2biku8+baY45R0g3E4Fnpcwaa2UplU6HSNLYXr U8tBP/aJWnMQHjm+SWgrg4LuunK5pckfOZxmgXR5Zy8UrPHkWSeeYp0W4JujsttBZ898 rI9puT2B24tNdj3SMXreHA+5FVl8jwXeNj5Yz3/0AflXi5NROxskHvTwM1QpsFHTmFjt NRKTy54ye90YJ+o6I9I35f2El7eq7Sakt+0Q6+CqH9WdbSvlRhcJDZion9sOeE9xnlnI eiT2I96/9d7VHMErGMRC9mi8XrcMeXVmD0eRw2AJzTwOtNs5mbKX4BxykYT1AZ5x+y91 5tSQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=efyS3ioR; 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=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c8si8093443edl.252.2020.10.12.06.31.56; Mon, 12 Oct 2020 06:32:19 -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=@redhat.com header.s=mimecast20190719 header.b=efyS3ioR; 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=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727222AbgJLMzS (ORCPT + 99 others); Mon, 12 Oct 2020 08:55:18 -0400 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:37407 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726495AbgJLMzR (ORCPT ); Mon, 12 Oct 2020 08:55:17 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1602507316; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=GRNzaKNhWih50ca6Rdrr2BHB9XOrtl2sT3OFPr5P+gI=; b=efyS3ioR605bHEuAcofYR6OBRgnUioKz9oeC4/geGb9MvAXa1Nd58lp5djvwxeK3GIPNM+ xR21Ufn/Ea/AQOO74jLnn/IQ+JLIQW9XgrA45LkXfUI1jLOG3uGPap9Y7llytNG5/p+H7m SxZbyZYDybCtz3TJinhwOzwjQ3ptnuw= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-82-hypicrj3NCq7ZQK3pT2P4g-1; Mon, 12 Oct 2020 08:55:10 -0400 X-MC-Unique: hypicrj3NCq7ZQK3pT2P4g-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C1E3464145; Mon, 12 Oct 2020 12:55:08 +0000 (UTC) Received: from t480s.redhat.com (ovpn-113-251.ams2.redhat.com [10.36.113.251]) by smtp.corp.redhat.com (Postfix) with ESMTP id 784E460C07; Mon, 12 Oct 2020 12:54:58 +0000 (UTC) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, virtualization@lists.linux-foundation.org, Andrew Morton , "Michael S . Tsirkin" , David Hildenbrand , Jason Wang , Pankaj Gupta Subject: [PATCH v1 12/29] virtio-mem: factor out fake-offlining into virtio_mem_fake_offline() Date: Mon, 12 Oct 2020 14:53:06 +0200 Message-Id: <20201012125323.17509-13-david@redhat.com> In-Reply-To: <20201012125323.17509-1-david@redhat.com> References: <20201012125323.17509-1-david@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ... which now matches virtio_mem_fake_online(). We'll reuse this functionality soon. Cc: "Michael S. Tsirkin" Cc: Jason Wang Cc: Pankaj Gupta Signed-off-by: David Hildenbrand --- drivers/virtio/virtio_mem.c | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/drivers/virtio/virtio_mem.c b/drivers/virtio/virtio_mem.c index 00d1cfca4713..d132bc54ef57 100644 --- a/drivers/virtio/virtio_mem.c +++ b/drivers/virtio/virtio_mem.c @@ -832,6 +832,27 @@ static void virtio_mem_fake_online(unsigned long pfn, unsigned long nr_pages) } } +/* + * Try to allocate a range, marking pages fake-offline, effectively + * fake-offlining them. + */ +static int virtio_mem_fake_offline(unsigned long pfn, unsigned long nr_pages) +{ + int rc; + + rc = alloc_contig_range(pfn, pfn + nr_pages, MIGRATE_MOVABLE, + GFP_KERNEL); + if (rc == -ENOMEM) + /* whoops, out of memory */ + return rc; + if (rc) + return -EBUSY; + + virtio_mem_set_fake_offline(pfn, nr_pages, true); + adjust_managed_page_count(pfn_to_page(pfn), -nr_pages); + return 0; +} + static void virtio_mem_online_page_cb(struct page *page, unsigned int order) { const unsigned long addr = page_to_phys(page); @@ -1335,17 +1356,10 @@ static int virtio_mem_mb_unplug_sb_online(struct virtio_mem *vm, start_pfn = PFN_DOWN(virtio_mem_mb_id_to_phys(mb_id) + sb_id * vm->subblock_size); - rc = alloc_contig_range(start_pfn, start_pfn + nr_pages, - MIGRATE_MOVABLE, GFP_KERNEL); - if (rc == -ENOMEM) - /* whoops, out of memory */ - return rc; - if (rc) - return -EBUSY; - /* Mark it as fake-offline before unplugging it */ - virtio_mem_set_fake_offline(start_pfn, nr_pages, true); - adjust_managed_page_count(pfn_to_page(start_pfn), -nr_pages); + rc = virtio_mem_fake_offline(start_pfn, nr_pages); + if (rc) + return rc; /* Try to unplug the allocated memory */ rc = virtio_mem_mb_unplug_sb(vm, mb_id, sb_id, count); -- 2.26.2