|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 07/10] xen/arm: optee: add support for arbitrary shared memory
Julien Grall writes:
>>> Some of the patches are using your EPAM e-mail addresss. Other are
>>> using your gmail address. Could you confirm this is expected?
>>
>> No, I'll make sure that all patches are authored by
>> <volodymyr_babchuk@xxxxxxxx>
>
> And your signed-off-by as well :).
Sure :)
>
> [...]
>
>>> I can't promise Xen will only be 4K only. So it would be better to
>>> make the number agnostic. Or at least writing clearly on top of the
>>> definition that it is assumed 4KB (maybe with a BUILD_BUG_ON(PAGE_SIZE
>>> != 4096) if not already in place).
>>
>> I can replace define with something like (67108864 / PAGE_SIZE). With
>> appropriate comment, of course.
>
> Well, none of your code is ready for another PAGE_SIZE than 4KB. So
> the BUILD_BUG_ON(PAGE_SIZE != 4096) is probably more suitable.
Yes, makes sense.
> [...]
>
>>>> +static struct optee_shm_buf *allocate_optee_shm_buf(struct
>>>> optee_domain *ctx,
>>>> + uint64_t cookie,
>>>> + unsigned int
>>>> pages_cnt,
>>>> + struct page_info
>>>> *pg_list,
>>>> + unsigned int
>>>> pg_list_order)
>>>> +{
>>>> + struct optee_shm_buf *optee_shm_buf, *optee_shm_buf_tmp;
>>>> + int old, new;
>>>> + int err_code;
>>>> +
>>>> + do
>>>> + {
>>>> + old = atomic_read(&ctx->optee_shm_buf_pages);
>>>> + new = old + pages_cnt;
>>>> + if ( new >= MAX_TOTAL_SMH_BUF_PG )
>>>
>>> Again, the limitation is in number of page and quite high. What would
>>> prevent a guest to register shared memory page by page? If nothing,
>>> then I think you can end up to interesting issues in Xen because of
>>> the growing list and memory used.
>>
>> OP-TEE will limit this on it's side. In most cases Xen have much bigger
>> heap than OP-TEE :-)
>
> The main problem is not the heap. The problem is the size of the list to
> browse.
>>
>> Do you want me to limit this both in memory size and in number of buffers?
>
> I am not necessarily asking to put a limitation. What I ask is
> documenting what can happen. So we can take proper action in the
> future (such as when deciding whether to security support it).
>
Ah, okay, got it.
> [...]
>
>>
>> [...]
>>>> static int optee_relinquish_resources(struct domain *d)
>>>> {
>>>> struct optee_std_call *call, *call_tmp;
>>>> struct shm_rpc *shm_rpc, *shm_rpc_tmp;
>>>> + struct optee_shm_buf *optee_shm_buf, *optee_shm_buf_tmp;
>>>> struct optee_domain *ctx = d->arch.tee;
>>>> if ( !ctx )
>>>> @@ -381,6 +552,13 @@ static int optee_relinquish_resources(struct domain
>>>> *d)
>>>> list_for_each_entry_safe( shm_rpc, shm_rpc_tmp, &ctx->shm_rpc_list,
>>>> list )
>>>> free_shm_rpc(ctx, shm_rpc->cookie);
>>>> + if ( hypercall_preempt_check() )
>>>> + return -ERESTART;
>>>
>>> Same question as the other hypercall_preempt_check().
>>
>> Excuse me, but what question? I looked thru all your emails and can't
>> find one.
>
> It looks like I have by mistake trimmed my question on the other patch :/.
>
> Anyway, you should explain how you decide the placement of each
> hypercall_preempt_check(). For instance, if the lists are quite big,
> then you may want add a preempt check in the loop.
I see your point there. Check in the loop would require additional
logic. Is there any best practices? E.g. how often I should check for
preemption? Every N iterations of loop, where N is...
> The key point here is to document the choice even if you wrote it is
> "random". This will help in the future if we need to revise preemption
> choice.
I'd prefer to do proper fix, if it does not require a big amount of
work. Otherwise I'll add document the current state.
[...]
>>>> + page = get_page_from_gfn(current->domain,
>>>> +
>>>> paddr_to_pfn(pages_data_guest->pages_list[entries_on_page]),
>>>> + &p2m, P2M_ALLOC);
>>>
>>> The indentation is wrong here. But the problem is due to the long
>>> name. For instance, you have 3 times the word "page" on the same
>>> line. Is that necessary?
>> Code is quite complex. I want every variable to be as descriptive as
>> possible. In some cases it leads to issues like this :-)
>
> There are way to simplify this code.
>
> 1) The OP-TEE code contains the following pattern a few time.
>
> page = get_page_from_gfn(....)
> if ( !page || p2mt != p2m_ram_rw )
> ...
>
> You can create an helper to encapsulate that. I think you have one case
> where
> the p2mt check is different. So potentially you want to patch the type
> check
> in parameter.
Yes, this a good idea.
> 2) You probably move __map_domain_page(guest_page/xen_pages) within
> the loop. And just deal with guest_page/xen_pages outside.
>
> With that and the renaming, then the code will become suddenly a bit less
> complex.
Thank you for recommendations. I'll try to do in this way.
--
Best regards,Volodymyr Babchuk
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |