From: George Dunlap <george.dunlap@eu.citrix.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: xen-devel <xen-devel@lists.xenproject.org>,
Keir Fraser <keir@xen.org>, Tim Deegan <tim@xen.org>
Subject: Re: [PATCH v14 12/17] pvh: Use PV handlers for cpuid, and IO
Date: Thu, 7 Nov 2013 16:50:16 +0000 [thread overview]
Message-ID: <527BC4C8.7090305@eu.citrix.com> (raw)
In-Reply-To: <5278BD9A02000078000FF62A@nat28.tlf.novell.com>
On 05/11/13 08:42, Jan Beulich wrote:
>>>> On 04.11.13 at 13:15, George Dunlap <george.dunlap@eu.citrix.com> wrote:
>> @@ -140,6 +146,9 @@ static int hvmemul_do_io(
>> }
>> }
>>
>> + if ( is_pvh_vcpu(curr) )
>> + ASSERT(vio->io_state == HVMIO_none);
> Can we really get here for PVH?
Nope -- sorry I missed that one. :-)
>
>> +static int pvhemul_do_pio(
>> + unsigned long port, int size, paddr_t ram_gpa, int dir, void *p_data)
>> +{
>> + paddr_t value = ram_gpa;
>> + struct vcpu *curr = current;
>> + struct cpu_user_regs *regs = guest_cpu_user_regs();
>> +
>> + /*
>> + * Weird-sized accesses have undefined behaviour: we discard writes
>> + * and read all-ones.
>> + */
>> + if ( unlikely((size > sizeof(long)) || (size & (size - 1))) )
> I think you can safely ASSERT() here - PIO instructions never have
> operand sizes not matching the criteria above.
>
>> + {
>> + gdprintk(XENLOG_WARNING, "bad mmio size %d\n", size);
>> + ASSERT(p_data != NULL); /* cannot happen with a REP prefix */
>> + if ( dir == IOREQ_READ )
>> + memset(p_data, ~0, size);
>> + return X86EMUL_UNHANDLEABLE;
>> + }
>> +
>> + if ( dir == IOREQ_WRITE ) {
>> + if ( (p_data != NULL) )
> Coding style (two instances).
>
>> + {
>> + memcpy(&value, p_data, size);
>> + p_data = NULL;
>> + }
>> +
>> + if ( dir == IOREQ_WRITE )
>> + trace_io_assist(0, dir, 1, port, value);
> Indentation (or really pointless if()).
Oops...
>
>> +
>> + guest_io_write(port, size, value, curr, regs);
>> + }
>> + else
>> + {
>> + value = guest_io_read(port, size, curr, regs);
>> + trace_io_assist(0, dir, 1, port, value);
>> + if ( (p_data != NULL) )
> Coding style again (sort of at least).
>
>> + memcpy(p_data, &value, size);
>> + memcpy(®s->eax, &value, size);
> What is this being matched by in (a) the HVM equivalent and (b)
> the write code path? And even if needed, this surely wouldn't
> be correct for the size == 4 case (where the upper 32 bits of
> any destination register get zeroed).
>
> Hmm, now that I take a second look, I see that this apparently
> originates from handle_pio() (which however does the reading
> of ->eax as well), so the above comment actually points out a
> bug there (which I'm going to prepare a patch for right away).
>
>> + }
>> +
>> + return X86EMUL_OKAY;
>> +}
>> +
>> +
>> int hvmemul_do_pio(
>> unsigned long port, unsigned long *reps, int size,
>> paddr_t ram_gpa, int dir, int df, void *p_data)
>> {
>> - return hvmemul_do_io(0, port, reps, size, ram_gpa, dir, df, p_data);
>> + return is_hvm_vcpu(current) ?
>> + hvmemul_do_io(0, port, reps, size, ram_gpa, dir, df, p_data) :
>> + pvhemul_do_pio(port, size, ram_gpa, dir, p_data);
> You're losing "reps" and "df" here.
Hmm... yes. Time to do some re-thinking on this one.
-George
next prev parent reply other threads:[~2013-11-07 16:50 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-04 12:14 [PATCH v14 00/20] Introduce PVH domU support George Dunlap
2013-11-04 12:14 ` [PATCH v14 01/17] Allow vmx_update_debug_state to be called when v!=current George Dunlap
2013-11-04 16:01 ` Jan Beulich
2013-11-04 16:18 ` George Dunlap
2013-11-04 12:14 ` [PATCH v14 02/17] libxc: Move temporary grant table mapping to end of memory George Dunlap
2013-11-05 10:57 ` Roger Pau Monné
2013-11-05 11:01 ` Ian Campbell
2013-11-04 12:14 ` [PATCH v14 03/17] pvh prep: code motion George Dunlap
2013-11-04 16:14 ` Jan Beulich
2013-11-07 10:48 ` George Dunlap
2013-11-04 12:14 ` [PATCH v14 04/17] Introduce pv guest type and has_hvm_container macros George Dunlap
2013-11-04 16:20 ` Jan Beulich
2013-11-04 16:26 ` George Dunlap
2013-11-04 16:39 ` George Dunlap
2013-11-07 10:55 ` George Dunlap
2013-11-07 11:04 ` Jan Beulich
2013-11-07 11:11 ` George Dunlap
2013-11-04 12:14 ` [PATCH v14 05/17] pvh: Introduce PVH guest type George Dunlap
2013-11-06 23:28 ` Tim Deegan
2013-11-07 11:21 ` George Dunlap
2013-11-07 16:59 ` Tim Deegan
2013-11-04 12:14 ` [PATCH v14 06/17] pvh: Disable unneeded features of HVM containers George Dunlap
2013-11-04 16:21 ` George Dunlap
2013-11-04 16:37 ` Jan Beulich
2013-11-06 23:54 ` Tim Deegan
2013-11-07 9:00 ` Jan Beulich
2013-11-07 17:02 ` Tim Deegan
2013-11-04 12:14 ` [PATCH v14 07/17] pvh: vmx-specific changes George Dunlap
2013-11-04 16:19 ` George Dunlap
2013-11-04 16:42 ` Jan Beulich
2013-11-07 0:28 ` Tim Deegan
2013-11-07 0:27 ` Tim Deegan
2013-11-07 14:50 ` George Dunlap
2013-11-07 15:40 ` Andrew Cooper
2013-11-07 15:43 ` George Dunlap
2013-11-07 17:00 ` Tim Deegan
2013-11-04 12:14 ` [PATCH v14 08/17] pvh: Do not allow PVH guests to change paging modes George Dunlap
2013-11-04 12:14 ` [PATCH v14 09/17] pvh: PVH access to hypercalls George Dunlap
2013-11-04 12:14 ` [PATCH v14 10/17] pvh: Use PV e820 George Dunlap
2013-11-04 12:15 ` [PATCH v14 11/17] pvh: Set up more PV stuff in set_info_guest George Dunlap
2013-11-04 16:20 ` George Dunlap
2013-11-04 16:53 ` Jan Beulich
2013-11-07 15:51 ` George Dunlap
2013-11-07 16:10 ` Jan Beulich
2013-11-07 16:33 ` George Dunlap
2013-11-04 12:15 ` [PATCH v14 12/17] pvh: Use PV handlers for cpuid, and IO George Dunlap
2013-11-04 16:20 ` George Dunlap
2013-11-05 8:42 ` Jan Beulich
2013-11-07 16:50 ` George Dunlap [this message]
2013-11-04 12:15 ` [PATCH v14 13/17] pvh: Disable 32-bit guest support for now George Dunlap
2013-11-04 12:15 ` [PATCH v14 14/17] pvh: Restrict tsc_mode to NEVER_EMULATE " George Dunlap
2013-11-04 12:15 ` [PATCH v14 15/17] pvh: Documentation George Dunlap
2013-11-04 12:15 ` [PATCH v14 16/17] PVH xen tools: libxc changes to build a PVH guest George Dunlap
2013-11-04 12:15 ` [PATCH v14 17/17] PVH xen tools: libxl changes to create " George Dunlap
2013-11-04 16:59 ` [PATCH v14 00/20] Introduce PVH domU support Konrad Rzeszutek Wilk
2013-11-04 17:23 ` George Dunlap
2013-11-04 17:34 ` Tim Deegan
2013-11-08 15:41 ` George Dunlap
2013-11-08 15:53 ` George Dunlap
2013-11-08 17:01 ` Tim Deegan
2013-11-08 17:06 ` George Dunlap
2013-11-08 15:58 ` Konrad Rzeszutek Wilk
2013-11-07 1:11 ` Tim Deegan
2013-11-11 12:37 ` Roger Pau Monné
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=527BC4C8.7090305@eu.citrix.com \
--to=george.dunlap@eu.citrix.com \
--cc=JBeulich@suse.com \
--cc=keir@xen.org \
--cc=tim@xen.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.