From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Dumazet Subject: [PATCH (resent with the attachment !)] netfilter : zap get_cpu()/put_cpu() calls from ip_tables Date: Fri, 25 Nov 2005 12:28:47 +0100 Message-ID: <4386F56F.7020205@cosmosbay.com> References: <432EF0C5.5090908@cosmosbay.com> <200509191948.55333.ak@suse.de> <432FDAC5.3040801@cosmosbay.com> <200509201830.20689.ak@suse.de> <433082DE.3060308@cosmosbay.com> <43308324.70403@cosmosbay.com> <4331CFA7.50104@cosmosbay.com> <4386F440.5020505@cosmosbay.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------050707090509040105080107" Cc: netdev@vger.kernel.org, netfilter-devel@lists.netfilter.org Return-path: To: "David S. Miller" , Harald Welte , kaber@trash.net, Andrew Morton In-Reply-To: <4386F440.5020505@cosmosbay.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: netfilter-devel-bounces@lists.netfilter.org Errors-To: netfilter-devel-bounces@lists.netfilter.org List-Id: netdev.vger.kernel.org This is a multi-part message in MIME format. --------------050707090509040105080107 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit The 'ip_tables: NUMA-aware allocation' patch (http://www.kernel.org/git/?p=linux/kernel/git/davem/net-2.6.16.git;a=commit;h=6d1273850cac8db77c462caaa145b813d93adc55) introduced a problem with get_cpu()/put_cpu() The problem is that get_cpu() disables preemption and the thread is not allowed to sleep. As the intent was only to give a hint, relax the enforcement and switch to a hint : If the current thread is preempted and migrated to another cpu, this is not a problem. Most of the time, thread wont be migrated anyway. This patch removes get_cpu()/put_cpu() pairs and uses raw_smp_processor_id() were appropriate. Signed-off-by: Eric Dumazet --------------050707090509040105080107 Content-Type: text/plain; name="zap_getput_cpu.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="zap_getput_cpu.patch" LS0tIG5ldC0yLjYuMTYtb3JpZy9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMJMjAw NS0xMS0yNSAxMDoyNDowMi4wMDAwMDAwMDAgKzAxMDAKKysrIG5ldC0yLjYuMTYvbmV0L2lw djQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCTIwMDUtMTEtMjUgMTE6NDQ6NDAuMDAwMDAwMDAw ICswMTAwCkBAIC05ODgsMTEgKzk4OCwxNCBAQAogewogCXVuc2lnbmVkIGludCBjcHU7CiAJ dW5zaWduZWQgaW50IGk7Ci0JdW5zaWduZWQgaW50IGN1cmNwdSA9IGdldF9jcHUoKTsKKwl1 bnNpZ25lZCBpbnQgY3VyY3B1OwogCiAJLyogSW5zdGVhZCBvZiBjbGVhcmluZyAoYnkgYSBw cmV2aW91cyBjYWxsIHRvIG1lbXNldCgpKQogCSAqIHRoZSBjb3VudGVycyBhbmQgdXNpbmcg YWRkcywgd2Ugc2V0IHRoZSBjb3VudGVycwotCSAqIHdpdGggZGF0YSB1c2VkIGJ5IGN1cnJl bnQgQ1BVICovCisJICogd2l0aCBkYXRhIHVzZWQgYnkgJ2N1cnJlbnQnIENQVQorCSAqIFdl IGRvbnQgY2FyZSBhYm91dCBwcmVlbXB0aW9uIGhlcmUuCisJICovCisJY3VyY3B1ID0gcmF3 X3NtcF9wcm9jZXNzb3JfaWQoKTsKIAogCWkgPSAwOwogCUlQVF9FTlRSWV9JVEVSQVRFKHQt PmVudHJpZXNbY3VyY3B1XSwKQEAgLTEwMTEsNyArMTAxNCw2IEBACiAJCQkJICBjb3VudGVy cywKIAkJCQkgICZpKTsKIAl9Ci0JcHV0X2NwdSgpOwogfQogCiBzdGF0aWMgaW50CkBAIC0x MDI5LDcgKzEwMzEsNyBAQAogCSAgIChvdGhlciB0aGFuIGNvbWVmcm9tLCB3aGljaCB1c2Vy c3BhY2UgZG9lc24ndCBjYXJlCiAJICAgYWJvdXQpLiAqLwogCWNvdW50ZXJzaXplID0gc2l6 ZW9mKHN0cnVjdCBpcHRfY291bnRlcnMpICogdGFibGUtPnByaXZhdGUtPm51bWJlcjsKLQlj b3VudGVycyA9IHZtYWxsb2MoY291bnRlcnNpemUpOworCWNvdW50ZXJzID0gdm1hbGxvY19u b2RlKGNvdW50ZXJzaXplLCBudW1hX25vZGVfaWQoKSk7CiAKIAlpZiAoY291bnRlcnMgPT0g TlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMDM5LDggKzEwNDEsMTEgQEAKIAlnZXRf Y291bnRlcnModGFibGUtPnByaXZhdGUsIGNvdW50ZXJzKTsKIAl3cml0ZV91bmxvY2tfYmgo JnRhYmxlLT5sb2NrKTsKIAotCS8qIGNob29zZSB0aGUgY29weSB0aGF0IGlzIG9uIG91ciBu b2RlL2NwdSwgLi4uICovCi0JbG9jX2NwdV9lbnRyeSA9IHRhYmxlLT5wcml2YXRlLT5lbnRy aWVzW2dldF9jcHUoKV07CisJLyogY2hvb3NlIHRoZSBjb3B5IHRoYXQgaXMgb24gb3VyIG5v ZGUvY3B1LCAuLi4KKwkgKiBUaGlzIGNob2ljZSBpcyBsYXp5IChiZWNhdXNlIGN1cnJlbnQg dGhyZWFkIGlzCisJICogYWxsb3dlZCB0byBtaWdyYXRlIHRvIGFub3RoZXIgY3B1KQorCSAq LworCWxvY19jcHVfZW50cnkgPSB0YWJsZS0+cHJpdmF0ZS0+ZW50cmllc1tyYXdfc21wX3By b2Nlc3Nvcl9pZCgpXTsKIAkvKiAuLi4gdGhlbiBjb3B5IGVudGlyZSB0aGluZyAuLi4gKi8K IAlpZiAoY29weV90b191c2VyKHVzZXJwdHIsIGxvY19jcHVfZW50cnksIHRvdGFsX3NpemUp ICE9IDApIHsKIAkJcmV0ID0gLUVGQVVMVDsKQEAgLTEwOTEsNyArMTA5Niw2IEBACiAJfQog CiAgZnJlZV9jb3VudGVyczoKLQlwdXRfY3B1KCk7CiAJdmZyZWUoY291bnRlcnMpOwogCXJl dHVybiByZXQ7CiB9CkBAIC0xMTg5LDcgKzExOTMsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsK IAogCS8qIGNob29zZSB0aGUgY29weSB0aGF0IGlzIG91ciBub2RlL2NwdSAqLwotCWxvY19j cHVfZW50cnkgPSBuZXdpbmZvLT5lbnRyaWVzW2dldF9jcHUoKV07CisJbG9jX2NwdV9lbnRy eSA9IG5ld2luZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJaWYgKGNv cHlfZnJvbV91c2VyKGxvY19jcHVfZW50cnksIHVzZXIgKyBzaXplb2YodG1wKSwKIAkJCSAg IHRtcC5zaXplKSAhPSAwKSB7CiAJCXJldCA9IC1FRkFVTFQ7CkBAIC0xMjQyLDkgKzEyNDYs OCBAQAogCS8qIEdldCB0aGUgb2xkIGNvdW50ZXJzLiAqLwogCWdldF9jb3VudGVycyhvbGRp bmZvLCBjb3VudGVycyk7CiAJLyogRGVjcmVhc2UgbW9kdWxlIHVzYWdlIGNvdW50cyBhbmQg ZnJlZSByZXNvdXJjZSAqLwotCWxvY19jcHVfb2xkX2VudHJ5ID0gb2xkaW5mby0+ZW50cmll c1tzbXBfcHJvY2Vzc29yX2lkKCldOworCWxvY19jcHVfb2xkX2VudHJ5ID0gb2xkaW5mby0+ ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAlJUFRfRU5UUllfSVRFUkFURShs b2NfY3B1X29sZF9lbnRyeSwgb2xkaW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSxOVUxMKTsK LQlwdXRfY3B1KCk7CiAJZnJlZV90YWJsZV9pbmZvKG9sZGluZm8pOwogCWlmIChjb3B5X3Rv X3VzZXIodG1wLmNvdW50ZXJzLCBjb3VudGVycywKIAkJCSBzaXplb2Yoc3RydWN0IGlwdF9j b3VudGVycykgKiB0bXAubnVtX2NvdW50ZXJzKSAhPSAwKQpAQCAtMTI2MSw3ICsxMjY0LDYg QEAKICBmcmVlX25ld2luZm9fY291bnRlcnM6CiAJdmZyZWUoY291bnRlcnMpOwogIGZyZWVf bmV3aW5mbzoKLQlwdXRfY3B1KCk7CiAJZnJlZV90YWJsZV9pbmZvKG5ld2luZm8pOwogCXJl dHVybiByZXQ7CiB9CkBAIC0xMzAzLDcgKzEzMDUsNyBAQAogCWlmIChsZW4gIT0gc2l6ZW9m KHRtcCkgKyB0bXAubnVtX2NvdW50ZXJzKnNpemVvZihzdHJ1Y3QgaXB0X2NvdW50ZXJzKSkK IAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwYWRkYyA9IHZtYWxsb2MobGVuKTsKKwlwYWRkYyA9 IHZtYWxsb2Nfbm9kZShsZW4sIG51bWFfbm9kZV9pZCgpKTsKIAlpZiAoIXBhZGRjKQogCQly ZXR1cm4gLUVOT01FTTsKIApAQCAtMTMyNiw3ICsxMzI4LDcgQEAKIAogCWkgPSAwOwogCS8q IENob29zZSB0aGUgY29weSB0aGF0IGlzIG9uIG91ciBub2RlICovCi0JbG9jX2NwdV9lbnRy eSA9IHQtPnByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlsb2NfY3B1 X2VudHJ5ID0gdC0+cHJpdmF0ZS0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsK IAlJUFRfRU5UUllfSVRFUkFURShsb2NfY3B1X2VudHJ5LAogCQkJICB0LT5wcml2YXRlLT5z aXplLAogCQkJICBhZGRfY291bnRlcl90b19lbnRyeSwKQEAgLTE1MjUsOCArMTUyNywxMCBA QAogCWlmICghbmV3aW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKiBjaG9vc2UgdGhl IGNvcHkgb24gb3VyIG5vZGUvY3B1ICovCi0JbG9jX2NwdV9lbnRyeSA9IG5ld2luZm8tPmVu dHJpZXNbZ2V0X2NwdSgpXTsKKwkvKiBjaG9vc2UgdGhlIGNvcHkgb24gb3VyIG5vZGUvY3B1 CisJICogYnV0IGRvbnQgY2FyZSBvZiBwcmVlbXB0aW9uCisJICovCisJbG9jX2NwdV9lbnRy eSA9IG5ld2luZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJbWVtY3B5 KGxvY19jcHVfZW50cnksIHJlcGwtPmVudHJpZXMsIHJlcGwtPnNpemUpOwogCiAJcmV0ID0g dHJhbnNsYXRlX3RhYmxlKHRhYmxlLT5uYW1lLCB0YWJsZS0+dmFsaWRfaG9va3MsCkBAIC0x NTM0LDcgKzE1MzgsNiBAQAogCQkJICAgICAgcmVwbC0+bnVtX2VudHJpZXMsCiAJCQkgICAg ICByZXBsLT5ob29rX2VudHJ5LAogCQkJICAgICAgcmVwbC0+dW5kZXJmbG93KTsKLQlwdXRf Y3B1KCk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsK IAkJcmV0dXJuIHJldDsKQEAgLTE1ODQsMTAgKzE1ODcsOSBAQAogCXVwKCZpcHRfbXV0ZXgp OwogCiAJLyogRGVjcmVhc2UgbW9kdWxlIHVzYWdlIGNvdW50cyBhbmQgZnJlZSByZXNvdXJj ZXMgKi8KLQlsb2NfY3B1X2VudHJ5ID0gdGFibGUtPnByaXZhdGUtPmVudHJpZXNbZ2V0X2Nw dSgpXTsKKwlsb2NfY3B1X2VudHJ5ID0gdGFibGUtPnByaXZhdGUtPmVudHJpZXNbcmF3X3Nt cF9wcm9jZXNzb3JfaWQoKV07CiAJSVBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwg dGFibGUtPnByaXZhdGUtPnNpemUsCiAJCQkgIGNsZWFudXBfZW50cnksIE5VTEwpOwotCXB1 dF9jcHUoKTsKIAlmcmVlX3RhYmxlX2luZm8odGFibGUtPnByaXZhdGUpOwogfQogCi0tLSBu ZXQtMi42LjE2LW9yaWcvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwkyMDA1LTEx LTI1IDEwOjI0OjAyLjAwMDAwMDAwMCArMDEwMAorKysgbmV0LTIuNi4xNi9uZXQvaXB2Ni9u ZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCTIwMDUtMTEtMjUgMTE6MjM6MDMuMDAwMDAwMDAwICsw MTAwCkBAIC0xMDc0LDExICsxMDc0LDE0IEBACiB7CiAJdW5zaWduZWQgaW50IGNwdTsKIAl1 bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgY3VyY3B1ID0gZ2V0X2NwdSgpOworCXVu c2lnbmVkIGludCBjdXJjcHU7CiAKIAkvKiBJbnN0ZWFkIG9mIGNsZWFyaW5nIChieSBhIHBy ZXZpb3VzIGNhbGwgdG8gbWVtc2V0KCkpCiAJICogdGhlIGNvdW50ZXJzIGFuZCB1c2luZyBh ZGRzLCB3ZSBzZXQgdGhlIGNvdW50ZXJzCi0JICogd2l0aCBkYXRhIHVzZWQgYnkgY3VycmVu dCBDUFUgKi8KKwkgKiB3aXRoIGRhdGEgdXNlZCBieSAnY3VycmVudCcgQ1BVCisJICogV2Ug ZG9udCBjYXJlIGFib3V0IHByZWVtcHRpb24gaGVyZS4KKwkgKi8KKwljdXJjcHUgPSByYXdf c21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJaSA9IDA7CiAJSVA2VF9FTlRSWV9JVEVSQVRFKHQt PmVudHJpZXNbY3VyY3B1XSwKQEAgLTEwOTcsNyArMTEwMCw2IEBACiAJCQkJICBjb3VudGVy cywKIAkJCQkgICZpKTsKIAl9Ci0JcHV0X2NwdSgpOwogfQogCiBzdGF0aWMgaW50CkBAIC0x MTI2LDcgKzExMjgsNyBAQAogCXdyaXRlX3VubG9ja19iaCgmdGFibGUtPmxvY2spOwogCiAJ LyogY2hvb3NlIHRoZSBjb3B5IHRoYXQgaXMgb24gb3VyYyBub2RlL2NwdSAqLwotCWxvY19j cHVfZW50cnkgPSB0YWJsZS0+cHJpdmF0ZS0+ZW50cmllc1tnZXRfY3B1KCldOworCWxvY19j cHVfZW50cnkgPSB0YWJsZS0+cHJpdmF0ZS0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9p ZCgpXTsKIAlpZiAoY29weV90b191c2VyKHVzZXJwdHIsIGxvY19jcHVfZW50cnksIHRvdGFs X3NpemUpICE9IDApIHsKIAkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBmcmVlX2NvdW50ZXJz OwpAQCAtMTE3Niw3ICsxMTc4LDYgQEAKIAl9CiAKICBmcmVlX2NvdW50ZXJzOgotCXB1dF9j cHUoKTsKIAl2ZnJlZShjb3VudGVycyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEyNzEsNyAr MTI3Miw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyogY2hvb3NlIHRoZSBjb3B5IHRo YXQgaXMgb24gb3VyIG5vZGUvY3B1ICovCi0JbG9jX2NwdV9lbnRyeSA9IG5ld2luZm8tPmVu dHJpZXNbZ2V0X2NwdSgpXTsKKwlsb2NfY3B1X2VudHJ5ID0gbmV3aW5mby0+ZW50cmllc1ty YXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAlpZiAoY29weV9mcm9tX3VzZXIobG9jX2NwdV9l bnRyeSwgdXNlciArIHNpemVvZih0bXApLAogCQkJICAgdG1wLnNpemUpICE9IDApIHsKIAkJ cmV0ID0gLUVGQVVMVDsKQEAgLTEzMjQsOSArMTMyNSw4IEBACiAJLyogR2V0IHRoZSBvbGQg Y291bnRlcnMuICovCiAJZ2V0X2NvdW50ZXJzKG9sZGluZm8sIGNvdW50ZXJzKTsKIAkvKiBE ZWNyZWFzZSBtb2R1bGUgdXNhZ2UgY291bnRzIGFuZCBmcmVlIHJlc291cmNlICovCi0JbG9j X2NwdV9vbGRfZW50cnkgPSBvbGRpbmZvLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV07 CisJbG9jX2NwdV9vbGRfZW50cnkgPSBvbGRpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vz c29yX2lkKCldOwogCUlQNlRfRU5UUllfSVRFUkFURShsb2NfY3B1X29sZF9lbnRyeSwgb2xk aW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSxOVUxMKTsKLQlwdXRfY3B1KCk7CiAJZnJlZV90 YWJsZV9pbmZvKG9sZGluZm8pOwogCWlmIChjb3B5X3RvX3VzZXIodG1wLmNvdW50ZXJzLCBj b3VudGVycywKIAkJCSBzaXplb2Yoc3RydWN0IGlwNnRfY291bnRlcnMpICogdG1wLm51bV9j b3VudGVycykgIT0gMCkKQEAgLTEzNDMsNyArMTM0Myw2IEBACiAgZnJlZV9uZXdpbmZvX2Nv dW50ZXJzOgogCXZmcmVlKGNvdW50ZXJzKTsKICBmcmVlX25ld2luZm86Ci0JcHV0X2NwdSgp OwogCWZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTYw OSw3ICsxNjA4LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBjaG9vc2UgdGhlIGNv cHkgb24gb3VyIG5vZGUvY3B1ICovCi0JbG9jX2NwdV9lbnRyeSA9IG5ld2luZm8tPmVudHJp ZXNbZ2V0X2NwdSgpXTsKKwlsb2NfY3B1X2VudHJ5ID0gbmV3aW5mby0+ZW50cmllc1tyYXdf c21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAltZW1jcHkobG9jX2NwdV9lbnRyeSwgcmVwbC0+ZW50 cmllcywgcmVwbC0+c2l6ZSk7CiAKIAlyZXQgPSB0cmFuc2xhdGVfdGFibGUodGFibGUtPm5h bWUsIHRhYmxlLT52YWxpZF9ob29rcywKQEAgLTE2MTcsNyArMTYxNiw2IEBACiAJCQkgICAg ICByZXBsLT5udW1fZW50cmllcywKIAkJCSAgICAgIHJlcGwtPmhvb2tfZW50cnksCiAJCQkg ICAgICByZXBsLT51bmRlcmZsb3cpOwotCXB1dF9jcHUoKTsKIAlpZiAocmV0ICE9IDApIHsK IAkJZnJlZV90YWJsZV9pbmZvKG5ld2luZm8pOwogCQlyZXR1cm4gcmV0OwpAQCAtMTY2Nywx MCArMTY2NSw5IEBACiAJdXAoJmlwNnRfbXV0ZXgpOwogCiAJLyogRGVjcmVhc2UgbW9kdWxl IHVzYWdlIGNvdW50cyBhbmQgZnJlZSByZXNvdXJjZXMgKi8KLQlsb2NfY3B1X2VudHJ5ID0g dGFibGUtPnByaXZhdGUtPmVudHJpZXNbZ2V0X2NwdSgpXTsKKwlsb2NfY3B1X2VudHJ5ID0g dGFibGUtPnByaXZhdGUtPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJSVA2 VF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksIHRhYmxlLT5wcml2YXRlLT5zaXplLAog CQkJICBjbGVhbnVwX2VudHJ5LCBOVUxMKTsKLQlwdXRfY3B1KCk7CiAJZnJlZV90YWJsZV9p bmZvKHRhYmxlLT5wcml2YXRlKTsKIH0KIAotLS0gbmV0LTIuNi4xNi1vcmlnL25ldC9pcHY0 L25ldGZpbHRlci9hcnBfdGFibGVzLmMJMjAwNS0xMS0yNSAxMDoyNDowMi4wMDAwMDAwMDAg KzAxMDAKKysrIG5ldC0yLjYuMTYvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwky MDA1LTExLTI1IDExOjE1OjUwLjAwMDAwMDAwMCArMDEwMApAQCAtODE0LDExICs4MTQsMTQg QEAKIHsKIAl1bnNpZ25lZCBpbnQgY3B1OwogCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVk IGludCBjdXJjcHUgPSBnZXRfY3B1KCk7CisJdW5zaWduZWQgaW50IGN1cmNwdTsKIAogCS8q IEluc3RlYWQgb2YgY2xlYXJpbmcgKGJ5IGEgcHJldmlvdXMgY2FsbCB0byBtZW1zZXQoKSkK IAkgKiB0aGUgY291bnRlcnMgYW5kIHVzaW5nIGFkZHMsIHdlIHNldCB0aGUgY291bnRlcnMK LQkgKiB3aXRoIGRhdGEgdXNlZCBieSBjdXJyZW50IENQVSAqLworCSAqIHdpdGggZGF0YSB1 c2VkIGJ5ICdjdXJyZW50JyBDUFUKKwkgKiBXZSBkb250IGNhcmUgYWJvdXQgcHJlZW1wdGlv biBoZXJlLgorCSAqLworCWN1cmNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlp ID0gMDsKIAlBUlBUX0VOVFJZX0lURVJBVEUodC0+ZW50cmllc1tjdXJjcHVdLApAQCAtODM3 LDcgKzg0MCw2IEBACiAJCQkJICAgY291bnRlcnMsCiAJCQkJICAgJmkpOwogCX0KLQlwdXRf Y3B1KCk7CiB9CiAKIHN0YXRpYyBpbnQgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQg aW50IHRvdGFsX3NpemUsCkBAIC04NjUsNyArODY3LDcgQEAKIAlnZXRfY291bnRlcnModGFi bGUtPnByaXZhdGUsIGNvdW50ZXJzKTsKIAl3cml0ZV91bmxvY2tfYmgoJnRhYmxlLT5sb2Nr KTsKIAotCWxvY19jcHVfZW50cnkgPSB0YWJsZS0+cHJpdmF0ZS0+ZW50cmllc1tnZXRfY3B1 KCldOworCWxvY19jcHVfZW50cnkgPSB0YWJsZS0+cHJpdmF0ZS0+ZW50cmllc1tyYXdfc21w X3Byb2Nlc3Nvcl9pZCgpXTsKIAkvKiAuLi4gdGhlbiBjb3B5IGVudGlyZSB0aGluZyAuLi4g Ki8KIAlpZiAoY29weV90b191c2VyKHVzZXJwdHIsIGxvY19jcHVfZW50cnksIHRvdGFsX3Np emUpICE9IDApIHsKIAkJcmV0ID0gLUVGQVVMVDsKQEAgLTg5OCw3ICs5MDAsNiBAQAogCX0K IAogIGZyZWVfY291bnRlcnM6Ci0JcHV0X2NwdSgpOwogCXZmcmVlKGNvdW50ZXJzKTsKIAly ZXR1cm4gcmV0OwogfQpAQCAtOTk2LDcgKzk5Nyw3IEBACiAJCXJldHVybiAtRU5PTUVNOwog CiAJLyogY2hvb3NlIHRoZSBjb3B5IHRoYXQgaXMgb24gb3VyIG5vZGUvY3B1ICovCi0JbG9j X2NwdV9lbnRyeSA9IG5ld2luZm8tPmVudHJpZXNbZ2V0X2NwdSgpXTsKKwlsb2NfY3B1X2Vu dHJ5ID0gbmV3aW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAlpZiAo Y29weV9mcm9tX3VzZXIobG9jX2NwdV9lbnRyeSwgdXNlciArIHNpemVvZih0bXApLAogCQkJ ICAgdG1wLnNpemUpICE9IDApIHsKIAkJcmV0ID0gLUVGQVVMVDsKQEAgLTEwNDksOSArMTA1 MCw5IEBACiAJLyogR2V0IHRoZSBvbGQgY291bnRlcnMuICovCiAJZ2V0X2NvdW50ZXJzKG9s ZGluZm8sIGNvdW50ZXJzKTsKIAkvKiBEZWNyZWFzZSBtb2R1bGUgdXNhZ2UgY291bnRzIGFu ZCBmcmVlIHJlc291cmNlICovCi0JbG9jX2NwdV9vbGRfZW50cnkgPSBvbGRpbmZvLT5lbnRy aWVzW3NtcF9wcm9jZXNzb3JfaWQoKV07CisJbG9jX2NwdV9vbGRfZW50cnkgPSBvbGRpbmZv LT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOwogCUFSUFRfRU5UUllfSVRFUkFU RShsb2NfY3B1X29sZF9lbnRyeSwgb2xkaW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSxOVUxM KTsKLQlwdXRfY3B1KCk7CisKIAlmcmVlX3RhYmxlX2luZm8ob2xkaW5mbyk7CiAJaWYgKGNv cHlfdG9fdXNlcih0bXAuY291bnRlcnMsIGNvdW50ZXJzLAogCQkJIHNpemVvZihzdHJ1Y3Qg YXJwdF9jb3VudGVycykgKiB0bXAubnVtX2NvdW50ZXJzKSAhPSAwKQpAQCAtMTA2OCw3ICsx MDY5LDYgQEAKICBmcmVlX25ld2luZm9fY291bnRlcnM6CiAJdmZyZWUoY291bnRlcnMpOwog IGZyZWVfbmV3aW5mbzoKLQlwdXRfY3B1KCk7CiAJZnJlZV90YWJsZV9pbmZvKG5ld2luZm8p OwogCXJldHVybiByZXQ7CiB9CkBAIC0xMjk1LDcgKzEyOTUsNyBAQAogCX0KIAogCS8qIGNo b29zZSB0aGUgY29weSBvbiBvdXIgbm9kZS9jcHUgKi8KLQlsb2NfY3B1X2VudHJ5ID0gbmV3 aW5mby0+ZW50cmllc1tnZXRfY3B1KCldOworCWxvY19jcHVfZW50cnkgPSBuZXdpbmZvLT5l bnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOwogCW1lbWNweShsb2NfY3B1X2VudHJ5 LCByZXBsLT5lbnRyaWVzLCByZXBsLT5zaXplKTsKIAogCXJldCA9IHRyYW5zbGF0ZV90YWJs ZSh0YWJsZS0+bmFtZSwgdGFibGUtPnZhbGlkX2hvb2tzLApAQCAtMTMwMyw3ICsxMzAzLDYg QEAKIAkJCSAgICAgIHJlcGwtPm51bV9lbnRyaWVzLAogCQkJICAgICAgcmVwbC0+aG9va19l bnRyeSwKIAkJCSAgICAgIHJlcGwtPnVuZGVyZmxvdyk7Ci0JcHV0X2NwdSgpOwogCWR1cHJp bnRmKCJhcnB0X3JlZ2lzdGVyX3RhYmxlOiB0cmFuc2xhdGUgdGFibGUgZ2l2ZXMgJWRcbiIs IHJldCk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsK QEAgLTEzNTQsMTAgKzEzNTMsOSBAQAogCXVwKCZhcnB0X211dGV4KTsKIAogCS8qIERlY3Jl YXNlIG1vZHVsZSB1c2FnZSBjb3VudHMgYW5kIGZyZWUgcmVzb3VyY2VzICovCi0JbG9jX2Nw dV9lbnRyeSA9IHRhYmxlLT5wcml2YXRlLT5lbnRyaWVzW2dldF9jcHUoKV07CisJbG9jX2Nw dV9lbnRyeSA9IHRhYmxlLT5wcml2YXRlLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lk KCldOwogCUFSUFRfRU5UUllfSVRFUkFURShsb2NfY3B1X2VudHJ5LCB0YWJsZS0+cHJpdmF0 ZS0+c2l6ZSwKIAkJCSAgIGNsZWFudXBfZW50cnksIE5VTEwpOwotCXB1dF9jcHUoKTsKIAlm cmVlX3RhYmxlX2luZm8odGFibGUtPnByaXZhdGUpOwogfQogCg== --------------050707090509040105080107--