From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56167) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dS7Zo-00011Y-GM for qemu-devel@nongnu.org; Mon, 03 Jul 2017 16:04:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dS7Zk-0000rC-GE for qemu-devel@nongnu.org; Mon, 03 Jul 2017 16:04:08 -0400 Received: from smtp.eu.citrix.com ([185.25.65.24]:7864) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1dS7Zk-0000qg-4G for qemu-devel@nongnu.org; Mon, 03 Jul 2017 16:04:04 -0400 References: <1498838825-23701-1-git-send-email-igor.druzhinin@citrix.com> <1498838825-23701-3-git-send-email-igor.druzhinin@citrix.com> From: Igor Druzhinin Message-ID: <62d87e1c-8a07-2c30-a105-77114a6dc2ef@citrix.com> Date: Mon, 3 Jul 2017 21:03:51 +0100 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 2/4] xen/mapcache: add an ability to create dummy mappings List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefano Stabellini Cc: xen-devel@lists.xenproject.org, qemu-devel@nongnu.org, anthony.perard@citrix.com, paul.durrant@citrix.com, pbonzini@redhat.com On 01/07/17 01:06, Stefano Stabellini wrote: > On Fri, 30 Jun 2017, Igor Druzhinin wrote: >> Dummys are simple anonymous mappings that are placed instead >> of regular foreign mappings in certain situations when we need >> to postpone the actual mapping but still have to give a >> memory region to QEMU to play with. >> >> This is planned to be used for restore on Xen. >> >> Signed-off-by: Igor Druzhinin >> >> --- >> hw/i386/xen/xen-mapcache.c | 36 ++++++++++++++++++++++++++++-------- >> 1 file changed, 28 insertions(+), 8 deletions(-) >> >> diff --git a/hw/i386/xen/xen-mapcache.c b/hw/i386/xen/xen-mapcache.c >> index e60156c..05050de 100644 >> --- a/hw/i386/xen/xen-mapcache.c >> +++ b/hw/i386/xen/xen-mapcache.c >> @@ -150,7 +150,8 @@ void xen_map_cache_init(phys_offset_to_gaddr_t f, void *opaque) >> >> static void xen_remap_bucket(MapCacheEntry *entry, >> hwaddr size, >> - hwaddr address_index) >> + hwaddr address_index, >> + bool dummy) >> { >> uint8_t *vaddr_base; >> xen_pfn_t *pfns; >> @@ -177,11 +178,25 @@ static void xen_remap_bucket(MapCacheEntry *entry, >> pfns[i] = (address_index << (MCACHE_BUCKET_SHIFT-XC_PAGE_SHIFT)) + i; >> } >> >> - vaddr_base = xenforeignmemory_map(xen_fmem, xen_domid, PROT_READ|PROT_WRITE, >> - nb_pfn, pfns, err); >> - if (vaddr_base == NULL) { >> - perror("xenforeignmemory_map"); >> - exit(-1); >> + if (!dummy) { >> + vaddr_base = xenforeignmemory_map(xen_fmem, xen_domid, >> + PROT_READ|PROT_WRITE, >> + nb_pfn, pfns, err); >> + if (vaddr_base == NULL) { >> + perror("xenforeignmemory_map"); >> + exit(-1); >> + } >> + } else { >> + /* >> + * We create dummy mappings where we are unable to create a foreign >> + * mapping immediately due to certain circumstances (i.e. on resume now) >> + */ >> + vaddr_base = mmap(NULL, size, PROT_READ|PROT_WRITE, >> + MAP_ANON|MAP_SHARED, -1, 0); >> + if (vaddr_base == NULL) { >> + perror("mmap"); >> + exit(-1); >> + } > > For our sanity in debugging this in the future, I think it's best if we > mark this mapcache entry as "dummy". Since we are at it, we could turn > the lock field of MapCacheEntry into a flag field and #define LOCK as > (1<<0) and DUMMY as (1<<1). Please do that as a separate patch. > Unfortunately, lock field is a reference counter (or at least it looks like according to the source code). It seems to me that it's technically possible to have one region locked from several places in QEMU code. For that reason, I'd like to introduce a separate field - something like uint8_t flags. Igor >>> } >> >> entry->vaddr_base = vaddr_base; >> @@ -211,6 +226,7 @@ static uint8_t *xen_map_cache_unlocked(hwaddr phys_addr, hwaddr size, >> hwaddr cache_size = size; >> hwaddr test_bit_size; >> bool translated = false; >> + bool dummy = false; >> >> tryagain: >> address_index = phys_addr >> MCACHE_BUCKET_SHIFT; >> @@ -262,14 +278,14 @@ tryagain: >> if (!entry) { >> entry = g_malloc0(sizeof (MapCacheEntry)); >> pentry->next = entry; >> - xen_remap_bucket(entry, cache_size, address_index); >> + xen_remap_bucket(entry, cache_size, address_index, dummy); >> } else if (!entry->lock) { >> if (!entry->vaddr_base || entry->paddr_index != address_index || >> entry->size != cache_size || >> !test_bits(address_offset >> XC_PAGE_SHIFT, >> test_bit_size >> XC_PAGE_SHIFT, >> entry->valid_mapping)) { >> - xen_remap_bucket(entry, cache_size, address_index); >> + xen_remap_bucket(entry, cache_size, address_index, dummy); >> } >> } >> >> @@ -282,6 +298,10 @@ tryagain: >> translated = true; >> goto tryagain; >> } >> + if (!dummy && runstate_check(RUN_STATE_INMIGRATE)) { >> + dummy = true; >> + goto tryagain; >> + } >> trace_xen_map_cache_return(NULL); >> return NULL; >> } >> -- >> 2.7.4 >> From mboxrd@z Thu Jan 1 00:00:00 1970 From: Igor Druzhinin Subject: Re: [PATCH 2/4] xen/mapcache: add an ability to create dummy mappings Date: Mon, 3 Jul 2017 21:03:51 +0100 Message-ID: <62d87e1c-8a07-2c30-a105-77114a6dc2ef@citrix.com> References: <1498838825-23701-1-git-send-email-igor.druzhinin@citrix.com> <1498838825-23701-3-git-send-email-igor.druzhinin@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dS7Zj-0003WI-VT for xen-devel@lists.xenproject.org; Mon, 03 Jul 2017 20:04:04 +0000 In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Stefano Stabellini Cc: anthony.perard@citrix.com, xen-devel@lists.xenproject.org, paul.durrant@citrix.com, qemu-devel@nongnu.org, pbonzini@redhat.com List-Id: xen-devel@lists.xenproject.org T24gMDEvMDcvMTcgMDE6MDYsIFN0ZWZhbm8gU3RhYmVsbGluaSB3cm90ZToKPiBPbiBGcmksIDMw IEp1biAyMDE3LCBJZ29yIERydXpoaW5pbiB3cm90ZToKPj4gRHVtbXlzIGFyZSBzaW1wbGUgYW5v bnltb3VzIG1hcHBpbmdzIHRoYXQgYXJlIHBsYWNlZCBpbnN0ZWFkCj4+IG9mIHJlZ3VsYXIgZm9y ZWlnbiBtYXBwaW5ncyBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgd2hlbiB3ZSBuZWVkCj4+IHRvIHBv c3Rwb25lIHRoZSBhY3R1YWwgbWFwcGluZyBidXQgc3RpbGwgaGF2ZSB0byBnaXZlIGEKPj4gbWVt b3J5IHJlZ2lvbiB0byBRRU1VIHRvIHBsYXkgd2l0aC4KPj4KPj4gVGhpcyBpcyBwbGFubmVkIHRv IGJlIHVzZWQgZm9yIHJlc3RvcmUgb24gWGVuLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBJZ29yIERy dXpoaW5pbiA8aWdvci5kcnV6aGluaW5AY2l0cml4LmNvbT4KPj4KPj4gLS0tCj4+ICBody9pMzg2 L3hlbi94ZW4tbWFwY2FjaGUuYyB8IDM2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0t LS0tLQo+PiAgMSBmaWxlIGNoYW5nZWQsIDI4IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0p Cj4+Cj4+IGRpZmYgLS1naXQgYS9ody9pMzg2L3hlbi94ZW4tbWFwY2FjaGUuYyBiL2h3L2kzODYv eGVuL3hlbi1tYXBjYWNoZS5jCj4+IGluZGV4IGU2MDE1NmMuLjA1MDUwZGUgMTAwNjQ0Cj4+IC0t LSBhL2h3L2kzODYveGVuL3hlbi1tYXBjYWNoZS5jCj4+ICsrKyBiL2h3L2kzODYveGVuL3hlbi1t YXBjYWNoZS5jCj4+IEBAIC0xNTAsNyArMTUwLDggQEAgdm9pZCB4ZW5fbWFwX2NhY2hlX2luaXQo cGh5c19vZmZzZXRfdG9fZ2FkZHJfdCBmLCB2b2lkICpvcGFxdWUpCj4+ICAKPj4gIHN0YXRpYyB2 b2lkIHhlbl9yZW1hcF9idWNrZXQoTWFwQ2FjaGVFbnRyeSAqZW50cnksCj4+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGh3YWRkciBzaXplLAo+PiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBod2FkZHIgYWRkcmVzc19pbmRleCkKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaHdhZGRyIGFkZHJlc3NfaW5kZXgsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJvb2wgZHVtbXkpCj4+ICB7Cj4+ICAgICAgdWludDhfdCAqdmFkZHJfYmFzZTsKPj4gICAg ICB4ZW5fcGZuX3QgKnBmbnM7Cj4+IEBAIC0xNzcsMTEgKzE3OCwyNSBAQCBzdGF0aWMgdm9pZCB4 ZW5fcmVtYXBfYnVja2V0KE1hcENhY2hlRW50cnkgKmVudHJ5LAo+PiAgICAgICAgICBwZm5zW2ld ID0gKGFkZHJlc3NfaW5kZXggPDwgKE1DQUNIRV9CVUNLRVRfU0hJRlQtWENfUEFHRV9TSElGVCkp ICsgaTsKPj4gICAgICB9Cj4+ICAKPj4gLSAgICB2YWRkcl9iYXNlID0geGVuZm9yZWlnbm1lbW9y eV9tYXAoeGVuX2ZtZW0sIHhlbl9kb21pZCwgUFJPVF9SRUFEfFBST1RfV1JJVEUsCj4+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5iX3BmbiwgcGZucywgZXJyKTsKPj4g LSAgICBpZiAodmFkZHJfYmFzZSA9PSBOVUxMKSB7Cj4+IC0gICAgICAgIHBlcnJvcigieGVuZm9y ZWlnbm1lbW9yeV9tYXAiKTsKPj4gLSAgICAgICAgZXhpdCgtMSk7Cj4+ICsgICAgaWYgKCFkdW1t eSkgewo+PiArICAgICAgICB2YWRkcl9iYXNlID0geGVuZm9yZWlnbm1lbW9yeV9tYXAoeGVuX2Zt ZW0sIHhlbl9kb21pZCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQUk9UX1JFQUR8UFJPVF9XUklURSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuYl9wZm4sIHBmbnMsIGVycik7Cj4+ICsgICAgICAgIGlmICh2YWRk cl9iYXNlID09IE5VTEwpIHsKPj4gKyAgICAgICAgICAgIHBlcnJvcigieGVuZm9yZWlnbm1lbW9y eV9tYXAiKTsKPj4gKyAgICAgICAgICAgIGV4aXQoLTEpOwo+PiArICAgICAgICB9Cj4+ICsgICAg fSBlbHNlIHsKPj4gKyAgICAgICAgLyoKPj4gKyAgICAgICAgICogV2UgY3JlYXRlIGR1bW15IG1h cHBpbmdzIHdoZXJlIHdlIGFyZSB1bmFibGUgdG8gY3JlYXRlIGEgZm9yZWlnbgo+PiArICAgICAg ICAgKiBtYXBwaW5nIGltbWVkaWF0ZWx5IGR1ZSB0byBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgKGku ZS4gb24gcmVzdW1lIG5vdykKPj4gKyAgICAgICAgICovCj4+ICsgICAgICAgIHZhZGRyX2Jhc2Ug PSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRHxQUk9UX1dSSVRFLAo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICBNQVBfQU5PTnxNQVBfU0hBUkVELCAtMSwgMCk7Cj4+ICsgICAgICAgIGlm ICh2YWRkcl9iYXNlID09IE5VTEwpIHsKPj4gKyAgICAgICAgICAgIHBlcnJvcigibW1hcCIpOwo+ PiArICAgICAgICAgICAgZXhpdCgtMSk7Cj4+ICsgICAgICAgIH0KPiAKPiBGb3Igb3VyIHNhbml0 eSBpbiBkZWJ1Z2dpbmcgdGhpcyBpbiB0aGUgZnV0dXJlLCBJIHRoaW5rIGl0J3MgYmVzdCBpZiB3 ZQo+IG1hcmsgdGhpcyBtYXBjYWNoZSBlbnRyeSBhcyAiZHVtbXkiLiBTaW5jZSB3ZSBhcmUgYXQg aXQsIHdlIGNvdWxkIHR1cm4KPiB0aGUgbG9jayBmaWVsZCBvZiBNYXBDYWNoZUVudHJ5IGludG8g YSBmbGFnIGZpZWxkIGFuZCAjZGVmaW5lIExPQ0sgYXMKPiAoMTw8MCkgYW5kIERVTU1ZIGFzICgx PDwxKS4gUGxlYXNlIGRvIHRoYXQgYXMgYSBzZXBhcmF0ZSBwYXRjaC4KPgoKVW5mb3J0dW5hdGVs eSwgbG9jayBmaWVsZCBpcyBhIHJlZmVyZW5jZSBjb3VudGVyIChvciBhdCBsZWFzdCBpdCBsb29r cwpsaWtlIGFjY29yZGluZyB0byB0aGUgc291cmNlIGNvZGUpLiBJdCBzZWVtcyB0byBtZSB0aGF0 IGl0J3MgdGVjaG5pY2FsbHkKcG9zc2libGUgdG8gaGF2ZSBvbmUgcmVnaW9uIGxvY2tlZCBmcm9t IHNldmVyYWwgcGxhY2VzIGluIFFFTVUgY29kZS4gRm9yCnRoYXQgcmVhc29uLCBJJ2QgbGlrZSB0 byBpbnRyb2R1Y2UgYSBzZXBhcmF0ZSBmaWVsZCAtIHNvbWV0aGluZyBsaWtlCnVpbnQ4X3QgZmxh Z3MuCgpJZ29yCgo+Pj4gICAgICB9Cj4+ICAKPj4gICAgICBlbnRyeS0+dmFkZHJfYmFzZSA9IHZh ZGRyX2Jhc2U7Cj4+IEBAIC0yMTEsNiArMjI2LDcgQEAgc3RhdGljIHVpbnQ4X3QgKnhlbl9tYXBf Y2FjaGVfdW5sb2NrZWQoaHdhZGRyIHBoeXNfYWRkciwgaHdhZGRyIHNpemUsCj4+ICAgICAgaHdh ZGRyIGNhY2hlX3NpemUgPSBzaXplOwo+PiAgICAgIGh3YWRkciB0ZXN0X2JpdF9zaXplOwo+PiAg ICAgIGJvb2wgdHJhbnNsYXRlZCA9IGZhbHNlOwo+PiArICAgIGJvb2wgZHVtbXkgPSBmYWxzZTsK Pj4gIAo+PiAgdHJ5YWdhaW46Cj4+ICAgICAgYWRkcmVzc19pbmRleCAgPSBwaHlzX2FkZHIgPj4g TUNBQ0hFX0JVQ0tFVF9TSElGVDsKPj4gQEAgLTI2MiwxNCArMjc4LDE0IEBAIHRyeWFnYWluOgo+ PiAgICAgIGlmICghZW50cnkpIHsKPj4gICAgICAgICAgZW50cnkgPSBnX21hbGxvYzAoc2l6ZW9m IChNYXBDYWNoZUVudHJ5KSk7Cj4+ICAgICAgICAgIHBlbnRyeS0+bmV4dCA9IGVudHJ5Owo+PiAt ICAgICAgICB4ZW5fcmVtYXBfYnVja2V0KGVudHJ5LCBjYWNoZV9zaXplLCBhZGRyZXNzX2luZGV4 KTsKPj4gKyAgICAgICAgeGVuX3JlbWFwX2J1Y2tldChlbnRyeSwgY2FjaGVfc2l6ZSwgYWRkcmVz c19pbmRleCwgZHVtbXkpOwo+PiAgICAgIH0gZWxzZSBpZiAoIWVudHJ5LT5sb2NrKSB7Cj4+ICAg ICAgICAgIGlmICghZW50cnktPnZhZGRyX2Jhc2UgfHwgZW50cnktPnBhZGRyX2luZGV4ICE9IGFk ZHJlc3NfaW5kZXggfHwKPj4gICAgICAgICAgICAgICAgICBlbnRyeS0+c2l6ZSAhPSBjYWNoZV9z aXplIHx8Cj4+ICAgICAgICAgICAgICAgICAgIXRlc3RfYml0cyhhZGRyZXNzX29mZnNldCA+PiBY Q19QQUdFX1NISUZULAo+PiAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2JpdF9zaXplID4+IFhD X1BBR0VfU0hJRlQsCj4+ICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT52YWxpZF9tYXBwaW5n KSkgewo+PiAtICAgICAgICAgICAgeGVuX3JlbWFwX2J1Y2tldChlbnRyeSwgY2FjaGVfc2l6ZSwg YWRkcmVzc19pbmRleCk7Cj4+ICsgICAgICAgICAgICB4ZW5fcmVtYXBfYnVja2V0KGVudHJ5LCBj YWNoZV9zaXplLCBhZGRyZXNzX2luZGV4LCBkdW1teSk7Cj4+ICAgICAgICAgIH0KPj4gICAgICB9 Cj4+ICAKPj4gQEAgLTI4Miw2ICsyOTgsMTAgQEAgdHJ5YWdhaW46Cj4+ICAgICAgICAgICAgICB0 cmFuc2xhdGVkID0gdHJ1ZTsKPj4gICAgICAgICAgICAgIGdvdG8gdHJ5YWdhaW47Cj4+ICAgICAg ICAgIH0KPj4gKyAgICAgICAgaWYgKCFkdW1teSAmJiBydW5zdGF0ZV9jaGVjayhSVU5fU1RBVEVf SU5NSUdSQVRFKSkgewo+PiArICAgICAgICAgICAgZHVtbXkgPSB0cnVlOwo+PiArICAgICAgICAg ICAgZ290byB0cnlhZ2FpbjsKPj4gKyAgICAgICAgfQo+PiAgICAgICAgICB0cmFjZV94ZW5fbWFw X2NhY2hlX3JldHVybihOVUxMKTsKPj4gICAgICAgICAgcmV0dXJuIE5VTEw7Cj4+ICAgICAgfQo+ PiAtLSAKPj4gMi43LjQKPj4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcK aHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=