From patchwork Mon Dec 3 23:35:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jerome Glisse X-Patchwork-Id: 10710911 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 E5C8514E2 for ; Mon, 3 Dec 2018 23:36:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D52E829267 for ; Mon, 3 Dec 2018 23:36:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C94162B222; Mon, 3 Dec 2018 23:36:26 +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 2CC3329267 for ; Mon, 3 Dec 2018 23:36:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C95426B6BB6; Mon, 3 Dec 2018 18:36:24 -0500 (EST) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id C22DD6B6BB7; Mon, 3 Dec 2018 18:36:24 -0500 (EST) 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 A98CD6B6BB8; Mon, 3 Dec 2018 18:36:24 -0500 (EST) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by kanga.kvack.org (Postfix) with ESMTP id 7AE426B6BB6 for ; Mon, 3 Dec 2018 18:36:24 -0500 (EST) Received: by mail-qt1-f200.google.com with SMTP id d35so15271482qtd.20 for ; Mon, 03 Dec 2018 15:36:24 -0800 (PST) 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:mime-version :content-transfer-encoding; bh=Ve3VhpJ/7pW46sLjPCtoXMfcCdwQkkz/RopUJFQFp+A=; b=hSUXugAo0EKOXN26A4B8WhU8GaLoNjAxcyVNHdxcsHTOln9rosa0BRlln4ubnFI+8I j+odmQEI4FFm3y9sZ0luRsiz4HJn1oBvUIP5mNfD5u1Ca8iIkrX0MSgDre4e1OPaWZ+z oXv/6fTb9egBBgNLzM1njHiQdpUF23HcljCk9UATi4orC87jtqd+2UZlfKQvWE4P3Gq3 oaBz0WOwzxmqKi8kecOwJTMLy8DpH81DXccCDEHd7p0D/gLF9L6wwpnZR5lpvvb+Ew6E okvKu+U7GTfI8PmJLmSNRmflFU3fummpmYQf2QP7WvFny9jqK3PzZsMi8hE4uW9FXznj 6Nmg== X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of jglisse@redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=jglisse@redhat.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com X-Gm-Message-State: AA+aEWYfTOGTh5JNuOeJV2x1OyFyM0znFJg5zG35fuAK3D/GuvNdrTOe o7tXAuMJis3FgjlKmrvANLHw00eSq0elWPrrPk4vHkZEZaiRS2T1xfwl3aLIn+JlnFXNcwZmws5 iJVphDyfMenb//oJV9Oa0UZTNLLZKexx79Wlzw83iEkeVDIEaZPkL/PV40fL8Elky8Q== X-Received: by 2002:aed:2603:: with SMTP id z3mr17212079qtc.120.1543880184271; Mon, 03 Dec 2018 15:36:24 -0800 (PST) X-Google-Smtp-Source: AFSGD/V0954gv+vrycBQJldki1pNRYv8jbRGR+pqDqds/kIjrm/nNrwF2CqlkvUcvCLxkeI6tiWI X-Received: by 2002:aed:2603:: with SMTP id z3mr17212058qtc.120.1543880183758; Mon, 03 Dec 2018 15:36:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543880183; cv=none; d=google.com; s=arc-20160816; b=dtAYkXfl9kGxFIEmsw+91iUGgDjzXMkwWcVdKpLbfY9T6XQN4LUINVWfEwzzLI9wil NN0hRK0FQbTKp5oBdkb8J2l6LtAE5qKhkCbyCEmeO84w2tsJeDn2vwywAluIF1jW0oex SEOWnzTRS0rygnhXpbiJBuWLySzYQIBS/jpGxvYEE/BgZsL0bSLUVG3gsB0WkE0v+JSO 9aAtf61464vMSXcW/9yWLnUWVF41C2gB9lzEhPOpGckc10DxqRdU4kKbb7nqsP7SZ1L/ iPK8IbWwKGg1jEK8+Snll3s89hf4FuLaddhhgCqYBEC3JaSf87qATN21Crcks8mFmiK3 Usuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=Ve3VhpJ/7pW46sLjPCtoXMfcCdwQkkz/RopUJFQFp+A=; b=0TvUW9CSJHcb85872bXUyq619qhUiauXm6Vr7/TR29BSRtI9Ln3FsK2tMVdYyj/Ga8 vCHLT8B+vxGSxqdXW1WAw5Icmnz0IJEXKnubdS1iUqOwb/zHRyeFZHmZmQA5usIAN0NN e3jPeFygLqqnkZkBELRYT1dQdcg2oQ/H3yjdHj9IbgFTzi94A4V2Qm/p+iOodbM8jNLE P5xz4XEBCdb3ZAZlGMHH62hOf+KVdvIa24NlOreyM5HWpDRRhBtY2kjyH67e1Pd+XVwl /eMDwpuN0lFULxjN5ZIXL6ZPD3OoLEii/i9Mh+6e4Vz0joaTiiurTkosU0OsDTFmKJyc jwOQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of jglisse@redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=jglisse@redhat.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from mx1.redhat.com (mx1.redhat.com. [209.132.183.28]) by mx.google.com with ESMTPS id b129si3134457qke.179.2018.12.03.15.36.23 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 03 Dec 2018 15:36:23 -0800 (PST) Received-SPF: pass (google.com: domain of jglisse@redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; Authentication-Results: mx.google.com; spf=pass (google.com: domain of jglisse@redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=jglisse@redhat.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 78B5D307EA90; Mon, 3 Dec 2018 23:36:22 +0000 (UTC) Received: from localhost.localdomain.com (ovpn-120-188.rdu2.redhat.com [10.10.120.188]) by smtp.corp.redhat.com (Postfix) with ESMTP id 296FE60566; Mon, 3 Dec 2018 23:36:19 +0000 (UTC) From: jglisse@redhat.com To: linux-mm@kvack.org Cc: Andrew Morton , linux-kernel@vger.kernel.org, =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , "Rafael J . Wysocki" , Ross Zwisler , Dan Williams , Dave Hansen , Haggai Eran , Balbir Singh , "Aneesh Kumar K . V" , Benjamin Herrenschmidt , Felix Kuehling , Philip Yang , =?utf-8?q?Christian_K=C3=B6nig?= , Paul Blinzer , Logan Gunthorpe , John Hubbard , Ralph Campbell , Michal Hocko , Jonathan Cameron , Mark Hairgrove , Vivek Kini , Mel Gorman , Dave Airlie , Ben Skeggs , Andrea Arcangeli Subject: [RFC PATCH 12/14] mm/hbind: add migrate command to hbind() ioctl Date: Mon, 3 Dec 2018 18:35:07 -0500 Message-Id: <20181203233509.20671-13-jglisse@redhat.com> In-Reply-To: <20181203233509.20671-1-jglisse@redhat.com> References: <20181203233509.20671-1-jglisse@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Mon, 03 Dec 2018 23:36:22 +0000 (UTC) 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 From: Jérôme Glisse This patch add migrate commands to hbind() ioctl, user space can use this commands to migrate a range of virtual address to list of target memory. This does not change the policy for the range, it also ignores any of the existing policy range, it does not changes the policy for the range. Signed-off-by: Jérôme Glisse Cc: Rafael J. Wysocki Cc: Ross Zwisler Cc: Dan Williams Cc: Dave Hansen Cc: Haggai Eran Cc: Balbir Singh Cc: Aneesh Kumar K.V Cc: Benjamin Herrenschmidt Cc: Felix Kuehling Cc: Philip Yang Cc: Christian König Cc: Paul Blinzer Cc: Logan Gunthorpe Cc: John Hubbard Cc: Ralph Campbell Cc: Michal Hocko Cc: Jonathan Cameron Cc: Mark Hairgrove Cc: Vivek Kini Cc: Mel Gorman Cc: Dave Airlie Cc: Ben Skeggs Cc: Andrea Arcangeli --- include/uapi/linux/hbind.h | 9 ++++++++ mm/hms.c | 43 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/include/uapi/linux/hbind.h b/include/uapi/linux/hbind.h index 7bb876954e3f..ededbba22121 100644 --- a/include/uapi/linux/hbind.h +++ b/include/uapi/linux/hbind.h @@ -57,6 +57,15 @@ struct hbind_params { */ #define HBIND_CMD_BIND 1 +/* + * HBIND_CMD_MIGRATE move existing memory to use listed target memory. This is + * a best effort. + * + * Additional dwords: + * [0] result ie number of pages that have been migrated. + */ +#define HBIND_CMD_MIGRATE 2 + #define HBIND_IOCTL _IOWR('H', 0x00, struct hbind_params) diff --git a/mm/hms.c b/mm/hms.c index 6be6f4acdd49..6764908f47bf 100644 --- a/mm/hms.c +++ b/mm/hms.c @@ -368,6 +368,39 @@ static int hbind_bind(struct mm_struct *mm, struct hbind_params *params, } +static int hbind_migrate(struct mm_struct *mm, struct hbind_params *params, + const uint32_t *targets, uint32_t *atoms) +{ + unsigned long size, npages; + int ret = -EINVAL; + unsigned i; + + size = PAGE_ALIGN(params->end) - (params->start & PAGE_MASK); + npages = size >> PAGE_SHIFT; + + for (i = 0; params->ntargets; ++i) { + struct hms_target *target; + + target = hms_target_find(targets[i]); + if (target == NULL) + continue; + + ret = target->hbind->migrate(target, mm, params->start, + params->end, params->natoms, + atoms); + hms_target_put(target); + + if (ret) + continue; + + if (atoms[0] >= npages) + break; + } + + return ret; +} + + static long hbind_ioctl(struct file *file, unsigned cmd, unsigned long arg) { uint32_t *targets, *_dtargets = NULL, _ftargets[HBIND_FIX_ARRAY]; @@ -458,6 +491,16 @@ static long hbind_ioctl(struct file *file, unsigned cmd, unsigned long arg) if (ret) goto out_mm; break; + case HBIND_CMD_MIGRATE: + if (ndwords != 2) { + ret = -EINVAL; + goto out_mm; + } + ret = hbind_migrate(current->mm, ¶ms, + targets, atoms); + if (ret) + goto out_mm; + break; default: ret = -EINVAL; goto out_mm;