|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen/grant: Fix signed/unsigned comparisons issues
On 27.02.2020 19:46, Andrew Cooper wrote:
> Each function takes an unsigned count, and loops based on a signed i. This
> causes problems when between 2 and 4 billion operations are requested.
I can see problems, but not (as the title says) with comparison issues
(the signed i gets converted to unsigned for the purpose of the
comparison).
> In practice, signed-ness issues aren't possible because count exceeding
> INT_MAX is excluded earlier in do_grant_op(), but the code reads as if it is
> buggy, and GCC obviously can't spot this either.
>
> Bloat-o-meter reports:
> add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-95 (-95)
> Function old new delta
> do_grant_table_op 7155 7140 -15
> gnttab_transfer 2732 2716 -16
> gnttab_unmap_grant_ref 771 739 -32
> gnttab_unmap_and_replace 771 739 -32
> Total: Before=2996364, After=2996269, chg -0.00%
>
> and inspection of gnttab_unmap_grant_ref() at least reveals one fewer local
> variables on the stack.
This is a good thing for x86. However, having started to familiarize
myself a tiny bit with RISC-V, I'm no longer certain our present way
of preferring unsigned int for array indexing variable and alike is
actually a good thing without further abstraction. Nevertheless, this
isn't an immediate issue, so ...
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
albeit preferably with the title adjusted, and with one more
suggestion:
> @@ -1568,13 +1568,14 @@ static long
> gnttab_unmap_grant_ref(
> XEN_GUEST_HANDLE_PARAM(gnttab_unmap_grant_ref_t) uop, unsigned int count)
> {
> - int i, c, partial_done, done = 0;
> + unsigned int i, partial_done, done = 0;
> struct gnttab_unmap_grant_ref op;
> struct gnttab_unmap_common common[GNTTAB_UNMAP_BATCH_SIZE];
>
> while ( count != 0 )
> {
> - c = min(count, (unsigned int)GNTTAB_UNMAP_BATCH_SIZE);
> + unsigned int c = min(count, (unsigned int)GNTTAB_UNMAP_BATCH_SIZE);
Seeing this and another instance further down, would you mind
dropping the cast on this occasion, in favor of adding a U
suffix to GNTTAB_UNMAP_BATCH_SIZE's definition?
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |