Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932469AbWBYRMM (ORCPT ); Sat, 25 Feb 2006 12:12:12 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S932515AbWBYRMM (ORCPT ); Sat, 25 Feb 2006 12:12:12 -0500 Received: from lirs02.phys.au.dk ([130.225.28.43]:32925 "EHLO lirs02.phys.au.dk") by vger.kernel.org with ESMTP id S932469AbWBYRMJ (ORCPT ); Sat, 25 Feb 2006 12:12:09 -0500 Date: Sat, 25 Feb 2006 18:11:46 +0100 (MET) From: Esben Nielsen To: Thomas Gleixner cc: Ingo Molnar , , Steven Rostedt Subject: Re: 2.6.15-rt17 In-Reply-To: <1140650267.6396.6.camel@localhost.localdomain> Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="202006529-2014505494-1140887506=:18415" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 40353 Lines: 693 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --202006529-2014505494-1140887506=:18415 Content-Type: TEXT/PLAIN; charset=US-ASCII On Thu, 23 Feb 2006, Thomas Gleixner wrote: > On Wed, 2006-02-22 at 17:50 +0100, Esben Nielsen wrote: > > I didn't know anyone looked at my patch! I am ofcourse happy about it :-) > > Was just delayed due to other work in progress. > You didn't use the "TestRTMutex" I send along with the patch :-( Since I learned to use unittesting that way I have been a big fan. It does catch a lot of stupid bugs without having to wait for the program to get there while keeping the ability to debug with gdb and fix it right away. And most important: you can keep the tests and check if your program still parses them after a rewrite. Very usefull to prevent repeating bugs. So here is the issues I have found: 1) grablockBKL.tst failes. Apparently you can "grab" the BKL now? Is this intended? I have updated the test to accept this. 2) 2locksdeadlock.tst loops forever. It is a livelock: When two RT-tasks "deadlocks" on two mutexes they keep waking up each other in other. I quickly fixed that bug. 3) While fixing that I came to think about what happens when you signal a task blocked on a task blocked on a task. I thus wrote 2lock3tasksBoostSignal.tst. Well, the priorities wasn't set back correctly. I fixed that too. I have attached the patch againt 2.6.17-rt17 (and therefore also included the previous patch) along with the updated tester and tests. Esben > > That was why I had _reversed_ the lock ordering relative to normal in the > > original patch: First lock task->pi_lock. Assign lock. Lock > > lock->wait_lock. Then unlock task->pi_lock. Now it is safe to refer to > > lock. To avoid deadlocks I used _raw_spin_trylock() when locking the 2. > > lock. > > Stupid me. I messed that one up. Should show up in the next -rt > > Thanks > > tglx > > --202006529-2014505494-1140887506=:18415 Content-Type: APPLICATION/x-gzip; name="TestRTMutex.tgz" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="TestRTMutex.tgz" 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 t/BxtrFArs04nrvl0X8t88x9Y6k8zkK+WYToKs7xb/vM2f9V9j+33/2df/5f ayj7n2a1Ucf930qO/7uaJz//v2cm8/P/Bz//zw/2l3Wwn5/Y5yf2+Yn9f9KT uf47Ck/OlmQDOnf9VxX4P62tarNSQfvvHP9nRY++/qvoSl+1MkPrW3wlVNFw OSvpFuA3XgNm0LzDInARLm++CrSofpXLQH38S/znNz8d3HXJZzzz9v9rDQ3/ uYn231v1Vo7/vJLnJvjPFavT3x/+c2VGBnfDf66YFMTf+yiIjf9cmZ2JLeVk JtWZmWilWhH+85xiLJSLiKNLwoz3XPe750eX/+cf+3T4N6SjuOUdAMzT/+qt GuM/V2r1Wh3v/zWrtdz+cyWPpv8ZGiC0h3F3ThfLMMgTn6qpnzTJIITHrK/G Et9U5xbOcUYqXVbCp4eu+a/jydz/Pww++93lLADn7f83qq3Y/19jC9d/W7V8 /38ljxr/UPf6YDEWg/V73f9XOSdWTfWv6AAglctFGV3lIcD9MHovBwE6o7L3 3ZXNh7oIeLNKf7ATg5ux+bVfBrxpX3/A44XlsbqCI4Zl1uu9HzMsj9n/wuWm rv9hTZHJ3Erx/ytbW42m3P9r1ZuM/7WV4z+s5DEB+6n1L9c1GP8wQmvQyAxk hy7BMJi4MgX6k5d4YG/33rz/AYffcNLTnbVTeHFzc7PkMI40Ugi8fvAvv8tg ksIslm2Q3Ylu67rDu0aYH8IadabjMXoLwN8xTqgJFBr5k+nIFTGLemr8y1Ch A3/QGV0Xn7iujFh+gl83XuG/Ch5VhTA6qkyluAhUKiqAlY7COKXFN/4hjKnx H72+dxGJoI1XMiDFU0B0FUw6lzVZnoyC6aFhn9C84A9Cv2ocCEhTfG234bMN So1IzzFYaRbvvaJst0447LoMqVMUFYJBpUftSjpmakpCp+cFfb/L8JYcOwGb yj1p/fFI4PdA/3k8IshVKESZOJNwrYlSQUBcvVCMuKb5e0z7yoPuObxAukhF w9g22MZoxSdEFn+XnSdat+Wim2jcidRGkVNwt3WmvKvwoz+0eTK7evwlBZr4 qeoZjLbJgd74ItlvIr/fgxqCbzsFkwfvo48sYATKyRy4WPCiUQtm+ouQkeIM Egweiz+heSKQCp98s+FSG8ZR6albJduFCVLDJDjKqlmDplm1xidVVwgHr3XP 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 J6Dzxn+j0uT9n1alVef5v5Xbf6/mycb/M5YDMG4Xg/9L0ejNIeFY8sNQmBUc 1SzwP8dakgiGrAzTz8vtDEV+D90KD/ck1v8KBHF1+J+a/U8dseBx/t/K1/8r eSz7P3vVn/ht2fWkmOX/Fw+mv+GTuf+3PPPf+fN/sxWP/y30/9mqtvLzn5U8 N7b/vcuGXW0JG3YZBK2EN96ys8h+zVt2S30y9P9V+n+oNBpb0v8LOgMm+598 /b+aZ+n437dbANwI/dtJXwA45pOZIT5Zq4P/AETvmz2J+z91/fzvzq4/6Zkz /uu1Rnz/p14h/IdWPcf/XsmjDXnj/veih4HGiLvdlWr9et68k7MHu/d9ayZX eeN7+Uzez11vnbMlsbl0t586k/Pq8uEubt+AyQdz+XmTXvmAt7CXw+YK7l8v qz7v/eb1chj9D1psfYXPbP0vtv+6Sx7z7H+3mlWJ/4Ou33H/p9nK73+u5LmN /qeuJ86WAV+XDkhMf616oMXc30wXTLXeeWB9UMtQnP/L7m3sBZjuCVZRnw89 4K0nU/5r+G933QGYt/6vN2rq/gc6foFYtXq+/7eSJ8d/WymrOf6beL4O/Lfb LbpzYLd72CXIEdtm8ZAjtt2S3a9O4frKnoT+Fy3fAGze+W99qxbjv9XZ/3Mj P/9ZyXM3/LclAsBZlGddEUuDhkvPNzdLm/fo4x+rsONFfnXJecwb/7Uqjf+t ZgXWf7T/16hu5fbfK3mWi/8460amTj3NUuuha+K/87HHvz/e7Nzd4sN8Zo// Wq3ZbEj7r0a9ifs/DRQJ+fhfwRNDe7BDv/GEMCkQ1sP+JHz9JT8oB22pqQYj RVFzEoh9jZOsp7sONKMikgI5FCw8f+pI0IS3e2/e/4CrguGk5zx9XjDCi+QX ryDzcYVLtei3w9e/uHil7PT3naQruKekAlOcg+NdjiPgkBBOQryaEQqmr6TI n0xHVB1Rkb2hkVOoHXjpheNi0K7sOIHz0hkK0Qu/nj1jBMQ/hZBkRgN0O8dg Gq4sRjF4Vi3HJnsQp7RDib6gDzXJAvFDrULc2mxAG9PHw/dne78Un8Tu74gW F7CCmT/RPeNJ9qs7wUtV/J0E75yceWdkjmoZYTjCXvGp/FYSTNusqO/yc1zh RPD03f4R5eu+P8I/e2+Legy9KqzKmEbehS9QObzxRcV0U/cev6JzOuel7Gyv 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 kz/5kz/5s7zn/wMfJzKqAIACAA== --202006529-2014505494-1140887506=:18415 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="pi.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="pi.patch" LS0tIGxpbnV4LTIuNi4xNS1ydDE3L2tlcm5lbC9ydC5jLm9yaWcJMjAwNi0w Mi0yMiAxNjo1Mzo0NC4wMDAwMDAwMDAgKzAxMDANCisrKyBsaW51eC0yLjYu MTUtcnQxNy9rZXJuZWwvcnQuYwkyMDA2LTAyLTI1IDE3OjQ5OjUzLjAwMDAw MDAwMCArMDEwMA0KQEAgLTg3MywxMCArODczLDE5IEBAIHBpZF90IGdldF9i bG9ja2VkX29uKHRhc2tfdCAqdGFzaykNCiAJfQ0KIA0KIAlsb2NrID0gdGFz ay0+YmxvY2tlZF9vbi0+bG9jazsNCisJDQorCS8qIA0KKwkgKiBOb3cgd2Ug aGF2ZSB0byB0YWtlIGxvY2stPndhaXRfbG9jayBfYmVmb3JlXyByZWxlYXNp bmcNCisJICogdGFzay0+cGlfbG9jay4gT3RoZXJ3aXNlIGxvY2sgY2FuIGJl IGRlYWxsb2NhdGVkIHdoaWxlIHdlIGFyZQ0KKwkgKiByZWZlcmluZyB0byBp dCBhcyB0aGUgc3Vic3lzdGVtIGhhcyBubyB3YXkgb2Yga25vd2luZyBhYm91 dCB1cw0KKwkgKiBoYW5naW5nIGFyb3VuZCBpbiBoZXJlLg0KKwkgKi8NCisJ aWYgKCFfcmF3X3NwaW5fdHJ5bG9jaygmbG9jay0+d2FpdF9sb2NrKSkgew0K KwkJX3Jhd19zcGluX3VubG9jaygmdGFzay0+cGlfbG9jayk7DQorCQlnb3Rv IHRyeV9hZ2FpbjsNCisgICAgICAgIH0NCiAJX3Jhd19zcGluX3VubG9jaygm dGFzay0+cGlfbG9jayk7DQogDQotCWlmICghX3Jhd19zcGluX3RyeWxvY2so JmxvY2stPndhaXRfbG9jaykpDQotCQlnb3RvIHRyeV9hZ2FpbjsNCiANCiAJ b3duZXIgPSBsb2NrX293bmVyKGxvY2spOw0KIAlpZiAob3duZXIpDQpAQCAt OTY0LDE0ICs5NzMsMjQgQEAgc3RhdGljIGlubGluZSBpbnQgY2FsY19waV9w cmlvKHRhc2tfdCAqdA0KIH0NCiANCiAvKg0KLSAqIEFkanVzdCBwcmlvcml0 eSBvZiBhIHRhc2sNCisgKiBBZGp1c3QgcHJpb3JpdHkgb2YgYSB0YXNrLiAN CisgKiBJZiB3YWtldXAgaXMgc2V0IGl0IHdpbGwgYmUgd29rZW4gd2hlbiBi bG9ja2VkIG9uIGEgbG9jayB3aGVuIGFkanVzdGVkDQogICovDQotc3RhdGlj IHZvaWQgYWRqdXN0X3ByaW8odGFza190ICp0YXNrKQ0KK3N0YXRpYyB2b2lk IGFkanVzdF9wcmlvKHRhc2tfdCAqdGFzaywgaW50IHdha2V1cCkNCiB7DQog CWludCBwcmlvID0gY2FsY19waV9wcmlvKHRhc2spOw0KIA0KLQlpZiAodGFz ay0+cHJpbyAhPSBwcmlvKQ0KKwlpZiAodGFzay0+cHJpbyAhPSBwcmlvKSB7 DQogCQltdXRleF9zZXRwcmlvKHRhc2ssIHByaW8pOw0KKwkJaWYgKHdha2V1 cCAmJiB0YXNrLT5ibG9ja2VkX29uKSB7DQorICAgICAgICAgICAgICAgICAg ICAgICAgLyoNCisJCQkgKiBUaGUgb3duZXIgd2lsbCBoYXZlIHRoZSBibG9j a2VkIGZpZWxkIHNldCBpZiBpdCBpcw0KKwkJCSAqIGJsb2NrZWQgb24gYSBs b2NrLiBTbyBpbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byB3YWtlDQorCQkJICog dGhlIG93bmVyIHVwIHNvIGl0IGNhbiBib29zdCB3aG8gaXQgaXMgYmxvY2tl ZCBvbi4NCisJCQkgKi8NCisJCQl3YWtlX3VwX3Byb2Nlc3NfbXV0ZXgodGFz ayk7DQorCQl9DQorCX0NCiB9DQogDQogLyoNCkBAIC0xMDM0LDE2ICsxMDUz LDcgQEAgc3RhdGljIGxvbmcgdGFza19ibG9ja3Nfb25fbG9jayhzdHJ1Y3Qg cg0KIA0KIAkvKiBBZGQgdGhlIG5ldyB0b3AgcHJpb3JpdHkgd2FpdGVyIHRv IHRoZSBvd25lcnMgd2FpdGVyIGxpc3QgKi8NCiAJcGxpc3RfYWRkKCZ3YWl0 ZXItPnBpX2xpc3QsICZvd25lci0+cGlfd2FpdGVycyk7DQotCWFkanVzdF9w cmlvKG93bmVyKTsNCi0NCi0JLyoNCi0JICogVGhlIG93bmVyIHdpbGwgaGF2 ZSB0aGUgYmxvY2tlZCBmaWVsZCBzZXQgaWYgaXQgaXMNCi0JICogYmxvY2tl ZCBvbiBhIGxvY2suIFNvIGluIHRoaXMgY2FzZSB3ZSB3YW50IHRvIHdha2UN Ci0JICogdGhlIG93bmVyIHVwIHNvIGl0IGNhbiBib29zdCB3aG8gaXQgaXMg YmxvY2tlZCBvbi4NCi0JICovDQotCWlmIChvd25lci0+YmxvY2tlZF9vbikN Ci0JCXdha2VfdXBfcHJvY2Vzc19tdXRleChvd25lcik7DQotDQorCWFkanVz dF9wcmlvKG93bmVyLDEpOw0KIAlfcmF3X3NwaW5fdW5sb2NrKCZvd25lci0+ cGlfbG9jayk7DQogCXJldHVybiByZXQ7DQogfQ0KQEAgLTExMzksNyArMTE0 OSw3IEBAIHN0YXRpYyB2b2lkIHJlbW92ZV93YWl0ZXIoc3RydWN0IHJ0X211 dGUNCiAJCQluZXh0ID0gbG9ja19maXJzdF93YWl0ZXIobG9jayk7DQogCQkJ cGxpc3RfYWRkKCZuZXh0LT5waV9saXN0LCAmb3duZXItPnBpX3dhaXRlcnMp Ow0KIAkJfQ0KLQkJYWRqdXN0X3ByaW8ob3duZXIpOw0KKwkJYWRqdXN0X3By aW8ob3duZXIsMSk7DQogCQlfcmF3X3NwaW5fdW5sb2NrKCZvd25lci0+cGlf bG9jayk7DQogCX0NCiB9DQpAQCAtMTIwMSw3ICsxMjExLDcgQEAgc3RhdGlj IHZvaWQgcmVsZWFzZV9sb2NrKHN0cnVjdCBydF9tdXRleA0KIA0KIAkvKiAg UmVhZGp1c3QgcHJpb3JpdHksIHdoZW4gbmVjZXNzYXJ5LiAqLw0KIAlfcmF3 X3NwaW5fbG9jaygmY3VycmVudC0+cGlfbG9jayk7DQotCWFkanVzdF9wcmlv KGN1cnJlbnQpOw0KKwlhZGp1c3RfcHJpbyhjdXJyZW50LDApOw0KIAlfcmF3 X3NwaW5fdW5sb2NrKCZjdXJyZW50LT5waV9sb2NrKTsNCiB9DQogDQpAQCAt MTQ1Myw3ICsxNDYzLDcgQEAgc3RhdGljIGludCBfX3NjaGVkIGRvd25fcnRz ZW0oc3RydWN0IHJ0Xw0KIAkJICogUEkgYm9vc3QgaGFzIHRvIGdvDQogCQkg Ki8NCiAJCV9yYXdfc3Bpbl9sb2NrKCZjdXJyZW50LT5waV9sb2NrKTsNCi0J CWFkanVzdF9wcmlvKGN1cnJlbnQpOw0KKwkJYWRqdXN0X3ByaW8oY3VycmVu dCwwKTsNCiAJCV9yYXdfc3Bpbl91bmxvY2soJmN1cnJlbnQtPnBpX2xvY2sp Ow0KIAl9DQogCXRyYWNlX3VubG9ja19pcnFyZXN0b3JlKCZ0cmFjZWxvY2ss IGZsYWdzKTsNCg== --202006529-2014505494-1140887506=:18415-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/