From: Hans Verkuil <hverkuil@xs4all.nl>
To: Linux Media Mailing List <linux-media@vger.kernel.org>,
Sakari Ailus <sakari.ailus@iki.fi>,
Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Subject: [RFC] Export alignment requirements for buffers
Date: Mon, 01 Jun 2015 11:44:51 +0200 [thread overview]
Message-ID: <556C2993.4030708@xs4all.nl> (raw)
One of the things that is really irritating is the fact that drivers that
use contig-dma sometimes want to support USERPTR, allowing applications to
pass pointers to the driver that point to physically contiguous memory that
was somehow obtained, and that userspace has no way of knowing whether the
driver has this requirement or not.
A related issue is that, depending on the DMA engine, the user pointer might
have some alignment requirements (page aligned, or at minimum 16 bytes aligned)
that userspace has no way of knowing.
The same alignment issue is present also for dma-buf.
I propose to take one reserved field from struct v4l2_create_buffers and
from struct v4l2_requestbuffers and change it to this:
__u32 flags;
#define V4L2_REQBUFS_FL_ALIGNMENT_MSK 0x3f
#define V4L2_REQBUFS_FL_PHYS_CONTIG (1 << 31)
Where the alignment is a power of 2 (and if 0 the alignment is unknown). The max
is 2^63, which should be enough for the foreseeable future :-)
If the physically contiguous flag is set, then the buffer must be physically
contiguous.
These flags can be set for every vb2 dma implementation:
dma-contig: the PHYS_CONTIG flag is always set and the alignment is (unless overridden
by the driver) page aligned.
dma-sg: the PHYS_CONTIG flag is 0 and the alignment will depend on the driver DMA
implementation. Note: malloc will align the buffer to 8 bytes on a 32 bit OS and 16 bytes
on a 64 bit OS.
vmalloc: PHYS_CONFIG is 0 and the alignment should be 3 (2^3 == 8) for 32 bit and
4 (2^4=16) for 64 bit OS. This matches malloc() which will align the buffer to
8 bytes on a 32 bit OS and 16 bytes on a 64 bit OS.
The flags field can be extended with things like OPAQUE if the buffers cannot be
mmapped (since they are in protected memory).
Comments? Alternative solutions?
Regards,
Hans
next reply other threads:[~2015-06-01 9:44 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-01 9:44 Hans Verkuil [this message]
2015-06-01 10:44 ` [RFC] Export alignment requirements for buffers Sakari Ailus
2015-06-01 11:02 ` Hans Verkuil
2015-06-01 16:37 ` Sakari Ailus
2015-06-01 13:50 ` Hans Verkuil
2015-06-01 15:50 ` Laurent Pinchart
2015-06-03 4:25 ` Sumit Semwal
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=556C2993.4030708@xs4all.nl \
--to=hverkuil@xs4all.nl \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=sakari.ailus@iki.fi \
/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