From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S265272AbUETXMl (ORCPT ); Thu, 20 May 2004 19:12:41 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S265306AbUETXMl (ORCPT ); Thu, 20 May 2004 19:12:41 -0400 Received: from CPE0000c02944d6-CM00003965a061.cpe.net.cable.rogers.com ([69.193.74.215]:8864 "EHLO tentacle.dhs.org") by vger.kernel.org with ESMTP id S265272AbUETXMU (ORCPT ); Thu, 20 May 2004 19:12:20 -0400 Subject: Inotify update From: John McCutchan To: linux-kernel@vger.kernel.org Cc: viro@parcelfarce.linux.theplanet.co.uk, rml@ximian.com Content-Type: multipart/mixed; boundary="=-kRKbK6S5Ctw2+q933Nh/" Message-Id: <1085094959.21472.19.camel@vertex> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.6 Date: Thu, 20 May 2004 19:15:59 -0400 Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org --=-kRKbK6S5Ctw2+q933Nh/ Content-Type: text/plain Content-Transfer-Encoding: 7bit Hello, I have made some changes the the inotify interface, and I hope this makes Al Viro happier with the design. Inotify no longer deals with inode numbers or device numbers. When you want inotify to monitor a dir you pass a path in string form. Then inotify opens up this file and does what it did before on the inode. This avoids the problem with file systems not having stable inode numbers, and not being able to lookup a file based on its inode number. When you ask inotify to watch a path, you get back an integer, representing a unique watcher in the kernel (wid). So when events happen you get a WID followed by and event mask. And when you are done watching a path, you just pass the wid to inotify. I am sure there are still problems with the code. I have tried to fix up locking issues but I am not very confident in my locking code. This hasn't dealt with hierarchy watching, and I don't plan on looking in to this until this phase of the project is finished. There are still two areas that I need help on, they involve VFS work. I have added a new entry to the inode structure, 'watcher_count'. This is meant to be a passive usage count on the inode, so if watcher_count > 0 the inode should stay in the cache, but on unmount we kick the watchers off. So the two changes I need to make to the VFS are this: 1) when watcher_count > 0 the inode is considered in use and stays in the inode cache. I have modified prune_icache to do this, but I am not sure if this the only place that needs modification. 2) On unmount, after we have assured that all the inodes in the cache that come from a particular device have i_count == 0. We walk and kick off (send an UNMOUNT event to inotify and have inotify stop watching the inode) all watchers so that we get watcher_count == 0. Then the standard unmount procedure takes place. I can't figure out how this logic would fit in to unmount code, I have tried to trace the unmount system call, but I haven't figured it out yet. I have attached the new code. I await your comments. John --=-kRKbK6S5Ctw2+q933Nh/ Content-Disposition: attachment; filename=inotify.c Content-Type: text/x-csrc; name=inotify.c; charset=UTF-8 Content-Transfer-Encoding: base64 LyoNCiAqIElub2RlIGJhc2VkIGRpcmVjdG9yeSBub3RpZmljYXRpb25zIGZvciBMaW51eC4NCiAq DQogKiBDb3B5cmlnaHQgKEMpIDIwMDQgSm9obiBNY0N1dGNoYW4NCiAqDQogKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eSBpdA0KICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlDQogKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55DQogKiBsYXRlciB2ZXJzaW9uLg0K ICoNCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLCBidXQNCiAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQogKiBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQogKi8NCg0KI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5o Pg0KI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0K I2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+DQojaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4NCiNp bmNsdWRlIDxsaW51eC9zbGFiLmg+DQojaW5jbHVkZSA8bGludXgvZnMuaD4NCiNpbmNsdWRlIDxs aW51eC9uYW1laS5oPg0KI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4NCiNpbmNsdWRlIDxsaW51eC9t aXNjZGV2aWNlLmg+DQojaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+DQojaW5jbHVkZSA8bGludXgv aW5pdC5oPg0KI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQojaW5jbHVkZSA8bGludXgvc3RkZGVm Lmg+DQojaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQojaW5jbHVkZSA8bGludXgvbGlzdC5oPg0K I2luY2x1ZGUgPGxpbnV4L2lub3RpZnkuaD4NCg0KLyogVE9ETzoNCiAqIGNoYW5nZSB1bW91bnQg Y29kZQ0KICogd3JpdGUgdXNlciBzcGFjZSB0ZXN0IGFwcA0KICogZ2V0IG1vcmUgZXZlbnRzIHNl bnQgdG8gdGhlIHF1ZXVlDQogKiAJcmVuYW1lDQogKiAJbW92ZQ0KICogCWNsb3NlDQogKiAJb3Bl bg0KICogCXVubW91bnQNCiAqLw0KDQojZGVmaW5lIE1BWF9JTk9USUZZX0RFVlMgOCAvKiBXZSBv bmx5IHN1cHBvcnQgOCB3YXRjaGVycyAqLw0KI2RlZmluZSBNQVhfSU5PVElGWV9ERVZfSU5PREVT IDEyOCAvKiBBIHdhdGNoZXIgY2FuIG9ubHkgYmUgd2F0Y2hpbmcgMTI4IGlub2RlcyAqLw0KI2Rl ZmluZSBNQVhfSU5PVElGWV9RVUVVRURfRVZFTlRTIDI1NiAvKiBPbmx5IHRoZSBmaXJzdCAyNTYg ZXZlbnRzIHdpbGwgYmUgcXVldWVkICovDQojZGVmaW5lIF9fQklUTUFTS19TSVpFIChNQVhfSU5P VElGWV9ERVZfSU5PREVTIC8gOCkNCg0Kc3RhdGljIGF0b21pY190IHdhdGNoZXJfY291bnQ7DQoN Ci8qIEEgbGlzdCBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGlzIGF0dGFjaGVkIHRvIGVhY2ggaW5vdGlm eV9kZXZpY2UNCiAqIGVhY2ggaXRlbSBpbiB0aGUgbGlzdCByZXByZXNlbnRzIGFuIGlub2RlIGJl aW5nIHdhdGNoZWQgYnkNCiAqDQogKiB0aGUgZGV2aWNlDQogKi8NCnN0cnVjdCBpbm90aWZ5X3dh dGNoIHsNCglzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7DQoJc3RydWN0IGlub2RlICoJCWlub2RlOw0K CWludAkJCXdpZDsNCn07DQojZGVmaW5lIGxpc3RfdG9faW5vdGlmeV93YXRjaChwb3MpIGxpc3Rf ZW50cnkoKHBvcyksc3RydWN0IGlub3RpZnlfd2F0Y2gsbGlzdCkNCg0KLyogQSBsaXN0IG9mIHRo ZXNlIHN0cnVjdHVyZXMgaXMgYXR0YWNoZWQgdG8gZWFjaCBpbm9kZSB0aGF0IGlzIGJlaW5nIHdh dGNoZWQuDQogKiBlYWNoIGl0ZW0gaW4gdGhlIGxpc3QgcmVwcmVzZW50cyBhIHVuaXF1ZSB3YXRj aGVyLg0KICogaXQgdGVsbCB1cyB3aGF0IGV2ZW50cyB3ZSBhcmUgbG9va2luZyBhdCBhbmQgd2hh dCBkZXZpY2UgdGhpcyB3YXRjaGVyIGJlbG9uZ3MgdG8NCiAqLw0Kc3RydWN0IGlub3RpZnlfaW5v ZGVfd2F0Y2hlciB7DQoJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgbGlzdDsNCgl1bnNpZ25lZCBs b25nICAgICAgICAgICBtYXNrOw0KCWludCAJCQl3aWQ7DQoJc3RydWN0IGlub2RlICogICAgICAg ICAgaW5vZGU7DQoJdm9pZCAqICAgICAgICAgICAgICAgICAgcHJpdmF0ZV9kYXRhOyAvLyB0aGUg ZHJpdmVyIGluc3RhbmNlDQp9Ow0KI2RlZmluZSBsaXN0X3RvX2lub3RpZnlfaW5vZGVfd2F0Y2hl cihwb3MpIGxpc3RfZW50cnkoKHBvcyksIHN0cnVjdCBpbm9maXlfaW5vZGVfd2F0Y2hlciwgbGlz dCkNCg0KLyogQSBsaXN0IG9mIHRoZXNlIGlzIGF0dGFjaGVkIHRvIGVhY2ggaW5zdGFuY2Ugb2Yg dGhlIGRyaXZlcg0KICogd2hlbiB0aGUgZHJpdmVycyByZWFkKCkgZ2V0cyBjYWxsZWQsIHRoaXMg bGlzdCBpcyB3YWxrZWQgYW5kDQogKiBhbGwgZXZlbnRzIHRoYXQgY2FuIGZpdCBpbiB0aGUgYnVm ZmVyIGdldCBkZWxpdmVyZWQNCiAqLw0Kc3RydWN0IGlub3RpZnlfZXZlbnQgew0KICAgICAgICBz dHJ1Y3QgbGlzdF9oZWFkICAgICAgICBsaXN0Ow0KCWludAkJCXdpZDsgLy8gd2F0Y2hlciBpZA0K ICAgICAgICB1bnNpZ25lZCBsb25nICAgICAgICAgICBtYXNrOw0KfTsNCiNkZWZpbmUgbGlzdF90 b19pbm90aWZ5X2V2ZW50KHBvcykgbGlzdF9lbnRyeSgocG9zKSwgc3RydWN0IGlub3RpZnlfZXZl bnQsIGxpc3QpDQoNCi8qIEZvciBlYWNoIGlub3RpZnkgZGV2aWNlIHdlIG5lZWQgdG8ga2VlcCBh IGxpc3Qgb2YgZXZlbnRzIHF1ZXVlZCBvbiBpdCwNCiAqIGEgbGlzdCBvZiBpbm9kZXMgdGhhdCB3 ZSBhcmUgd2F0Y2hpbmcgYW5kIG90aGVyIHN0dWZmLg0KICovDQpzdHJ1Y3QgaW5vdGlmeV9kZXZp Y2Ugew0KCXN0cnVjdCBsaXN0X2hlYWQgKglldmVudHM7DQoJYXRvbWljX3QJCWV2ZW50X2NvdW50 Ow0KCXN0cnVjdCBsaXN0X2hlYWQgKgl3YXRjaDsNCglhdG9taWNfdAkJd2F0Y2hfY291bnQ7DQoJ Y2hhciAJCQlyZWFkX3N0YXRlOw0KCXdhaXRfcXVldWVfaGVhZF90IAl3YWl0Ow0KCXNwaW5sb2Nr X3QJCWxvY2s7DQoJdm9pZCAqCQkJYml0bWFzazsNCn07DQoNCnN0YXRpYyBzdHJ1Y3QgaW5vdGlm eV9pbm9kZV93YXRjaGVyICppbm90aWZ5X2lub2RlX2ZpbmRfd2F0Y2hlciAoc3RydWN0IGlub3Rp ZnlfZGV2aWNlICpkZXYsIHN0cnVjdCBpbm9kZSAqaW5vZGUpDQp7DQoJc3RydWN0IGlub3RpZnlf aW5vZGVfd2F0Y2hlciAqd2F0Y2hlcjsNCg0KCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7DQoJ bGlzdF9mb3JfZWFjaF9lbnRyeSAod2F0Y2hlciwgJmlub2RlLT53YXRjaGVycywgbGlzdCkgew0K CQkvKiBUaGlzIGlzIHRoZSB3YXRjaGVyIGZyb20gdGhpcyBkZXZpY2UgKi8NCgkJaWYgKHdhdGNo ZXItPnByaXZhdGVfZGF0YSA9PSBkZXYpDQoJCXsNCgkJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9s b2NrKTsNCgkJCXJldHVybiB3YXRjaGVyOw0KCQl9DQoJfQ0KCXNwaW5fdW5sb2NrKCZpbm9kZS0+ aV9sb2NrKTsNCglyZXR1cm4gTlVMTDsNCn0NCg0Kc3RhdGljIGludCBpbm90aWZ5X2lub2RlX2Fk ZF93YXRjaGVyIChzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldiwgc3RydWN0IGlub2RlICppbm9k ZSwgaW50IHdpZCwgdW5zaWduZWQgbG9uZyBtYXNrKQ0Kew0KCWludCBlcnJvcjsNCglzdHJ1Y3Qg aW5vdGlmeV9pbm9kZV93YXRjaGVyICp3YXRjaGVyOw0KDQoJd2F0Y2hlciA9IGlub3RpZnlfaW5v ZGVfZmluZF93YXRjaGVyKGRldiwgaW5vZGUpOw0KDQoJZXJyb3IgPSAwOw0KDQoNCglzcGluX2xv Y2soJmlub2RlLT5pX2xvY2spOw0KDQoJCS8qIENoZWNrIGlmIHdlIGFyZSBhbHJlYWR5IHdhdGNo aW5nIHRoaXMgaW5vZGUgKi8NCglpZiAod2F0Y2hlcikgew0KCQl3YXRjaGVyLT5tYXNrID0gbWFz azsNCgl9IGVsc2UgaWYgKGF0b21pY19yZWFkKCZpbm9kZS0+d2F0Y2hlcl9jb3VudCkgPCBNQVhf SU5PVElGWV9ERVZfSU5PREVTKSB7DQoJCXdhdGNoZXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qg aW5vdGlmeV9pbm9kZV93YXRjaGVyKSwgR0ZQX0tFUk5FTCk7DQoJCXdhdGNoZXItPnByaXZhdGVf ZGF0YSA9IGRldjsNCgkJd2F0Y2hlci0+aW5vZGUgPSBpbm9kZTsNCgkJd2F0Y2hlci0+bWFzayA9 IG1hc2s7DQoJCXdhdGNoZXItPndpZCA9IHdpZDsNCgkJDQoJCWF0b21pY19pbmMoJmlub2RlLT53 YXRjaGVyX2NvdW50KTsNCgkJbGlzdF9hZGQoJndhdGNoZXItPmxpc3QsICZpbm9kZS0+d2F0Y2hl cnMpOw0KCX0gZWxzZSB7DQoJCWVycm9yID0gLUVOT1NQQzsNCgkJZ290byBvdXQ7DQoJfQ0KDQoJ aW5vdGlmeV9pbm9kZV91cGRhdGVfbWFzayAoaW5vZGUpOw0Kb3V0Og0KCXNwaW5fdW5sb2NrKCZp bm9kZS0+aV9sb2NrKTsNCglyZXR1cm4gZXJyb3I7DQp9DQoNCnN0YXRpYyB2b2lkIGlub3RpZnlf aW5vZGVfcm1fd2F0Y2hlciAoc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYsIHN0cnVjdCBpbm9k ZSAqaW5vZGUpDQp7DQoJc3RydWN0IGlub3RpZnlfaW5vZGVfd2F0Y2hlciAqd2F0Y2hlcjsNCg0K CXdhdGNoZXIgPSBpbm90aWZ5X2lub2RlX2ZpbmRfd2F0Y2hlcihkZXYsIGlub2RlKTsNCg0KCXNw aW5fbG9jaygmaW5vZGUtPmlfbG9jayk7DQoJaWYgKE5VTEwgIT0gd2F0Y2hlcikgew0KCQlsaXN0 X2RlbCgmd2F0Y2hlci0+bGlzdCk7DQoJCWtmcmVlKHdhdGNoZXIpOw0KDQoJCWF0b21pY19kZWMo Jmlub2RlLT53YXRjaGVyX2NvdW50KTsNCgl9DQoJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2sp Ow0KfQ0KDQpzdGF0aWMgc3RydWN0IGlub3RpZnlfd2F0Y2ggKmlub3RpZnlfZGV2X2ZpbmRfd2F0 Y2hlciAoc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYsIGludCB3aWQpDQp7CQ0KCXN0cnVjdCBp bm90aWZ5X3dhdGNoICp3YXRjaDsNCg0KCWxpc3RfZm9yX2VhY2hfZW50cnkod2F0Y2gsIGRldi0+ d2F0Y2gsIGxpc3QpIHsNCgkJaWYgKHdhdGNoLT53aWQgPT0gd2lkKSB7DQoJCQlyZXR1cm4gd2F0 Y2g7DQoJCX0NCgl9DQoNCglyZXR1cm4gTlVMTDsNCn0NCg0Kc3RhdGljIGNoYXIgaW5vdGlmeV9k ZXZfaXNfd2F0Y2hpbmdfaW5vZGUgKHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2LCBzdHJ1Y3Qg aW5vZGUgKmlub2RlKQ0Kew0KCXN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaDsNCg0KCWxpc3Rf Zm9yX2VhY2hfZW50cnkod2F0Y2gsIGRldi0+d2F0Y2gsIGxpc3QpIHsNCgkJaWYgKHdhdGNoLT5p bm9kZSA9PSBpbm9kZSkgew0KCQkJcmV0dXJuIDE7DQoJCX0NCgl9DQoNCglyZXR1cm4gMDsNCn0N Cg0Kc3RhdGljIHN0cnVjdCBpbm9kZSAqaW5vdGlmeV9kZXZfZmluZF9pbm9kZSAoc3RydWN0IGlu b3RpZnlfZGV2aWNlICpkZXYsIGludCB3aWQpDQp7DQoJc3RydWN0IGlub3RpZnlfd2F0Y2ggKndh dGNoOw0KDQoJbGlzdF9mb3JfZWFjaF9lbnRyeSh3YXRjaCwgZGV2LT53YXRjaCwgbGlzdCkgew0K CQlpZiAod2F0Y2gtPndpZCA9PSB3aWQpIHsNCgkJCXJldHVybiB3YXRjaC0+aW5vZGU7DQoJCX0N Cgl9DQoNCglyZXR1cm4gTlVMTDsNCn0NCg0Kc3RhdGljIGludCBpbm90aWZ5X2Rldl9hZGRfd2F0 Y2hlciAoc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYsIGludCB3aWQsIHN0cnVjdCBpbm9kZSAq aW5vZGUpDQp7DQoJaW50IGVycm9yOw0KCXN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaDsNCg0K CWVycm9yID0gMDsNCg0KCS8qIFdlIG9ubHkgYWxsb3cgYSBkZXZpY2UgdG8gd2F0Y2ggYW4gaW5v ZGUgb25jZSAqLw0KCWlmIChpbm90aWZ5X2Rldl9pc193YXRjaGluZ19pbm9kZSAoZGV2LCBpbm9k ZSkpIHsNCgkJZ290byBvdXQ7DQoJfQ0KDQoJLyogTWFrZSBzdXJlIHdlIGFyZW4ndCB3YXRjaGlu ZyB0b28gbWFueSBpbm9kZXMgKi8NCglpZiAoYXRvbWljX3JlYWQgKCZkZXYtPndhdGNoX2NvdW50 KSA8IE1BWF9JTk9USUZZX0RFVl9JTk9ERVMpIHsNCgkJd2F0Y2ggPSBrbWFsbG9jKHNpemVvZihz dHJ1Y3QgaW5vdGlmeV93YXRjaCksIEdGUF9LRVJORUwpOw0KCQl3YXRjaC0+aW5vZGUgPSBpbm9k ZTsNCgkJd2F0Y2gtPndpZCA9IHdpZDsNCg0KCQlhdG9taWNfaW5jKCZkZXYtPndhdGNoX2NvdW50 KTsNCgkJbGlzdF9hZGQoJndhdGNoLT5saXN0LCBkZXYtPndhdGNoKTsNCgl9IGVsc2Ugew0KCQll cnJvciA9IC1FTk9TUEM7DQoJfQ0KCQ0Kb3V0Og0KCXJldHVybiBlcnJvcjsNCn0NCg0Kc3RhdGlj IHZvaWQgaW5vdGlmeV9kZXZfcm1fd2F0Y2hlciAoc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYs IGludCB3aWQpDQp7DQoJc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoOw0KDQoJd2F0Y2ggPSBp bm90aWZ5X2Rldl9maW5kX3dhdGNoZXIoZGV2LCB3aWQpOw0KDQoJaWYgKE5VTEwgIT0gd2F0Y2gp IHsNCgkJbGlzdF9kZWwoJndhdGNoLT5saXN0KTsNCgkJa2ZyZWUod2F0Y2gpOw0KDQoJCWF0b21p Y19kZWMoJmRldi0+d2F0Y2hfY291bnQpOw0KCX0gDQp9DQoNCiNkZWZpbmUgaW5vdGlmeV9kZXZf aGFzX2V2ZW50cyhkZXYpIChkZXYtPmV2ZW50cyAmJiAhbGlzdF9lbXB0eShkZXYtPmV2ZW50cykp DQoNCnN0YXRpYyB2b2lkIGlub3RpZnlfZGV2X2V2ZW50X2RlcXVldWUgKHN0cnVjdCBpbm90aWZ5 X2RldmljZSAqZGV2KQ0Kew0KCXN0cnVjdCBpbm90aWZ5X2V2ZW50ICpldmVudDsNCg0KCWlmIChs aXN0X2VtcHR5KGRldi0+ZXZlbnRzKSkgew0KCQlyZXR1cm47DQoJfQ0KDQoJLyogR2V0IHRoZSBm aXJzdCBlbnRyeSBmcm9tIHRoZSBldmVudCBxdWV1ZSAqLw0KCWV2ZW50ID0gbGlzdF90b19pbm90 aWZ5X2V2ZW50KGRldi0+ZXZlbnRzLT5uZXh0KTsNCglsaXN0X2RlbCgmZXZlbnQtPmxpc3QpOw0K CWtmcmVlKGV2ZW50KTsNCglhdG9taWNfZGVjKCZkZXYtPmV2ZW50X2NvdW50KTsNCn0NCg0Kc3Rh dGljIHZvaWQgaW5vdGlmeV9kZXZfZXZlbnRfcXVldWUgKHN0cnVjdCBpbm90aWZ5X2RldmljZSAq ZGV2LCBpbnQgd2lkLCB1bnNpZ25lZCBsb25nIG1hc2spDQp7DQoJc3RydWN0IGlub3RpZnlfZXZl bnQgKmV2ZW50Ow0KDQoJLyogSWYgd2UgaGF2ZSBNQVhfSU5PVElGWV9RVUVVRURfRVZFTlRTIGV2 ZW50cyBxdWV1ZWQsIHRoZW4gd2UganVzdCBkcm9wDQoJICogdGhlIGV2ZW50LiBJdCBpcyB0aGUg dGhlIGNsaWVudHMgcmVzcG9uc2liaWxpdHkgdG8gcmVhZCBmcm9tIHRoZQ0KCSAqIGRldmljZSBv ZnRlbiBlbm91Z2gNCgkgKi8NCglpZiAoYXRvbWljX3JlYWQoJmRldi0+ZXZlbnRfY291bnQpIDwg TUFYX0lOT1RJRllfUVVFVUVEX0VWRU5UUykgew0KCQlldmVudCA9IGttYWxsb2Moc2l6ZW9mKHN0 cnVjdCBpbm90aWZ5X2V2ZW50KSwgR0ZQX0tFUk5FTCk7DQoJCWV2ZW50LT53aWQgPSB3aWQ7DQoJ CWV2ZW50LT5tYXNrID0gbWFzazsNCg0KCQlsaXN0X2FkZF90YWlsICgmZXZlbnQtPmxpc3QsIGRl di0+ZXZlbnRzKTsNCg0KCQlhdG9taWNfaW5jKCZkZXYtPmV2ZW50X2NvdW50KTsNCgl9IA0KfQ0K DQovKiBLZXJuZWwgQVBJICovDQp2b2lkIGlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQgKHN0cnVj dCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgbWFzaykNCnsNCglzdHJ1Y3QgaW5vdGlmeV9p bm9kZV93YXRjaGVyICp3YXRjaGVyOw0KDQoJLyogSWYgdGhpcyBpbm9kZSBpc24ndCBpbnRlcmVz dGVkIGluIHRoZSBldmVudCAqLw0KCWlmICghKGlub2RlLT53YXRjaGVyc19tYXNrICYgbWFzaykp IHsNCgkJcmV0dXJuOw0KCX0NCg0KCWxpc3RfZm9yX2VhY2hfZW50cnkod2F0Y2hlciwgJmlub2Rl LT53YXRjaGVycywgbGlzdCkgew0KCQlpZiAod2F0Y2hlci0+bWFzayAmIG1hc2spIHsNCgkJCWlu b3RpZnlfZGV2X2V2ZW50X3F1ZXVlKHdhdGNoZXItPnByaXZhdGVfZGF0YSwgd2F0Y2hlci0+d2lk LCBtYXNrKTsNCgkJfQ0KCX0NCn0NCkVYUE9SVF9TWU1CT0xfR1BMKGlub3RpZnlfaW5vZGVfcXVl dWVfZXZlbnQpOw0KDQp2b2lkIGlub3RpZnlfZGVudHJ5X3F1ZXVlX2V2ZW50KHN0cnVjdCBkZW50 cnkgKmRlbnRyeSwgdW5zaWduZWQgbG9uZyBtYXNrKQ0Kew0KCXN0cnVjdCBkZW50cnkgKnBhcmVu dDsNCg0KCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOw0KCWRnZXQgKGRlbnRyeS0+ZF9wYXJl bnQpOw0KCXBhcmVudCA9IGRlbnRyeS0+ZF9wYXJlbnQ7DQoJaW5vdGlmeV9pbm9kZV9xdWV1ZV9l dmVudChwYXJlbnQtPmRfaW5vZGUsIG1hc2spOw0KCWRwdXQgKHBhcmVudCk7DQoJc3Bpbl91bmxv Y2soJmRlbnRyeS0+ZF9sb2NrKTsNCn0NCkVYUE9SVF9TWU1CT0xfR1BMKGlub3RpZnlfZGVudHJ5 X3F1ZXVlX2V2ZW50KTsNCg0KDQp2b2lkIGlub3RpZnlfaW5vZGVfdXBkYXRlX21hc2soc3RydWN0 IGlub2RlICppbm9kZSkNCnsNCglzdHJ1Y3QgaW5vdGlmeV9pbm9kZV93YXRjaGVyICp3YXRjaGVy Ow0KCXVuc2lnbmVkIGxvbmcgbmV3X21hc2s7DQoNCgluZXdfbWFzayA9IDA7DQoJbGlzdF9mb3Jf ZWFjaF9lbnRyeSh3YXRjaGVyLCAmaW5vZGUtPndhdGNoZXJzLCBsaXN0KSB7DQoJCW5ld19tYXNr IHw9IHdhdGNoZXItPm1hc2s7DQoJfQ0KCWlub2RlLT53YXRjaGVyc19tYXNrID0gbmV3X21hc2s7 DQp9DQpFWFBPUlRfU1lNQk9MX0dQTChpbm90aWZ5X2lub2RlX3VwZGF0ZV9tYXNrKTsNCg0KLyog VGhlIGRyaXZlciBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYmVsb3cgKi8NCg0KI2RlZmluZSBJ Tk9USUZZX1JFQURfU1RBVEVfV0lEICAwDQojZGVmaW5lIElOT1RJRllfUkVBRF9TVEFURV9NQVNL IDENCg0Kc3RhdGljIHNzaXplX3QgaW5vdGlmeV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFy ICpidWYsDQoJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKSB7DQoJc3RydWN0IGlub3Rp ZnlfZGV2aWNlICpkZXY7DQoJc2l6ZV90IG91dDsNCgl1bnNpZ25lZCBsb25nIGZsYWdzOw0KCWNo YXIgKm9idWY7DQoNCglvdXQgPSAwOw0KCW9idWYgPSBidWY7DQoNCglkZXYgPSBmaWxlLT5wcml2 YXRlX2RhdGE7DQoNCglzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7DQoNCglp ZiAoIWlub3RpZnlfZGV2X2hhc19ldmVudHMoZGV2KSkgew0KCQlnb3RvIG91dDsNCgl9DQoNCgl3 aGlsZSAob3V0IDwgY291bnQgJiYgaW5vdGlmeV9kZXZfaGFzX2V2ZW50cyAoZGV2KSkgew0KCQlz dHJ1Y3QgaW5vdGlmeV9ldmVudCAqZXZlbnQ7DQoNCgkJZXZlbnQgPSBsaXN0X3RvX2lub3RpZnlf ZXZlbnQoZGV2LT5ldmVudHMtPm5leHQpOw0KDQoJCXN3aXRjaCAoZGV2LT5yZWFkX3N0YXRlKSB7 DQoJCQljYXNlIElOT1RJRllfUkVBRF9TVEFURV9XSUQ6DQoJCQkJaWYgKHNpemVvZihldmVudC0+ d2lkKSArIG91dCA+IGNvdW50KSB7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCQlpZiAocHV0X3Vz ZXIoZXZlbnQtPndpZCwgYnVmKSkgew0KCQkJCQlvdXQgPSAtRUZBVUxUOw0KCQkJCQlnb3RvIG91 dDsNCgkJCQl9DQoJCQkJYnVmICs9IHNpemVvZihldmVudC0+d2lkKTsNCgkJCQlkZXYtPnJlYWRf c3RhdGUrKzsNCgkJCWJyZWFrOw0KCQkJY2FzZSBJTk9USUZZX1JFQURfU1RBVEVfTUFTSzoNCgkJ CQlpZiAoc2l6ZW9mKGV2ZW50LT5tYXNrKSArIG91dCA+IGNvdW50KSB7DQoJCQkJCWJyZWFrOw0K CQkJCX0NCgkJCQlpZiAocHV0X3VzZXIoZXZlbnQtPm1hc2ssIGJ1ZikpIHsNCgkJCQkJb3V0ID0g LUVGQVVMVDsNCgkJCQkJZ290byBvdXQ7DQoJCQkJfQ0KCQkJCWJ1ZiArPSBzaXplb2YoZXZlbnQt Pm1hc2spOw0KCQkJCWRldi0+cmVhZF9zdGF0ZSA9IElOT1RJRllfUkVBRF9TVEFURV9XSUQ7DQoJ CQkJLyogV2UgaGF2ZSBmaW5pc2hlZCBkZWxpdmVyaW5nIHRoZSBjb21wbGV0ZSBldmVudCwgc28g ZGVxdWV1ZSBpdCAqLw0KCQkJCWlub3RpZnlfZGV2X2V2ZW50X2RlcXVldWUoZGV2KTsNCgkJCWJy ZWFrOw0KCQkJZGVmYXVsdDoNCgkJCQkvKiBCVUcgKi8NCgkJCWJyZWFrOw0KCQl9DQoJCW91dCA9 IGJ1ZiAtIG9idWY7DQoJfQ0KDQoJb3V0ID0gYnVmIC0gb2J1ZjsNCm91dDoNCglzcGluX3VubG9j a19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsNCglyZXR1cm4gb3V0Ow0KfQ0KDQpzdGF0 aWMgdW5zaWduZWQgaW50IGlub3RpZnlfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJs ZSAqd2FpdCkgew0KCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2Ow0KDQoJZGV2ID0gZmlsZS0+ cHJpdmF0ZV9kYXRhOw0KDQoJcG9sbF93YWl0KGZpbGUsICZkZXYtPndhaXQsIHdhaXQpOw0KDQoJ aWYgKGlub3RpZnlfZGV2X2hhc19ldmVudHMoZGV2KSkNCgkJcmV0dXJuIFBPTExJTiB8IFBPTExS RE5PUk07DQoNCglyZXR1cm4gMDsNCn0NCg0Kc3RhdGljIGludCBpbm90aWZ5X29wZW4oc3RydWN0 IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpIHsNCglzdHJ1Y3QgaW5vdGlmeV9kZXZp Y2UgKmRldjsNCg0KCWlmIChhdG9taWNfcmVhZCgmd2F0Y2hlcl9jb3VudCkgPT0gTUFYX0lOT1RJ RllfREVWUykNCgkJcmV0dXJuIC1FTk9ERVY7DQoNCglhdG9taWNfaW5jKCZ3YXRjaGVyX2NvdW50 KTsNCg0KCWRldiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbm90aWZ5X2RldmljZSksIEdGUF9L RVJORUwpOw0KCWRldi0+ZXZlbnRzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCks IEdGUF9LRVJORUwpOw0KCUlOSVRfTElTVF9IRUFEKGRldi0+ZXZlbnRzKTsNCglhdG9taWNfc2V0 KCZkZXYtPmV2ZW50X2NvdW50LCAwKTsNCglkZXYtPndhdGNoID0ga21hbGxvYyhzaXplb2Yoc3Ry dWN0IGxpc3RfaGVhZCksIEdGUF9LRVJORUwpOw0KCUlOSVRfTElTVF9IRUFEKGRldi0+d2F0Y2gp Ow0KCWF0b21pY19zZXQoJmRldi0+d2F0Y2hfY291bnQsIDApOw0KCWRldi0+cmVhZF9zdGF0ZSA9 IElOT1RJRllfUkVBRF9TVEFURV9XSUQ7DQoJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT53YWl0 KTsNCglkZXYtPmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7DQoJZGV2LT5iaXRtYXNrID0ga21h bGxvYyhfX0JJVE1BU0tfU0laRSwgR0ZQX0tFUk5FTCk7DQoJbWVtc2V0KGRldi0+Yml0bWFzaywg MCwgX19CSVRNQVNLX1NJWkUpOw0KDQoJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2Ow0KDQoJcmV0 dXJuIDA7DQp9DQoNCnN0YXRpYyB2b2lkIGlub3RpZnlfcmVsZWFzZV9hbGxfd2F0Y2hlcnMgKHN0 cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2KQ0Kew0KCXN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRj aDsNCg0KCWxpc3RfZm9yX2VhY2hfZW50cnkod2F0Y2gsIGRldi0+d2F0Y2gsIGxpc3QpIHsNCgkJ LyogUmVtb3ZlIHRoZSB3YXRjaGVyIGZyb20gdGhlIGlub2RlICovDQoJCWlub3RpZnlfaW5vZGVf cm1fd2F0Y2hlcihkZXYsIHdhdGNoLT5pbm9kZSk7DQoJCS8qIFJlbW92ZSB0aGUgaW5vZGUgZnJv bSB0aGUgZGV2aWNlICovDQoJCWlub3RpZnlfZGV2X3JtX3dhdGNoZXIoZGV2LCB3YXRjaC0+d2lk KTsNCg0KCX0NCn0NCg0Kc3RhdGljIHZvaWQgaW5vdGlmeV9yZWxlYXNlX2FsbF9ldmVudHMgKHN0 cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2KQ0Kew0KCXdoaWxlIChpbm90aWZ5X2Rldl9oYXNfZXZl bnRzKGRldikpIHsNCgkJaW5vdGlmeV9kZXZfZXZlbnRfZGVxdWV1ZShkZXYpOw0KCX0NCn0NCg0K DQpzdGF0aWMgaW50IGlub3RpZnlfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qg ZmlsZSAqZmlsZSkNCnsNCglpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhKSB7DQoJCXN0cnVjdCBpbm90 aWZ5X2RldmljZSAqZGV2Ow0KDQoJCWRldiA9IChzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKilmaWxl LT5wcml2YXRlX2RhdGE7DQoNCgkJaW5vdGlmeV9yZWxlYXNlX2FsbF93YXRjaGVycyhkZXYpOw0K CQlrZnJlZShkZXYtPndhdGNoKTsNCg0KCQlpbm90aWZ5X3JlbGVhc2VfYWxsX2V2ZW50cyhkZXYp Ow0KCQlrZnJlZShkZXYtPmV2ZW50cyk7DQoNCgkJa2ZyZWUgKGRldik7DQoJfQ0KDQoJYXRvbWlj X2RlYygmd2F0Y2hlcl9jb3VudCk7DQoJcmV0dXJuIDA7DQp9DQoNCnN0YXRpYyBpbnQgaW5vdGlm eV9maW5kX2lub2RlIChjb25zdCBjaGFyIF9fdXNlciAqZGlybmFtZSwgc3RydWN0IGlub2RlICoq aW5vZGUpDQp7DQoJc3RydWN0IG5hbWVpZGF0YSBuZDsNCglpbnQgZXJyb3I7DQoNCgllcnJvciA9 IF9fdXNlcl93YWxrIChkaXJuYW1lLCBMT09LVVBfRk9MTE9XfExPT0tVUF9ESVJFQ1RPUlksICZu ZCk7DQoJaWYgKGVycm9yKSANCgkJZ290byBvdXQ7DQoNCgkqaW5vZGUgPSBuZC5kZW50cnktPmRf aW5vZGU7DQoJX19pZ2V0ICgqaW5vZGUpOw0KCXBhdGhfcmVsZWFzZSgmbmQpOw0Kb3V0Og0KCXJl dHVybiBlcnJvcjsNCn0NCg0Kc3RhdGljIGludCBpbm90aWZ5X2dldF93aWQgKHN0cnVjdCBpbm90 aWZ5X2RldmljZSAqZGV2KQ0Kew0KCWludCB3aWQ7DQoNCglpZiAoIWRldikNCgkJcmV0dXJuIC0x Ow0KDQoJd2lkID0gZmluZF9maXJzdF96ZXJvX2JpdCAoZGV2LT5iaXRtYXNrLCBfX0JJVE1BU0tf U0laRSk7DQoNCglzZXRfYml0ICh3aWQsIGRldi0+Yml0bWFzayk7DQoNCglyZXR1cm4gd2lkOw0K fQ0KDQpzdGF0aWMgaW50IGlub3RpZnlfcHV0X3dpZCAoc3RydWN0IGlub3RpZnlfZGV2aWNlICpk ZXYsIGludCB3aWQpDQp7DQoJaWYgKCFkZXYpDQoJCXJldHVybiAtMTsNCg0KCWNsZWFyX2JpdCAo d2lkLCBkZXYtPmJpdG1hc2spOw0KDQoJcmV0dXJuIDA7DQp9DQoNCnN0YXRpYyBpbnQgaW5vdGlm eV93YXRjaChzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldiwgc3RydWN0IGlub3RpZnlfd2F0Y2hf cmVxdWVzdCAqcmVxdWVzdCkNCnsNCglpbnQgZXJyOw0KCWludCB3aWQ7DQoJc3RydWN0IGlub2Rl ICppbm9kZTsNCgllcnIgPSAwOw0KDQoJZXJyID0gaW5vdGlmeV9maW5kX2lub2RlIChyZXF1ZXN0 LT5kaXJuYW1lLCAmaW5vZGUpOw0KDQoJaWYgKGVycikNCgkJZ290byBvdXQ7DQoNCglpZiAoIVNf SVNESVIoaW5vZGUtPmlfbW9kZSkpIHsNCgkJZXJyID0gLUVOT1RESVI7DQoJCWdvdG8gaXB1dF9h bmRfb3V0Ow0KCX0NCg0KCXdpZCA9IGlub3RpZnlfZ2V0X3dpZCAoZGV2KTsNCg0KCWlmICh3aWQg PCAwKSB7DQoJCWVyciA9IC1FTk9TUEM7DQoJCWdvdG8gaXB1dF9hbmRfb3V0Ow0KCX0NCg0KCWVy ciA9IGlub3RpZnlfaW5vZGVfYWRkX3dhdGNoZXIoZGV2LCBpbm9kZSwgd2lkLCByZXF1ZXN0LT5t YXNrKTsNCg0KCWlmIChlcnIpDQoJCWdvdG8gaXB1dF9hbmRfb3V0Ow0KDQoJZXJyID0gaW5vdGlm eV9kZXZfYWRkX3dhdGNoZXIoZGV2LCB3aWQsIGlub2RlKTsNCg0KCWlmIChlcnIpDQoJCWdvdG8g aXB1dF9hbmRfb3V0Ow0KDQppcHV0X2FuZF9vdXQ6DQoJaXB1dCAoaW5vZGUpOw0Kb3V0Og0KCXJl dHVybiBlcnI7DQp9DQoNCnN0YXRpYyBpbnQgaW5vdGlmeV9pZ25vcmUoc3RydWN0IGlub3RpZnlf ZGV2aWNlICpkZXYsIGludCB3aWQpDQp7DQoJc3RydWN0IGlub2RlICppbm9kZTsNCglpbnQgZXJy Ow0KCWVyciA9IDA7DQoNCglpbm9kZSA9IGlub3RpZnlfZGV2X2ZpbmRfaW5vZGUgKGRldiwgd2lk KTsNCg0KCWlmICghaW5vZGUpIHsNCgkJZXJyID0gLUVJTlZBTDsNCgkJZ290byBvdXQ7DQoJfQ0K DQoJaW5vdGlmeV9pbm9kZV9ybV93YXRjaGVyKGRldiwgaW5vZGUpOw0KCWlub3RpZnlfZGV2X3Jt X3dhdGNoZXIoZGV2LCB3aWQpOw0KCWlub3RpZnlfcHV0X3dpZCAoZGV2LCB3aWQpOw0Kb3V0Og0K CXJldHVybiBlcnI7DQp9DQoNCnN0YXRpYyBpbnQgaW5vdGlmeV9pb2N0bChzdHJ1Y3QgaW5vZGUg KmlwLCBzdHJ1Y3QgZmlsZSAqZnAsDQoJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9u ZyBhcmcpIHsNCglpbnQgZXJyOw0KCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQoJc3RydWN0IGlub3Rp ZnlfZGV2aWNlICpkZXY7DQoJc3RydWN0IGlub3RpZnlfd2F0Y2hfcmVxdWVzdCAqcmVxdWVzdDsN CglpbnQgd2lkOw0KDQoJZGV2ID0gZnAtPnByaXZhdGVfZGF0YTsNCg0KCXNwaW5fbG9ja19pcnFz YXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsNCg0KCWVyciA9IDA7DQoNCglpZiAoX0lPQ19UWVBFKGNt ZCkgIT0gSU5PVElGWV9JT0NUTF9NQUdJQykgcmV0dXJuIC1FSU5WQUw7DQoJaWYgKF9JT0NfTlIo Y21kKSA+IElOT1RJRllfSU9DVExfTUFYTlIpIHJldHVybiAtRUlOVkFMOw0KDQoJaWYgKF9JT0Nf RElSKGNtZCkgJiBfSU9DX1JFQUQpDQoJCWVyciA9ICFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCAo dm9pZCAqKWFyZywgX0lPQ19TSVpFKGNtZCkpOw0KCWlmIChfSU9DX0RJUihjbWQpICYgX0lPQ19X UklURSkNCgkJZXJyID0gIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgKHZvaWQgKilhcmcsIF9JT0Nf U0laRShjbWQpKTsNCg0KCWlmIChlcnIpIHsNCgkJZXJyID0gLUVGQVVMVDsNCgkJZ290byBvdXQ7 DQoJfQ0KDQoNCgllcnIgPSAtRUlOVkFMOw0KDQoJc3dpdGNoIChjbWQpIHsNCgkJY2FzZSBJTk9U SUZZX1dBVENIOg0KCQkJcmVxdWVzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbm90aWZ5X3dh dGNoX3JlcXVlc3QpLCBHRlBfS0VSTkVMKTsNCgkJCWlmIChjb3B5X2Zyb21fdXNlcihyZXF1ZXN0 LCAodm9pZCAqKWFyZywgc2l6ZW9mKHN0cnVjdCBpbm90aWZ5X3dhdGNoX3JlcXVlc3QpKSkgew0K CQkJCWVyciA9IC1FRkFVTFQ7DQoJCQkJZ290byBvdXQ7DQoJCQl9DQoNCgkJCXByaW50ayhLRVJO X0FMRVJUICJpbm90aWZ5IFdBVENIOiAlcCAlbGRcbiIsIHJlcXVlc3QtPmRpcm5hbWUsIHJlcXVl c3QtPm1hc2spOw0KCQkJZXJyID0gaW5vdGlmeV93YXRjaChkZXYsIHJlcXVlc3QpOw0KCQkJa2Zy ZWUgKHJlcXVlc3QpOw0KCQlicmVhazsNCgkJY2FzZSBJTk9USUZZX0lHTk9SRToNCgkJCWlmIChj b3B5X2Zyb21fdXNlcigmd2lkLCAodm9pZCAqKWFyZywgc2l6ZW9mKGludCkpKSB7DQoJCQkJZXJy ID0gLUVGQVVMVDsNCgkJCQlnb3RvIG91dDsNCgkJCX0NCg0KCQkJcHJpbnRrKEtFUk5fQUxFUlQg Imlub3RpZnkgSUdOT1JFOiAlZFxuIiwgd2lkKTsNCgkJCWVyciA9IGlub3RpZnlfaWdub3JlKGRl diwgd2lkKTsNCgkJYnJlYWs7DQoJfQ0KDQpvdXQ6DQoJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm ZGV2LT5sb2NrLCBmbGFncyk7DQoJcmV0dXJuIGVycjsNCn0NCg0Kc3RhdGljIHN0cnVjdCBmaWxl X29wZXJhdGlvbnMgaW5vdGlmeV9mb3BzID0gew0KCS5vd25lcgkJPSBUSElTX01PRFVMRSwNCgku cmVhZAkJPSBpbm90aWZ5X3JlYWQsDQoJLnBvbGwJCT0gaW5vdGlmeV9wb2xsLA0KCS5vcGVuCQk9 IGlub3RpZnlfb3BlbiwNCgkucmVsZWFzZQk9IGlub3RpZnlfcmVsZWFzZSwNCgkuaW9jdGwJCT0g aW5vdGlmeV9pb2N0bCwNCn07DQoNCnN0cnVjdCBtaXNjZGV2aWNlIGlub3RpZnlfZGV2aWNlID0g ew0KCS5taW5vciAgPSAtMSwgLy8gYXV0b21hdGljDQoJLm5hbWUJPSAiaW5vdGlmeSIsDQoJLmZv cHMJPSAmaW5vdGlmeV9mb3BzLA0KfTsNCg0KDQpzdGF0aWMgaW50IF9faW5pdCBpbm90aWZ5X2lu aXQgKHZvaWQpDQp7DQoJaW50IHJldDsNCg0KCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmlub3RpZnlf ZGV2aWNlKTsNCg0KCWlmIChyZXQpIHsNCgkJZ290byBvdXQ7DQoJfQ0KDQoJcHJpbnRrKEtFUk5f QUxFUlQgImlub3RpZnkgMC4yIHN0YXJ0dXBcbiIpOw0Kb3V0Og0KCXJldHVybiByZXQ7DQp9DQoN CnN0YXRpYyB2b2lkIGlub3RpZnlfZXhpdCAodm9pZCkNCnsNCgltaXNjX2RlcmVnaXN0ZXIgKCZp bm90aWZ5X2RldmljZSk7DQoJcHJpbnRrKEtFUk5fQUxFUlQgImlub3RpZnkgMC4yIHNodXRkb3du XG4iKTsNCn0NCg0KDQpNT0RVTEVfQVVUSE9SKCJKb2huIE1jQ3V0Y2hhbiA8dHRiQHRlbnRhY2xl LmRocy5vcmc+Iik7DQpNT0RVTEVfREVTQ1JJUFRJT04oIklub2RlIGV2ZW50IGRyaXZlciIpOw0K TU9EVUxFX0xJQ0VOU0UoIkdQTCIpOw0KDQptb2R1bGVfaW5pdCAoaW5vdGlmeV9pbml0KTsNCm1v ZHVsZV9leGl0IChpbm90aWZ5X2V4aXQpOw0K --=-kRKbK6S5Ctw2+q933Nh/ Content-Disposition: attachment; filename=inotify.h Content-Type: text/x-chdr; name=inotify.h; charset=UTF-8 Content-Transfer-Encoding: base64 LyoNCiAqIElub2RlIGJhc2VkIGRpcmVjdG9yeSBub3RpZmljYXRpb24gZm9yIExpbnV4DQogKg0K ICogQ29weXJpZ2h0IChDKSAyMDA0IEpvaG4gTWNDdXRjaGFuDQogKi8NCg0KI2lmbmRlZiBfTElO VVhfSU5PVElGWV9IDQojZGVmaW5lIF9MSU5VWF9JTk9USUZZX0gNCg0KI2luY2x1ZGUgPGxpbnV4 L2ZzLmg+DQojaW5jbHVkZSA8bGludXgvaW9jdGwuaD4NCg0KLyogV2hlbiByZWFkaW5nIGZyb20g dGhlIGRldmljZSB0aGUgZm9ybWF0IGlzOg0KICogCVdBVENIRVJfTlVNQkVSIFtpbnRdDQogKiAJ RVZFTlRfTUFTSyBbdW5zaWduZWQgbG9uZ10NCiAqLw0KDQojZGVmaW5lIElOX0FDQ0VTUwkweDAw MDAwMDAxCS8qIEZpbGUgd2FzIGFjY2Vzc2VkICovDQojZGVmaW5lIElOX01PRElGWQkweDAwMDAw MDAyCS8qIEZpbGUgd2FzIG1vZGlmaWVkICovDQojZGVmaW5lIElOX0NSRUFURQkweDAwMDAwMDA0 CS8qIEZpbGUgd2FzIGNyZWF0ZWQgKi8NCiNkZWZpbmUgSU5fREVMRVRFCTB4MDAwMDAwMDgJLyog RmlsZSB3YXMgZGVsZXRlZCAqLw0KI2RlZmluZSBJTl9SRU5BTUUJMHgwMDAwMDAxMAkvKiBGaWxl IHdhcyByZW5hbWVkICovDQojZGVmaW5lIElOX0FUVFJJQgkweDAwMDAwMDIwCS8qIEZpbGUgY2hh bmdlZCBhdHRyaWJ1dGVzICovDQojZGVmaW5lIElOX01PVkUJCTB4MDAwMDAwNDAJLyogRmlsZSB3 YXMgbW92ZWQgKi8NCiNkZWZpbmUgSU5fVU5NT1VOVAkweDAwMDAwMDgwCS8qIERldmljZSBmaWxl IHdhcyBvbiwgd2FzIHVubW91bnRlZCAqLw0KI2RlZmluZSBJTl9DTE9TRQkweDAwMDAwMTAwCS8q IEZpbGUgd2FzIGNsb3NlZCAqLw0KI2RlZmluZSBJTl9PUEVOCQkweDAwMDAwMjAwCS8qIEZpbGUg d2FzIG9wZW5lZCAqLw0KDQovKiBpb2N0bCAqLw0KDQovKiBGaWxsIHRoaXMgYW5kIHBhc3MgaXQg dG8gSU5PVElGWV9XQVRDSCBpb2N0bCAqLw0Kc3RydWN0IGlub3RpZnlfd2F0Y2hfcmVxdWVzdCB7 DQoJY2hhciAqZGlybmFtZTsgLy8gZGlyZWN0b3J5IG5hbWUNCgl1bnNpZ25lZCBsb25nIG1hc2s7 IC8vIGV2ZW50IG1hc2sNCn07DQoNCiNkZWZpbmUgSU5PVElGWV9JT0NUTF9NQUdJQyAnUScNCiNk ZWZpbmUgSU5PVElGWV9JT0NUTF9NQVhOUiAyDQoNCiNkZWZpbmUgSU5PVElGWV9XQVRDSAlfSU9X KElOT1RJRllfSU9DVExfTUFHSUMsIDEsIHN0cnVjdCBpbm90aWZ5X3dhdGNoX3JlcXVlc3QpDQoj ZGVmaW5lIElOT1RJRllfSUdOT1JFCV9JT1coSU5PVElGWV9JT0NUTF9NQUdJQywgMiwgaW50KQ0K DQovKiBLZXJuZWwgQVBJICovDQp2b2lkIGlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQgKHN0cnVj dCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgbWFzayk7DQp2b2lkIGlub3RpZnlfZGVudHJ5 X3F1ZXVlX2V2ZW50IChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVuc2lnbmVkIGxvbmcgbWFzayk7 DQp2b2lkIGlub3RpZnlfaW5vZGVfdXBkYXRlX21hc2sgKHN0cnVjdCBpbm9kZSAqaW5vZGUpOw0K DQojZW5kaWYNCg0K --=-kRKbK6S5Ctw2+q933Nh/ Content-Disposition: attachment; filename=inotify.patch Content-Type: text/x-patch; name=inotify.patch; charset=UTF-8 Content-Transfer-Encoding: base64 ZGlmZiAtcnUgY2xlYW4vbGludXgtMi42LjYvZnMvYXR0ci5jIGxpbnV4LTIuNi42L2ZzL2F0dHIu Yw0KLS0tIGNsZWFuL2xpbnV4LTIuNi42L2ZzL2F0dHIuYwkyMDA0LTA1LTA5IDIyOjMyOjAxLjAw MDAwMDAwMCAtMDQwMA0KKysrIGxpbnV4LTIuNi42L2ZzL2F0dHIuYwkyMDA0LTA1LTExIDE4OjM4 OjIyLjAwMDAwMDAwMCAtMDQwMA0KQEAgLTExLDYgKzExLDcgQEANCiAjaW5jbHVkZSA8bGludXgv c3RyaW5nLmg+DQogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+DQogI2luY2x1ZGUgPGxpbnV4 L2Rub3RpZnkuaD4NCisjaW5jbHVkZSA8bGludXgvaW5vdGlmeS5oPg0KICNpbmNsdWRlIDxsaW51 eC9mY250bC5oPg0KICNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPg0KICNpbmNsdWRlIDxsaW51 eC9zZWN1cml0eS5oPg0KQEAgLTE4NCw4ICsxODUsMTAgQEANCiAJfQ0KIAlpZiAoIWVycm9yKSB7 DQogCQl1bnNpZ25lZCBsb25nIGRuX21hc2sgPSBzZXRhdHRyX21hc2soaWFfdmFsaWQpOw0KLQkJ aWYgKGRuX21hc2spDQorCQlpZiAoZG5fbWFzaykgew0KIAkJCWRub3RpZnlfcGFyZW50KGRlbnRy eSwgZG5fbWFzayk7DQorCQkJaW5vdGlmeV9kZW50cnlfcXVldWVfZXZlbnQgKGRlbnRyeSwgZG5f bWFzayk7DQorCQl9DQogCX0NCiAJcmV0dXJuIGVycm9yOw0KIH0NCmRpZmYgLXJ1IGNsZWFuL2xp bnV4LTIuNi42L2ZzL2lub2RlLmMgbGludXgtMi42LjYvZnMvaW5vZGUuYw0KLS0tIGNsZWFuL2xp bnV4LTIuNi42L2ZzL2lub2RlLmMJMjAwNC0wNS0wOSAyMjozMzoyMS4wMDAwMDAwMDAgLTA0MDAN CisrKyBsaW51eC0yLjYuNi9mcy9pbm9kZS5jCTIwMDQtMDUtMTEgMTk6MDk6NDcuMDAwMDAwMDAw IC0wNDAwDQpAQCAtNDAyLDYgKzQwMiw4IEBADQogICoNCiAgKiBJZiB0aGUgaW5vZGUgaGFzIG1l dGFkYXRhIGJ1ZmZlcnMgYXR0YWNoZWQgdG8gbWFwcGluZy0+cHJpdmF0ZV9saXN0IHRoZW4NCiAg KiB0cnkgdG8gcmVtb3ZlIHRoZW0uDQorICoNCisgKiBJZiB0aGUgaW5vZGUgaGFzIHdhdGNoZXJz IHdlIGNhbiBub3QgZnJlZSBpdC4NCiAgKi8NCiBzdGF0aWMgdm9pZCBwcnVuZV9pY2FjaGUoaW50 IG5yX3RvX3NjYW4pDQogew0KQEAgLTQyMCw3ICs0MjIsNyBAQA0KIA0KIAkJaW5vZGUgPSBsaXN0 X2VudHJ5KGlub2RlX3VudXNlZC5wcmV2LCBzdHJ1Y3QgaW5vZGUsIGlfbGlzdCk7DQogDQotCQlp ZiAoaW5vZGUtPmlfc3RhdGUgfHwgYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSkgew0KKwkJ aWYgKGlub2RlLT5pX3N0YXRlIHx8IGF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkgfHwgYXRv bWljX3JlYWQoJmlub2RlLT53YXRjaGVyX2NvdW50KSkgew0KIAkJCWxpc3RfbW92ZSgmaW5vZGUt PmlfbGlzdCwgJmlub2RlX3VudXNlZCk7DQogCQkJY29udGludWU7DQogCQl9DQpkaWZmIC1ydSBj bGVhbi9saW51eC0yLjYuNi9mcy9NYWtlZmlsZSBsaW51eC0yLjYuNi9mcy9NYWtlZmlsZQ0KLS0t IGNsZWFuL2xpbnV4LTIuNi42L2ZzL01ha2VmaWxlCTIwMDQtMDUtMDkgMjI6MzI6MzguMDAwMDAw MDAwIC0wNDAwDQorKysgbGludXgtMi42LjYvZnMvTWFrZWZpbGUJMjAwNC0wNS0xMSAxODozOTo0 NC4wMDAwMDAwMDAgLTA0MDANCkBAIC0xMCw3ICsxMCw3IEBADQogCQluYW1laS5vIGZjbnRsLm8g aW9jdGwubyByZWFkZGlyLm8gc2VsZWN0Lm8gZmlmby5vIGxvY2tzLm8gXA0KIAkJZGNhY2hlLm8g aW5vZGUubyBhdHRyLm8gYmFkX2lub2RlLm8gZmlsZS5vIGRub3RpZnkubyBcDQogCQlmaWxlc3lz dGVtcy5vIG5hbWVzcGFjZS5vIHNlcV9maWxlLm8geGF0dHIubyBsaWJmcy5vIFwNCi0JCWZzLXdy aXRlYmFjay5vIG1wYWdlLm8gZGlyZWN0LWlvLm8gYWlvLm8NCisJCWZzLXdyaXRlYmFjay5vIG1w YWdlLm8gZGlyZWN0LWlvLm8gYWlvLm8gaW5vdGlmeS5vDQogDQogb2JqLSQoQ09ORklHX0VQT0xM KQkJKz0gZXZlbnRwb2xsLm8NCiBvYmotJChDT05GSUdfQ09NUEFUKQkJKz0gY29tcGF0Lm8NCmRp ZmYgLXJ1IGNsZWFuL2xpbnV4LTIuNi42L2ZzL3JlYWRfd3JpdGUuYyBsaW51eC0yLjYuNi9mcy9y ZWFkX3dyaXRlLmMNCi0tLSBjbGVhbi9saW51eC0yLjYuNi9mcy9yZWFkX3dyaXRlLmMJMjAwNC0w NS0wOSAyMjozMjo1Mi4wMDAwMDAwMDAgLTA0MDANCisrKyBsaW51eC0yLjYuNi9mcy9yZWFkX3dy aXRlLmMJMjAwNC0wNS0xMSAxODo0MToyOS4wMDAwMDAwMDAgLTA0MDANCkBAIC0xMSw2ICsxMSw3 IEBADQogI2luY2x1ZGUgPGxpbnV4L3Vpby5oPg0KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5o Pg0KICNpbmNsdWRlIDxsaW51eC9kbm90aWZ5Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2lub3RpZnku aD4NCiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4NCiAjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+DQogDQpAQCAtMjE0LDggKzIxNSwxMCBAQA0KIAkJCQlyZXQgPSBmaWxlLT5mX29wLT5yZWFk KGZpbGUsIGJ1ZiwgY291bnQsIHBvcyk7DQogCQkJZWxzZQ0KIAkJCQlyZXQgPSBkb19zeW5jX3Jl YWQoZmlsZSwgYnVmLCBjb3VudCwgcG9zKTsNCi0JCQlpZiAocmV0ID4gMCkNCisJCQlpZiAocmV0 ID4gMCkgew0KIAkJCQlkbm90aWZ5X3BhcmVudChmaWxlLT5mX2RlbnRyeSwgRE5fQUNDRVNTKTsN CisJCQkJaW5vdGlmeV9kZW50cnlfcXVldWVfZXZlbnQoZmlsZS0+Zl9kZW50cnksIElOX0FDQ0VT Uyk7DQorCQkJfQ0KIAkJfQ0KIAl9DQogDQpAQCAtMjU4LDggKzI2MSwxMCBAQA0KIAkJCQlyZXQg PSBmaWxlLT5mX29wLT53cml0ZShmaWxlLCBidWYsIGNvdW50LCBwb3MpOw0KIAkJCWVsc2UNCiAJ CQkJcmV0ID0gZG9fc3luY193cml0ZShmaWxlLCBidWYsIGNvdW50LCBwb3MpOw0KLQkJCWlmIChy ZXQgPiAwKQ0KKwkJCWlmIChyZXQgPiAwKSB7DQogCQkJCWRub3RpZnlfcGFyZW50KGZpbGUtPmZf ZGVudHJ5LCBETl9NT0RJRlkpOw0KKwkJCQlpbm90aWZ5X2RlbnRyeV9xdWV1ZV9ldmVudChmaWxl LT5mX2RlbnRyeSwgSU5fTU9ESUZZKTsNCisJCQl9DQogCQl9DQogCX0NCiANCkBAIC00NzMsOSAr NDc4LDEyIEBADQogb3V0Og0KIAlpZiAoaW92ICE9IGlvdnN0YWNrKQ0KIAkJa2ZyZWUoaW92KTsN Ci0JaWYgKChyZXQgKyAodHlwZSA9PSBSRUFEKSkgPiAwKQ0KKwlpZiAoKHJldCArICh0eXBlID09 IFJFQUQpKSA+IDApIHsNCiAJCWRub3RpZnlfcGFyZW50KGZpbGUtPmZfZGVudHJ5LA0KIAkJCQko dHlwZSA9PSBSRUFEKSA/IEROX0FDQ0VTUyA6IEROX01PRElGWSk7DQorCQlpbm90aWZ5X2RlbnRy eV9xdWV1ZV9ldmVudChmaWxlLT5mX2RlbnRyeSwgDQorCQkJCSh0eXBlID09IFJFQUQpID8gSU5f QUNDRVNTIDogSU5fTU9ESUZZKTsNCisJfQ0KIAlyZXR1cm4gcmV0Ow0KIH0NCiANCmRpZmYgLXJ1 IGNsZWFuL2xpbnV4LTIuNi42L2luY2x1ZGUvbGludXgvZnMuaCBsaW51eC0yLjYuNi9pbmNsdWRl L2xpbnV4L2ZzLmgNCi0tLSBjbGVhbi9saW51eC0yLjYuNi9pbmNsdWRlL2xpbnV4L2ZzLmgJMjAw NC0wNS0wOSAyMjozMjoyNi4wMDAwMDAwMDAgLTA0MDANCisrKyBsaW51eC0yLjYuNi9pbmNsdWRl L2xpbnV4L2ZzLmgJMjAwNC0wNS0xMSAxODo0MjoyNS4wMDAwMDAwMDAgLTA0MDANCkBAIC00NDcs NiArNDQ3LDEwIEBADQogCXVuc2lnbmVkIGxvbmcJCWlfZG5vdGlmeV9tYXNrOyAvKiBEaXJlY3Rv cnkgbm90aWZ5IGV2ZW50cyAqLw0KIAlzdHJ1Y3QgZG5vdGlmeV9zdHJ1Y3QJKmlfZG5vdGlmeTsg LyogZm9yIGRpcmVjdG9yeSBub3RpZmljYXRpb25zICovDQogDQorCXN0cnVjdCBsaXN0X2hlYWQJ d2F0Y2hlcnM7DQorCXVuc2lnbmVkIGxvbmcJCXdhdGNoZXJzX21hc2s7DQorCWF0b21pY190CQl3 YXRjaGVyX2NvdW50Ow0KKw0KIAl1bnNpZ25lZCBsb25nCQlpX3N0YXRlOw0KIAl1bnNpZ25lZCBs b25nCQlkaXJ0aWVkX3doZW47CS8qIGppZmZpZXMgb2YgZmlyc3QgZGlydHlpbmcgKi8NCiANCg== --=-kRKbK6S5Ctw2+q933Nh/--