From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757404AbZEOIKl (ORCPT ); Fri, 15 May 2009 04:10:41 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753651AbZEOIKZ (ORCPT ); Fri, 15 May 2009 04:10:25 -0400 Received: from vpn.id2.novell.com ([195.33.99.129]:22247 "EHLO vpn.id2.novell.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753451AbZEOIKW (ORCPT ); Fri, 15 May 2009 04:10:22 -0400 Message-Id: <4A0D3F8C02000078000010A7@vpn.id2.novell.com> X-Mailer: Novell GroupWise Internet Agent 8.0.0 Date: Fri, 15 May 2009 09:10:20 +0100 From: "Jan Beulich" To: "Jeremy Fitzhardinge" Cc: "Ingo Molnar" , "Jun Nakajima" , "Xiaohui Xin" , "Xin Li" , "Xen-devel" , "Nick Piggin" , "Linux Kernel Mailing List" , "H. Peter Anvin" Subject: Re: [Xen-devel] Performance overhead of paravirt_ops on nativeidentified References: <4A0B62F7.5030802@goop.org> <4A0BED040200007800000DB0@vpn.id2.novell.com> <4A0C58BB.3090303@goop.org> In-Reply-To: <4A0C58BB.3090303@goop.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=__Part705B3A7C.5__=" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is a MIME message. If you are reading this text, you may want to consider changing to a mail reader or gateway that understands how to properly handle MIME multipart messages. --=__Part705B3A7C.5__= Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Content-Disposition: inline >>> Jeremy Fitzhardinge 14.05.09 19:45 >>> >Jan Beulich wrote: >> Wouldn't a third solution be to use ticket spinlocks everywhere, i.e. = eliminate >> the current indirection, and replace it by an indirection for just the = contention >> case? As I view it, the problem for Xen aren't really the ticket locks = by >> themselves, but rather the extra spinning involved, which is of concern = only >> if a lock is contended. We're using ticket locks quite happily in our = kernels, >> with directed instead of global wakeup from the unlock path. >Do you have a patch to illustrate what you mean? How do you keep = track=20 >of the target vcpu for the directed wakeup? Are you using the=20 >event-poll mechanism to block? A patch for the pv-ops kernel would require some time. What I can give you right away - just for reference - are the sources we currently use in our = kernel: attached. Jan --=__Part705B3A7C.5__= Content-Type: application/octet-stream; name="spinlock.h" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="spinlock.h" I2lmbmRlZiBfQVNNX1g4Nl9TUElOTE9DS19ICiNkZWZpbmUgX0FTTV9YODZfU1BJTkxPQ0tfSAoK I2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KI2luY2x1ZGUgPGFzbS9yd2xvY2suaD4KI2luY2x1ZGUg PGFzbS9wYWdlLmg+CiNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiNpbmNsdWRlIDxsaW51eC9j b21waWxlci5oPgoKLyoKICogWW91ciBiYXNpYyBTTVAgc3BpbmxvY2tzLCBhbGxvd2luZyBvbmx5 IGEgc2luZ2xlIENQVSBhbnl3aGVyZQogKgogKiBTaW1wbGUgc3BpbiBsb2NrIG9wZXJhdGlvbnMu ICBUaGVyZSBhcmUgdHdvIHZhcmlhbnRzLCBvbmUgY2xlYXJzIElSUSdzCiAqIG9uIHRoZSBsb2Nh bCBwcm9jZXNzb3IsIG9uZSBkb2VzIG5vdC4KICoKICogVGhlc2UgYXJlIGZhaXIgRklGTyB0aWNr ZXQgbG9ja3MsIHdoaWNoIGFyZSBjdXJyZW50bHkgbGltaXRlZCB0byAyNTYKICogQ1BVcy4KICoK ICogKHRoZSB0eXBlIGRlZmluaXRpb25zIGFyZSBpbiBhc20vc3BpbmxvY2tfdHlwZXMuaCkKICov CgojaWZkZWYgQ09ORklHX1g4Nl8zMgojIGRlZmluZSBMT0NLX1BUUl9SRUcgImEiCiMgZGVmaW5l IFJFR19QVFJfTU9ERSAiayIKI2Vsc2UKIyBkZWZpbmUgTE9DS19QVFJfUkVHICJEIgojIGRlZmlu ZSBSRUdfUFRSX01PREUgInEiCiNlbmRpZgoKI2lmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikgJiYg XAoJKGRlZmluZWQoQ09ORklHX1g4Nl9PT1NUT1JFKSB8fCBkZWZpbmVkKENPTkZJR19YODZfUFBS T19GRU5DRSkpCi8qCiAqIE9uIFBQcm8gU01QIG9yIGlmIHdlIGFyZSB1c2luZyBPT1NUT1JFLCB3 ZSB1c2UgYSBsb2NrZWQgb3BlcmF0aW9uIHRvIHVubG9jawogKiAoUFBybyBlcnJhdGEgNjYsIDky KQogKi8KIyBkZWZpbmUgVU5MT0NLX0xPQ0tfUFJFRklYIExPQ0tfUFJFRklYCiNlbHNlCiMgZGVm aW5lIFVOTE9DS19MT0NLX1BSRUZJWAojZW5kaWYKCmludCB4ZW5fc3BpbmxvY2tfaW5pdCh1bnNp Z25lZCBpbnQgY3B1KTsKdm9pZCB4ZW5fc3BpbmxvY2tfY2xlYW51cCh1bnNpZ25lZCBpbnQgY3B1 KTsKZXh0ZXJuIGludCB4ZW5fc3Bpbl93YWl0KHJhd19zcGlubG9ja190ICosIHVuc2lnbmVkIGlu dCB0b2tlbik7CmV4dGVybiBpbnQgeGVuX3NwaW5fd2FpdF9mbGFncyhyYXdfc3BpbmxvY2tfdCAq LCB1bnNpZ25lZCBpbnQgKnRva2VuLAoJCQkgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKZXh0 ZXJuIHVuc2lnbmVkIGludCB4ZW5fc3Bpbl9hZGp1c3QocmF3X3NwaW5sb2NrX3QgKiwgdW5zaWdu ZWQgaW50IHRva2VuKTsKZXh0ZXJuIHZvaWQgeGVuX3NwaW5fa2ljayhyYXdfc3BpbmxvY2tfdCAq LCB1bnNpZ25lZCBpbnQgdG9rZW4pOwoKLyoKICogVGlja2V0IGxvY2tzIGFyZSBjb25jZXB0dWFs bHkgdHdvIHBhcnRzLCBvbmUgaW5kaWNhdGluZyB0aGUgY3VycmVudCBoZWFkIG9mCiAqIHRoZSBx dWV1ZSwgYW5kIHRoZSBvdGhlciBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IHRhaWwuIFRoZSBsb2Nr IGlzIGFjcXVpcmVkCiAqIGJ5IGF0b21pY2FsbHkgbm90aW5nIHRoZSB0YWlsIGFuZCBpbmNyZW1l bnRpbmcgaXQgYnkgb25lICh0aHVzIGFkZGluZwogKiBvdXJzZWxmIHRvIHRoZSBxdWV1ZSBhbmQg bm90aW5nIG91ciBwb3NpdGlvbiksIHRoZW4gd2FpdGluZyB1bnRpbCB0aGUgaGVhZAogKiBiZWNv bWVzIGVxdWFsIHRvIHRoZSB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgdGFpbC4KICoKICogV2Ug dXNlIGFuIHhhZGQgY292ZXJpbmcgKmJvdGgqIHBhcnRzIG9mIHRoZSBsb2NrLCB0byBpbmNyZW1l bnQgdGhlIHRhaWwgYW5kCiAqIGFsc28gbG9hZCB0aGUgcG9zaXRpb24gb2YgdGhlIGhlYWQsIHdo aWNoIHRha2VzIGNhcmUgb2YgbWVtb3J5IG9yZGVyaW5nCiAqIGlzc3VlcyBhbmQgc2hvdWxkIGJl IG9wdGltYWwgZm9yIHRoZSB1bmNvbnRlbmRlZCBjYXNlLiBOb3RlIHRoZSB0YWlsIG11c3QgYmUK ICogaW4gdGhlIGhpZ2ggcGFydCwgYmVjYXVzZSBhIHdpZGUgeGFkZCBpbmNyZW1lbnQgb2YgdGhl IGxvdyBwYXJ0IHdvdWxkIGNhcnJ5CiAqIHVwIGFuZCBjb250YW1pbmF0ZSB0aGUgaGlnaCBwYXJ0 LgogKgogKiBXaXRoIGZld2VyIHRoYW4gMl44IHBvc3NpYmxlIENQVXMsIHdlIGNhbiB1c2UgeDg2 J3MgcGFydGlhbCByZWdpc3RlcnMgdG8KICogc2F2ZSBzb21lIGluc3RydWN0aW9ucyBhbmQgbWFr ZSB0aGUgY29kZSBtb3JlIGVsZWdhbnQuIFRoZXJlIHJlYWxseSBpc24ndAogKiBtdWNoIGJldHdl ZW4gdGhlbSBpbiBwZXJmb3JtYW5jZSB0aG91Z2gsIGVzcGVjaWFsbHkgYXMgbG9ja3MgYXJlIG91 dCBvZiBsaW5lLgogKi8KI2lmIChOUl9DUFVTIDwgMjU2KQojZGVmaW5lIFRJQ0tFVF9TSElGVCA4 CiNkZWZpbmUgX190aWNrZXRfc3Bpbl9sb2NrX3ByZWFtYmxlIFwKCWFzbShMT0NLX1BSRUZJWCAi eGFkZHcgJXcwLCAlMlxuXHQiIFwKCSAgICAiY21wYiAlaDAsICViMFxuXHQiIFwKCSAgICAic2V0 ZSAlMSIgXAoJICAgIDogIj0mUSIgKHRva2VuKSwgIj1xbSIgKGZyZWUpLCAiK20iIChsb2NrLT5z bG9jaykgXAoJICAgIDogIjAiICgweDAxMDApIFwKCSAgICA6ICJtZW1vcnkiLCAiY2MiKQojZGVm aW5lIF9fdGlja2V0X3NwaW5fbG9ja19ib2R5IFwKCWFzbSgiMTpcdCIgXAoJICAgICJjbXBiICVo MCwgJWIwXG5cdCIgXAoJICAgICJqZSAyZlxuXHQiIFwKCSAgICAiZGVjbCAlMVxuXHQiIFwKCSAg ICAianogMmZcblx0IiBcCgkgICAgInJlcCA7IG5vcFxuXHQiIFwKCSAgICAibW92YiAlMiwgJWIw XG5cdCIgXAoJICAgIC8qIGRvbid0IG5lZWQgbGZlbmNlIGhlcmUsIGJlY2F1c2UgbG9hZHMgYXJl IGluLW9yZGVyICovIFwKCSAgICAiam1wIDFiXG4iIFwKCSAgICAiMjoiIFwKCSAgICA6ICIrUSIg KHRva2VuKSwgIitnIiAoY291bnQpIFwKCSAgICA6ICJtIiAobG9jay0+c2xvY2spIFwKCSAgICA6 ICJtZW1vcnkiLCAiY2MiKQoKCnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fdGlja2V0X3Nw aW5fdHJ5bG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKewoJaW50IHRtcCwgbmV3OwoKCWFzbSgi bW92endsICUyLCAlMFxuXHQiCgkgICAgImNtcGIgJWgwLCAlYjBcblx0IgoJICAgICJsZWFsIDB4 MTAwKCUiIFJFR19QVFJfTU9ERSAiMCksICUxXG5cdCIKCSAgICAiam5lIDFmXG5cdCIKCSAgICBM T0NLX1BSRUZJWCAiY21weGNoZ3cgJXcxLCAlMlxuXHQiCgkgICAgIjE6XHQiCgkgICAgInNldGUg JWIxXG5cdCIKCSAgICAibW92emJsICViMSwgJTBcblx0IgoJICAgIDogIj0mYSIgKHRtcCksICI9 JnEiIChuZXcpLCAiK20iIChsb2NrLT5zbG9jaykKCSAgICA6CgkgICAgOiAibWVtb3J5IiwgImNj Iik7CgoJcmV0dXJuIHRtcDsKfQoKc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fdGlja2V0 X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQp7Cgl1bnNpZ25lZCBpbnQgdG9rZW47 Cgl1bnNpZ25lZCBjaGFyIGtpY2s7CgoJYXNtKFVOTE9DS19MT0NLX1BSRUZJWCAiaW5jYiAlMlxu XHQiCgkgICAgIm1vdnp3bCAlMiwgJTBcblx0IgoJICAgICJjbXBiICVoMCwgJWIwXG5cdCIKCSAg ICAic2V0bmUgJTEiCgkgICAgOiAiPSZRIiAodG9rZW4pLCAiPXFtIiAoa2ljayksICIrbSIgKGxv Y2stPnNsb2NrKQoJICAgIDoKCSAgICA6ICJtZW1vcnkiLCAiY2MiKTsKCWlmIChraWNrKQoJCXhl bl9zcGluX2tpY2sobG9jaywgdG9rZW4pOwp9CiNlbHNlCiNkZWZpbmUgVElDS0VUX1NISUZUIDE2 CiNkZWZpbmUgX190aWNrZXRfc3Bpbl9sb2NrX3ByZWFtYmxlIFwKCWRvIHsgXAoJCXVuc2lnbmVk IGludCB0bXA7IFwKCQlhc20oTE9DS19QUkVGSVggInhhZGRsICUwLCAlMlxuXHQiIFwKCQkgICAg InNobGRsICQxNiwgJTAsICUzXG5cdCIgXAoJCSAgICAiY21wdyAldzMsICV3MFxuXHQiIFwKCQkg ICAgInNldGUgJTEiCgkJICAgIDogIj0mciIgKHRva2VuKSwgIj1xbSIgKGZyZWUpLCAiK20iIChs b2NrLT5zbG9jayksIFwKCQkgICAgICAiPSZnIiAodG1wKSBcCgkJICAgIDogIjAiICgweDAwMDEw MDAwKSBcCgkJICAgIDogIm1lbW9yeSIsICJjYyIpOyBcCgl9IHdoaWxlICgwKQojZGVmaW5lIF9f dGlja2V0X3NwaW5fbG9ja19ib2R5IFwKCWRvIHsgXAoJCXVuc2lnbmVkIGludCB0bXA7IFwKCQlh c20oInNobGRsICQxNiwgJTAsICUyXG4iIFwKCQkgICAgIjE6XHQiIFwKCQkgICAgImNtcHcgJXcy LCAldzBcblx0IiBcCgkJICAgICJqZSAyZlxuXHQiIFwKCQkgICAgImRlY2wgJTFcblx0IiBcCgkJ ICAgICJqeiAyZlxuXHQiIFwKCQkgICAgInJlcCA7IG5vcFxuXHQiIFwKCQkgICAgIm1vdncgJTMs ICV3MFxuXHQiIFwKCQkgICAgLyogZG9uJ3QgbmVlZCBsZmVuY2UgaGVyZSwgYmVjYXVzZSBsb2Fk cyBhcmUgaW4tb3JkZXIgKi8gXAoJCSAgICAiam1wIDFiXG4iIFwKCQkgICAgIjI6IiBcCgkJICAg IDogIityIiAodG9rZW4pLCAiK2ciIChjb3VudCksICI9JmciICh0bXApIFwKCQkgICAgOiAibSIg KGxvY2stPnNsb2NrKSBcCgkJICAgIDogIm1lbW9yeSIsICJjYyIpOyBcCgl9IHdoaWxlICgwKQoK c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX190aWNrZXRfc3Bpbl90cnlsb2NrKHJhd19zcGlu bG9ja190ICpsb2NrKQp7CglpbnQgdG1wOwoJaW50IG5ldzsKCglhc20oIm1vdmwgJTIsICUwXG5c dCIKCSAgICAibW92bCAlMCwgJTFcblx0IgoJICAgICJyb2xsICQxNiwgJTBcblx0IgoJICAgICJj bXBsICUwLCAlMVxuXHQiCgkgICAgImxlYWwgMHgwMDAxMDAwMCglIiBSRUdfUFRSX01PREUgIjAp LCAlMVxuXHQiCgkgICAgImpuZSAxZlxuXHQiCgkgICAgTE9DS19QUkVGSVggImNtcHhjaGdsICUx LCAlMlxuIgoJICAgICIxOlx0IgoJICAgICJzZXRlICViMVxuXHQiCgkgICAgIm1vdnpibCAlYjEs ICUwXG5cdCIKCSAgICA6ICI9JmEiICh0bXApLCAiPSZxIiAobmV3KSwgIittIiAobG9jay0+c2xv Y2spCgkgICAgOgoJICAgIDogIm1lbW9yeSIsICJjYyIpOwoKCXJldHVybiB0bXA7Cn0KCnN0YXRp YyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX3VubG9jayhyYXdfc3BpbmxvY2tf dCAqbG9jaykKewoJdW5zaWduZWQgaW50IHRva2VuLCB0bXA7Cglib29sIGtpY2s7CgoJYXNtKFVO TE9DS19MT0NLX1BSRUZJWCAiaW5jdyAlMlxuXHQiCgkgICAgIm1vdmwgJTIsICUwXG5cdCIKCSAg ICAic2hsZGwgJDE2LCAlMCwgJTNcblx0IgoJICAgICJjbXB3ICV3MywgJXcwXG5cdCIKCSAgICAi c2V0bmUgJTEiCgkgICAgOiAiPSZyIiAodG9rZW4pLCAiPXFtIiAoa2ljayksICIrbSIgKGxvY2st PnNsb2NrKSwgIj0mciIgKHRtcCkKCSAgICA6CgkgICAgOiAibWVtb3J5IiwgImNjIik7CglpZiAo a2ljaykKCQl4ZW5fc3Bpbl9raWNrKGxvY2ssIHRva2VuKTsKfQojZW5kaWYKCnN0YXRpYyBpbmxp bmUgaW50IF9fdGlja2V0X3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQp7Cglp bnQgdG1wID0gQUNDRVNTX09OQ0UobG9jay0+c2xvY2spOwoKCXJldHVybiAhISgoKHRtcCA+PiBU SUNLRVRfU0hJRlQpIF4gdG1wKSAmICgoMSA8PCBUSUNLRVRfU0hJRlQpIC0gMSkpOwp9CgpzdGF0 aWMgaW5saW5lIGludCBfX3RpY2tldF9zcGluX2lzX2NvbnRlbmRlZChyYXdfc3BpbmxvY2tfdCAq bG9jaykKewoJaW50IHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPnNsb2NrKTsKCglyZXR1cm4gKCgo dG1wID4+IFRJQ0tFVF9TSElGVCkgLSB0bXApICYgKCgxIDw8IFRJQ0tFVF9TSElGVCkgLSAxKSkg PiAxOwp9CgpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX190aWNrZXRfc3Bpbl9sb2NrKHJh d19zcGlubG9ja190ICpsb2NrKQp7Cgl1bnNpZ25lZCBpbnQgdG9rZW4sIGNvdW50OwoJYm9vbCBm cmVlOwoKCV9fdGlja2V0X3NwaW5fbG9ja19wcmVhbWJsZTsKCWlmICh1bmxpa2VseSghZnJlZSkp CgkJdG9rZW4gPSB4ZW5fc3Bpbl9hZGp1c3QobG9jaywgdG9rZW4pOwoJZG8gewoJCWNvdW50ID0g MSA8PCAxMDsKCQlfX3RpY2tldF9zcGluX2xvY2tfYm9keTsKCX0gd2hpbGUgKHVubGlrZWx5KCFj b3VudCkgJiYgIXhlbl9zcGluX3dhaXQobG9jaywgdG9rZW4pKTsKfQoKc3RhdGljIF9fYWx3YXlz X2lubGluZSB2b2lkIF9fdGlja2V0X3NwaW5fbG9ja19mbGFncyhyYXdfc3BpbmxvY2tfdCAqbG9j aywKCQkJCQkJICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQp7Cgl1bnNpZ25lZCBpbnQgdG9rZW4s IGNvdW50OwoJYm9vbCBmcmVlOwoKCV9fdGlja2V0X3NwaW5fbG9ja19wcmVhbWJsZTsKCWlmICh1 bmxpa2VseSghZnJlZSkpCgkJdG9rZW4gPSB4ZW5fc3Bpbl9hZGp1c3QobG9jaywgdG9rZW4pOwoJ ZG8gewoJCWNvdW50ID0gMSA8PCAxMDsKCQlfX3RpY2tldF9zcGluX2xvY2tfYm9keTsKCX0gd2hp bGUgKHVubGlrZWx5KCFjb3VudCkgJiYgIXhlbl9zcGluX3dhaXRfZmxhZ3MobG9jaywgJnRva2Vu LCBmbGFncykpOwp9CgojaWZuZGVmIENPTkZJR19QQVJBVklSVAoKc3RhdGljIGlubGluZSBpbnQg X19yYXdfc3Bpbl9pc19sb2NrZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCnsKCXJldHVybiBfX3Rp Y2tldF9zcGluX2lzX2xvY2tlZChsb2NrKTsKfQoKc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bp bl9pc19jb250ZW5kZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCnsKCXJldHVybiBfX3RpY2tldF9z cGluX2lzX2NvbnRlbmRlZChsb2NrKTsKfQojZGVmaW5lIF9fcmF3X3NwaW5faXNfY29udGVuZGVk CV9fcmF3X3NwaW5faXNfY29udGVuZGVkCgpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19y YXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQp7CglfX3RpY2tldF9zcGluX2xvY2so bG9jayk7Cn0KCnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fcmF3X3NwaW5fdHJ5bG9jayhy YXdfc3BpbmxvY2tfdCAqbG9jaykKewoJcmV0dXJuIF9fdGlja2V0X3NwaW5fdHJ5bG9jayhsb2Nr KTsKfQoKc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrKHJhd19z cGlubG9ja190ICpsb2NrKQp7CglfX3RpY2tldF9zcGluX3VubG9jayhsb2NrKTsKfQoKc3RhdGlj IF9fYWx3YXlzX2lubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9ja19mbGFncyhyYXdfc3BpbmxvY2tf dCAqbG9jaywKCQkJCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzKQp7CglfX3RpY2tldF9zcGluX2xv Y2tfZmxhZ3MobG9jaywgZmxhZ3MpOwp9CgojZW5kaWYKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jh d19zcGluX3VubG9ja193YWl0KHJhd19zcGlubG9ja190ICpsb2NrKQp7Cgl3aGlsZSAoX19yYXdf c3Bpbl9pc19sb2NrZWQobG9jaykpCgkJY3B1X3JlbGF4KCk7Cn0KCi8qCiAqIFJlYWQtd3JpdGUg c3BpbmxvY2tzLCBhbGxvd2luZyBtdWx0aXBsZSByZWFkZXJzCiAqIGJ1dCBvbmx5IG9uZSB3cml0 ZXIuCiAqCiAqIE5PVEUhIGl0IGlzIHF1aXRlIGNvbW1vbiB0byBoYXZlIHJlYWRlcnMgaW4gaW50 ZXJydXB0cwogKiBidXQgbm8gaW50ZXJydXB0IHdyaXRlcnMuIEZvciB0aG9zZSBjaXJjdW1zdGFu Y2VzIHdlCiAqIGNhbiAibWl4IiBpcnEtc2FmZSBsb2NrcyAtIGFueSB3cml0ZXIgbmVlZHMgdG8g Z2V0IGEKICogaXJxLXNhZmUgd3JpdGUtbG9jaywgYnV0IHJlYWRlcnMgY2FuIGdldCBub24taXJx c2FmZQogKiByZWFkLWxvY2tzLgogKgogKiBPbiB4ODYsIHdlIGltcGxlbWVudCByZWFkLXdyaXRl IGxvY2tzIGFzIGEgMzItYml0IGNvdW50ZXIKICogd2l0aCB0aGUgaGlnaCBiaXQgKHNpZ24pIGJl aW5nIHRoZSAiY29udGVuZGVkIiBiaXQuCiAqLwoKLyoqCiAqIHJlYWRfY2FuX2xvY2sgLSB3b3Vs ZCByZWFkX3RyeWxvY2soKSBzdWNjZWVkPwogKiBAbG9jazogdGhlIHJ3bG9jayBpbiBxdWVzdGlv bi4KICovCnN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3JlYWRfY2FuX2xvY2socmF3X3J3bG9ja190 ICpsb2NrKQp7CglyZXR1cm4gKGludCkobG9jayktPmxvY2sgPiAwOwp9CgovKioKICogd3JpdGVf Y2FuX2xvY2sgLSB3b3VsZCB3cml0ZV90cnlsb2NrKCkgc3VjY2VlZD8KICogQGxvY2s6IHRoZSBy d2xvY2sgaW4gcXVlc3Rpb24uCiAqLwpzdGF0aWMgaW5saW5lIGludCBfX3Jhd193cml0ZV9jYW5f bG9jayhyYXdfcndsb2NrX3QgKmxvY2spCnsKCXJldHVybiAobG9jayktPmxvY2sgPT0gUldfTE9D S19CSUFTOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfcmVhZF9sb2NrKHJhd19yd2xvY2tf dCAqcncpCnsKCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiIHN1YmwgJDEsKCUwKVxuXHQiCgkJ ICAgICAiam5zIDFmXG4iCgkJICAgICAiY2FsbCBfX3JlYWRfbG9ja19mYWlsZWRcblx0IgoJCSAg ICAgIjE6XG4iCgkJICAgICA6OkxPQ0tfUFRSX1JFRyAocncpIDogIm1lbW9yeSIpOwp9CgpzdGF0 aWMgaW5saW5lIHZvaWQgX19yYXdfd3JpdGVfbG9jayhyYXdfcndsb2NrX3QgKnJ3KQp7Cglhc20g dm9sYXRpbGUoTE9DS19QUkVGSVggIiBzdWJsICUxLCglMClcblx0IgoJCSAgICAgImp6IDFmXG4i CgkJICAgICAiY2FsbCBfX3dyaXRlX2xvY2tfZmFpbGVkXG5cdCIKCQkgICAgICIxOlxuIgoJCSAg ICAgOjpMT0NLX1BUUl9SRUcgKHJ3KSwgImkiIChSV19MT0NLX0JJQVMpIDogIm1lbW9yeSIpOwp9 CgpzdGF0aWMgaW5saW5lIGludCBfX3Jhd19yZWFkX3RyeWxvY2socmF3X3J3bG9ja190ICpsb2Nr KQp7CglhdG9taWNfdCAqY291bnQgPSAoYXRvbWljX3QgKilsb2NrOwoKCWlmIChhdG9taWNfZGVj X3JldHVybihjb3VudCkgPj0gMCkKCQlyZXR1cm4gMTsKCWF0b21pY19pbmMoY291bnQpOwoJcmV0 dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3dyaXRlX3RyeWxvY2socmF3X3J3bG9j a190ICpsb2NrKQp7CglhdG9taWNfdCAqY291bnQgPSAoYXRvbWljX3QgKilsb2NrOwoKCWlmIChh dG9taWNfc3ViX2FuZF90ZXN0KFJXX0xPQ0tfQklBUywgY291bnQpKQoJCXJldHVybiAxOwoJYXRv bWljX2FkZChSV19MT0NLX0JJQVMsIGNvdW50KTsKCXJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5l IHZvaWQgX19yYXdfcmVhZF91bmxvY2socmF3X3J3bG9ja190ICpydykKewoJYXNtIHZvbGF0aWxl KExPQ0tfUFJFRklYICJpbmNsICUwIiA6IittIiAocnctPmxvY2spIDogOiAibWVtb3J5Iik7Cn0K CnN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZV91bmxvY2socmF3X3J3bG9ja190ICpydykK ewoJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJhZGRsICUxLCAlMCIKCQkgICAgIDogIittIiAo cnctPmxvY2spIDogImkiIChSV19MT0NLX0JJQVMpIDogIm1lbW9yeSIpOwp9CgojZGVmaW5lIF9f cmF3X3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfcmVhZF9sb2NrKGxvY2spCiNk ZWZpbmUgX19yYXdfd3JpdGVfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfd3JpdGVfbG9j ayhsb2NrKQoKI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKI2RlZmlu ZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKI2RlZmluZSBfcmF3X3dyaXRlX3Jl bGF4KGxvY2spCWNwdV9yZWxheCgpCgojZW5kaWYgLyogX0FTTV9YODZfU1BJTkxPQ0tfSCAqLwo= --=__Part705B3A7C.5__= Content-Type: application/octet-stream; name="spinlock.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="spinlock.c" LyoKICoJWGVuIHNwaW5sb2NrIGZ1bmN0aW9ucwogKgogKglTZWUgYXJjaC94ODYveGVuL3NtcC5j IGZvciBjb3B5cmlnaHQgYW5kIGNyZWRpdHMgZm9yIGRlcml2ZWQKICoJcG9ydGlvbnMgb2YgdGhp cyBmaWxlLgogKi8KCiNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiNpbmNsdWRlIDxsaW51eC9pcnEu aD4KI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgojaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQu aD4KI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgojaW5jbHVkZSA8eGVuL2V2dGNobi5oPgoKI2lm ZGVmIFRJQ0tFVF9TSElGVAoKc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IHNwaW5sb2NrX2lycSA9 IC0xOwoKc3RydWN0IHNwaW5uaW5nIHsKCXJhd19zcGlubG9ja190ICpsb2NrOwoJdW5zaWduZWQg aW50IHRpY2tldDsKCXN0cnVjdCBzcGlubmluZyAqcHJldjsKfTsKc3RhdGljIERFRklORV9QRVJf Q1BVKHN0cnVjdCBzcGlubmluZyAqLCBzcGlubmluZyk7Ci8qCiAqIFByb3RlY3QgcmVtb3ZhbCBv ZiBvYmplY3RzOiBBZGRpdGlvbiBjYW4gYmUgZG9uZSBsb2NrbGVzcywgYW5kIGV2ZW4KICogcmVt b3ZhbCBpdHNlbGYgZG9lc24ndCBuZWVkIHByb3RlY3Rpb24gLSB3aGF0IG5lZWRzIHRvIGJlIHBy ZXZlbnRlZCBpcwogKiByZW1vdmVkIG9iamVjdHMgZ29pbmcgb3V0IG9mIHNjb3BlIChhcyB0aGV5 J3JlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2suCiAqLwpzdGF0aWMgREVGSU5FX1BFUl9DUFUocmF3 X3J3bG9ja190LCBzcGlubmluZ19ybV9sb2NrKSA9IF9fUkFXX1JXX0xPQ0tfVU5MT0NLRUQ7Cgpp bnQgX19jcHVpbml0IHhlbl9zcGlubG9ja19pbml0KHVuc2lnbmVkIGludCBjcHUpCnsKCXN0YXRp YyBzdHJ1Y3QgaXJxYWN0aW9uIHNwaW5sb2NrX2FjdGlvbiA9IHsKCQkuaGFuZGxlciA9IHNtcF9y ZXNjaGVkdWxlX2ludGVycnVwdCwKCQkuZmxhZ3MgICA9IElSUUZfRElTQUJMRUQsCgkJLm5hbWUg ICAgPSAic3BpbmxvY2siCgl9OwoJaW50IHJjOwoKCXJjID0gYmluZF9pcGlfdG9faXJxYWN0aW9u KFNQSU5fVU5MT0NLX1ZFQ1RPUiwKCQkJCSAgIGNwdSwKCQkJCSAgICZzcGlubG9ja19hY3Rpb24p OwogCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKCglpZiAoc3BpbmxvY2tfaXJxIDwgMCkgewoJ CWRpc2FibGVfaXJxKHJjKTsgLyogbWFrZSBzdXJlIGl0J3MgbmV2ZXIgZGVsaXZlcmVkICovCgkJ c3BpbmxvY2tfaXJxID0gcmM7Cgl9IGVsc2UKCQlCVUdfT04oc3BpbmxvY2tfaXJxICE9IHJjKTsK CglyZXR1cm4gMDsKfQoKdm9pZCBfX2NwdWluaXQgeGVuX3NwaW5sb2NrX2NsZWFudXAodW5zaWdu ZWQgaW50IGNwdSkKewoJdW5iaW5kX2Zyb21fcGVyX2NwdV9pcnEoc3BpbmxvY2tfaXJxLCBjcHUs IE5VTEwpOwp9CgppbnQgeGVuX3NwaW5fd2FpdChyYXdfc3BpbmxvY2tfdCAqbG9jaywgdW5zaWdu ZWQgaW50IHRva2VuKQp7CglpbnQgcmMgPSAwLCBpcnEgPSBzcGlubG9ja19pcnE7CglyYXdfcnds b2NrX3QgKnJtX2xvY2s7Cgl1bnNpZ25lZCBsb25nIGZsYWdzOwoJc3RydWN0IHNwaW5uaW5nIHNw aW5uaW5nOwoKCS8qIElmIGtpY2tlciBpbnRlcnJ1cHQgbm90IGluaXRpYWxpemVkIHlldCwganVz dCBzcGluLiAqLwoJaWYgKHVubGlrZWx5KGlycSA8IDApKQoJCXJldHVybiAwOwoKCXRva2VuID4+ PSBUSUNLRVRfU0hJRlQ7CgoJLyogYW5ub3VuY2Ugd2UncmUgc3Bpbm5pbmcgKi8KCXNwaW5uaW5n LnRpY2tldCA9IHRva2VuOwoJc3Bpbm5pbmcubG9jayA9IGxvY2s7CglzcGlubmluZy5wcmV2ID0g cGVyY3B1X3JlYWQoc3Bpbm5pbmcpOwoJc21wX3dtYigpOwoJcGVyY3B1X3dyaXRlKHNwaW5uaW5n LCAmc3Bpbm5pbmcpOwoKCS8qIGNsZWFyIHBlbmRpbmcgKi8KCXhlbl9jbGVhcl9pcnFfcGVuZGlu ZyhpcnEpOwoKCWRvIHsKCQkvKiBDaGVjayBhZ2FpbiB0byBtYWtlIHN1cmUgaXQgZGlkbid0IGJl Y29tZSBmcmVlIHdoaWxlCgkJICogd2Ugd2VyZW4ndCBsb29raW5nLiAqLwoJCWlmICgobG9jay0+ c2xvY2sgJiAoKDFVIDw8IFRJQ0tFVF9TSElGVCkgLSAxKSkgPT0gdG9rZW4pIHsKCQkJLyogSWYg d2UgaW50ZXJydXB0ZWQgYW5vdGhlciBzcGlubG9jayB3aGlsZSBpdCB3YXMKCQkJICogYmxvY2tp bmcsIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGJsb2NrIChhZ2FpbikKCQkJICogd2l0aG91dCByZWNo ZWNraW5nIHRoZSBsb2NrLiAqLwoJCQlpZiAoc3Bpbm5pbmcucHJldikKCQkJCXhlbl9zZXRfaXJx X3BlbmRpbmcoaXJxKTsKCQkJcmMgPSAxOwoJCQlicmVhazsKCQl9CgoJCS8qIGJsb2NrIHVudGls IGlycSBiZWNvbWVzIHBlbmRpbmcgKi8KCQl4ZW5fcG9sbF9pcnEoaXJxKTsKCX0gd2hpbGUgKCF4 ZW5fdGVzdF9pcnFfcGVuZGluZyhpcnEpKTsKCgkvKiBMZWF2ZSB0aGUgaXJxIHBlbmRpbmcgc28g dGhhdCBhbnkgaW50ZXJydXB0ZWQgYmxvY2tlciB3aWxsCgkgKiByZS1jaGVjay4gKi8KCWlmICgh cmMpCgkJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgaXJxX3RvX2Rlc2MoaXJxKSk7CgoJ LyogYW5ub3VuY2Ugd2UncmUgZG9uZSAqLwoJcGVyY3B1X3dyaXRlKHNwaW5uaW5nLCBzcGlubmlu Zy5wcmV2KTsKCXJtX2xvY2sgPSAmX19nZXRfY3B1X3ZhcihzcGlubmluZ19ybV9sb2NrKTsKCXJh d19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CglfX3Jhd193cml0ZV9sb2NrKHJtX2xvY2spOwoJX19y YXdfd3JpdGVfdW5sb2NrKHJtX2xvY2spOwoJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsK CglyZXR1cm4gcmM7Cn0KRVhQT1JUX1NZTUJPTCh4ZW5fc3Bpbl93YWl0KTsKCnVuc2lnbmVkIGlu dCB4ZW5fc3Bpbl9hZGp1c3QocmF3X3NwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGludCB0b2tl bikKewoJcmV0dXJuIHRva2VuOy8vdG9kbwp9CkVYUE9SVF9TWU1CT0woeGVuX3NwaW5fYWRqdXN0 KTsKCmludCB4ZW5fc3Bpbl93YWl0X2ZsYWdzKHJhd19zcGlubG9ja190ICpsb2NrLCB1bnNpZ25l ZCBpbnQgKnRva2VuLAoJCQkgIHVuc2lnbmVkIGludCBmbGFncykKewoJcmV0dXJuIHhlbl9zcGlu X3dhaXQobG9jaywgKnRva2VuKTsvL3RvZG8KfQpFWFBPUlRfU1lNQk9MKHhlbl9zcGluX3dhaXRf ZmxhZ3MpOwoKdm9pZCB4ZW5fc3Bpbl9raWNrKHJhd19zcGlubG9ja190ICpsb2NrLCB1bnNpZ25l ZCBpbnQgdG9rZW4pCnsKCXVuc2lnbmVkIGludCBjcHU7CgoJdG9rZW4gJj0gKDFVIDw8IFRJQ0tF VF9TSElGVCkgLSAxOwoJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKCQlyYXdfcndsb2NrX3Qg KnJtX2xvY2s7CgkJdW5zaWduZWQgbG9uZyBmbGFnczsKCQlzdHJ1Y3Qgc3Bpbm5pbmcgKnNwaW5u aW5nOwoKCQlpZiAoY3B1ID09IHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpCgkJCWNvbnRpbnVlOwoK CQlybV9sb2NrID0gJnBlcl9jcHUoc3Bpbm5pbmdfcm1fbG9jaywgY3B1KTsKCQlyYXdfbG9jYWxf aXJxX3NhdmUoZmxhZ3MpOwoJCV9fcmF3X3JlYWRfbG9jayhybV9sb2NrKTsKCgkJc3Bpbm5pbmcg PSBwZXJfY3B1KHNwaW5uaW5nLCBjcHUpOwoJCXNtcF9ybWIoKTsKCQlpZiAoc3Bpbm5pbmcKCQkg ICAgJiYgKHNwaW5uaW5nLT5sb2NrICE9IGxvY2sgfHwgc3Bpbm5pbmctPnRpY2tldCAhPSB0b2tl bikpCgkJCXNwaW5uaW5nID0gTlVMTDsKCgkJX19yYXdfcmVhZF91bmxvY2socm1fbG9jayk7CgkJ cmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKCgkJaWYgKHVubGlrZWx5KHNwaW5uaW5nKSkg ewoJCQlub3RpZnlfcmVtb3RlX3ZpYV9pcGkoU1BJTl9VTkxPQ0tfVkVDVE9SLCBjcHUpOwoJCQly ZXR1cm47CgkJfQoJfQp9CkVYUE9SVF9TWU1CT0woeGVuX3NwaW5fa2ljayk7CgojZW5kaWYgLyog VElDS0VUX1NISUZUICovCg== --=__Part705B3A7C.5__=--