From patchwork Thu Jul 5 06:50:13 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Williams X-Patchwork-Id: 10508283 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 7E46860116 for ; Thu, 5 Jul 2018 07:00:16 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6B6E028E01 for ; Thu, 5 Jul 2018 07:00:16 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5F2E728E66; Thu, 5 Jul 2018 07:00:16 +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=unavailable 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 DBE5428E01 for ; Thu, 5 Jul 2018 07:00:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2CEB26B027D; Thu, 5 Jul 2018 03:00:14 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 255B66B027E; Thu, 5 Jul 2018 03:00:14 -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 16C0A6B027F; Thu, 5 Jul 2018 03:00:14 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pl0-f69.google.com (mail-pl0-f69.google.com [209.85.160.69]) by kanga.kvack.org (Postfix) with ESMTP id CB1CD6B027D for ; Thu, 5 Jul 2018 03:00:13 -0400 (EDT) Received: by mail-pl0-f69.google.com with SMTP id 70-v6so1422782plc.1 for ; Thu, 05 Jul 2018 00:00:13 -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:subject:from :to:cc:date:message-id:in-reply-to:references:user-agent :mime-version:content-transfer-encoding; bh=B1zYGOdfM52oJ3dpwUbiA6dKKRxXPJCpr3P8OihlQN8=; b=t39uT189cMsahgiIWH4pnTDN4VFiduYMdpv6MenZU5i2uUxZa2sL4fxuuWEa5pqocR RLVVLOSA9vCO3p6Mv48QKWDJoMV8zlB7IJZDg75cRn2BisYBhFtsCQfLTk8tglIJNGPM MjO8pRZBAWA+huFpY+W573Q1MzWbo/0+V99wKVzDBJmkjxCp4y6S6/3B+6yXAy9M5Dkm v1O45WLXT0dwRwA17Bd5Nya8r1pbD5zMmsO0Befj6dyHkCbr6uk6dQOf7iozRkqqGvp6 ebzI8o73s9kjbQSx5mXQhj4GanBhkoOaL11hIhbmJVSJrpLnA+5xwFFJzLTS2FeYfbFD RSGA== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of dan.j.williams@intel.com designates 192.55.52.88 as permitted sender) smtp.mailfrom=dan.j.williams@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com X-Gm-Message-State: APt69E3LMF4yV1ocq2NX2RJKcH64xWoSD07Fwha+AotTqhRytBhK6muw EaQ6ojAOYCiExJA0RJhLNvYihxDHdR2xNVCOUDa0oGmmFotCNHZX0coPutS+74ZLDFBS9TaZ59z /m+tFdmyB25kWWTQDyXrYcI7WFrhLCFtcwEvZcmxwL4QDS5G+8aMosiWBEY0/U0h8+A== X-Received: by 2002:a63:4d06:: with SMTP id a6-v6mr4360580pgb.408.1530774013505; Thu, 05 Jul 2018 00:00:13 -0700 (PDT) X-Google-Smtp-Source: AAOMgpchJOYcbd2xMKPsDD7QyuRGwUkxkdJhgHyy7BLb0QQg0iKhgdExzOnd+Lyj5Ig+cBhl45u8 X-Received: by 2002:a63:4d06:: with SMTP id a6-v6mr4360433pgb.408.1530774011205; Thu, 05 Jul 2018 00:00:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530774011; cv=none; d=google.com; s=arc-20160816; b=F003dsK8UG2Un3uvpcY7CEys6CVmEr018TsGCckRc8XOSbvRAUoMvM+jl4JGV2NtB5 AF73AVnZowWnX8vTZqst+GhqxyId1lZNh3ZA2gA5jfALp1Tokfp6PJuqfItb4t/SddJw A2b336zhfW47WeVL5EoEcWmjsCw3NHTKW2nHNPnQaWvf3DHzjMqQttfsWM5eSkXDOBCR TQH+WP/EaIimtGqD8XbZS3v6ZFVLUmVhIJ26i4/TW8v8ndNbPRKFTzkHVXcN3NutBac0 qGGW4y3aXDaJlNxZjpW2168UzRXaab59CS72FVaEdLpr0yVLUMsih5Als2x5QWBLp/cJ PT8Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:user-agent:references :in-reply-to:message-id:date:cc:to:from:subject :arc-authentication-results; bh=B1zYGOdfM52oJ3dpwUbiA6dKKRxXPJCpr3P8OihlQN8=; b=q9VauIUKJQ/qj1wtuGG1nL0A1HMmCnJ72q63ZvQtf4yyU+CMtGq1byhtlbnmAE/PXm aI3b2wCQSltvqZ9YmUVAHHub5dSdqU7a4Um2V3L9Q2NRp9sf//+W7LCafdc00oUXA464 mUFbYImwPOCNRjVieLtW95KnO78RvQyWrLKiS0pXoKj24IJp9QDa1TA8yrIOdofxf2gh EQnuy3YaN/Mry1syp7TpdDI+dd56aOnm9W+PztkUYt345i2G/rVlglkf8sWgbt7NmAsX BE8eR3xnTSvbWFUPJUQCzUk51W5pn3uVl+X4Ybm+ch6U/OJ0sFbveZPSEG9Pxxpee7JI H7jw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of dan.j.williams@intel.com designates 192.55.52.88 as permitted sender) smtp.mailfrom=dan.j.williams@intel.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from mga01.intel.com (mga01.intel.com. [192.55.52.88]) by mx.google.com with ESMTPS id i66-v6si5728819pfb.149.2018.07.05.00.00.10 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 05 Jul 2018 00:00:11 -0700 (PDT) Received-SPF: pass (google.com: domain of dan.j.williams@intel.com designates 192.55.52.88 as permitted sender) client-ip=192.55.52.88; Authentication-Results: mx.google.com; spf=pass (google.com: domain of dan.j.williams@intel.com designates 192.55.52.88 as permitted sender) smtp.mailfrom=dan.j.williams@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 orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Jul 2018 00:00:10 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,311,1526367600"; d="scan'208";a="70215986" Received: from dwillia2-desk3.jf.intel.com (HELO dwillia2-desk3.amr.corp.intel.com) ([10.54.39.16]) by orsmga001.jf.intel.com with ESMTP; 05 Jul 2018 00:00:10 -0700 Subject: [PATCH 13/13] libnvdimm, namespace: Publish page structure init state / control From: Dan Williams To: akpm@linux-foundation.org Cc: Ross Zwisler , Vishal Verma , Dave Jiang , Johannes Thumshirn , Jeff Moyer , hch@lst.de, linux-nvdimm@lists.01.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Date: Wed, 04 Jul 2018 23:50:13 -0700 Message-ID: <153077341292.40830.11333232703318633087.stgit@dwillia2-desk3.amr.corp.intel.com> In-Reply-To: <153077334130.40830.2714147692560185329.stgit@dwillia2-desk3.amr.corp.intel.com> References: <153077334130.40830.2714147692560185329.stgit@dwillia2-desk3.amr.corp.intel.com> User-Agent: StGit/0.18-2-gc94f MIME-Version: 1.0 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 Applications may want to know that page structure initialization is complete rather than be subject to delays at first DAX fault. Also, page structure initialization consumes CPU resources impacting application performance, so a environment may want to wait before considering the system fully initialized. Provide a sysfs attribute to display the current state, and when written with 'sync' complete memmap initialization. Cc: Ross Zwisler Cc: Vishal Verma Cc: Dave Jiang Cc: Johannes Thumshirn Cc: Jeff Moyer Signed-off-by: Dan Williams --- drivers/nvdimm/pfn_devs.c | 53 +++++++++++++++++++++++++++++++++++---------- mm/page_alloc.c | 1 + 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/drivers/nvdimm/pfn_devs.c b/drivers/nvdimm/pfn_devs.c index 147c62e2ef2b..00f1792d070c 100644 --- a/drivers/nvdimm/pfn_devs.c +++ b/drivers/nvdimm/pfn_devs.c @@ -1,15 +1,6 @@ -/* - * Copyright(c) 2013-2016 Intel Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - */ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Copyright(c) 2013-2018 Intel Corporation. All rights reserved. */ +#include #include #include #include @@ -103,6 +94,43 @@ static ssize_t mode_store(struct device *dev, } static DEVICE_ATTR_RW(mode); +static ssize_t memmap_state_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct nd_pfn *nd_pfn = to_nd_pfn_safe(dev); + struct memmap_async_state *async = &nd_pfn->async; + + return sprintf(buf, "%s\n", bitmap_weight(async->active, + NR_MEMMAP_THREADS) ? "active" : "idle"); +} + +static ssize_t memmap_state_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t len) +{ + int i; + struct nd_pfn *nd_pfn = to_nd_pfn_safe(dev); + struct memmap_async_state *async = &nd_pfn->async; + + if (strcmp(buf, "sync") == 0) + /* pass */; + else if (strcmp(buf, "sync\n") == 0) + /* pass */; + else + return -EINVAL; + + for (i = 0; i < NR_MEMMAP_THREADS; i++) { + struct memmap_init_pages *thread = &async->page_init[i]; + + if (!test_bit(i, async->active)) + continue; + async_synchronize_cookie_domain(thread->cookie, + &memmap_init_domain); + } + + return len; +} +static DEVICE_ATTR_RW(memmap_state); + static ssize_t align_show(struct device *dev, struct device_attribute *attr, char *buf) { @@ -279,6 +307,7 @@ static struct attribute *nd_pfn_attributes[] = { &dev_attr_resource.attr, &dev_attr_size.attr, &dev_attr_supported_alignments.attr, + &dev_attr_memmap_state.attr, NULL, }; diff --git a/mm/page_alloc.c b/mm/page_alloc.c index d1466dd82bc2..90414c1d2ca8 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -5456,6 +5456,7 @@ void __ref build_all_zonelists(pg_data_t *pgdat) } ASYNC_DOMAIN_EXCLUSIVE(memmap_init_domain); +EXPORT_SYMBOL_GPL(memmap_init_domain); static void __meminit memmap_init_one(unsigned long pfn, unsigned long zone, int nid, enum memmap_context context, struct dev_pagemap *pgmap)