From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: string mmio/pio across page boundaries Date: Thu, 23 Nov 2006 11:22:13 +0100 Message-ID: <45658465.76E4.0078.0@novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org When preparing arguments for send_mmio_req() or send_pio_req() in hvm where a single iteration crosses a page boundary, the value to be written is copied from guest memory, but I can't see where the value read is copied to guest memory. Is this case simply missing? Also, a long while back the logic to calculate when wrapping occurs was changed with two subsequent patches. As I'm looking at the code now it seems like - only the first patch got applied to handle_mmio() (i.e., the logic is still broken - neither patch got applied to {svm,vmx}_io_instruction(). Further, there is a comment in handle_mmio() now saying "We need to make sure we advance to the point where the next request will be on a different page. If we're going down, that means advancing until one byte before the start of the page, hence +1." This wasn't applied similarly to {svm,vmx}_io_instruction(). And the actual code seems wrong: If e.g. addr is on a page boundary, count will become zero. I would think that the +1 must be outside of the division. Was this intentional in some way? Otherwise, I'll prepare a patch to address all of these. Thanks, Jan