Received: by 10.223.164.221 with SMTP id h29csp5169985wrb; Fri, 20 Oct 2017 07:42:45 -0700 (PDT) X-Google-Smtp-Source: ABhQp+RNiwiKXFRR8H0uvOUlxGf2TZtoiOEjpfmvIh4OQLX1cMBVCxZrJOjpC1CpiebUWgug/yCM X-Received: by 10.101.74.12 with SMTP id s12mr4529918pgq.381.1508510565044; Fri, 20 Oct 2017 07:42:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1508510565; cv=none; d=google.com; s=arc-20160816; b=HqRKNnigkIpKjRHblcblE8GK8DzJfCvGlKL0/AElWdiBRRkzcqKb3O1tr/UHsPA+aF tusZJVuYNmK2eHCuPd/dwaH4pnsf614FIcDjItAR5E6Np8eDUpDItORkLgUvUXcWIbWY /ChDKqJQdfpG5kN9+l2bqTH/Vodbj2tuNcgW17w01pIBWfWowOtdEH0xsWa8f+04ZV3i GxRsxJQ9wi6XY6Je3xvQOcs+iqo5gidzDBpTKoUFkmyIO2DhZLrA0EhYTVD1UtxLDGca EuQebU/hGuVyGqBSf0B7CuNBAxw/pe11tAXwqrcg7Gp79MvLtGEH972ME13gkfqW9clM lzfA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:arc-authentication-results; bh=sNKGsrzcpzuqpCfvDPNe8XA8I2X62Ohz1ayE+RQRAbA=; b=TVZhpPcFLbLRISC48EQBE01NwVIs/17J0L05dZsRu03aMgigcumB95MdYE4WzDXgUZ YZfguVOnQfIRvFJXGIEvXAI4+dSJ7K5M+OdGvSfw/QkpK13diWvvHIoVwx/vu3eUmx8G 3mB/3SQChgo33B2rCVQP4ETT5zdoy0gs3/REcU3oN3yjqJOMF/f+f1439QodmwyI+R+I i3f04PEkrAKfPH4Q4vQIU6payZL0L99YiBkQXl7xyD0RvdENi1FMc/f1NmmW3SgbNwyX j0DdYC3Wzk42KTlDyo6IYrU5jO7b27ARSc5Hos3TIDinUa7kKqE9BgQFaWM/NYtNURCb 52Lw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=samsung.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 1si661470plw.666.2017.10.20.07.42.31; Fri, 20 Oct 2017 07:42:44 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=samsung.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752486AbdJTOlB (ORCPT + 99 others); Fri, 20 Oct 2017 10:41:01 -0400 Received: from osg.samsung.com ([64.30.133.232]:43648 "EHLO osg.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752041AbdJTOk5 (ORCPT ); Fri, 20 Oct 2017 10:40:57 -0400 Received: from localhost (localhost [127.0.0.1]) by osg.samsung.com (Postfix) with ESMTP id 27D2523FD4; Fri, 20 Oct 2017 07:40:57 -0700 (PDT) X-Virus-Scanned: Debian amavisd-new at dev.s-opensource.com Received: from osg.samsung.com ([127.0.0.1]) by localhost (localhost [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id vb2pnX0rzGsr; Fri, 20 Oct 2017 07:40:51 -0700 (PDT) Received: from [172.20.5.211] (unknown [209.37.255.2]) by osg.samsung.com (Postfix) with ESMTPSA id ABDF223FCB; Fri, 20 Oct 2017 07:40:50 -0700 (PDT) Subject: Re: [PATCHv3 1/1] [tools/selftests]: android/ion: userspace test utility for ion buffer sharing To: Pintu Kumar Cc: shuah@kernel.org, Laura Abbott , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Greg Kroah-Hartman , dvhart@infradead.org, Bamvor Zhang Jian , Shuah Khan References: <1507049339-16963-1-git-send-email-pintu.ping@gmail.com> <1507981006-7430-1-git-send-email-pintu.ping@gmail.com> <2c0cf8c1-7f4d-5639-58d3-0fd7595df256@redhat.com> <9fb9b4ee-2834-511b-ff78-d14ea5609728@kernel.org> From: Shuah Khan Message-ID: <53743866-3a76-e499-b49c-5079ad73e3be@osg.samsung.com> Date: Fri, 20 Oct 2017 08:40:49 -0600 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/18/2017 04:38 AM, Pintu Kumar wrote: > On Wed, Oct 18, 2017 at 2:28 AM, Shuah Khan wrote: >> On 10/17/2017 02:21 PM, Laura Abbott wrote: >>> On 10/14/2017 04:36 AM, Pintu Agarwal wrote: >>>> This is a test utility to verify ION buffer sharing in user space >>>> between 2 independent processes. >>>> It uses unix domain socket (with SCM_RIGHTS) as IPC to transfer an FD to >>>> another process to share the same buffer. >>>> This utility demonstrates how ION buffer sharing can be implemented between >>>> two user space processes, using various heap types. >>>> >>>> This utility is made to be run as part of kselftest framework in kernel. >>>> The utility is verified on Ubuntu-32 bit system with Linux Kernel 4.14, >>>> using ION system heap and CMA heap. >>>> >>>> For more information about the utility please check the README file. >>>> >>>> Signed-off-by: Pintu Agarwal >>>> --- >>>> tools/testing/selftests/Makefile | 3 +- >>>> tools/testing/selftests/android/Makefile | 44 ++++ >>>> tools/testing/selftests/android/ion/.gitignore | 2 + >>>> tools/testing/selftests/android/ion/Makefile | 16 ++ >>>> tools/testing/selftests/android/ion/README | 132 +++++++++++ >>>> tools/testing/selftests/android/ion/config | 3 + >>>> tools/testing/selftests/android/ion/ion_test.sh | 61 +++++ >>>> .../testing/selftests/android/ion/ionapp_export.c | 151 ++++++++++++ >>>> .../testing/selftests/android/ion/ionapp_import.c | 88 +++++++ >>>> tools/testing/selftests/android/ion/ionutils.c | 259 +++++++++++++++++++++ >>>> tools/testing/selftests/android/ion/ionutils.h | 55 +++++ >>>> tools/testing/selftests/android/ion/ipcsocket.c | 227 ++++++++++++++++++ >>>> tools/testing/selftests/android/ion/ipcsocket.h | 35 +++ >>>> tools/testing/selftests/android/run.sh | 3 + >>>> 14 files changed, 1078 insertions(+), 1 deletion(-) >>>> create mode 100644 tools/testing/selftests/android/Makefile >>>> create mode 100644 tools/testing/selftests/android/ion/.gitignore >>>> create mode 100644 tools/testing/selftests/android/ion/Makefile >>>> create mode 100644 tools/testing/selftests/android/ion/README >>>> create mode 100644 tools/testing/selftests/android/ion/config >>>> create mode 100755 tools/testing/selftests/android/ion/ion_test.sh >>>> create mode 100644 tools/testing/selftests/android/ion/ionapp_export.c >>>> create mode 100644 tools/testing/selftests/android/ion/ionapp_import.c >>>> create mode 100644 tools/testing/selftests/android/ion/ionutils.c >>>> create mode 100644 tools/testing/selftests/android/ion/ionutils.h >>>> create mode 100644 tools/testing/selftests/android/ion/ipcsocket.c >>>> create mode 100644 tools/testing/selftests/android/ion/ipcsocket.h >>>> create mode 100755 tools/testing/selftests/android/run.sh >>>> >>>> diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile >>>> index ff80564..61bc77b 100644 >>>> --- a/tools/testing/selftests/Makefile >>>> +++ b/tools/testing/selftests/Makefile >>>> @@ -1,4 +1,5 @@ >>>> -TARGETS = bpf >>>> +TARGETS = android >>>> +TARGETS += bpf >>>> TARGETS += breakpoints >>>> TARGETS += capabilities >>>> TARGETS += cpufreq >>>> diff --git a/tools/testing/selftests/android/Makefile b/tools/testing/selftests/android/Makefile >>>> new file mode 100644 >>>> index 0000000..ee76446 >>>> --- /dev/null >>>> +++ b/tools/testing/selftests/android/Makefile >>>> @@ -0,0 +1,44 @@ >>>> +SUBDIRS := ion >>>> + >>>> +TEST_PROGS := run.sh >>>> + >>>> +.PHONY: all clean >>>> + >>>> +include ../lib.mk >>>> + >>>> +all: >>>> + @for DIR in $(SUBDIRS); do \ >>>> + BUILD_TARGET=$(OUTPUT)/$$DIR; \ >>>> + mkdir $$BUILD_TARGET -p; \ >>>> + make OUTPUT=$$BUILD_TARGET -C $$DIR $@;\ >>>> + if [ -e $$DIR/$(TEST_PROGS) ]; then >>>> + rsync -a $$DIR/$(TEST_PROGS) $$BUILD_TARGET/; >>>> + fi >>>> + done >>>> + >>>> +override define RUN_TESTS >>>> + @cd $(OUTPUT); ./run.sh >>>> +endef >>>> + >>>> +override define INSTALL_RULE >>>> + mkdir -p $(INSTALL_PATH) >>>> + install -t $(INSTALL_PATH) $(TEST_PROGS) $(TEST_PROGS_EXTENDED) $(TEST_FILES) >>>> + >>>> + @for SUBDIR in $(SUBDIRS); do \ >>>> + BUILD_TARGET=$(OUTPUT)/$$SUBDIR; \ >>>> + mkdir $$BUILD_TARGET -p; \ >>>> + $(MAKE) OUTPUT=$$BUILD_TARGET -C $$SUBDIR INSTALL_PATH=$(INSTALL_PATH)/$$SUBDIR install; \ >>>> + done; >>>> +endef >>>> + >>>> +override define EMIT_TESTS >>>> + echo "./run.sh" >>>> +endef >>>> + >>>> +override define CLEAN >>>> + @for DIR in $(SUBDIRS); do \ >>>> + BUILD_TARGET=$(OUTPUT)/$$DIR; \ >>>> + mkdir $$BUILD_TARGET -p; \ >>>> + make OUTPUT=$$BUILD_TARGET -C $$DIR $@;\ >>>> + done >>>> +endef >>>> diff --git a/tools/testing/selftests/android/ion/.gitignore b/tools/testing/selftests/android/ion/.gitignore >>>> new file mode 100644 >>>> index 0000000..67e6f39 >>>> --- /dev/null >>>> +++ b/tools/testing/selftests/android/ion/.gitignore >>>> @@ -0,0 +1,2 @@ >>>> +ionapp_export >>>> +ionapp_import >>>> diff --git a/tools/testing/selftests/android/ion/Makefile b/tools/testing/selftests/android/ion/Makefile >>>> new file mode 100644 >>>> index 0000000..b84e3b1 >>>> --- /dev/null >>>> +++ b/tools/testing/selftests/android/ion/Makefile >>>> @@ -0,0 +1,16 @@ >>>> + >>>> +INCLUDEDIR := -I../../../../../drivers/staging/android/uapi/ >>>> +CFLAGS := $(INCLUDEDIR) -Wall -O2 -g >>>> + >>>> +TEST_GEN_FILES := ionapp_export ionapp_import >>>> + >>>> +all: $(TEST_GEN_FILES) >>>> + >>>> +$(TEST_GEN_FILES): ipcsocket.c ionutils.c >>>> + >>>> +TEST_PROGS := ion_test.sh >>>> + >>>> +include ../../lib.mk >>>> + >>>> +$(OUTPUT)/ionapp_export: ionapp_export.c ipcsocket.c ionutils.c >>>> +$(OUTPUT)/ionapp_import: ionapp_import.c ipcsocket.c ionutils.c >>>> diff --git a/tools/testing/selftests/android/ion/README b/tools/testing/selftests/android/ion/README >>>> new file mode 100644 >>>> index 0000000..163e353 >>>> --- /dev/null >>>> +++ b/tools/testing/selftests/android/ion/README >>>> @@ -0,0 +1,132 @@ >>>> +ION BUFFER SHARING UTILITY >>>> +========================== >>>> +File: ion_test.sh : Utility to test ION driver buffer sharing mechanism. >>>> +Author: Pintu Kumar >>>> + >>>> +Introduction: >>>> +------------- >>>> +This is a test utility to verify ION buffer sharing in user space >>>> +between 2 independent processes. >>>> +It uses unix domain socket (with SCM_RIGHTS) as IPC to transfer an FD to >>>> +another process to share the same buffer. >>>> +This utility demonstrates how ION buffer sharing can be implemented between >>>> +two user space processes, using various heap types. >>>> +The following heap types are supported by ION driver. >>>> +ION_HEAP_TYPE_SYSTEM (0) >>>> +ION_HEAP_TYPE_SYSTEM_CONTIG (1) >>>> +ION_HEAP_TYPE_CARVEOUT (2) >>>> +ION_HEAP_TYPE_CHUNK (3) >>>> +ION_HEAP_TYPE_DMA (4) >>>> + >>>> +By default only the SYSTEM and SYSTEM_CONTIG heaps are supported. >>>> +Each heap is associated with the respective heap id. >>>> +This utility is designed in the form of client/server program. >>>> +The server part (ionapp_export) is the exporter of the buffer. >>>> +It is responsible for creating an ION client, allocating the buffer based on >>>> +the heap id, writing some data to this buffer and then exporting the FD >>>> +(associated with this buffer) to another process using socket IPC. >>>> +This FD is called as buffer FD (which is different than the ION client FD). >>>> + >>>> +The client part (ionapp_import) is the importer of the buffer. >>>> +It retrives the FD from the socket data and installs into its address space. >>>> +This new FD internally points to the same kernel buffer. >>>> +So first it reads the data that is stored in this buffer and prints it. >>>> +Then it writes the different size of data (it could be different data) to the >>>> +same buffer. >>>> +Finally the buffer FD must be closed by both the exporter and importer. >>>> +Thus the same kernel buffer is shared among two user space processes using >>>> +ION driver and only one time allocation. >>>> + >>>> +Prerequisite: >>>> +------------- >>>> +This utility works only if /dev/ion interface is present. >>>> +The following configs needs to be enabled in kernel to include ion driver. >>>> +CONFIG_ANDROID=y >>>> +CONFIG_ION=y >>>> +CONFIG_ION_SYSTEM_HEAP=y >>> >>> You also need CONFIG_STAGING right now as well. >> > > Ok, added CONFIG_STAGING under config and README > >> In which case, please make sure the test fails gracefully when the >> these config options are disabled. >> >> What does the test do when all of these options are disabled? >> > I assume that if these configs are not present the /dev/ion will also > not exists. > If that is the case then, I don't proceed with the test. > This is checked under ion_test script using: check_device > >>> >>>> + >>>> +This utility requires to be run as root user. >>>> + >>>> + >>>> +Compile and test: >>>> +----------------- >>>> +This utility is made to be run as part of kselftest framework in kernel. >>>> +To compile and run using kselftest you can simply do the following from the >>>> +kernel top directory. >>>> +linux$ make TARGETS=android kselftest >> >> Please make sure >> >> make O=/tmp/kselftest TARGETS=android kselftest >> >> works. >> > > Ok when I specify O as output directory. It did not work. > ./run.sh: 3: ./run.sh: ./ion_test.sh: not found > ../lib.mk:41: recipe for target 'run_tests' failed > > When I checked /tmp/kselftest/ion/, I see that ion_test.sh is not installed. > Only the executable are installed. > I followed the same Makefile as futex. > Currently I am trying to figure out what could be the problem. > Any hint will be really appreciated. Please see the latest futex Makefile from 4.14. You will see that the TEST_PROGS get copied from its all target for sub-dirs. You just have to add a copy in that path if [ -e $$DIR/$(TEST_PROGS) ]; then rsync -a $$DIR/$(TEST_PROGS) $$BUILD_TARGET/; fi All target from futex/Makefile all: @for DIR in $(SUBDIRS); do \ BUILD_TARGET=$(OUTPUT)/$$DIR; \ mkdir $$BUILD_TARGET -p; \ make OUTPUT=$$BUILD_TARGET -C $$DIR $@;\ if [ -e $$DIR/$(TEST_PROGS) ]; then rsync -a $$DIR/$(TEST_PROGS) $$BUILD_TARGET/; fi done thanks, -- Shuah From 1581602829618810399@xxx Wed Oct 18 13:39:57 +0000 2017 X-GM-THRID: 1579656416160844925 X-Gmail-Labels: Inbox,Category Forums