All of lore.kernel.org
 help / color / mirror / Atom feed
From: Julien Grall <julien.grall@linaro.org>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: ian.campbell@citrix.com, linux-kernel@vger.kernel.org,
	xen-devel@lists.xenproject.org
Subject: Re: [Xen-devel] [PATCH] xen/hvc-console: Make it work with HVM guests.
Date: Wed, 23 Oct 2013 23:08:01 +0100	[thread overview]
Message-ID: <526848C1.5030705@linaro.org> (raw)
In-Reply-To: <20131023161518.GA28413@phenom.dumpdata.com>



On 10/23/2013 05:15 PM, Konrad Rzeszutek Wilk wrote:
> On Sun, Oct 06, 2013 at 09:52:40PM +0100, Julien Grall wrote:
>> On 09/30/2013 03:45 PM, Konrad Rzeszutek Wilk wrote:
>>> On Fri, Sep 27, 2013 at 10:49:37PM +0100, Julien Grall wrote:
>>>> On 09/27/2013 10:25 PM, Konrad Rzeszutek Wilk wrote:
>>>>
>>>>> @@ -641,7 +641,20 @@ struct console xenboot_console = {
>>>>>
>>>>>   void xen_raw_console_write(const char *str)
>>>>>   {
>>>>> -	dom0_write_console(0, str, strlen(str));
>>>>> +	ssize_t len = strlen(str);
>>>>> +	int rc = 0;
>>>>> +
>>>>> +	if (xen_domain()) {
>>>>> +		dom0_write_console(0, str, len);
>>>>> +		if (rc == -ENOSYS && xen_hvm_domain())
>>>>> +			goto outb_print;
>>>>> +
>>>>> +	} else if (xen_cpuid_base()) {
>>>>> +		int i;
>>>>> +outb_print:
>>>>> +		for (i = 0; i < len; i++)
>>>>> +			outb(str[i], 0xe9);
>>>>> +	}
>>>>>   }
>>>>
>>>> xen_cpuid_base and outb(0xe9) is x86 specific and won't compile on ARM.
>>>
>>> Odd, I see outb defined in arch/arm and arch/arm64 ?(arch/arm[|64]/include/asm.io.h)
>>
>> On ARM32 the IO access is memory mapped (the exact address depends
>> on Linux configuration).
>> The main problem is not the outb macro but the ioport 0xe9.On ARM,
>> this ioport is not trapped by Xen.
>>
>>> You are of course right about xen_cpuid_base.
>>>
>>> How about this:
>>
>> For the ARM side, the code looks good.
>
> Can I that as 'Acked-by' ? thanks

Actually, I looked closer the code, with the new solution 
xen_raw_printk/xen_raw_console_write can't be call on ARM during early init.

On ARM, xen_domain_type is initialized during a core initcall. So it's 
not possible to call the function before.

>>>  From 04b772d2b819f0dda2163e3193fa7cd447a6245c Mon Sep 17 00:00:00 2001
>>> From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
>>> Date: Fri, 27 Sep 2013 17:18:13 -0400
>>> Subject: [PATCH] xen/hvc: If we use xen_raw_printk let it also work on HVM
>>>   guests.
>>>
>>> The xen_raw_printk works great for debugging purposes. We use
>>> for PV guests and we can also use it for HVM guests.
>>>
>>> However, for HVM guests we have a fallback of using the 0xe9
>>> port in case the hypervisor does not support an HVM guest of
>>> using the console_io hypercall. As such lets use 0xe9 during
>>> early bootup, and once the hyper-page is setup and if the
>>> console_io hypercall is supported - use that. Otherwise we
>>> will fallback to using the 0xe9 after early bootup.
>>>
>>> We also alter the return value for dom0_write_console to return
>>> an error value instead of zero. The HVC API has been supporting
>>> returning error values for quite some time.
>>>
>>> P.S.
>>> To use (and to see the output in the Xen ring buffer) one has to build
>>> the hypervisor with 'debug=y'.
>>>
>>> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
>>> [v1: ifdef xen_cpuid_base as it is X86 specific]
>>> ---
>>>   drivers/tty/hvc/hvc_xen.c | 19 +++++++++++++++++--
>>>   1 file changed, 17 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c
>>> index e61c36c..6458c9f 100644
>>> --- a/drivers/tty/hvc/hvc_xen.c
>>> +++ b/drivers/tty/hvc/hvc_xen.c
>>> @@ -183,7 +183,7 @@ static int dom0_write_console(uint32_t vtermno, const char *str, int len)
>>>   {
>>>   	int rc = HYPERVISOR_console_io(CONSOLEIO_write, len, (char *)str);
>>>   	if (rc < 0)
>>> -		return 0;
>>> +		return rc;
>>>
>>>   	return len;
>>>   }
>>> @@ -641,7 +641,22 @@ struct console xenboot_console = {
>>>
>>>   void xen_raw_console_write(const char *str)
>>>   {
>>> -	dom0_write_console(0, str, strlen(str));
>>> +	ssize_t len = strlen(str);
>>> +	int rc = 0;
>>> +
>>> +	if (xen_domain()) {
>>> +		rc = dom0_write_console(0, str, len);
>>> +#ifdef CONFIG_X86
>>> +		if (rc == -ENOSYS && xen_hvm_domain())
>>> +			goto outb_print;
>>> +
>>> +	} else if (xen_cpuid_base()) {
>>> +		int i;
>>> +outb_print:
>>> +		for (i = 0; i < len; i++)
>>> +			outb(str[i], 0xe9);
>>> +#endif
>>> +	}
>>>   }
>>>
>>>   void xen_raw_printk(const char *fmt, ...)

-- 
Julien Grall

  reply	other threads:[~2013-10-23 22:08 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-27 21:25 [PATCH] xen/hvc-console: Make it work with HVM guests Konrad Rzeszutek Wilk
2013-09-27 21:49 ` [Xen-devel] " Julien Grall
2013-09-30 14:45   ` Konrad Rzeszutek Wilk
2013-10-06 20:52     ` Julien Grall
2013-10-06 20:52     ` [Xen-devel] " Julien Grall
2013-10-23 16:15       ` Konrad Rzeszutek Wilk
2013-10-23 16:15       ` [Xen-devel] " Konrad Rzeszutek Wilk
2013-10-23 22:08         ` Julien Grall [this message]
2013-10-24 14:49           ` Konrad Rzeszutek Wilk
2013-10-24 14:49           ` [Xen-devel] " Konrad Rzeszutek Wilk
2013-10-24 16:30             ` Julien Grall
2013-10-24 16:43               ` Ian Campbell
2013-10-24 16:43               ` [Xen-devel] " Ian Campbell
2013-10-25 19:38                 ` Konrad Rzeszutek Wilk
2013-10-25 19:38                 ` [Xen-devel] " Konrad Rzeszutek Wilk
2013-10-26  8:27                   ` Ian Campbell
2013-10-26  8:27                   ` [Xen-devel] " Ian Campbell
2013-10-28 15:48                     ` Konrad Rzeszutek Wilk
2013-10-28 15:48                     ` [Xen-devel] " Konrad Rzeszutek Wilk
2013-10-24 16:30             ` Julien Grall
2013-10-23 22:08         ` Julien Grall
2013-09-30 14:45   ` Konrad Rzeszutek Wilk
2013-09-27 21:49 ` Julien Grall

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=526848C1.5030705@linaro.org \
    --to=julien.grall@linaro.org \
    --cc=ian.campbell@citrix.com \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.