|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v7] x86/mem-sharing: mem-sharing a range of memory
On 19/07/16 17:27, Tamas K Lengyel wrote:
>
>>> +{
>>> + int rc = 0;
>>> + shr_handle_t sh, ch;
>>> + unsigned long start =
>>> + range->_scratchspace ? range->_scratchspace : range->start;
>> This can be shortened to "unsigned long start = range->_scratchspace ?:
>> range->start;" and fit on a single line.
> I'm not that familiar with this style of the syntax, does that have
> the effect of setting start = _scratchspace when _scratchspace is not
> 0?
It is a GCC extension
https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/Conditionals.html which
allows you to omit the middle parameter if it is identical to the first.
It is very useful for chaining together a load of items where you want
to stop at the first non-zero one.
x = a ?: b ?: c ?: d;
but can also be used with functions calls which 0 success, nonzero error
semantics:
rc = a() ?: b() ?: c() ?: d();
If you don't need to do any special cleanup in-between them.
>>> + /*
>>> + * We only propagate -ENOMEM as individual pages may fail with -EINVAL,
>>> + * and for range sharing we only care if -ENOMEM was encountered so we
>>> reset
>>> + * rc here.
>>> + */
>>> + if ( rc < 0 && rc != -ENOMEM )
>> Would you mind putting in an ASSERT(rc == -EINVAL) here, if we believe
>> that to be an ok case to ignore? In the future if more errors get
>> raised, we don't want to silently lose a more serious error which should
>> be propagated up.
> Well, in that case I can just change the if statement to rc == -EINVAL.
That is a much better suggestion.
>>> @@ -1468,6 +1520,94 @@ int
>>> mem_sharing_memop(XEN_GUEST_HANDLE_PARAM(xen_mem_sharing_op_t) arg)
>>> }
>>> break;
>>>
>>> + case XENMEM_sharing_op_range_share:
>>> + {
>>> + unsigned long max_sgfn, max_cgfn;
>>> + struct domain *cd;
>>> +
>>> + rc = -EINVAL;
>>> + if( mso.u.range._pad[0] || mso.u.range._pad[1] ||
>>> + mso.u.range._pad[2] )
>>> + goto out;
>>> +
>>> + /*
>>> + * We use _scratchscape for the hypercall continuation value.
>>> + * Ideally the user sets this to 0 in the beginning but
>>> + * there is no good way of enforcing that here, so we just
>>> check
>>> + * that it's at least in range.
>>> + */
>>> + if ( mso.u.range._scratchspace &&
>>> + (mso.u.range._scratchspace < mso.u.range.start ||
>>> + mso.u.range._scratchspace > mso.u.range.end) )
>> Alignment (extra space) for these two lines.
> You mean add an extra space or that there is an extra space?
Please add an extra space in. It should look like:
if ( mso.u.range._scratchspace &&
(mso.u.range._scratchspace ...
mso.u.range._scratchspace ...
~Andrew
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |