On Thu, Sep 28, 2017 at 09:04:04PM +0300, Volodymyr Babchuk wrote:
From: Volodymyr Babchuk <vlad.babchuk@xxxxxxxxx>
This change adds ops for shm_(un)register functions in tee interface.
Client application can use these functions to (un)register an own shared
buffer in OP-TEE address space. This allows zero copy data sharing between
Normal and Secure Worlds.
Please note that while those functions were added to optee code,
it does not report to userspace that those functions are available.
OP-TEE code does not set TEE_GEN_CAP_REG_MEM flag. This flag will be
enabled only after all other features of dynamic shared memory will be
implemented in subsequent patches.
While it's not adveritsed to the user, AFAICT the user could still
invoke these via ioctls, right?
Is there a problem if the user were to do so, or is it simply not usefulYes, user can invoke this via ioctl. And this buffer will be registeredin OP-TEE. But user will not be able to use this registered buffer, because optee driver does not know how to handle references to registered buffers.
without the other features?
They present the same registered shared buffer. You have a list of pages and offset from the first page. Strictly speaking this is not buf_ptr anymore, but it is named so...
+int optee_shm_register(struct tee_context *ctx, struct tee_shm *shm,
+ struct page **pages, size_t num_pages)
+{
+ pages_array = optee_allocate_pages_array(num_pages);
+ if (!pages_array)
+ return -ENOMEM;
+ msg_arg->params->u.tmem.buf_ptr = virt_to_phys(pages_array) |
+ tee_shm_get_page_offset(shm);
This doesn't look right. Why is the shm page offset being orred-in to
the pages_array physical address? They're completely separate objects.