All of lore.kernel.org
 help / color / mirror / Atom feed
From: Shuah Khan <shuahkh@osg.samsung.com>
To: Pintu Kumar <pintu.ping@gmail.com>
Cc: shuah@kernel.org, Laura Abbott <labbott@redhat.com>,
	linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	dvhart@infradead.org,
	Bamvor Zhang Jian <bamvor.zhangjian@linaro.org>,
	Shuah Khan <shuahkh@osg.samsung.com>
Subject: Re: [PATCHv3 1/1] [tools/selftests]: android/ion: userspace test utility for ion buffer sharing
Date: Fri, 20 Oct 2017 08:40:49 -0600	[thread overview]
Message-ID: <53743866-3a76-e499-b49c-5079ad73e3be@osg.samsung.com> (raw)
In-Reply-To: <CAOuPNLg-mgy0KyyR_0wiPPZ1ct7tdrVkQMnEFk_vynXtFFH3Cg@mail.gmail.com>

On 10/18/2017 04:38 AM, Pintu Kumar wrote:
> On Wed, Oct 18, 2017 at 2:28 AM, Shuah Khan <shuah@kernel.org> 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 <pintu.ping@gmail.com>
>>>> ---
>>>>  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 <pintu.ping@gmail.com>
>>>> +
>>>> +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

  reply	other threads:[~2017-10-20 14:41 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-26 18:08 [PATCH 1/1] [tools]: android/ion: userspace test utility for ion buffer sharing Pintu Agarwal
2017-09-26 18:50 ` Pintu Kumar
2017-09-26 19:22 ` Laura Abbott
2017-09-27 14:24   ` Pintu Kumar
2017-09-28 18:11     ` Pintu Kumar
2017-09-28 18:16       ` Pintu Kumar
2017-09-30  4:04         ` Pintu Kumar
2017-10-03 16:48 ` [PATCHv2 " Pintu Agarwal
2017-10-04  0:12   ` Laura Abbott
2017-10-04 11:29     ` Pintu Kumar
2017-10-04 22:07       ` Laura Abbott
2017-10-06 14:28     ` Pintu Kumar
2017-10-09 14:17       ` Pintu Kumar
2017-10-09 21:19         ` Laura Abbott
2017-10-04  7:20   ` Greg KH
2017-10-04 10:54     ` Pintu Kumar
2017-10-14 11:36   ` [PATCHv3 1/1] [tools/selftests]: " Pintu Agarwal
2017-10-17 14:18     ` Shuah Khan
2017-10-17 20:21     ` Laura Abbott
2017-10-17 20:58       ` Shuah Khan
2017-10-18 10:38         ` Pintu Kumar
2017-10-20 14:40           ` Shuah Khan [this message]
2017-10-20 15:18             ` Pintu Kumar
2017-10-20 19:21               ` Shuah Khan
2017-10-23 13:41                 ` Pintu Kumar
2017-10-23 23:26     ` [PATCHv4 " Pintu Agarwal
2017-10-27  5:34       ` Pintu Kumar
2017-10-27  8:45         ` Greg Kroah-Hartman
2017-10-27 10:00           ` Pintu Kumar
2017-10-29 14:21       ` [lkp-robot] [android/ion] 5fb70554d6: kernel_selftests.android.make_fail kernel test robot
2017-10-29 14:21         ` kernel test robot
2017-10-30  7:12         ` Pintu Kumar
2017-10-30 21:02           ` Laura Abbott
2017-10-30 21:02             ` Laura Abbott
2017-10-31 10:21             ` Pintu Kumar
2017-10-31 21:58               ` Laura Abbott
2017-10-31 21:58                 ` Laura Abbott
2017-11-01 10:12                 ` Pintu Kumar
2017-11-01 10:30                   ` Greg Kroah-Hartman
2017-11-01 10:30                     ` Greg Kroah-Hartman
2017-11-01 15:04                   ` Shuah Khan
2017-11-01 15:04                     ` Shuah Khan
2017-11-01 16:26                     ` Pintu Kumar
2017-11-01 16:57                       ` Shuah Khan
2017-11-01 16:57                         ` Shuah Khan
2017-11-01 17:14                         ` Pintu Kumar
2017-11-01 22:38                           ` Shuah Khan
2017-11-01 22:38                             ` Shuah Khan
2017-11-02  8:53                             ` Greg Kroah-Hartman
2017-11-02  8:53                               ` Greg Kroah-Hartman
2017-11-02 14:50                               ` Shuah Khan
2017-11-02 14:50                                 ` Shuah Khan
2017-10-30 22:56       ` [PATCHv4 1/1] [tools/selftests]: android/ion: userspace test utility for ion buffer sharing Laura Abbott
2017-10-31  9:49         ` Pintu Kumar
2017-11-01 17:00       ` [PATCHv5 " Pintu Agarwal
2017-11-02 15:07         ` Shuah Khan
2017-11-02 16:15           ` Pintu Kumar
2017-11-02 16:19             ` Shuah Khan
2017-11-02 17:53               ` Shuah Khan
2017-11-02 23:54                 ` Laura Abbott
2017-11-03  0:32                   ` Shuah Khan
2017-11-03  4:36                     ` Pintu Kumar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53743866-3a76-e499-b49c-5079ad73e3be@osg.samsung.com \
    --to=shuahkh@osg.samsung.com \
    --cc=bamvor.zhangjian@linaro.org \
    --cc=dvhart@infradead.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=labbott@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=pintu.ping@gmail.com \
    --cc=shuah@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.