Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756806Ab1BJTRd (ORCPT ); Thu, 10 Feb 2011 14:17:33 -0500 Received: from mail-ew0-f46.google.com ([209.85.215.46]:44627 "EHLO mail-ew0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755870Ab1BJTRb (ORCPT ); Thu, 10 Feb 2011 14:17:31 -0500 MIME-Version: 1.0 Date: Thu, 10 Feb 2011 14:17:25 -0500 X-Google-Sender-Auth: 1UTOwVwqKoTgOAPP0ov8DABae_U Message-ID: Subject: RFC: kdrvscan From: Nathaniel McCallum To: linux-kernel@vger.kernel.org Content-Type: multipart/mixed; boundary=0015174c43208112c1049bf26e52 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 20989 Lines: 291 --0015174c43208112c1049bf26e52 Content-Type: text/plain; charset=ISO-8859-1 Please CC me on any responses as I'm not subscribed to lkml. A while back I posted (https://lkml.org/lkml/2009/10/1/334) a patch to tag *_device_id tables into sections so that one could easily extract an inventory a linux kernel binary to determine what hardware it supports. Since that time, I have pursued another solution, namely kdrvscan. kdrvscan is a small command line program which fingerprints the symbols listed in System.map. This program has the advantage of not requiring any change to the kernel binary. However, it also commits the cardinal sin of importing kernel headers into user space. The source code is attached along with a simple Makefile that works on my system. Before I go much further in cleaning it up I'm wondering, does this approach make sense? Could a utility like this be included upstream? Nathaniel --0015174c43208112c1049bf26e52 Content-Type: text/x-csrc; charset=US-ASCII; name="kdrvscan.c" Content-Disposition: attachment; filename="kdrvscan.c" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gk01tbth0 LyogT2ssIHllcywgdGhlc2UgaW5jbHVkZXMgYXJlIGhpZGVvdXNseSB1Z2x5LgogKiBBbmQgeWVz LCBJIGtub3cgaXRzIGV2aWwgdG8gaW5jbHVkZSBrZXJuZWwgaGVhZGVycyBpbnRvIHVzZXJzcGFj ZSwgYnV0IHRoZQogKiB3aG9sZSBwb2ludCBvZiB0aGlzIHByb2dyYW0gdGhvdWdoIGlzIHRvIGZp bmdlcnByaW50IGtlcm5lbCBpbnRlcm5hbCBzdHJ1Y3RzLgogKiBJJ20gVkVSWSBvcGVuIHRvIGJl dHRlciBpZGVhcy4KICoKICogSG93ZXZlciwgdGhlcmUgc2hvdWxkIGJlIHZlcnkgbGl0dGxlIGNv bmZsaWN0IGJldHdlZW4ga2VybmVsIGFuZCB1c2Vyc3BhY2UKICogdHlwZSBzaXplcyBpbiB0aGlz IGNhc2UuICBXaGVuIGluIGRvdWJ0LCB3ZSB1c2UgdGhlIGtlcm5lbCBzaXplcy4gIFNpbmNlCiAq IHdlIGRvbid0IHVzZSBhbnkgb2YgdGhlc2UgZGF0YSB0eXBlcyBhbnl3YXksIGl0IHNob3VsZG4n dCByZWFsbHkgbWF0dGVyLgogKgogKiBGb3IgYmFja2dyb3VuZCBpbmZvLCBzZWU6CiAqIAlodHRw Oi8va2VybmVsdHJhcC5vcmcvbWFpbGFyY2hpdmUvbGludXgta2VybmVsLzIwMDkvMTAvMS80NDky ODc2CiAqIAkJb3IKICogCWh0dHBzOi8vbGttbC5vcmcvbGttbC8yMDA5LzEwLzEvMzM0CiAqLwoj ZGVmaW5lIF9fS0VSTkVMX18KI2RlZmluZSBLQlVJTERfTU9ETkFNRSAia2RydnNjYW4iCiNpbmNs dWRlIDxnZW5lcmF0ZWQvYXV0b2NvbmYuaD4KI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgojaW5jbHVk ZSA8bGludXgvdXNiLmg+CiNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CgovLyBGb3IgcHJpbnRm KCksIGZvcGVuKCksIGZjbG9zZSgpLCBmc2VlaygpLCBldGMKI3VuZGVmIF9fYWx3YXlzX2lubGlu ZQojZGVmaW5lIF9fb2ZmX3RfZGVmaW5lZCAgIC8vIFVzZSBrZXJuZWwgb2ZmX3QKI2RlZmluZSBf X3NzaXplX3RfZGVmaW5lZCAvLyBVc2Uga2VybmVsIHNzaXplX3QKI2luY2x1ZGUgPHN0ZGlvLmg+ CgovLyBGb3IgZGVjb21wcmVzc2luZyB0aGUga2VybmVsCiNkZWZpbmUgX19naWRfdF9kZWZpbmVk ICAgLy8gVXNlIGtlcm5lbCBnaXRfdAojZGVmaW5lIF9fdWlkX3RfZGVmaW5lZCAgIC8vIFVzZSBr ZXJuZWwgdWlkX3QKI2RlZmluZSBfX3BpZF90X2RlZmluZWQgICAvLyBVc2Uga2VybmVsIHBpZF90 CiNkZWZpbmUgX1NZU19UWVBFU19ICiNpbmNsdWRlIDx6bGliLmg+CgovLyBTaW5jZSBJIGhhdmUg dHJvdWJsZSBpbXBvcnRpbmcgc3RkbGliLmguLi4KZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQg Kl9fcHRyLCBzaXplX3QgX19zaXplKTsKZXh0ZXJuIHZvaWQgIGZyZWUgICAgKHZvaWQgKl9fcHRy KTsKZXh0ZXJuIGNoYXIgKnN0cmR1cCAgKGNvbnN0IGNoYXIgKl9fcyk7CgovLyBDb3BpZWQgZnJv bSBrZXJuZWwgbGliL2N0eXBlLmMKY29uc3QgdW5zaWduZWQgY2hhciBfY3R5cGVbXSA9IHsKX0Ms X0MsX0MsX0MsX0MsX0MsX0MsX0MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAw LTcgKi8KX0MsX0N8X1MsX0N8X1MsX0N8X1MsX0N8X1MsX0N8X1MsX0MsX0MsICAgICAgICAgICAg ICAgICAvKiA4LTE1ICovCl9DLF9DLF9DLF9DLF9DLF9DLF9DLF9DLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogMTYtMjMgKi8KX0MsX0MsX0MsX0MsX0MsX0MsX0MsX0MsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyNC0zMSAqLwpfU3xfU1AsX1AsX1AsX1AsX1As X1AsX1AsX1AsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMyLTM5ICovCl9QLF9QLF9Q LF9QLF9QLF9QLF9QLF9QLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNDAtNDcg Ki8KX0QsX0QsX0QsX0QsX0QsX0QsX0QsX0QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiA0OC01NSAqLwpfRCxfRCxfUCxfUCxfUCxfUCxfUCxfUCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDU2LTYzICovCl9QLF9VfF9YLF9VfF9YLF9VfF9YLF9VfF9YLF9VfF9Y LF9VfF9YLF9VLCAgICAgICAgICAgICAgLyogNjQtNzEgKi8KX1UsX1UsX1UsX1UsX1UsX1UsX1Us X1UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiA3Mi03OSAqLwpfVSxfVSxfVSxf VSxfVSxfVSxfVSxfVSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDgwLTg3ICov Cl9VLF9VLF9VLF9QLF9QLF9QLF9QLF9QLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LyogODgtOTUgKi8KX1AsX0x8X1gsX0x8X1gsX0x8X1gsX0x8X1gsX0x8X1gsX0x8X1gsX0wsICAg ICAgICAgICAgICAvKiA5Ni0xMDMgKi8KX0wsX0wsX0wsX0wsX0wsX0wsX0wsX0wsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDQtMTExICovCl9MLF9MLF9MLF9MLF9MLF9MLF9M LF9MLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTEyLTExOSAqLwpfTCxfTCxf TCxfUCxfUCxfUCxfUCxfQywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEyMC0x MjcgKi8KMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwgICAgICAgICAgICAgICAgICAg ICAgICAvKiAxMjgtMTQzICovCjAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsICAgICAg ICAgICAgICAgICAgICAgICAgLyogMTQ0LTE1OSAqLwpfU3xfU1AsX1AsX1AsX1AsX1AsX1AsX1As X1AsX1AsX1AsX1AsX1AsX1AsX1AsX1AsX1AsICAgIC8qIDE2MC0xNzUgKi8KX1AsX1AsX1AsX1As X1AsX1AsX1AsX1AsX1AsX1AsX1AsX1AsX1AsX1AsX1AsX1AsICAgICAgICAvKiAxNzYtMTkxICov Cl9VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLCAgICAgICAg LyogMTkyLTIwNyAqLwpfVSxfVSxfVSxfVSxfVSxfVSxfVSxfUCxfVSxfVSxfVSxfVSxfVSxfVSxf VSxfTCwgICAgICAgIC8qIDIwOC0yMjMgKi8KX0wsX0wsX0wsX0wsX0wsX0wsX0wsX0wsX0wsX0ws X0wsX0wsX0wsX0wsX0wsX0wsICAgICAgICAvKiAyMjQtMjM5ICovCl9MLF9MLF9MLF9MLF9MLF9M LF9MLF9QLF9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MfTsJLyogMjQwLTI1NSAqLwoKLy8gVE9ETzog YWRkIGEgYnVpbGQgZmxhZyB0byBmaW5kIDMyLzY0Yml0CiNpZiBCSVQ2NAojZGVmaW5lIEVMRkNM QVNTIEVMRkNMQVNTNjQKI2RlZmluZSBFbGZfRWhkciBFbGY2NF9FaGRyCiNkZWZpbmUgRWxmX1No ZHIgRWxmNjRfU2hkcgojZGVmaW5lIEVsZl9BZGRyIEVsZjY0X0FkZHIKI2Vsc2UKI2RlZmluZSBF TEZDTEFTUyBFTEZDTEFTUzMyCiNkZWZpbmUgRWxmX0VoZHIgRWxmMzJfRWhkcgojZGVmaW5lIEVs Zl9TaGRyIEVsZjMyX1NoZHIKI2RlZmluZSBFbGZfQWRkciBFbGYzMl9BZGRyCiNlbmRpZgoKI2Rl ZmluZSBpc251bGwocykgbWVtaXNudWxsKCYocyksIHNpemVvZihzKSkKc3RhdGljIGJvb2wgbWVt aXNudWxsKHZvaWQgKm1lbSwgc2l6ZV90IHNpemUpIHsKCWZvciAoc2l6ZV90IGk9MCA7IGkgPCBz aXplIDsgaSsrKQoJCWlmICgoKGNoYXIgKikgbWVtKVtpXSAhPSAwKQoJCQlyZXR1cm4gZmFsc2U7 CglyZXR1cm4gdHJ1ZTsKfQoKc3RhdGljIGJvb2wgZmluZF9tYWdpYyhGSUxFICpmaWxlLCBjaGFy IHByZXYpIHsKCWNoYXIgYzsKCglpZiAoZnJlYWQoJmMsIDEsIDEsIGZpbGUpICE9IDEpIHJldHVy biBmYWxzZTsKCWlmIChwcmV2ID09ICdcMDM3JyAmJiBjID09ICdcMjEzJykgewoJCWlmIChmc2Vl ayhmaWxlLCAtMiwgU0VFS19DVVIpID09IC0xKSByZXR1cm4gZmFsc2U7CgkJcmV0dXJuIHRydWU7 Cgl9CglyZXR1cm4gZmluZF9tYWdpYyhmaWxlLCBjKTsKfQoKI2RlZmluZSBCTE9DS1NJWkUgMTAy NApzdGF0aWMgdm9pZCAqcmVhZF9ibG9jayhnekZpbGUgZmlsZSwgdm9pZCAqYnVmLCBzaXplX3Qg c2l6ZSkgewoJdm9pZCAqdG1wID0gcmVhbGxvYyhidWYsIHNpemUgKyBCTE9DS1NJWkUpOwoJaWYg KCF0bXApIGZyZWUoYnVmKTsKCWlmICghKGJ1ZiA9IHRtcCkpIHJldHVybiBOVUxMOwoKCWludCBi eXRlcyA9IGd6cmVhZChmaWxlLCBidWYgKyBzaXplLCBCTE9DS1NJWkUpOwoJaWYgKGJ5dGVzIDwg MCkgewoJCWZyZWUoYnVmKTsKCQlyZXR1cm4gTlVMTDsKCX0KCWVsc2UgaWYgKGJ5dGVzID09IDAp CgkJcmV0dXJuIGJ1ZjsKCWVsc2UKCQlyZXR1cm4gcmVhZF9ibG9jayhmaWxlLCBidWYsIHNpemUg KyBieXRlcyk7Cn0KCnN0YXRpYyB2b2lkICprZXJuZWxfbG9hZChjb25zdCBjaGFyICpmaWxlbmFt ZSkgewoJdm9pZCAqa2VybmVsID0gTlVMTDsKCgkvLyBPcGVuIHRoZSBmaWxlCglGSUxFICpmaWxl ID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CglpZiAoIWZpbGUpIHJldHVybiBOVUxMOwoKCS8vIEZp bmQgdGhlIG1hZ2ljCglpZiAoIWZpbmRfbWFnaWMoZmlsZSwgJ1wwJykpIHsgZmNsb3NlKGZpbGUp OyByZXR1cm4gTlVMTDsgfQoKCS8vIE9wZW4gaXQgYXMgYSBnemlwIGZpbGUKCWludCBmZCA9IGR1 cChmaWxlbm8oZmlsZSkpOwoJZmNsb3NlKGZpbGUpOyBmaWxlID0gTlVMTDsKCWlmIChmZCA8IDAp IHJldHVybiBOVUxMOwoJZ3pGaWxlIGtmaWxlID0gZ3pkb3BlbihmZCwgInIiKTsKCWlmICgha2Zp bGUpIHsgY2xvc2UoZmQpIDsgcmV0dXJuIE5VTEw7IH0KCWZkID0gLTE7CgoJLy8gUmVhZCB0aGUg a2VybmVsIGludG8gbWVtb3J5CglrZXJuZWwgPSByZWFkX2Jsb2NrKGtmaWxlLCBOVUxMLCAwKTsK CWd6Y2xvc2Uoa2ZpbGUpOwoJaWYgKCFrZXJuZWwpIHJldHVybiBOVUxMOwoKCS8vIEVuc3VyZSB0 aGlzIGlzIEVMRgoJaWYgKHN0cm5jbXAoRUxGTUFHLCBrZXJuZWwsIHN0cmxlbihFTEZNQUcpKSB8 fAoJCSgoY2hhciAqKSBrZXJuZWwpW0VJX0NMQVNTXSAgICE9IEVMRkNMQVNTIHx8CgkJKChjaGFy ICopIGtlcm5lbClbRUlfVkVSU0lPTl0gIT0gRVZfQ1VSUkVOVCkgewoJCWZyZWUoa2VybmVsKTsK CQlyZXR1cm4gTlVMTDsKCX0KCglyZXR1cm4ga2VybmVsOwp9CgpzdGF0aWMgY29uc3QgRWxmX1No ZHIgKmVsZl9zZWN0X2Zyb21fYWRkcihjb25zdCB2b2lkICprZXJuZWwsIEVsZl9BZGRyIGFkZHIp IHsKCWlmICgha2VybmVsIHx8IGFkZHIgPT0gMCkgcmV0dXJuIE5VTEw7Cgljb25zdCBFbGZfRWhk ciAqZWhkciAgPSAoKGNvbnN0IEVsZl9FaGRyICopIGtlcm5lbCk7Cgljb25zdCBFbGZfU2hkciAq c2hkcnMgPSBrZXJuZWwgKyBlaGRyLT5lX3Nob2ZmOwoKCWZvciAoaW50IGk9MCA7IGkgPCBlaGRy LT5lX3NobnVtIDsgaSsrKQoJCWlmIChzaGRyc1tpXS5zaF9hZGRyIDwgYWRkciAmJiBhZGRyIDwg KHNoZHJzW2ldLnNoX2FkZHIgKyBzaGRyc1tpXS5zaF9zaXplKSkKCQkJcmV0dXJuICYoc2hkcnNb aV0pOwoJcmV0dXJuIE5VTEw7Cn0KCnN0YXRpYyBjb25zdCBjaGFyICplbGZfc2VjdF9uYW1lKGNv bnN0IHZvaWQgKmtlcm5lbCwgY29uc3QgRWxmX1NoZHIgKnNoZHIpIHsKCWlmICgha2VybmVsIHx8 ICFzaGRyKSByZXR1cm4gTlVMTDsKCWNvbnN0IEVsZl9FaGRyICplaGRyICA9ICgoY29uc3QgRWxm X0VoZHIgKikga2VybmVsKTsKCWNvbnN0IEVsZl9TaGRyICpzaGRycyA9IGtlcm5lbCArIGVoZHIt PmVfc2hvZmY7CgoJcmV0dXJuIGtlcm5lbCArIHNoZHJzW2VoZHItPmVfc2hzdHJuZHhdLnNoX29m ZnNldCArIHNoZHItPnNoX25hbWU7Cn0KCiNkZWZpbmUgZWxmX29ial9mcm9tX2FkZHIoa2VybmVs LCBhZGRyLCB0eXBlKSAoKHR5cGUgKikgZWxmX29ial9mcm9tX2FkZHJfKGtlcm5lbCwgYWRkcikp CnN0YXRpYyBjb25zdCB2b2lkICplbGZfb2JqX2Zyb21fYWRkcl8oY29uc3Qgdm9pZCAqa2VybmVs LCBFbGZfQWRkciBhZGRyKSB7CglpZiAoIWtlcm5lbCB8fCBhZGRyID09IDApIHJldHVybiBOVUxM OwoJY29uc3QgRWxmX0VoZHIgKmVoZHIgID0gKChjb25zdCBFbGZfRWhkciAqKSBrZXJuZWwpOwoJ Y29uc3QgRWxmX1NoZHIgKnNoZHJzID0ga2VybmVsICsgZWhkci0+ZV9zaG9mZjsKCglmb3IgKGlu dCBpPTAgOyBpIDwgZWhkci0+ZV9zaG51bSA7IGkrKykKCQlpZiAoc2hkcnNbaV0uc2hfYWRkciA8 IGFkZHIgJiYgYWRkciA8IChzaGRyc1tpXS5zaF9hZGRyICsgc2hkcnNbaV0uc2hfc2l6ZSkpCgkJ CXJldHVybiBrZXJuZWwgKyBzaGRyc1tpXS5zaF9vZmZzZXQgKyAoYWRkciAtIHNoZHJzW2ldLnNo X2FkZHIpOwoJcmV0dXJuIE5VTEw7Cn0KCnN0YXRpYyBjb25zdCBjaGFyICpzdHJfZnJvbV9wdHIo Y29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICptYXhwdHIpIHsKCWlmICghc3RyKSByZXR1cm4g TlVMTDsKCglib29sIGhhc2FsbnVtID0gZmFsc2U7Cglmb3IgKGNvbnN0IGNoYXIgKnRtcCA9IHN0 ciA7ICp0bXAgOyB0bXArKykgewoJCWlmICh0bXAgPj0gbWF4cHRyIHx8ICFpc3ByaW50KCp0bXAp KQoJCQlyZXR1cm4gTlVMTDsKCQloYXNhbG51bSA9IGlzYWxudW0oKnRtcCk7Cgl9CglyZXR1cm4g aGFzYWxudW0gPyBzdHIgOiBOVUxMOwp9CgpzdGF0aWMgY29uc3QgY2hhciAqZWxmX3N0cl9mcm9t X2FkZHIoY29uc3Qgdm9pZCAqa2VybmVsLCBFbGZfQWRkciBhZGRyKSB7CglpZiAoIWtlcm5lbCB8 fCBhZGRyID09IDApIHJldHVybiBOVUxMOwoJY29uc3QgRWxmX1NoZHIgKnNoZHIgPSBlbGZfc2Vj dF9mcm9tX2FkZHIoa2VybmVsLCBhZGRyKTsKCWlmICghc2hkcikgcmV0dXJuIE5VTEw7CgoJcmV0 dXJuIHN0cl9mcm9tX3B0cihlbGZfb2JqX2Zyb21fYWRkcihrZXJuZWwsIGFkZHIsIGNvbnN0IGNo YXIpLAoJCQkJCQlrZXJuZWwgKyBzaGRyLT5zaF9vZmZzZXQgKyBzaGRyLT5zaF9zaXplKTsKfQoK I2RlZmluZSBlbGZfYXJyYXlfZnJvbV9hZGRyKGtlcm5lbCwgYWRkciwgdHlwZSkgKHR5cGUgKikg ZWxmX2FycmF5X2Zyb21fYWRkcl8oa2VybmVsLCBhZGRyLCBzaXplb2YodHlwZSkpCnN0YXRpYyB2 b2lkICplbGZfYXJyYXlfZnJvbV9hZGRyXyhjb25zdCB2b2lkICprZXJuZWwsIEVsZl9BZGRyIGFk ZHIsIHNpemVfdCBvYmpzaXplKSB7CglpZiAoIWtlcm5lbCB8fCBhZGRyID09IDAgfHwgb2Jqc2l6 ZSA9PSAwKSByZXR1cm4gTlVMTDsKCWNvbnN0IEVsZl9TaGRyICpzaGRyID0gZWxmX3NlY3RfZnJv bV9hZGRyKGtlcm5lbCwgYWRkcik7CgoJLy8gR2V0IHRoZSBzdGFydCBvZiB0aGUgYXJyYXkKCXZv aWQgKml0ZW0gPSBlbGZfb2JqX2Zyb21fYWRkcihrZXJuZWwsIGFkZHIsIHN0cnVjdCBhcnJheWl0 ZW0pOwoJaWYgKCFpdGVtKSByZXR1cm4gTlVMTDsKCgkvLyBNYWtlIHN1cmUgdGhlIGVuZCBvZiB0 aGUgYXJyYXkgaXMgaW5zaWRlIHRoZSBzZWN0aW9uCglmb3IgKHNpemVfdCBpPTAgOyBpdGVtICsg KGkrMSkgKiBvYmpzaXplIDw9IGtlcm5lbCArIHNoZHItPnNoX29mZnNldCArIHNoZHItPnNoX3Np emUgOyBpKyspIHsKCQlpZiAobWVtaXNudWxsKGl0ZW0gKyBpICogb2Jqc2l6ZSwgb2Jqc2l6ZSkp CgkJCXJldHVybiBpdGVtOwoJfQoJcmV0dXJuIE5VTEw7Cn0KCnN0YXRpYyBib29sIHByaW50X3Bj aV9kcml2ZXJzKHZvaWQgKmtlcm5lbCwgc3RydWN0IHBjaV9kcml2ZXIgKmRyaXZlcikgewoJaWYg KCFrZXJuZWwgfHwgIWRyaXZlcikgcmV0dXJuIGZhbHNlOwoKCS8vIEZpbmdlcnByaW50IGl0Cglp ZiAoZHJpdmVyLT5uYW1lID09IE5VTEwgfHwgZHJpdmVyLT5pZF90YWJsZSA9PSBOVUxMIHx8ICFp c251bGwoZHJpdmVyLT5ub2RlKSB8fCAhaXNudWxsKGRyaXZlci0+ZHJpdmVyKSkKCQlyZXR1cm4g ZmFsc2U7CgoJLy8gR2V0IHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIKCWNvbnN0IGNoYXIgKm5hbWUg PSBlbGZfc3RyX2Zyb21fYWRkcihrZXJuZWwsIChFbGZfQWRkcikgZHJpdmVyLT5uYW1lKTsKCWlm ICghbmFtZSkgcmV0dXJuIE5VTEw7CgoJLy8gR2V0IHRoZSBwY2lfZGV2aWNlX2lkIHRhYmxlCglj b25zdCBjaGFyICpzZWN0aW9uID0gZWxmX3NlY3RfbmFtZShrZXJuZWwsIGVsZl9zZWN0X2Zyb21f YWRkcihrZXJuZWwsIChFbGZfQWRkcikgZHJpdmVyLT5pZF90YWJsZSkpOwoJaWYgKCFzZWN0aW9u IHx8IChzdHJjbXAoc2VjdGlvbiwgIi5kYXRhIikgJiYgc3RyY21wKHNlY3Rpb24sICIucm9kYXRh IikpKSByZXR1cm4gZmFsc2U7CglzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRzID0gZWxmX2FycmF5 X2Zyb21fYWRkcihrZXJuZWwsIChFbGZfQWRkcikgZHJpdmVyLT5pZF90YWJsZSwgc3RydWN0IHBj aV9kZXZpY2VfaWQpOwoJaWYgKCFpZHMpIHJldHVybiBmYWxzZTsKCgkvLyBPaywgaXQgbG9va3Mg bGlrZSB3ZSBoYXZlIGEgUENJIGRyaXZlciEKCWZvciAoc2l6ZV90IGo9MCA7ICFpc251bGwoaWRz W2pdKSA7IGorKykgewoJCWludCBiY20gPSBpZHNbal0uY2xhc3NfbWFzayA+PiAxNiAmIDB4ZmY7 CgkJaW50IGJjICA9IGlkc1tqXS5jbGFzcyAgICAgID4+IDE2ICYgMHhmZiAmIGJjbTsKCQlpbnQg c2NtID0gaWRzW2pdLmNsYXNzX21hc2sgPj4gOCAgJiAweGZmOwoJCWludCBzYyAgPSBpZHNbal0u Y2xhc3MgICAgICA+PiA4ICAmIDB4ZmYgJiBzY207CgkJaW50IGltICA9IGlkc1tqXS5jbGFzc19t YXNrID4+IDAgICYgMHhmZjsKCQlpbnQgaSAgID0gaWRzW2pdLmNsYXNzICAgICAgPj4gMCAgJiAw eGZmICYgaW07CgoJCXByaW50ZigiYWxpYXMgcGNpOiIpOwoJCXByaW50ZihpZHNbal0udmVuZG9y ICAgID09IDB4ZmZmZmZmZmYgPyAidioiICA6ICJ2JTA0eCIsICBpZHNbal0udmVuZG9yKTsKCQlw cmludGYoaWRzW2pdLmRldmljZSAgICA9PSAweGZmZmZmZmZmID8gImQqIiAgOiAiZCUwNHgiLCAg aWRzW2pdLmRldmljZSk7CgkJcHJpbnRmKGlkc1tqXS5zdWJ2ZW5kb3IgPT0gMHhmZmZmZmZmZiA/ ICJzdioiIDogInN2JTA0eCIsIGlkc1tqXS5zdWJ2ZW5kb3IpOwoJCXByaW50ZihpZHNbal0uc3Vi ZGV2aWNlID09IDB4ZmZmZmZmZmYgPyAic2QqIiA6ICJzZCUwNHgiLCBpZHNbal0uc3ViZGV2aWNl KTsKCQlwcmludGYoYmNtID09IDB4MDAgPyAiYmMqIiA6ICJiYyUwMngiLCBiYyk7CgkJcHJpbnRm KHNjbSA9PSAweDAwID8gInNjKiIgOiAic2MlMDJ4Iiwgc2MpOwoJCXByaW50ZihpbSAgPT0gMHgw MCA/ICAiaSoiIDogICJpJTAyeCIsICBpKTsKCQlwcmludGYoIiAlc1xuIiwgbmFtZSk7Cgl9Cgly ZXR1cm4gdHJ1ZTsKfQoKc3RhdGljIGJvb2wgcHJpbnRfdXNiX2RyaXZlcnModm9pZCAqa2VybmVs LCBzdHJ1Y3QgdXNiX2RyaXZlciAqZHJpdmVyKSB7CglpZiAoIWtlcm5lbCB8fCAhZHJpdmVyKSBy ZXR1cm4gZmFsc2U7CgoJLy8gRmluZ2VycHJpbnQgaXQKCWlmIChkcml2ZXItPm5hbWUgPT0gTlVM TCB8fCBkcml2ZXItPmlkX3RhYmxlID09IE5VTEwgfHwgIWlzbnVsbChkcml2ZXItPmRydndyYXAp KQoJCXJldHVybiBmYWxzZTsKCgkvLyBHZXQgdGhlIG5hbWUgb2YgdGhlIGRyaXZlcgoJY29uc3Qg Y2hhciAqbmFtZSA9IGVsZl9zdHJfZnJvbV9hZGRyKGtlcm5lbCwgKEVsZl9BZGRyKSBkcml2ZXIt Pm5hbWUpOwoJaWYgKCFuYW1lKSByZXR1cm4gTlVMTDsKCgkvLyBHZXQgdGhlIHVzYl9kZXZpY2Vf aWQgdGFibGUKCWNvbnN0IGNoYXIgKnNlY3Rpb24gPSBlbGZfc2VjdF9uYW1lKGtlcm5lbCwgZWxm X3NlY3RfZnJvbV9hZGRyKGtlcm5lbCwgKEVsZl9BZGRyKSBkcml2ZXItPmlkX3RhYmxlKSk7Cglp ZiAoIXNlY3Rpb24gfHwgKHN0cmNtcChzZWN0aW9uLCAiLmRhdGEiKSAmJiBzdHJjbXAoc2VjdGlv biwgIi5yb2RhdGEiKSkpIHJldHVybiBmYWxzZTsKCXN0cnVjdCB1c2JfZGV2aWNlX2lkICppZHMg PSBlbGZfYXJyYXlfZnJvbV9hZGRyKGtlcm5lbCwgKEVsZl9BZGRyKSBkcml2ZXItPmlkX3RhYmxl LCBzdHJ1Y3QgdXNiX2RldmljZV9pZCk7CglpZiAoIWlkcykgcmV0dXJuIGZhbHNlOwoKCS8vIE9r LCBpdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBVU0IgZHJpdmVyIQoJZm9yIChzaXplX3Qgaj0wIDsg IWlzbnVsbChpZHNbal0pIDsgaisrKSB7CgkJLy8gVE9ETzogSSBrbm93IHRoaXMgaXNuJ3QgZXhh Y3RseSB0aGUgc2FtZSBtb2RhbGlhcyBhcyB0aGUgdHJhZGl0aW9uYWwgdXNiIG1vZGFsaWFzLAoJ CS8vIGJ1dCBteSBnb2FsIGlzIHRvIHByb3ZpZGUgYW4gZXhhY3QgcmVwbGljYXRpb24gb2YgdGhl IHN0cnVjdCBhbmQgdGhpcyB2ZXJzaW9uIGZpdHMgYmV0dGVyCgkJcHJpbnRmKCJhbGlhcyB1c2I6 Iik7CgkJcHJpbnRmKGlkc1tqXS5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfVkVO RE9SICAgICAgID8gInYlMDR4IiAgIDogInYqIiwgICBpZHNbal0uaWRWZW5kb3IpOwoJCXByaW50 ZihpZHNbal0ubWF0Y2hfZmxhZ3MgJiBVU0JfREVWSUNFX0lEX01BVENIX1BST0RVQ1QgICAgICA/ ICJwJTA0eCIgICA6ICJwKiIsICAgaWRzW2pdLmlkUHJvZHVjdCk7CgkJcHJpbnRmKGlkc1tqXS5t YXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0xPICAgICAgID8gImRsJTA0eCIg IDogImRsKiIsICBpZHNbal0uYmNkRGV2aWNlX2xvKTsKCQlwcmludGYoaWRzW2pdLm1hdGNoX2Zs YWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfSEkgICAgICAgPyAiZGglMDR4IiAgOiAiZGgq IiwgIGlkc1tqXS5iY2REZXZpY2VfaGkpOwoJCXByaW50ZihpZHNbal0ubWF0Y2hfZmxhZ3MgJiBV U0JfREVWSUNFX0lEX01BVENIX0RFVl9DTEFTUyAgICA/ICJkYyUwNHgiICA6ICJkYyoiLCAgaWRz W2pdLmJEZXZpY2VDbGFzcyk7CgkJcHJpbnRmKGlkc1tqXS5tYXRjaF9mbGFncyAmIFVTQl9ERVZJ Q0VfSURfTUFUQ0hfREVWX1NVQkNMQVNTID8gImRzYyUwNHgiIDogImRzYyoiLCBpZHNbal0uYkRl dmljZVN1YkNsYXNzKTsKCQlwcmludGYoaWRzW2pdLm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9J RF9NQVRDSF9ERVZfUFJPVE9DT0wgPyAiZHAlMDR4IiAgOiAiZHAqIiwgIGlkc1tqXS5iRGV2aWNl UHJvdG9jb2wpOwoJCXByaW50ZihpZHNbal0ubWF0Y2hfZmxhZ3MgJiBVU0JfREVWSUNFX0lEX01B VENIX0lOVF9DTEFTUyAgICA/ICJpYyUwNHgiICA6ICJpYyoiLCAgaWRzW2pdLmJJbnRlcmZhY2VD bGFzcyk7CgkJcHJpbnRmKGlkc1tqXS5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hf SU5UX1NVQkNMQVNTID8gImlzYyUwNHgiIDogImlzYyoiLCBpZHNbal0uYkludGVyZmFjZVN1YkNs YXNzKTsKCQlwcmludGYoaWRzW2pdLm1hdGNoX2ZsYWdzICYgVVNCX0RFVklDRV9JRF9NQVRDSF9J TlRfUFJPVE9DT0wgPyAiaXAlMDR4IiAgOiAiaXAqIiwgIGlkc1tqXS5iSW50ZXJmYWNlUHJvdG9j b2wpOwoJCXByaW50ZigiICVzXG4iLCBuYW1lKTsKCX0KCXJldHVybiB0cnVlOwp9CgpzdGF0aWMg Ym9vbCBwcmludF9hY3BpX2RyaXZlcnModm9pZCAqa2VybmVsLCBzdHJ1Y3QgYWNwaV9kcml2ZXIg KmRyaXZlcikgewoJLy8gRmluZ2VycHJpbnQKCWlmIChkcml2ZXItPmlkcyA9PSBOVUxMIHx8ICFp c251bGwoZHJpdmVyLT5kcnYpKQoJCXJldHVybiBmYWxzZTsKCgkvLyBHZXQgdGhlIG5hbWUgb2Yg dGhlIGRyaXZlcgoJY29uc3QgY2hhciAqbmFtZSA9IHN0cl9mcm9tX3B0cigoY29uc3QgY2hhciAq KSAmKGRyaXZlci0+bmFtZSksIChjb25zdCBjaGFyICopICYoZHJpdmVyLT5jbGFzcykpOwoJaWYg KCFuYW1lKSByZXR1cm4gZmFsc2U7CgoJLy8gR2V0IHRoZSBjbGFzcyBvZiB0aGUgZHJpdmVyIChm b3Igb25seSBmaW5nZXJwcmludGluZyByZWFzb25zKQoJY29uc3QgY2hhciAqY2xhc3MgPSBzdHJf ZnJvbV9wdHIoKGNvbnN0IGNoYXIgKikgJihkcml2ZXItPmNsYXNzKSwgKGNvbnN0IGNoYXIgKikg Jihkcml2ZXItPmlkcykpOwoJaWYgKCFjbGFzcykgcmV0dXJuIGZhbHNlOwoKCS8vIEdldCB0aGUg YWNwaV9kZXZpY2VfaWQgdGFibGUKCWNvbnN0IGNoYXIgKnNlY3Rpb24gPSBlbGZfc2VjdF9uYW1l KGtlcm5lbCwgZWxmX3NlY3RfZnJvbV9hZGRyKGtlcm5lbCwgKEVsZl9BZGRyKSBkcml2ZXItPmlk cykpOwoJaWYgKCFzZWN0aW9uIHx8IChzdHJjbXAoc2VjdGlvbiwgIi5kYXRhIikgJiYgc3RyY21w KHNlY3Rpb24sICIucm9kYXRhIikpKSByZXR1cm4gZmFsc2U7CglzdHJ1Y3QgYWNwaV9kZXZpY2Vf aWQgKmlkcyA9IGVsZl9hcnJheV9mcm9tX2FkZHIoa2VybmVsLCAoRWxmX0FkZHIpIGRyaXZlci0+ aWRzLCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQpOwoJaWYgKCFpZHMpIHJldHVybiBmYWxzZTsKCgkv LyBPaywgaXQgbG9va3MgbGlrZSB3ZSBoYXZlIGFuIEFDUEkgZHJpdmVyIQoJZm9yIChzaXplX3Qg aj0wIDsgIWlzbnVsbChpZHNbal0pIDsgaisrKSB7CgkJY29uc3QgY2hhciAqaWQgPSBzdHJfZnJv bV9wdHIoKGNvbnN0IGNoYXIgKikgJihpZHNbal0pLCAoY29uc3QgY2hhciAqKSAmKGlkc1tqXS5k cml2ZXJfZGF0YSkpOwoJCXByaW50ZigiYWxpYXMgYWNwaTolcyAlc1xuIiwgaWQsIG5hbWUpOwoJ fQoJcmV0dXJuIHRydWU7Cn0KCnN0YXRpYyB2b2lkIHVzYWdlKGNoYXIgKnByb2duYW1lKSB7Cglm cHJpbnRmKHN0ZGVyciwgIiVzIDxrZXJuZWxfZmlsZT4gWzxzeXN0ZW1fbWFwX2ZpbGU+XVxuIiwg cHJvZ25hbWUpOwoJX2V4aXQoMSk7Cn0KCmludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikg ewoJaWYgKGFyZ2MgPCAyIHx8IGFyZ2MgPiAzKQoJCXVzYWdlKGFyZ3ZbMF0pOwoKCXZvaWQgKmty bmwgPSBrZXJuZWxfbG9hZChhcmd2WzFdKTsKCWlmICgha3JubCkgewoJCWZwcmludGYoc3RkZXJy LCAiVW5hYmxlIHRvIHJlYWQgdm1saW51eiBmaWxlIVxuIik7CgkJdXNhZ2UoYXJndlswXSk7Cgl9 CgoJY2hhciAqbWFwZmlsZSA9IE5VTEw7CglpZiAoYXJnYyA9PSAzKQoJCW1hcGZpbGUgPSBzdHJk dXAoYXJndlsyXSk7CgllbHNlIHsKCQljaGFyICp0bXAgPSBzdHJzdHIoYXJndlsxXSwgInZtbGlu dXoiKTsKCQlpZiAodG1wKSB7CgkJCW1hcGZpbGUgPSByZWFsbG9jKE5VTEwsIHN0cmxlbihhcmd2 WzFdKSArIHN0cmxlbigiU3lzdGVtLm1hcCIpIC0gc3RybGVuKCJ2bWxpbnV6IikgKyAxKTsKCQkJ aWYgKG1hcGZpbGUpIHsKCQkJCXN0cm5jcHkobWFwZmlsZSwgYXJndlsxXSwgdG1wIC0gYXJndlsx XSk7CgkJCQlzdHJjYXQobWFwZmlsZSwgIlN5c3RlbS5tYXAiKTsKCQkJCXN0cmNhdChtYXBmaWxl LCB0bXAgKyBzdHJsZW4oInZtbGludXoiKSk7CgkJCX0KCQl9Cgl9CglpZiAoIW1hcGZpbGUpIHsK CQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBmaW5kIFN5c3RlbS5tYXAgZmlsZSFcbiIpOwoJ CXVzYWdlKGFyZ3ZbMF0pOwoJfQoKCUZJTEUgKnN5c21hcCA9IGZvcGVuKG1hcGZpbGUsICJyIik7 CglpZiAoIXN5c21hcCkgewoJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHJlYWQgU3lzdGVt Lm1hcCBmaWxlICgnJXMnKSFcbiIsIG1hcGZpbGUpOwoJCWZyZWUobWFwZmlsZSk7CgkJdXNhZ2Uo YXJndlswXSk7Cgl9CglmcmVlKG1hcGZpbGUpOwoKCWZvciAoRWxmX0FkZHIgYWRkcj0wIDsgZnNj YW5mKHN5c21hcCwgIiVseCAlKnMgJSpzXG4iLCAodW5zaWduZWQgbG9uZyBpbnQgKikgJmFkZHIp ID09IDEgOyApIHsKCQlpZiAoYWRkciA9PSAwKSBjb250aW51ZTsKCgkJLy8gVGhlIGRyaXZlciBz dHJ1Y3QgbXVzdCBiZSBpbiB0aGUgLmRhdGEgc2VjdGlvbgoJCWNvbnN0IGNoYXIgKnNlY3Rpb24g PSBlbGZfc2VjdF9uYW1lKGtybmwsIGVsZl9zZWN0X2Zyb21fYWRkcihrcm5sLCBhZGRyKSk7CgkJ aWYgKCFzZWN0aW9uIHx8IHN0cmNtcChzZWN0aW9uLCAiLmRhdGEiKSkgY29udGludWU7CgoJCS8v IEZldGNoIHRoZSBkcml2ZXIgc3RydWN0CgkJdm9pZCAqZHJpdmVyID0gZWxmX29ial9mcm9tX2Fk ZHIoa3JubCwgYWRkciwgdm9pZCk7CgkJaWYgKCFkcml2ZXIpIGNvbnRpbnVlOwoKCQkvLyBUcnkg dG8gcHJpbnQgdGhlIGRyaXZlcgoJCWlmICghcHJpbnRfcGNpX2RyaXZlcnMoa3JubCwgZHJpdmVy KSkKCQkJaWYgKCFwcmludF91c2JfZHJpdmVycyhrcm5sLCBkcml2ZXIpKQoJCQkJcHJpbnRfYWNw aV9kcml2ZXJzKGtybmwsIGRyaXZlcik7Cgl9CgoJZmNsb3NlKHN5c21hcCk7CglmcmVlKGtybmwp OwoKCXJldHVybiAwOwp9Cg== --0015174c43208112c1049bf26e52 Content-Type: application/octet-stream; name=Makefile Content-Disposition: attachment; filename=Makefile Content-Transfer-Encoding: base64 X-Attachment-Id: f_gk01ufb81 a3ZlciAgICA6PSAkKHNoZWxsIHVuYW1lIC1yKQoKa2RzaW5jbCArPSAtbm9zdGRpbmMKa2RzaW5j bCArPSAtSS9saWIvbW9kdWxlcy8kKGt2ZXIpL2J1aWxkL2luY2x1ZGUvCmtkc2luY2wgKz0gLUkv bGliL21vZHVsZXMvJChrdmVyKS9idWlsZC9hcmNoL3g4Ni9pbmNsdWRlCmtkc2luY2wgKz0gLUkv dXNyL2xpYi9nY2MveDg2XzY0LXJlZGhhdC1saW51eC80LjUuMS9pbmNsdWRlCmtkc2luY2wgKz0g LUkvdXNyL2luY2x1ZGUKCmFsbDoga2RydnNjYW4KCmtkcnZzY2FuOiBrZHJ2c2Nhbi5jCglAdW5h bWUgLW0gfCBncmVwIC1xIDY0IFwKCQkmJiBnY2MgJChrZHNpbmNsKSAtbyBrZHJ2c2NhbiBrZHJ2 c2Nhbi5jIC1seiAtV2FsbCAtc3RkPWdudTk5IC1nIC1EQklUNjQ9MSBcCgkJfHwgZ2NjICQoa2Rz aW5jbCkgLW8ga2RydnNjYW4ga2RydnNjYW4uYyAtbHogLVdhbGwgLXN0ZD1nbnU5OSAtZwoKY2xl YW46CglybSBrZHJ2c2Nhbgo= --0015174c43208112c1049bf26e52-- -- 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/