From mboxrd@z Thu Jan 1 00:00:00 1970 From: Samuel Thibault Subject: [PATCH] minios: Fix bug when blkfront reading into zero-mapped buffer Date: Tue, 29 Jan 2008 14:12:20 +0000 Message-ID: <20080129141220.GA16376@implementation.uk.xensource.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii 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 minios: Fix bug when blkfront reading into zero-mapped buffer by just poking the page. No need to use virtual_to_mfn() for the ring since that is a real page. Signed-off-by: Samuel Thibault diff -r 807502236560 extras/mini-os/blkfront.c --- a/extras/mini-os/blkfront.c Tue Jan 29 14:07:26 2008 +0000 +++ b/extras/mini-os/blkfront.c Tue Jan 29 14:07:32 2008 +0000 @@ -102,7 +102,7 @@ struct blkfront_dev *init_blkfront(char SHARED_RING_INIT(s); FRONT_RING_INIT(&dev->ring, s, PAGE_SIZE); - dev->ring_ref = gnttab_grant_access(0,virtual_to_mfn(s),0); + dev->ring_ref = gnttab_grant_access(0,virt_to_mfn(s),0); evtchn_alloc_unbound_t op; op.dom = DOMID_SELF; @@ -288,6 +288,11 @@ void blkfront_aio(struct blkfront_aiocb for (j = 0; j < n; j++) { uintptr_t data = start + j * PAGE_SIZE; + if (!write) { + /* Trigger CoW if needed */ + *(char*)data = 0; + barrier(); + } aiocbp->gref[j] = req->seg[j].gref = gnttab_grant_access(0, virtual_to_mfn(data), write); req->seg[j].first_sect = 0;