From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:42247) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R5JYs-0005YX-78 for qemu-devel@nongnu.org; Sun, 18 Sep 2011 11:45:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1R5JYr-0001Dn-72 for qemu-devel@nongnu.org; Sun, 18 Sep 2011 11:45:42 -0400 Received: from mx1.redhat.com ([209.132.183.28]:61384) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R5JYq-0001Dh-NI for qemu-devel@nongnu.org; Sun, 18 Sep 2011 11:45:41 -0400 Message-ID: <4E761220.3080707@redhat.com> Date: Sun, 18 Sep 2011 18:45:36 +0300 From: Avi Kivity MIME-Version: 1.0 References: <4E75E7A4.50702@web.de> <4E75E96E.90101@web.de> <4E761051.9000204@redhat.com> <4E76119F.5040004@web.de> In-Reply-To: <4E76119F.5040004@web.de> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 1/2] memory: Fix old portio word accesses List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jan Kiszka Cc: qemu-devel , Richard Henderson On 09/18/2011 06:43 PM, Jan Kiszka wrote: > On 2011-09-18 17:37, Avi Kivity wrote: > > On 09/18/2011 03:51 PM, Jan Kiszka wrote: > >> From: Jan Kiszka > >> > >> As we register old portio regions via ioport_register, we are also > >> responsible for providing the word access wrapper. > >> > >> Signed-off-by: Jan Kiszka > >> --- > >> > >> Oops, was lacking a shift for word reads. > >> > >> memory.c | 10 ++++++++++ > >> 1 files changed, 10 insertions(+), 0 deletions(-) > >> > >> diff --git a/memory.c b/memory.c > >> index b3ee232..aef4702 100644 > >> --- a/memory.c > >> +++ b/memory.c > >> @@ -397,6 +397,11 @@ static void memory_region_iorange_read(IORange > >> *iorange, > >> *data = ((uint64_t)1<< (width * 8)) - 1; > >> if (mrp) { > >> *data = mrp->read(mr->opaque, offset + mr->offset); > >> + } else if (width == 2) { > >> + mrp = find_portio(mr, offset, 1, false); > >> + assert(mrp); > >> + *data = mrp->read(mr->opaque, offset + mr->offset) | > >> + (mrp->read(mr->opaque, offset + mr->offset + > >> 1)<< 8); > >> } > > > > What about width 4? > > This is PIO, limited by the x86 address space to 16 bit. Will add a comment. x86 PIO is not limited to 16 bits, just ISA, which memory.c knows nothing about. > > Why not use access_with_adjusted_size()? > > Because of different accessor prototypes. > Can be thunked. There is a different issue, a_w_a_s() can use small accesses to emulate large ones, but not vice versa. It needs fixing anyway. -- error compiling committee.c: too many arguments to function