From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LCII7-0000Tz-Lo for qemu-devel@nongnu.org; Mon, 15 Dec 2008 13:35:39 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LCII6-0000RF-6H for qemu-devel@nongnu.org; Mon, 15 Dec 2008 13:35:38 -0500 Received: from [199.232.76.173] (port=34967 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LCII5-0000Qv-Ts for qemu-devel@nongnu.org; Mon, 15 Dec 2008 13:35:37 -0500 Received: from yw-out-1718.google.com ([74.125.46.153]:32316) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LCII5-0005Bm-7d for qemu-devel@nongnu.org; Mon, 15 Dec 2008 13:35:37 -0500 Received: by yw-out-1718.google.com with SMTP id 6so1299866ywa.82 for ; Mon, 15 Dec 2008 10:35:36 -0800 (PST) Message-ID: Date: Mon, 15 Dec 2008 20:35:36 +0200 From: "Blue Swirl" Subject: Re: [Qemu-devel] Re: [PATCH 2 of 5] add can_dma/post_dma for direct IO In-Reply-To: <494591F7.3080002@codemonkey.ws> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_19211_31991591.1229366136100" References: <4942BDEE.7020003@codemonkey.ws> <49437EC8.6020506@redhat.com> <4943E68E.3030400@codemonkey.ws> <4944117C.6030404@redhat.com> <49442410.7020608@codemonkey.ws> <4944A1B5.5080300@redhat.com> <49455A33.207@codemonkey.ws> <49456337.4000000@redhat.com> <494591F7.3080002@codemonkey.ws> Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, Anthony Liguori Cc: Andrea Arcangeli , chrisw@redhat.com, Avi Kivity , kvm@vger.kernel.org, Gerd Hoffmann ------=_Part_19211_31991591.1229366136100 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline On 12/15/08, Anthony Liguori wrote: > Avi Kivity wrote: > > > Anthony Liguori wrote: > > > > > I've thought quite a bit about it, and I'm becoming less convinced that > this sort of API is going to be helpful. > > > > > > I was thinking that we need to make one minor change to the map API I > proposed. It should return a mapped size as an output parameter and take a > flag as to whether partial mappings can be handled. The effect would be > that you never bounce to RAM which means that you can also quite accurately > determine the maximum amount of bouncing (it should be proportional to the > amount of MMIO memory that's registered). > > > > > > > That's pointless; cirrus for example has 8MB of mmio while a cpu-to-vram > blit is in progress, and some random device we'll add tomorrow could easily > introduce more. Our APIs shouldn't depend on properties of emulated > hardware, at least as much as possible. > > > > One way to think of what I'm suggesting, is that if for every > cpu_register_physical_memory call for MMIO, we allocated a buffer, then > whenever map() was called on MMIO, we would return that already allocated > buffer. The overhead is fixed and honestly relatively small. Much smaller > than dma.c proposes. > > But you can be smarter, and lazily allocate those buffers for MMIO. That > will reduce the up front memory consumption. I'd be perfectly happy though > if the first implementation just malloc() on cpu_register_physical_memory > for the sake of simplicity. Maybe the buffer thing should not be called DMA, but something like bounce-buffers? > > I'll enumerate the functions that dma.c provides: > > - convert guest physical addresses to host virtual addresses > > > > The map() api does this. > > > > - construct an iovec for scatter/gather > > > > The map() api does not do this. > > > > - handle guest physical addresses for which no host virtual addresses > exist, while controlling memory use > > - take care of the dirty bit > > - provide a place for adding hooks to hardware that can modify dma > operations generically (emulated iommus, transforming dma engines) > > > > The map() api does all of this. > > > > I believe that a dma api that fails to address all of these requirements > is trying to solve too few problems at the same time, and will either cause > dma clients to be unduly complicated, or will require rewriting. > > > > I think there's a disconnect between what you describe and what the current > code does. I think there's a very simple solution, let's start with the > map() api. I'm convinced that the virtio support for it will be trivial and > that virtio will not benefit from the dma.c api proposed. I'm willing to do > the virtio map implementation to demonstrate this. Let's see two > implementations that use the dma.c api before we commit to it. I'd like to > see at least a network device and a block device. I don't believe network > devices will benefit from it because they don't support partial submissions. > > I like any API that reduces duplicate code. It's easy to demonstrate that > with patches. Based on my current understanding of the API and what I > expect from the devices using it, I don't believe the API will actually do > that. It's quite easy to prove me wrong though. I changed the ESP SCSI and Lance Ethernet on Sparc32 to resolve the IO address to physical memory (see patch). ESP works (no zero copy yet), Lance doesn't. It looks much better. Because the resolving activity is performed in serial steps, unbounded IO vector allocation does not happen, but we still could launch as many IO as there are free IO vectors. There are still some issues I'm not happy yet: - handling of access violations: resolving should stop before the bad page, the transfers should be done until that and then post error. - bounce buffers needed for Lance byte swapping are not well designed (stack) This lead me to the thought that maybe we should not hide the bounce buffer activity, but instead make it more explicit for the device that needs bouncing. For the other device, the buffering or lack of it should be opaque. Also the virtual-to-physical address resolution API could be generic, ie all resolver functions should take same parameters so that the devices would not need to know the next higher level device. ------=_Part_19211_31991591.1229366136100 Content-Type: plain/text; name=translation-api-sparc.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_forgc882 Content-Disposition: attachment; filename=translation-api-sparc.diff SW5kZXg6IHFlbXUvaHcvZXNwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL2h3L2VzcC5jCTIw MDgtMTItMTUgMTc6NTA6MDYuMDAwMDAwMDAwICswMDAwCisrKyBxZW11L2h3L2VzcC5jCTIwMDgt MTItMTUgMTg6MTE6MjYuMDAwMDAwMDAwICswMDAwCkBAIC03Niw4ICs3Niw3IEBACiAgICAgdWlu dDhfdCAqYXN5bmNfYnVmOwogICAgIHVpbnQzMl90IGFzeW5jX2xlbjsKIAotICAgIGVzcGRtYV9t ZW1vcnlfcmVhZF93cml0ZSBkbWFfbWVtb3J5X3JlYWQ7Ci0gICAgZXNwZG1hX21lbW9yeV9yZWFk X3dyaXRlIGRtYV9tZW1vcnlfd3JpdGU7CisgICAgZXNwZG1hX21lbW9yeV90cmFuc2xhdGUgZG1h X21lbW9yeV90cmFuc2xhdGU7CiAgICAgdm9pZCAqZG1hX29wYXF1ZTsKIH07CiAKQEAgLTE2Miw2 ICsxNjEsMjQgQEAKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkIGVzcF9tZW1fcncoRVNQU3RhdGUg KnMsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IGlzX3dyaXRlKQoreworICAgIHRhcmdldF9w aHlzX2FkZHJfdCBwaHlzOworICAgIHNpemVfdCBsZWZ0LCBuZXdsZW47CisKKyAgICBsZWZ0ID0g bGVuOworICAgIG5ld2xlbiA9IDA7CisgICAgd2hpbGUgKGxlZnQgPiAwKSB7CisgICAgICAgIHBo eXMgPSBzLT5kbWFfbWVtb3J5X3RyYW5zbGF0ZShzLT5kbWFfb3BhcXVlLCAwLCBsZW4sICZuZXds ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc193cml0ZSk7Cisg ICAgICAgIGlmIChwaHlzID09ICh0YXJnZXRfcGh5c19hZGRyX3QpIC0xKQorICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIERQUklOVEYoImVzcF9tZW1fcncgKGRtYSBhZGRyIDB4IiBUQVJHRVRf Rk1UX3BseCAiKVxuIiwgcGh5cyk7CisgICAgICAgIGNwdV9waHlzaWNhbF9tZW1vcnlfcncocGh5 cywgYnVmLCBuZXdsZW4sIGlzX3dyaXRlKTsKKyAgICAgICAgbGVmdCAtPSBuZXdsZW47CisgICAg fQorfQorCiBzdGF0aWMgdWludDMyX3QgZ2V0X2NtZChFU1BTdGF0ZSAqcywgdWludDhfdCAqYnVm KQogewogICAgIHVpbnQzMl90IGRtYWxlbjsKQEAgLTE3MCw3ICsxODcsNyBAQAogICAgIHRhcmdl dCA9IHMtPndyZWdzW0VTUF9XQlVTSURdICYgQlVTSURfRElEOwogICAgIGlmIChzLT5kbWEpIHsK ICAgICAgICAgZG1hbGVuID0gcy0+cnJlZ3NbRVNQX1RDTE9dIHwgKHMtPnJyZWdzW0VTUF9UQ01J RF0gPDwgOCk7Ci0gICAgICAgIHMtPmRtYV9tZW1vcnlfcmVhZChzLT5kbWFfb3BhcXVlLCBidWYs IGRtYWxlbik7CisgICAgICAgIGVzcF9tZW1fcncocywgYnVmLCBkbWFsZW4sIDApOwogICAgIH0g ZWxzZSB7CiAgICAgICAgIGRtYWxlbiA9IHMtPnRpX3NpemU7CiAgICAgICAgIG1lbWNweShidWYs IHMtPnRpX2J1ZiwgZG1hbGVuKTsKQEAgLTI1NSw3ICsyNzIsNyBAQAogICAgIHMtPnRpX2J1Zlsw XSA9IHMtPnNlbnNlOwogICAgIHMtPnRpX2J1ZlsxXSA9IDA7CiAgICAgaWYgKHMtPmRtYSkgewot ICAgICAgICBzLT5kbWFfbWVtb3J5X3dyaXRlKHMtPmRtYV9vcGFxdWUsIHMtPnRpX2J1ZiwgMik7 CisgICAgICAgIGVzcF9tZW1fcncocywgcy0+dGlfYnVmLCAyLCAxKTsKICAgICAgICAgcy0+cnJl Z3NbRVNQX1JTVEFUXSA9IFNUQVRfVEMgfCBTVEFUX1NUOwogICAgICAgICBzLT5ycmVnc1tFU1Bf UklOVFJdID0gSU5UUl9CUyB8IElOVFJfRkM7CiAgICAgICAgIHMtPnJyZWdzW0VTUF9SU0VRXSA9 IFNFUV9DRDsKQEAgLTI4OCw3ICszMDUsNyBAQAogICAgIGxlbiA9IHMtPmRtYV9sZWZ0OwogICAg IGlmIChzLT5kb19jbWQpIHsKICAgICAgICAgRFBSSU5URigiY29tbWFuZCBsZW4gJWQgKyAlZFxu Iiwgcy0+Y21kbGVuLCBsZW4pOwotICAgICAgICBzLT5kbWFfbWVtb3J5X3JlYWQocy0+ZG1hX29w YXF1ZSwgJnMtPmNtZGJ1ZltzLT5jbWRsZW5dLCBsZW4pOworICAgICAgICBlc3BfbWVtX3J3KHMs ICZzLT5jbWRidWZbcy0+Y21kbGVuXSwgbGVuLCAhdG9fZGV2aWNlKTsKICAgICAgICAgcy0+dGlf c2l6ZSA9IDA7CiAgICAgICAgIHMtPmNtZGxlbiA9IDA7CiAgICAgICAgIHMtPmRvX2NtZCA9IDA7 CkBAIC0zMDIsMTEgKzMxOSw3IEBACiAgICAgaWYgKGxlbiA+IHMtPmFzeW5jX2xlbikgewogICAg ICAgICBsZW4gPSBzLT5hc3luY19sZW47CiAgICAgfQotICAgIGlmICh0b19kZXZpY2UpIHsKLSAg ICAgICAgcy0+ZG1hX21lbW9yeV9yZWFkKHMtPmRtYV9vcGFxdWUsIHMtPmFzeW5jX2J1ZiwgbGVu KTsKLSAgICB9IGVsc2UgewotICAgICAgICBzLT5kbWFfbWVtb3J5X3dyaXRlKHMtPmRtYV9vcGFx dWUsIHMtPmFzeW5jX2J1ZiwgbGVuKTsKLSAgICB9CisgICAgZXNwX21lbV9ydyhzLCBzLT5hc3lu Y19idWYsIGxlbiwgIXRvX2RldmljZSk7CiAgICAgcy0+ZG1hX2xlZnQgLT0gbGVuOwogICAgIHMt PmFzeW5jX2J1ZiArPSBsZW47CiAgICAgcy0+YXN5bmNfbGVuIC09IGxlbjsKQEAgLTY0NSw4ICs2 NTgsNyBAQAogfQogCiB2b2lkICplc3BfaW5pdCh0YXJnZXRfcGh5c19hZGRyX3QgZXNwYWRkciwg aW50IGl0X3NoaWZ0LAotICAgICAgICAgICAgICAgZXNwZG1hX21lbW9yeV9yZWFkX3dyaXRlIGRt YV9tZW1vcnlfcmVhZCwKLSAgICAgICAgICAgICAgIGVzcGRtYV9tZW1vcnlfcmVhZF93cml0ZSBk bWFfbWVtb3J5X3dyaXRlLAorICAgICAgICAgICAgICAgZXNwZG1hX21lbW9yeV90cmFuc2xhdGUg ZG1hX21lbW9yeV90cmFuc2xhdGUsCiAgICAgICAgICAgICAgICB2b2lkICpkbWFfb3BhcXVlLCBx ZW11X2lycSBpcnEsIHFlbXVfaXJxICpyZXNldCkKIHsKICAgICBFU1BTdGF0ZSAqczsKQEAgLTY1 OCw4ICs2NzAsNyBAQAogCiAgICAgcy0+aXJxID0gaXJxOwogICAgIHMtPml0X3NoaWZ0ID0gaXRf c2hpZnQ7Ci0gICAgcy0+ZG1hX21lbW9yeV9yZWFkID0gZG1hX21lbW9yeV9yZWFkOwotICAgIHMt PmRtYV9tZW1vcnlfd3JpdGUgPSBkbWFfbWVtb3J5X3dyaXRlOworICAgIHMtPmRtYV9tZW1vcnlf dHJhbnNsYXRlID0gZG1hX21lbW9yeV90cmFuc2xhdGU7CiAgICAgcy0+ZG1hX29wYXF1ZSA9IGRt YV9vcGFxdWU7CiAKICAgICBlc3BfaW9fbWVtb3J5ID0gY3B1X3JlZ2lzdGVyX2lvX21lbW9yeSgw LCBlc3BfbWVtX3JlYWQsIGVzcF9tZW1fd3JpdGUsIHMpOwpJbmRleDogcWVtdS9ody9pb21tdS5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9ody9pb21tdS5jCTIwMDgtMTItMTUgMTc6NTA6MDYu MDAwMDAwMDAwICswMDAwCisrKyBxZW11L2h3L2lvbW11LmMJMjAwOC0xMi0xNSAxODoxMToyNi4w MDAwMDAwMDAgKzAwMDAKQEAgLTI2NSwyNCArMjY1LDEyIEBACiAgICAgcmV0dXJuIHBhOwogfQog Ci1zdGF0aWMgdm9pZCBpb21tdV9iYWRfYWRkcihJT01NVVN0YXRlICpzLCB0YXJnZXRfcGh5c19h ZGRyX3QgYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpc193cml0ZSkKK3Rh cmdldF9waHlzX2FkZHJfdCBpb21tdV90cmFuc2xhdGUodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5 c19hZGRyX3QgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IGxlbiwgc2l6ZV90ICpuZXdsZW4sIGludCBpc193cml0ZSkKIHsKLSAgICBEUFJJTlRGKCJiYWQg YWRkciAiIFRBUkdFVF9GTVRfcGx4ICJcbiIsIGFkZHIpOwotICAgIHMtPnJlZ3NbSU9NTVVfQUZT Ul0gPSBJT01NVV9BRlNSX0VSUiB8IElPTU1VX0FGU1JfTEUgfCBJT01NVV9BRlNSX1JFU1YgfAot ICAgICAgICBJT01NVV9BRlNSX0ZBVjsKLSAgICBpZiAoIWlzX3dyaXRlKQotICAgICAgICBzLT5y ZWdzW0lPTU1VX0FGU1JdIHw9IElPTU1VX0FGU1JfUkQ7Ci0gICAgcy0+cmVnc1tJT01NVV9BRkFS XSA9IGFkZHI7Ci0gICAgcWVtdV9pcnFfcmFpc2Uocy0+aXJxKTsKLX0KLQotdm9pZCBzcGFyY19p b21tdV9tZW1vcnlfcncodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbiwgaW50IGlzX3dy aXRlKQotewotICAgIGludCBsOworICAgIGludCBsLCBmaXJzdCA9IDE7CiAgICAgdWludDMyX3Qg ZmxhZ3M7Ci0gICAgdGFyZ2V0X3BoeXNfYWRkcl90IHBhZ2UsIHBoeXNfYWRkcjsKKyAgICB0YXJn ZXRfcGh5c19hZGRyX3QgcGFnZSwgcGh5c19hZGRyLCBwcmV2X3BoeXMgPSAwLCBmaXJzdF9waHlz ID0gMDsKIAogICAgIHdoaWxlIChsZW4gPiAwKSB7CiAgICAgICAgIHBhZ2UgPSBhZGRyICYgSU9N TVVfUEFHRV9NQVNLOwpAQCAtMjkxLDIzICsyNzksMjggQEAKICAgICAgICAgICAgIGwgPSBsZW47 CiAgICAgICAgIGZsYWdzID0gaW9tbXVfcGFnZV9nZXRfZmxhZ3Mob3BhcXVlLCBwYWdlKTsKICAg ICAgICAgaWYgKCEoZmxhZ3MgJiBJT1BURV9WQUxJRCkpIHsKLSAgICAgICAgICAgIGlvbW11X2Jh ZF9hZGRyKG9wYXF1ZSwgcGFnZSwgaXNfd3JpdGUpOwotICAgICAgICAgICAgcmV0dXJuOworICAg ICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgICAgIHBoeXNfYWRkciA9IGlvbW11 X3RyYW5zbGF0ZV9wYShhZGRyLCBmbGFncyk7CiAgICAgICAgIGlmIChpc193cml0ZSkgewogICAg ICAgICAgICAgaWYgKCEoZmxhZ3MgJiBJT1BURV9XUklURSkpIHsKLSAgICAgICAgICAgICAgICBp b21tdV9iYWRfYWRkcihvcGFxdWUsIHBhZ2UsIGlzX3dyaXRlKTsKLSAgICAgICAgICAgICAgICBy ZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgfQotICAgICAg ICAgICAgY3B1X3BoeXNpY2FsX21lbW9yeV93cml0ZShwaHlzX2FkZHIsIGJ1ZiwgbCk7CisgICAg ICAgIH0KKyAgICAgICAgcGh5c19hZGRyID0gaW9tbXVfdHJhbnNsYXRlX3BhKGFkZHIsIGZsYWdz KTsKKyAgICAgICAgaWYgKGZpcnN0KSB7CisgICAgICAgICAgICBmaXJzdCA9IDA7CisgICAgICAg ICAgICBmaXJzdF9waHlzID0gcHJldl9waHlzID0gcGh5c19hZGRyOworICAgICAgICB9IGVsc2Ug aWYgKChwaHlzX2FkZHIgJiBJT01NVV9QQUdFX01BU0spICE9CisgICAgICAgICAgICAgICAgICAg KHByZXZfcGh5cyAmIElPTU1VX1BBR0VfTUFTSykgKyBJT01NVV9QQUdFX1NJWkUpIHsKKyAgICAg ICAgICAgIHJldHVybiBmaXJzdF9waHlzOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg Y3B1X3BoeXNpY2FsX21lbW9yeV9yZWFkKHBoeXNfYWRkciwgYnVmLCBsKTsKKyAgICAgICAgICAg IHByZXZfcGh5cyA9IHBoeXNfYWRkcjsKICAgICAgICAgfQogICAgICAgICBsZW4gLT0gbDsKLSAg ICAgICAgYnVmICs9IGw7CiAgICAgICAgIGFkZHIgKz0gbDsKKyAgICAgICAgKm5ld2xlbiArPSBs OwogICAgIH0KKyAgICByZXR1cm4gZmlyc3RfcGh5czsKIH0KIAogc3RhdGljIHZvaWQgaW9tbXVf c2F2ZShRRU1VRmlsZSAqZiwgdm9pZCAqb3BhcXVlKQpJbmRleDogcWVtdS9ody9zcGFyYzMyX2Rt YS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9ody9zcGFyYzMyX2RtYS5jCTIwMDgtMTItMTUg MTc6NTA6MDYuMDAwMDAwMDAwICswMDAwCisrKyBxZW11L2h3L3NwYXJjMzJfZG1hLmMJMjAwOC0x Mi0xNSAxODoxMToyNi4wMDAwMDAwMDAgKzAwMDAKQEAgLTYzLDYgKzYzLDM3IEBACiAgICAgcWVt dV9pcnEgZGV2X3Jlc2V0OwogfTsKIAorc3RhdGljIHRhcmdldF9waHlzX2FkZHJfdCBsZWRtYV90 cmFuc2xhdGUodm9pZCAqb3BhcXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLCBzaXplX3QgKm5ld2xlbiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpc193cml0ZSkKK3sKKyAgICBE TUFTdGF0ZSAqcyA9IG9wYXF1ZTsKKworICAgIERQUklOVEYoIkxFRE1BIHRyYW5zbGF0ZSwgZGly ZWN0aW9uOiAlYywgYWRkciAweCU4Ljh4XG4iLAorICAgICAgICAgICAgaXNfd3JpdGUgPyAndyc6 ICdyJywgcy0+ZG1hcmVnc1szXSk7CisgICAgcmV0dXJuIGlvbW11X3RyYW5zbGF0ZShzLT5pb21t dSwgcy0+ZG1hcmVnc1szXSwgbGVuLCBuZXdsZW4sIGlzX3dyaXRlKTsKK30KKworc3RhdGljIHZv aWQgbGVkbWFfbWVtX3J3KERNQVN0YXRlICpzLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwgdm9p ZCAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sIGludCBpc193cml0 ZSkKK3sKKyAgICB0YXJnZXRfcGh5c19hZGRyX3QgcGh5czsKKyAgICBzaXplX3QgbGVmdCwgbmV3 bGVuOworCisgICAgbGVmdCA9IGxlbjsKKyAgICBuZXdsZW4gPSAwOworICAgIHdoaWxlIChsZWZ0 ID4gMCkgeworICAgICAgICBwaHlzID0gbGVkbWFfdHJhbnNsYXRlKHMsIGFkZHIsIGxlbiwgJm5l d2xlbiwgaXNfd3JpdGUpOworICAgICAgICBpZiAocGh5cyA9PSAodGFyZ2V0X3BoeXNfYWRkcl90 KSAtMSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBEUFJJTlRGKCJsYW5jZV9tZW1fcncg KGRtYSBhZGRyIDB4IiBUQVJHRVRfRk1UX3BseCAiKVxuIiwgcGh5cyk7CisgICAgICAgIGNwdV9w aHlzaWNhbF9tZW1vcnlfcncocGh5cywgYnVmLCBuZXdsZW4sIGlzX3dyaXRlKTsKKyAgICAgICAg YWRkciArPSBuZXdsZW47CisgICAgICAgIGxlZnQgLT0gbmV3bGVuOworICAgIH0KK30KKwogLyog Tm90ZTogb24gc3BhcmMsIHRoZSBsYW5jZSAxNiBiaXQgYnVzIGlzIHN3YXBwZWQgKi8KIHZvaWQg bGVkbWFfbWVtb3J5X3JlYWQodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwK ICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYnVmLCBpbnQgbGVuLCBpbnQgZG9fYnN3 YXApCkBAIC03NCwxMSArMTA1LDExIEBACiAgICAgICAgICAgICBzLT5kbWFyZWdzWzBdICYgRE1B X1dSSVRFX01FTSA/ICd3JzogJ3InLCBzLT5kbWFyZWdzWzFdKTsKICAgICBhZGRyIHw9IHMtPmRt YXJlZ3NbM107CiAgICAgaWYgKGRvX2Jzd2FwKSB7Ci0gICAgICAgIHNwYXJjX2lvbW11X21lbW9y eV9yZWFkKHMtPmlvbW11LCBhZGRyLCBidWYsIGxlbik7CisgICAgICAgIGxlZG1hX21lbV9ydyhz LCBhZGRyLCBidWYsIGxlbiwgMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYWRkciAmPSB+MTsK ICAgICAgICAgbGVuICY9IH4xOwotICAgICAgICBzcGFyY19pb21tdV9tZW1vcnlfcmVhZChzLT5p b21tdSwgYWRkciwgYnVmLCBsZW4pOworICAgICAgICBsZWRtYV9tZW1fcncocywgYWRkciwgYnVm LCBsZW4sIDApOwogICAgICAgICBmb3IoaSA9IDA7IGkgPCBsZW47IGkgKz0gMikgewogICAgICAg ICAgICAgYnN3YXAxNnMoKHVpbnQxNl90ICopKGJ1ZiArIGkpKTsKICAgICAgICAgfQpAQCAtOTYs NyArMTI3LDcgQEAKICAgICAgICAgICAgIHMtPmRtYXJlZ3NbMF0gJiBETUFfV1JJVEVfTUVNID8g J3cnOiAncicsIHMtPmRtYXJlZ3NbMV0pOwogICAgIGFkZHIgfD0gcy0+ZG1hcmVnc1szXTsKICAg ICBpZiAoZG9fYnN3YXApIHsKLSAgICAgICAgc3BhcmNfaW9tbXVfbWVtb3J5X3dyaXRlKHMtPmlv bW11LCBhZGRyLCBidWYsIGxlbik7CisgICAgICAgIGxlZG1hX21lbV9ydyhzLCBhZGRyLCBidWYs IGxlbiwgMSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYWRkciAmPSB+MTsKICAgICAgICAgbGVu ICY9IH4xOwpAQCAtMTA3LDcgKzEzOCw3IEBACiAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBs OyBpICs9IDIpIHsKICAgICAgICAgICAgICAgICB0bXBfYnVmW2kgPj4gMV0gPSBic3dhcDE2KCoo dWludDE2X3QgKikoYnVmICsgaSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3BhcmNf aW9tbXVfbWVtb3J5X3dyaXRlKHMtPmlvbW11LCBhZGRyLCAodWludDhfdCAqKXRtcF9idWYsIGwp OworICAgICAgICAgICAgbGVkbWFfbWVtX3J3KHMsIGFkZHIsICh1aW50OF90ICopdG1wX2J1Ziwg bCwgMSk7CiAgICAgICAgICAgICBsZW4gLT0gbDsKICAgICAgICAgICAgIGJ1ZiArPSBsOwogICAg ICAgICAgICAgYWRkciArPSBsOwpAQCAtMTI5LDI2ICsxNjAsMTQgQEAKICAgICB9CiB9CiAKLXZv aWQgZXNwZG1hX21lbW9yeV9yZWFkKHZvaWQgKm9wYXF1ZSwgdWludDhfdCAqYnVmLCBpbnQgbGVu KQordGFyZ2V0X3BoeXNfYWRkcl90IGVzcGRtYV90cmFuc2xhdGUodm9pZCAqb3BhcXVlLCB0YXJn ZXRfcGh5c19hZGRyX3QgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBsZW4sIHNpemVfdCAqbmV3bGVuLCBpbnQgaXNfd3JpdGUpCiB7CiAgICAgRE1BU3Rh dGUgKnMgPSBvcGFxdWU7CiAKLSAgICBEUFJJTlRGKCJETUEgcmVhZCwgZGlyZWN0aW9uOiAlYywg YWRkciAweCU4Ljh4XG4iLAotICAgICAgICAgICAgcy0+ZG1hcmVnc1swXSAmIERNQV9XUklURV9N RU0gPyAndyc6ICdyJywgcy0+ZG1hcmVnc1sxXSk7Ci0gICAgc3BhcmNfaW9tbXVfbWVtb3J5X3Jl YWQocy0+aW9tbXUsIHMtPmRtYXJlZ3NbMV0sIGJ1ZiwgbGVuKTsKLSAgICBzLT5kbWFyZWdzWzBd IHw9IERNQV9JTlRSOwotICAgIHMtPmRtYXJlZ3NbMV0gKz0gbGVuOwotfQotCi12b2lkIGVzcGRt YV9tZW1vcnlfd3JpdGUodm9pZCAqb3BhcXVlLCB1aW50OF90ICpidWYsIGludCBsZW4pCi17Ci0g ICAgRE1BU3RhdGUgKnMgPSBvcGFxdWU7Ci0KLSAgICBEUFJJTlRGKCJETUEgd3JpdGUsIGRpcmVj dGlvbjogJWMsIGFkZHIgMHglOC44eFxuIiwKLSAgICAgICAgICAgIHMtPmRtYXJlZ3NbMF0gJiBE TUFfV1JJVEVfTUVNID8gJ3cnOiAncicsIHMtPmRtYXJlZ3NbMV0pOwotICAgIHNwYXJjX2lvbW11 X21lbW9yeV93cml0ZShzLT5pb21tdSwgcy0+ZG1hcmVnc1sxXSwgYnVmLCBsZW4pOwotICAgIHMt PmRtYXJlZ3NbMF0gfD0gRE1BX0lOVFI7Ci0gICAgcy0+ZG1hcmVnc1sxXSArPSBsZW47CisgICAg RFBSSU5URigiRVNQRE1BIHRyYW5zbGF0ZSwgZGlyZWN0aW9uOiAlYywgYWRkciAweCU4Ljh4XG4i LAorICAgICAgICAgICAgaXNfd3JpdGUgPyAndyc6ICdyJywgcy0+ZG1hcmVnc1sxXSk7CisgICAg cmV0dXJuIGlvbW11X3RyYW5zbGF0ZShzLT5pb21tdSwgcy0+ZG1hcmVnc1sxXSwgbGVuLCBuZXds ZW4sIGlzX3dyaXRlKTsKIH0KIAogc3RhdGljIHVpbnQzMl90IGRtYV9tZW1fcmVhZGwodm9pZCAq b3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkcikKSW5kZXg6IHFlbXUvaHcvc2NzaS5oCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIHFlbXUub3JpZy9ody9zY3NpLmgJMjAwOC0xMi0xNSAxNzo1MDowNi4wMDAw MDAwMDAgKzAwMDAKKysrIHFlbXUvaHcvc2NzaS5oCTIwMDgtMTItMTUgMTg6MTE6MjYuMDAwMDAw MDAwICswMDAwCkBAIC0xLDggKzEsMTEgQEAKIC8qIGVzcC5jICovCiAjZGVmaW5lIEVTUF9NQVhf REVWUyA3Ci10eXBlZGVmIHZvaWQgKCplc3BkbWFfbWVtb3J5X3JlYWRfd3JpdGUpKHZvaWQgKm9w YXF1ZSwgdWludDhfdCAqYnVmLCBpbnQgbGVuKTsKK3R5cGVkZWYgdGFyZ2V0X3BoeXNfYWRkcl90 ICgqZXNwZG1hX21lbW9yeV90cmFuc2xhdGUpKHZvaWQgKm9wYXF1ZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9waHlzX2FkZHJf dCBhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCAqbmV3bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlzX3dyaXRlKTsKIHZvaWQgZXNwX3Nj c2lfYXR0YWNoKHZvaWQgKm9wYXF1ZSwgQmxvY2tEcml2ZXJTdGF0ZSAqYmQsIGludCBpZCk7CiB2 b2lkICplc3BfaW5pdCh0YXJnZXRfcGh5c19hZGRyX3QgZXNwYWRkciwgaW50IGl0X3NoaWZ0LAot ICAgICAgICAgICAgICAgZXNwZG1hX21lbW9yeV9yZWFkX3dyaXRlIGRtYV9tZW1vcnlfcmVhZCwK LSAgICAgICAgICAgICAgIGVzcGRtYV9tZW1vcnlfcmVhZF93cml0ZSBkbWFfbWVtb3J5X3dyaXRl LAorICAgICAgICAgICAgICAgZXNwZG1hX21lbW9yeV90cmFuc2xhdGUgZG1hX21lbW9yeV90cmFu c2xhdGUsCiAgICAgICAgICAgICAgICB2b2lkICpkbWFfb3BhcXVlLCBxZW11X2lycSBpcnEsIHFl bXVfaXJxICpyZXNldCk7CkluZGV4OiBxZW11L2h3L3NwYXJjMzJfZG1hLmgKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gcWVtdS5vcmlnL2h3L3NwYXJjMzJfZG1hLmgJMjAwOC0xMi0xNSAxNzo1MDowNi4wMDAwMDAw MDAgKzAwMDAKKysrIHFlbXUvaHcvc3BhcmMzMl9kbWEuaAkyMDA4LTEyLTE1IDE4OjExOjI2LjAw MDAwMDAwMCArMDAwMApAQCAtOCw3ICs4LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDhfdCAqYnVmLCBpbnQgbGVuLCBpbnQgZG9fYnN3YXApOwogdm9pZCBsZWRtYV9tZW1vcnlfd3Jp dGUodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwKICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbiwgaW50IGRvX2Jzd2FwKTsKLXZvaWQgZXNw ZG1hX21lbW9yeV9yZWFkKHZvaWQgKm9wYXF1ZSwgdWludDhfdCAqYnVmLCBpbnQgbGVuKTsKLXZv aWQgZXNwZG1hX21lbW9yeV93cml0ZSh2b2lkICpvcGFxdWUsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxl bik7Ci0KK3RhcmdldF9waHlzX2FkZHJfdCBlc3BkbWFfdHJhbnNsYXRlKHZvaWQgKm9wYXF1ZSwg dGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgbGVuLCBzaXplX3QgKm5ld2xlbiwgaW50IGlzX3dyaXRlKTsKICNlbmRpZgpJ bmRleDogcWVtdS9ody9zdW40bS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHFlbXUub3JpZy9ody9zdW40bS5j CTIwMDgtMTItMTUgMTc6NTA6MDYuMDAwMDAwMDAwICswMDAwCisrKyBxZW11L2h3L3N1bjRtLmMJ MjAwOC0xMi0xNSAxODoxMToyNi4wMDAwMDAwMDAgKzAwMDAKQEAgLTU4MCw3ICs1ODAsNyBAQAog ICAgIH0KIAogICAgIG1haW5fZXNwID0gZXNwX2luaXQoaHdkZWYtPmVzcF9iYXNlLCAyLAotICAg ICAgICAgICAgICAgICAgICAgICAgZXNwZG1hX21lbW9yeV9yZWFkLCBlc3BkbWFfbWVtb3J5X3dy aXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgZXNwZG1hX3RyYW5zbGF0ZSwKICAgICAgICAg ICAgICAgICAgICAgICAgIGVzcGRtYSwgKmVzcGRtYV9pcnEsIGVzcF9yZXNldCk7CiAKICAgICBm b3IgKGkgPSAwOyBpIDwgRVNQX01BWF9ERVZTOyBpKyspIHsKQEAgLTEzNzgsNyArMTM3OCw3IEBA CiAgICAgfQogCiAgICAgbWFpbl9lc3AgPSBlc3BfaW5pdChod2RlZi0+ZXNwX2Jhc2UsIDIsCi0g ICAgICAgICAgICAgICAgICAgICAgICBlc3BkbWFfbWVtb3J5X3JlYWQsIGVzcGRtYV9tZW1vcnlf d3JpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBlc3BkbWFfdHJhbnNsYXRlLAogICAgICAg ICAgICAgICAgICAgICAgICAgZXNwZG1hLCAqZXNwZG1hX2lycSwgZXNwX3Jlc2V0KTsKIAogICAg IGZvciAoaSA9IDA7IGkgPCBFU1BfTUFYX0RFVlM7IGkrKykgewpAQCAtMTYwNCw3ICsxNjA0LDcg QEAKICAgICB9CiAKICAgICBtYWluX2VzcCA9IGVzcF9pbml0KGh3ZGVmLT5lc3BfYmFzZSwgMiwK LSAgICAgICAgICAgICAgICAgICAgICAgIGVzcGRtYV9tZW1vcnlfcmVhZCwgZXNwZG1hX21lbW9y eV93cml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzcGRtYV90cmFuc2xhdGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICBlc3BkbWEsICplc3BkbWFfaXJxLCBlc3BfcmVzZXQpOwogCiAg ICAgZm9yIChpID0gMDsgaSA8IEVTUF9NQVhfREVWUzsgaSsrKSB7CkluZGV4OiBxZW11L2h3L3N1 bjRtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL2h3L3N1bjRtLmgJMjAwOC0xMi0xNSAxNzo1 MDowNi4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvaHcvc3VuNG0uaAkyMDA4LTEyLTE1IDE4OjEx OjI2LjAwMDAwMDAwMCArMDAwMApAQCAtNSwyMSArNSw4IEBACiAKIC8qIGlvbW11LmMgKi8KIHZv aWQgKmlvbW11X2luaXQodGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsIHVpbnQzMl90IHZlcnNpb24s IHFlbXVfaXJxIGlycSk7Ci12b2lkIHNwYXJjX2lvbW11X21lbW9yeV9ydyh2b2lkICpvcGFxdWUs IHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDhfdCAqYnVmLCBpbnQgbGVuLCBpbnQgaXNfd3JpdGUpOwotc3RhdGljIGlubGluZSB2 b2lkIHNwYXJjX2lvbW11X21lbW9yeV9yZWFkKHZvaWQgKm9wYXF1ZSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpidWYsIGlu dCBsZW4pCi17Ci0gICAgc3BhcmNfaW9tbXVfbWVtb3J5X3J3KG9wYXF1ZSwgYWRkciwgYnVmLCBs ZW4sIDApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3BhcmNfaW9tbXVfbWVtb3J5X3dyaXRl KHZvaWQgKm9wYXF1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKLXsKLSAgICBzcGFyY19pb21t dV9tZW1vcnlfcncob3BhcXVlLCBhZGRyLCBidWYsIGxlbiwgMSk7Ci19Cit0YXJnZXRfcGh5c19h ZGRyX3QgaW9tbXVfdHJhbnNsYXRlKHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFk ZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sIHNpemVf dCAqbmV3bGVuLCBpbnQgaXNfd3JpdGUpOwogCiAvKiB0Y3guYyAqLwogdm9pZCB0Y3hfaW5pdChE aXNwbGF5U3RhdGUgKmRzLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwgdWludDhfdCAqdnJhbV9i YXNlLAo= ------=_Part_19211_31991591.1229366136100--