From: Greg KH <gregkh@linuxfoundation.org>
To: rkir@google.com
Cc: tkjos@google.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 06/21] platform: goldfish: pipe: Add DMA support to goldfish pipe
Date: Tue, 25 Sep 2018 20:31:38 +0200 [thread overview]
Message-ID: <20180925183138.GB21572@kroah.com> (raw)
In-Reply-To: <20180914175122.21036-6-rkir@google.com>
On Fri, Sep 14, 2018 at 10:51:07AM -0700, rkir@google.com wrote:
> From: Roman Kiryanov <rkir@google.com>
>
> Goldfish DMA is an extension to the pipe device and is designed
> to facilitate high-speed RAM->RAM transfers from guest to host.
>
> See uapi/linux/goldfish/goldfish_dma.h for more details.
>
> Signed-off-by: Roman Kiryanov <rkir@google.com>
> ---
> drivers/platform/goldfish/goldfish_pipe.c | 312 +++++++++++++++++-
> .../platform/goldfish/goldfish_pipe_qemu.h | 2 +
> include/uapi/linux/goldfish/goldfish_dma.h | 84 +++++
> 3 files changed, 396 insertions(+), 2 deletions(-)
> create mode 100644 include/uapi/linux/goldfish/goldfish_dma.h
A whole new api needs some others to review it becides just me. Please
get some more signed off by on this.
Also, some minor comments:
> --- /dev/null
> +++ b/include/uapi/linux/goldfish/goldfish_dma.h
> @@ -0,0 +1,84 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +/*
> + * Copyright (C) 2018 Google, Inc.
> + *
> + * This software is licensed under the terms of the GNU General Public
> + * License version 2, as published by the Free Software Foundation, and
> + * may be copied, distributed, and modified under those terms.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
If you have a spdx line, you don't need the gpl boiler-plate text
either.
But, this is a uapi file, so gpl2 is not probably the license you want
here, right? That should be fixed before you end up doing something
foolish with a userspace program that includes this :)
> +/* GOLDFISH DMA
> + *
> + * Goldfish DMA is an extension to the pipe device
> + * and is designed to facilitate high-speed RAM->RAM
> + * transfers from guest to host.
> + *
> + * Interface (guest side):
> + *
> + * The guest user calls goldfish_dma_alloc (ioctls)
> + * and then mmap() on a goldfish pipe fd,
> + * which means that it wants high-speed access to
> + * host-visible memory.
> + *
> + * The guest can then write into the pointer
> + * returned by mmap(), and these writes
> + * become immediately visible on the host without BQL
> + * or otherweise context switching.
> + *
> + * dma_alloc_coherent() is used to obtain contiguous
> + * physical memory regions, and we allocate and interact
> + * with this region on both guest and host through
> + * the following ioctls:
> + *
> + * - LOCK: lock the region for data access.
> + * - UNLOCK: unlock the region. This may also be done from the host
> + * through the WAKE_ON_UNLOCK_DMA procedure.
> + * - CREATE_REGION: initialize size info for a dma region.
> + * - GETOFF: send physical address to guest drivers.
> + * - (UN)MAPHOST: uses goldfish_pipe_cmd to tell the host to
> + * (un)map to the guest physical address associated
> + * with the current dma context. This makes the physically
> + * contiguous memory (in)visible to the host.
> + *
> + * Guest userspace obtains a pointer to the DMA memory
> + * through mmap(), which also lazily allocates the memory
> + * with dma_alloc_coherent. (On last pipe close(), the region is freed).
> + * The mmaped() region can handle very high bandwidth
> + * transfers, and pipe operations can be used at the same
> + * time to handle synchronization and command communication.
> + */
> +
> +#define GOLDFISH_DMA_BUFFER_SIZE (32 * 1024 * 1024)
> +
> +struct goldfish_dma_ioctl_info {
> + __u64 phys_begin;
> + __u64 size;
> +};
Don't we have a dma userspace api? What does virtio use? What about
uio? Why can't one of the existing interfaces work for you?
> +/* There is an ioctl associated with goldfish dma driver.
> + * Make it conflict with ioctls that are not likely to be used
> + * in the emulator.
> + * 'G' 00-3F drivers/misc/sgi-gru/grulib.h conflict!
> + * 'G' 00-0F linux/gigaset_dev.h conflict!
Causing known conflicts is not wise.
thanks,
greg k-h
next prev parent reply other threads:[~2018-09-25 18:31 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-14 17:51 [PATCH 01/21] platform: goldfish: pipe: Remove license boilerplate rkir
2018-09-14 17:51 ` [PATCH 02/21] platform: goldfish: pipe: Prevent memory corruption from several threads writing to the same variable rkir
2018-09-14 17:51 ` [PATCH 03/21] platform: goldfish: pipe: Remove a redundant blank line rkir
2018-09-14 17:51 ` [PATCH 04/21] platform: goldfish: pipe: Remove redundant struct declarations rkir
2018-09-14 17:51 ` [PATCH 05/21] platform: goldfish: pipe: Remove redundant header include rkir
2018-09-14 17:51 ` [PATCH 06/21] platform: goldfish: pipe: Add DMA support to goldfish pipe rkir
2018-09-25 18:31 ` Greg KH [this message]
2018-09-25 23:06 ` Roman Kiryanov
2018-09-14 17:51 ` [PATCH 07/21] platform: goldfish: pipe: Remove the goldfish_interrupt_tasklet global variable rkir
2018-09-14 17:51 ` [PATCH 08/21] platform: goldfish: pipe: Remove the goldfish_pipe_miscdev " rkir
2018-09-14 17:51 ` [PATCH 09/21] platform: goldfish: pipe: Remove the goldfish_pipe_dev " rkir
2018-09-14 17:51 ` [PATCH 10/21] platform: goldfish: pipe: Move goldfish_pipe to goldfish_pipe_v2 rkir
2018-09-14 17:51 ` [PATCH 11/21] platform: goldfish: pipe: Move memory allocation from probe to init rkir
2018-09-14 17:51 ` [PATCH 12/21] platform: goldfish: pipe: Return status from "deinit" since "remove" does not do much rkir
2018-09-14 17:51 ` [PATCH 13/21] platform: goldfish: pipe: Split the driver to v2 specific and the rest rkir
2018-09-14 17:51 ` [PATCH 14/21] platform: goldfish: pipe: Add a blank line to separate varibles and code rkir
2018-09-14 17:51 ` [PATCH 15/21] platform: goldfish: pipe: Rename the init function (add "v2") rkir
2018-09-14 17:51 ` [PATCH 16/21] platform: goldfish: pipe: Call misc_deregister if init fails rkir
2018-09-14 17:51 ` [PATCH 17/21] platform: goldfish: pipe: Add a dedicated constant for the device name rkir
2018-09-14 17:51 ` [PATCH 18/21] platform: goldfish: pipe: Rename PIPE_REG to PIPE_V2_REG rkir
2018-09-14 17:51 ` [PATCH 19/21] platform: goldfish: pipe: Add the goldfish_pipe_v1 driver rkir
2018-09-14 17:51 ` [PATCH 20/21] platform: goldfish: pipe: Remove redundant casting rkir
2018-09-14 17:51 ` [PATCH 21/21] platform: goldfish: pipe: Fix allmodconfig build rkir
2018-09-25 18:28 ` Greg KH
2018-09-26 22:27 ` Roman Kiryanov
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=20180925183138.GB21572@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rkir@google.com \
--cc=tkjos@google.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome