Received: by 10.223.164.221 with SMTP id h29csp5443235wrb; Fri, 20 Oct 2017 12:24:09 -0700 (PDT) X-Google-Smtp-Source: ABhQp+TltxnR+/zz7qWmOui4PSWSUaIJOvQ8KDpuwQOeMwNljGC7GLS0QH+P/9vWuzZ9o3zQvuuU X-Received: by 10.99.117.29 with SMTP id q29mr5406312pgc.61.1508527449741; Fri, 20 Oct 2017 12:24:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1508527449; cv=none; d=google.com; s=arc-20160816; b=Iw+o4xtNIFGK3whQY+fUl/PdWkSPFXC2tgskleYiKmBA6cZkqMS4QIlY6qixfSYL64 6zyC01+++jfjuMtYQmzJPjoaZceGxhWuCI782zgk+9de3ylvG7PD4kj7/zZjGfIDLOXV z+O9wNmaCQ35cxwSEaXNmvjqV/2HRGEYUfH9120dkql9e1hWUZ7d+N40b/zccna4p7bS Lg+gxdrSOhN6G2NdSyYASj044lvJJOn8fvWvl6D2veJljNWhkkVoBd3FryjaRernCZi9 ZEXsG0W9TKkKphvKAkrVgfLkJd4/wRRX7cELpdPgc2PpD95EjdW6b87epTZkd32MNlDi r7og== 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=YYpSy72cuReyHq0at6HtyqVbUIH6olnYZ/1rmzadJSg=; b=W+fdBPIIViIFzN/MsxX5Qx0zLsCLVd/5Giw1HS13IQiS8Z+ex4xpGzF6D0JlJWD201 jgaMDfKDLS2pqY+dw7bCOW60DIKNQbaVdY8Mjjfq2+3t5SSnyB56pg8s+fZEY6YDY9sw rzm2iZir37CmCuNdQ1j98ucT+0t2eCw9Ag5v2j4qe3c3QObEp3eVf3T46ZBoplImuPJC NJXUL81SMoiRuewfzDBU1lnAt6m3kbpXTGeJbgTV0P02vpXHsMvPXUuv3OCavsA3AR4+ MG4a7bySAh8L+XwOE8h4QPyW0HghWAvrs7qRJ21WRGJANEYOtncoVqPTVE2Q6H9x+BVi HEEw== 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 3si910367plu.523.2017.10.20.12.23.55; Fri, 20 Oct 2017 12:24:09 -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 S1753132AbdJTTWH (ORCPT + 99 others); Fri, 20 Oct 2017 15:22:07 -0400 Received: from osg.samsung.com ([64.30.133.232]:59063 "EHLO osg.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752726AbdJTTWG (ORCPT ); Fri, 20 Oct 2017 15:22:06 -0400 Received: from localhost (localhost [127.0.0.1]) by osg.samsung.com (Postfix) with ESMTP id 92EB72513C; Fri, 20 Oct 2017 12:22:05 -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 v2dmAHQ_HTa1; Fri, 20 Oct 2017 12:21:58 -0700 (PDT) Received: from [172.16.1.253] (50-205-20-42-static.hfc.comcastbusiness.net [50.205.20.42]) by osg.samsung.com (Postfix) with ESMTPSA id 597C125132; Fri, 20 Oct 2017 12:21:58 -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> <53743866-3a76-e499-b49c-5079ad73e3be@osg.samsung.com> From: Shuah Khan Message-ID: Date: Fri, 20 Oct 2017 13:21:57 -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/20/2017 09:18 AM, Pintu Kumar wrote: > On Fri, Oct 20, 2017 at 8:10 PM, Shuah Khan wrote: >> 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 >> > > Yes, I am already using the latest version of futex/Makefile. > Actually I figured out the problem, but currently I don't know how to fix it. > In futex case, both in the main dir as well as sub-dir they are using > the same TEST_PROGS name as . > So both the scripts are getting installed in /tmp/. > However in my case, in main dir I am using but in sub-dir I > am using as TEST_PROGS. That should be fine. Let me play with it and let you know. > So, the sub-dir TEST_PROGS is not installed. Only the TEST_GEN_FILES > are installed. Right. This is not for install path. This is setting up the O=dir with the right files for run_tests target. > If I change the name to , then it is working fine. > > Currently I am checking more how to fix this. This could be problem > with futex as well. I don't think that is the problem.' > If I could not figure out, I will also change TEST_PROGS to run.sh and push it. thanks, -- Shuah From 1581790386350036658@xxx Fri Oct 20 15:21:05 +0000 2017 X-GM-THRID: 1579656416160844925 X-Gmail-Labels: Inbox,Category Forums