xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Julien Grall <julien.grall@linaro.org>
To: Jan Beulich <JBeulich@suse.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	Bhupinder Thakur <bhupinder.thakur@linaro.org>
Cc: IanJackson <ian.jackson@eu.citrix.com>,
	Julien Grall <julien.grall@arm.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Wei Liu <wei.liu2@citrix.com>,
	xen-devel@lists.xenproject.org
Subject: Re: libxl: vpl011: Fix hex to dec conversion of vuart_gfn in libxl__device_vuart_add
Date: Fri, 13 Oct 2017 17:32:23 +0100	[thread overview]
Message-ID: <b2b36de0-d856-7304-3441-8b6ec2de1e0c@linaro.org> (raw)
In-Reply-To: <59E0F2A50200007800186456@prv-mh.provo.novell.com>

Hi,

Sorry for the top-posting. Bhupinder, can you give a look?

Cheers,

On 13/10/17 16:06, Jan Beulich wrote:
>>>> On 13.10.17 at 16:35, <julien.grall@linaro.org> wrote:
>> Hi Jan,
>>
>> On 13/10/17 15:03, Jan Beulich wrote:
>>>>>> On 13.10.17 at 15:03, <julien.grall@linaro.org> wrote:
>>>> On 13/10/17 13:32, Jan Beulich wrote:
>>>>>>>> On 13.10.17 at 14:19, <andrew.cooper3@citrix.com> wrote:
>>>>>> On 13/10/17 13:08, Jan Beulich wrote:
>>>>>>>>>> On 13.10.17 at 12:44, <bhupinder.thakur@linaro.org> wrote:
>>>>>>>> In libxl__device_vuart_add vuart_gfn is getting stored as a hex value:
>>>>>>>>
>>>>>>>>> flexarray_append(ro_front, GCSPRINTF("%"PRI_xen_pfn, state->vuart_gfn));
>>>>>>>> However, xenstore reads this value as a decimal value and tries to map the
>>>>>>>> wrong address and fails.
>>>>>>> Is this generic or vuart specific code in xenstore that does so?
>>>>>>> Could you perhaps simply point me at the consuming side?
>>>>>>>
>>>>>>>> Introduced a new format string "PRIu_xen_pfn" which formats the value as a
>>>>>>>> decimal value.
>>>>>>> I ask because I'm not really happy about this addition, i.e. I'd
>>>>>>> prefer the read side to change.
>>>>>>
>>>>>> Can the read side realistically change?
>>>>>
>>>>> Well, that's why I had asked whether this is generic or specific
>>>>> code. I would have hoped/assumed that xenstore doesn't
>>>>> generically try to translate strings into numbers - how would it
>>>>> know a string is to represent a number in the first place? Hence
>>>>> I was hoping for this to be specific (and hence) new code.
>>>>>
>>>>>> Its been decimal for a decade now, and there definitely is 3rd party
>>>>>> code which uses these values in xenstore (sadly).
>>>>>
>>>>> Are you trying to tell me there's been a vuart frontend before
>>>>> the device type introduction in libxl, or is the new device type
>>>>> compatible with an existing one?
>>>>>
>>>>>> Then again, the ring-ref key is listed as deprecated in our
>>>>>> documentation, without any reference describing which key should be used
>>>>>> instead.  It is also typically a grant reference, not a gfn, so
>>>>>> something wonky is definitely going on here.
>>>>>
>>>>> Which put under question how an existing frontend could work
>>>>> with this new device type.
>>>>
>>>> Well, vuart is replicating the behavior of console (see
>>>> libxl__device_console_add). The console is passing a frame number in
>>>> decimal in "ring-ref". Confusingly it is an MFN and would even break on
>>>> 32-bit toolstack using 64-bit Xen...
>>>>
>>>> So this patch is just following the console behavior by passing a
>>>> decimal value rather than an hexadecimal value.
>>>
>>> Well, that other code path should then also use PRIu_xen_pfn, at
>>> the very least.
>>
>> By other code path, you mean the console code right? In that case, mfn
>> should also be moved from unsigned long to xen_pfn_t.
> 
> Yes.
> 
>>> It's of course interesting that the apparent consumer
>>> of this (tools/console/daemon/io.c:domain_create_ring()) uses
>>>
>>> 	err = xs_gather(xs, dom->conspath,
>>> 			"ring-ref", "%u", &ring_ref,
>>> 			"port", "%i", &remote_port,
>>> 			NULL);
>>>
>>> in order to then cast(!) the result to unsigned long in the
>>> invocation of xc_map_foreign_range(). Suggests to me that
>>> the console can't work reliably on a system with memory
>>> extending past the 1Tb boundary.
>>
>> It likely a latent bug. Probably a silly question, would there any
>> compatibility issue to switch the format to the correct one?
> 
> I don't think so.
> 
>>> It of course escapes me why %i (or really %lli) wasn't used here
>>> from the beginning, eliminating all radix concerns and matching
>>> what is being done for the port.
>>
>> Why %i? Should not the GFN be unsigned?
> 
> Signedness is secondary here - the important thing is that %i is
> the only one allowing all of decimal, hex, and octal formatting of
> the string (the latter two of course with the usual 0 / 0x prefixes).
> Port numbers are unsigned too, yet %i is being used there.
> 
>> Although, I can see the field
>> ring_reg is int and will store -1 as not mapped. This is quite confusing
>> and likely we want to turned into xen_pfn_t + use ~(xen_pfn_t)0.
> 
> Indeed.
> 
>> But then, xc_map_foreign_range is using unsigned long instead of
>> xen_pfn_t. So I guess we should also switch the parameter to xen_pfn_t.
> 
> Yes.
> 
>> Note that the implementation of xc_map_foreign_range is using xen_pfn_t.
> 
> And yes again.
> 
> Jan
> 

-- 
Julien Grall

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

  reply	other threads:[~2017-10-13 16:32 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-13 10:44 libxl: vpl011: Fix hex to dec conversion of vuart_gfn in libxl__device_vuart_add Bhupinder Thakur
2017-10-13 11:28 ` Wei Liu
2017-10-13 12:08 ` Jan Beulich
2017-10-13 12:19   ` Andrew Cooper
2017-10-13 12:32     ` Jan Beulich
2017-10-13 13:03       ` Julien Grall
2017-10-13 14:03         ` Jan Beulich
2017-10-13 14:35           ` Julien Grall
2017-10-13 15:06             ` Jan Beulich
2017-10-13 16:32               ` Julien Grall [this message]
2017-10-16  9:03               ` Bhupinder Thakur

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=b2b36de0-d856-7304-3441-8b6ec2de1e0c@linaro.org \
    --to=julien.grall@linaro.org \
    --cc=JBeulich@suse.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=bhupinder.thakur@linaro.org \
    --cc=ian.jackson@eu.citrix.com \
    --cc=julien.grall@arm.com \
    --cc=sstabellini@kernel.org \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /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;
as well as URLs for NNTP newsgroup(s).