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 0DA13CD1288 for ; Thu, 4 Apr 2024 20:53:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9B7BE6B00A2; Thu, 4 Apr 2024 16:53:42 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 968016B00A3; Thu, 4 Apr 2024 16:53:42 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8086E6B00A4; Thu, 4 Apr 2024 16:53:42 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 5B8E96B00A2 for ; Thu, 4 Apr 2024 16:53:42 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 16B7A120488 for ; Thu, 4 Apr 2024 20:53:42 +0000 (UTC) X-FDA: 81973050684.09.B8B284B Received: from mail-io1-f45.google.com (mail-io1-f45.google.com [209.85.166.45]) by imf02.hostedemail.com (Postfix) with ESMTP id 29C8280011 for ; Thu, 4 Apr 2024 20:53:39 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=linuxfoundation.org header.s=google header.b=YkHLEfFc; dmarc=pass (policy=none) header.from=linuxfoundation.org; spf=pass (imf02.hostedemail.com: domain of skhan@linuxfoundation.org designates 209.85.166.45 as permitted sender) smtp.mailfrom=skhan@linuxfoundation.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1712264020; 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=b6haysz2jj5zoS/lj04ngNFWrnAh1M1xOR4nKflEgjw=; b=lG3ua+cfrmDNTY7UZryBdWKsveeRgWTYfr056WTk4b4qYo36e/hZA/Af/Jeck7B8SBDfxi ukVvYwSb8eohCb8l5obWwLe7ywTg8s61ccmvG80VEzC9INoqJxKFU09LWDyc6+B3gAFICP 10eOvxue43FG1pZBWbyaUXXr2SZlkPM= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=linuxfoundation.org header.s=google header.b=YkHLEfFc; dmarc=pass (policy=none) header.from=linuxfoundation.org; spf=pass (imf02.hostedemail.com: domain of skhan@linuxfoundation.org designates 209.85.166.45 as permitted sender) smtp.mailfrom=skhan@linuxfoundation.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1712264020; a=rsa-sha256; cv=none; b=QD7NhHoueRttdH3kVQ4FuVl4hfJUnXUenVnz8Ju79B1VPSnLdSyQfsguu4VH9YaLj6xEkk ZRjuQuaUnMrXDKQzGI5P5tZuo2dS1mxIecm8LfASw6oOWnc3UU8VOfwiBxseBfxQV2sd36 kwAbrfaUNa7KRRElNy9jzu/VagHkHjA= Received: by mail-io1-f45.google.com with SMTP id ca18e2360f4ac-7cc5e664d52so30535339f.0 for ; Thu, 04 Apr 2024 13:53:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=google; t=1712264019; x=1712868819; darn=kvack.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=b6haysz2jj5zoS/lj04ngNFWrnAh1M1xOR4nKflEgjw=; b=YkHLEfFctSLEhR6PcoTYr8zDfnAW2VRygz8iONuKGy6lvIpon+sXhFFPdVacUwRonV RxQdr66StBbgS17/o/KKl97w7cVB6okGs4UQdcISmfg6uOX7EavQpbylyO3CZ8VYfPlL 7erY3JOosFLqoVe6xxXvBxnqU/Xd1hhUcwhvM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712264019; x=1712868819; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=b6haysz2jj5zoS/lj04ngNFWrnAh1M1xOR4nKflEgjw=; b=GZ5qwjyZlGcZ7SL6ZJDl4Xec1/VooPAAg8Pi9B9ugaxE7L7DBdYl45b6S7aYbGrCzn E+SttQTda9lQJDtDuo3ErxXfOpPLYJ8OLsyP9M4/1xTPWDvrwwPyMKRo5+4fGS4GtPzB OxFhZvlrLEyVGlzF9XHpMKdYNHY4WCPyt6YGuDch68a8BzNHDq8qAwunnDNSqdgiRorT qnP45tfcXL6J9ujTvlB/qrCXsdem4yMu2bQnqpjBVHn8OhvYDAmbaEd96ZjAJVY3Kxmu kri5tZQTJR1eP8HV66xGJWYq2UoAuMpwqJ6RBp5ySCPPqL+Id3RQt0+oZ8LZb9nHs9Qo AwKA== X-Forwarded-Encrypted: i=1; AJvYcCXHlN6bJxhP0WfBg809zNiuIIsPVJ009OvOfqTnItRQ66njRl3g2sgQYeEo5gulOKa/Rmzir1/YjQ7+KKBVgjzSVes= X-Gm-Message-State: AOJu0Ywqmxn0Eu7wWad9xxf5xOOoTlNJzw/EKE475jR9hI+pmKk00QYc ez16gKPERF1sNOtGCdE92zcCY+AC8uciAJSmICbEq8LF4znkqXLSokBCn8PaBYE= X-Google-Smtp-Source: AGHT+IHM62tDkeD+s5T/EjpX9tVPyfcO4WL9ubUNV6KA18O2+poZa9JP0z632EkH0U2OvZlzgy3EpQ== X-Received: by 2002:a5e:c20d:0:b0:7d3:5401:e4c with SMTP id v13-20020a5ec20d000000b007d354010e4cmr2863766iop.1.1712264019220; Thu, 04 Apr 2024 13:53:39 -0700 (PDT) Received: from [192.168.1.128] ([38.175.170.29]) by smtp.gmail.com with ESMTPSA id z19-20020a056638319300b004773b943137sm105296jak.160.2024.04.04.13.53.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 04 Apr 2024 13:53:38 -0700 (PDT) Message-ID: <10495292-caa8-49ec-8909-52d3f1467627@linuxfoundation.org> Date: Thu, 4 Apr 2024 14:53:37 -0600 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v13 8/8] selftests/udmabuf: Add tests to verify data after page migration To: Vivek Kasireddy , dri-devel@lists.freedesktop.org, linux-mm@kvack.org Cc: Shuah Khan , David Hildenbrand , Daniel Vetter , Mike Kravetz , Hugh Dickins , Peter Xu , Jason Gunthorpe , Gerd Hoffmann , Dongwon Kim , Junxiao Chang , Shuah Khan , linu-kselftest@vger.kernel.org References: <20240404073053.3073706-1-vivek.kasireddy@intel.com> <20240404073053.3073706-9-vivek.kasireddy@intel.com> Content-Language: en-US From: Shuah Khan In-Reply-To: <20240404073053.3073706-9-vivek.kasireddy@intel.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspam-User: X-Stat-Signature: uzdq7r44tkrc47yt838d7uzj3rnw1x6u X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 29C8280011 X-HE-Tag: 1712264019-977674 X-HE-Meta: U2FsdGVkX1+nRa7CYW9JOfbPrSYqQcSktToOMAy4JykY4cZahfHHs2j7MNEvQs1NQZUo9x1OLodhPJtLRIyvH7H1kb5cBsOvsK53eSEuQ9vZmUlRBpWutNGvs5YTCWD4gGT/wSxonhdguiJyJoOa7orz3/WR+GTW3JmGzOgsZNDB36OZnGjE1TtweWcsTpxu3pwPQ+ntdY+4OQKfuiTLUii5AsmpmsDL3P0JqnPsuliuw00VHsCVGTOTH6cGuz47hXQftnLlLDzIUhpIEr8dfhLXmvYiKgKd2JKb2dX5swiQr+Yf3qU1ohHIO54lYnEUXQZ0wIplie+v/R5O7i9TwHIaKYCaBKmdYtA4SjfMHqjk59d+yrxfNSetnVo4i/JmefRYnv//mWYlW9RobkEtIc33nkmJ9oygb2Cg+CjLPkysKxncdldh++I+p5ACfs4MlE5+BG1ArFhmegJluDl4YJSV+rANYU5TWsbf66ssWhx+th71paE/1AgYHlAExJGv/ervyMv2UwrJpkBKhMrX4fjkKQR8VO/jp8EE1eI/DKXfq2IG/bq3/bZrEuVSUiZZ1MWI8Fc/qcWhr4oaxxA09JOAKsKn63sRASjUm79tjhp3Xg4z4s3OnmdCbyanzTSxV4U/VDdS76JJynoj8/VJ3qF4ADIxyM60MDxE5hKuYkbpvZ/9v1U2zf9o60/3zd118kRKbmYVh7uvR14TCERQeRiMb+ACPYNkFFtsEVlNP07oOlhYpFUs4lymWBcPYpg+dSk6b4FHQQe+HKkRfhwIyU2vJ19IfxtRL57e+vAKLa8P5JL4WY8+LCdiClOk8xN9cP9fGGl1psjEbFjSyVGaRdY1JzBQVtGJT/Cypf7XH54j/xoecfGOxdn98lPNOhk8YbtR5H9021T+PgQ6IZex9LZK0vZJVKUJo2T1uRCHUDnlS2Dfr6vpeHWOtU1Q3PDx5LpIOHRjLudDF/oeT8x 2iflhrFV RtxisabkdWoW2wq8GDoKlNygm659tG9knZLiTROqnBEsEoMEWrosgW5hdK+/5zm12YXyK+e+AbVBdX4OYxD2FNIIRofCiDmwtDtmEWYyBDPzhAT2YD8JTZIsn3D+axFfwYosHl+harLcDVIerEZstIQvU1qW52WA16txeTViUWKI+guFhRoRR/yYQZFzNHxvCokj5hOENiuvT5qcX7Eo7S5uQSuntdseEw2UlpH18maRs80H0XTeKfHTBTJv4Z/Ub1Zr7aE/9YvP8SmLaLX3eJR5URtAxbMuKpmktVyUo81jVi8RtY4THDINqCmrMP8/p3ayPLgYAP6dt51IbgcaCCEDi+nO6L6asBzRt0uOF8t6cL9NcbgQhNcAWghn8YoKRwqn6zoEkeo0IBaz4PlctayvY/N4DJrjRoQ+YAwCaqyAI01+xNe7qzKsDyOgrL5LYvv3GHg5me7SZSHEoEwJtZXmvCcTPzorZZy+MR0So5rT9V3V6bWjBrHlz5Svh9Qk+T7vDfMQ2H7uNDMafcoRputzrRejWZ84aLjGxiMtKRMNp5tRtb/DrqRMOmeNkHl3tGBX8XUhE0m9Z1VA6xgs2Tkr9aw== 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 4/4/24 01:26, Vivek Kasireddy wrote: > Since the memfd pages associated with a udmabuf may be migrated > as part of udmabuf create, we need to verify the data coherency > after successful migration. The new tests added in this patch try > to do just that using 4k sized pages and also 2 MB sized huge > pages for the memfd. > > Successful completion of the tests would mean that there is no > disconnect between the memfd pages and the ones associated with > a udmabuf. And, these tests can also be augmented in the future > to test newer udmabuf features (such as handling memfd hole punch). > > The idea for these tests comes from a patch by Mike Kravetz. Add Suggested-by for Mike Kravetz > > Cc: Shuah Khan > Cc: David Hildenbrand > Cc: Daniel Vetter > Cc: Mike Kravetz > Cc: Hugh Dickins > Cc: Peter Xu > Cc: Jason Gunthorpe > Cc: Gerd Hoffmann > Cc: Dongwon Kim > Cc: Junxiao Chang > Signed-off-by: Vivek Kasireddy > --- > .../selftests/drivers/dma-buf/udmabuf.c | 151 +++++++++++++++++- > 1 file changed, 147 insertions(+), 4 deletions(-) > > diff --git a/tools/testing/selftests/drivers/dma-buf/udmabuf.c b/tools/testing/selftests/drivers/dma-buf/udmabuf.c > index c812080e304e..d76c813fe652 100644 > --- a/tools/testing/selftests/drivers/dma-buf/udmabuf.c > +++ b/tools/testing/selftests/drivers/dma-buf/udmabuf.c > @@ -9,26 +9,132 @@ > #include > #include > #include > +#include > > #include > #include > +#include > #include > #include > > #define TEST_PREFIX "drivers/dma-buf/udmabuf" > #define NUM_PAGES 4 > +#define NUM_ENTRIES 4 > +#define MEMFD_SIZE 1024 /* in pages */ > > -static int memfd_create(const char *name, unsigned int flags) > +static unsigned int page_size; > + > +static int create_memfd_with_seals(off64_t size, bool hpage) > +{ > + int memfd, ret; > + unsigned int flags = MFD_ALLOW_SEALING; > + > + if (hpage) > + flags |= MFD_HUGETLB; > + > + memfd = memfd_create("udmabuf-test", flags); > + if (memfd < 0) { > + printf("%s: [skip,no-memfd]\n", TEST_PREFIX); > + exit(77); > + } > + > + ret = fcntl(memfd, F_ADD_SEALS, F_SEAL_SHRINK); > + if (ret < 0) { > + printf("%s: [skip,fcntl-add-seals]\n", TEST_PREFIX); Use the kselftest skip code here. Also use kselftest_* functions to print results and exit messages for KTAP format. > + exit(77); This should be KSFT_SKIP > + } > + > + ret = ftruncate(memfd, size); > + if (ret == -1) { > + printf("%s: [FAIL,memfd-truncate]\n", TEST_PREFIX); > + exit(1); Use KSFT_FAIL > + } > + > + return memfd; > +} > + > +static int create_udmabuf_list(int devfd, int memfd, off64_t memfd_size) > +{ > + struct udmabuf_create_list *list; > + int ubuf_fd, i; > + > + list = malloc(sizeof(struct udmabuf_create_list) + > + sizeof(struct udmabuf_create_item) * NUM_ENTRIES); > + if (!list) { > + printf("%s: [FAIL, udmabuf-malloc]\n", TEST_PREFIX); > + exit(1); > + } > + > + for (i = 0; i < NUM_ENTRIES; i++) { > + list->list[i].memfd = memfd; > + list->list[i].offset = i * (memfd_size / NUM_ENTRIES); > + list->list[i].size = getpagesize() * NUM_PAGES; > + } > + > + list->count = NUM_ENTRIES; > + list->flags = UDMABUF_FLAGS_CLOEXEC; > + ubuf_fd = ioctl(devfd, UDMABUF_CREATE_LIST, list); > + free(list); > + if (ubuf_fd < 0) { > + printf("%s: [FAIL, udmabuf-create]\n", TEST_PREFIX); > + exit(1); Same as before. > + } > + > + return ubuf_fd; > +} > + > +static void write_to_memfd(void *addr, off64_t size, char chr) > +{ > + int i; > + > + for (i = 0; i < size / page_size; i++) { > + *((char *)addr + (i * page_size)) = chr; > + } > +} > + > +static void *mmap_fd(int fd, off64_t size) > { > - return syscall(__NR_memfd_create, name, flags); > + void *addr; > + > + addr = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); > + if (addr == MAP_FAILED) { > + printf("%s: ubuf_fd mmap fail\n", TEST_PREFIX); > + exit(1); > + } > + > + return addr; > +} > + > +static int compare_chunks(void *addr1, void *addr2, off64_t memfd_size) > +{ > + off64_t off; > + int i = 0, j, k = 0, ret = 0; > + char char1, char2; > + > + while (i < NUM_ENTRIES) { > + off = i * (memfd_size / NUM_ENTRIES); > + for (j = 0; j < NUM_PAGES; j++, k++) { > + char1 = *((char *)addr1 + off + (j * getpagesize())); > + char2 = *((char *)addr2 + (k * getpagesize())); > + if (char1 != char2) { > + ret = -1; > + goto err; > + } > + } > + i++; > + } > +err: > + munmap(addr1, memfd_size); > + munmap(addr2, NUM_ENTRIES * NUM_PAGES * getpagesize()); > + return ret; > } > > int main(int argc, char *argv[]) > { > struct udmabuf_create create; > int devfd, memfd, buf, ret; > - off_t size; > - void *mem; > + off64_t size; > + void *addr1, *addr2; > > devfd = open("/dev/udmabuf", O_RDWR); > if (devfd < 0) { > @@ -90,6 +196,9 @@ int main(int argc, char *argv[]) > } > > /* should work */ > + page_size = getpagesize(); > + addr1 = mmap_fd(memfd, size); > + write_to_memfd(addr1, size, 'a'); > create.memfd = memfd; > create.offset = 0; > create.size = size; > @@ -98,6 +207,40 @@ int main(int argc, char *argv[]) > printf("%s: [FAIL,test-4]\n", TEST_PREFIX); > exit(1); > } > + munmap(addr1, size); > + close(buf); > + close(memfd); > + > + /* should work (migration of 4k size pages)*/ > + size = MEMFD_SIZE * page_size; > + memfd = create_memfd_with_seals(size, false); > + addr1 = mmap_fd(memfd, size); > + write_to_memfd(addr1, size, 'a'); > + buf = create_udmabuf_list(devfd, memfd, size); > + addr2 = mmap_fd(buf, NUM_PAGES * NUM_ENTRIES * getpagesize()); > + write_to_memfd(addr1, size, 'b'); > + ret = compare_chunks(addr1, addr2, size); > + if (ret < 0) { > + printf("%s: [FAIL,test-5]\n", TEST_PREFIX); > + exit(1); > + } > + close(buf); > + close(memfd); > + > + /* should work (migration of 2MB size huge pages)*/ > + page_size = getpagesize() * 512; /* 2 MB */ > + size = MEMFD_SIZE * page_size; > + memfd = create_memfd_with_seals(size, true); > + addr1 = mmap_fd(memfd, size); > + write_to_memfd(addr1, size, 'a'); > + buf = create_udmabuf_list(devfd, memfd, size); > + addr2 = mmap_fd(buf, NUM_PAGES * NUM_ENTRIES * getpagesize()); > + write_to_memfd(addr1, size, 'b'); > + ret = compare_chunks(addr1, addr2, size); > + if (ret < 0) { > + printf("%s: [FAIL,test-6]\n", TEST_PREFIX); > + exit(1); > + } > > fprintf(stderr, "%s: ok\n", TEST_PREFIX); > close(buf); CC linux0kselftest list when you send v2. thanks, -- Shuah