--8323328-1548244277-991158597=:6012
Content-Type: TEXT/PLAIN; charset=US-ASCII
the attached softirq-2.4.5-E5 patch (against 2.4.5-ac3) tries to solve all
softirq, tasklet and scheduling latency problems i could identify while
testing TCP latencies over gigabit connections. The list of problems, as
of 2.4.5-ac3:
- the need_resched check in the arch/i386/kernel/entry.S syscall/irq
return code has a race that makes it possible to miss a reschedule for
up to smp_num_cpus*HZ jiffies.
- the softirq check in entry.S has a race as well.
- on x86, APIC interrupts do not trigger do_softirq(). This is especially
problematic with the smptimers patch, which is APIC-irq driven.
- local_bh_disable() blocks the execution of do_softirq(), and it takes
a nondeterministic amount of time after local_bh_enable() for the next
do_softirq() to be triggered.
- do_softirq() does not execute softirqs that got activated meanwhile,
and the next do_softirq() run happens after a nondeterministic amount
of time.
- the tasklet design re-enables their driving softirq occasionally, which
makes 'complete' softirq processing impossible.
the patch (tries to) solve all these problems. The changes:
- all softirqs are guaranteed to be handled after do_softirq() returns
(even those which are activated during softirq run)
- softirq handling is immediately restarted if bhs are re-enabled again.
- the tasklet code got rewritten (but externally visible semantics are
kept) to not rely on marking the softirq busy. The new code is a bit
tricky, but it should be correct.
- some code got a bit slower, some code got a bit faster. I believe most
of the changes made the softirq/tasklet implementation clearer.
- some minor uninlining of too big inline functions, and other cleanup
was done as well.
- no global serialization was added to any part of the softirq or tasklet
code, so scalability is not impacted.
the patch is stable under every workload i tried, handles softirqs and
tasklets with the minimum possible latency, thus it maximizes cache
locality. The patch has no known bug, and the kernel has no known
lost-wakeup, lost-softirq problem i know of. TCP latencies and TCP
throughput is picture-perfect.
Comments?
Ingo
--8323328-1548244277-991158597=:6012
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="softirq-2.4.5-E5"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.33.0105291949570.6012@localhost.localdomain>
Content-Description:
Content-Disposition: attachment; filename="softirq-2.4.5-E5"
LS0tIGxpbnV4L2tlcm5lbC9zb2Z0aXJxLmMub3JpZwlGcmkgRGVjIDI5IDIz
OjA3OjI0IDIwMDANCisrKyBsaW51eC9rZXJuZWwvc29mdGlycS5jCVR1ZSBN
YXkgMjkgMTc6NDE6MTQgMjAwMQ0KQEAgLTUyLDEyICs1MiwxMiBAQA0KIAlp
bnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOw0KIAlfX3UzMiBhY3RpdmUs
IG1hc2s7DQogDQorCWxvY2FsX2lycV9kaXNhYmxlKCk7DQogCWlmIChpbl9p
bnRlcnJ1cHQoKSkNCi0JCXJldHVybjsNCisJCWdvdG8gb3V0Ow0KIA0KIAls
b2NhbF9iaF9kaXNhYmxlKCk7DQogDQotCWxvY2FsX2lycV9kaXNhYmxlKCk7
DQogCW1hc2sgPSBzb2Z0aXJxX21hc2soY3B1KTsNCiAJYWN0aXZlID0gc29m
dGlycV9hY3RpdmUoY3B1KSAmIG1hc2s7DQogDQpAQCAtNzEsNyArNzEsNiBA
QA0KIAkJbG9jYWxfaXJxX2VuYWJsZSgpOw0KIA0KIAkJaCA9IHNvZnRpcnFf
dmVjOw0KLQkJbWFzayAmPSB+YWN0aXZlOw0KIA0KIAkJZG8gew0KIAkJCWlm
IChhY3RpdmUgJiAxKQ0KQEAgLTgyLDEyICs4MSwxMyBAQA0KIA0KIAkJbG9j
YWxfaXJxX2Rpc2FibGUoKTsNCiANCi0JCWFjdGl2ZSA9IHNvZnRpcnFfYWN0
aXZlKGNwdSk7DQotCQlpZiAoKGFjdGl2ZSAmPSBtYXNrKSAhPSAwKQ0KKwkJ
YWN0aXZlID0gc29mdGlycV9hY3RpdmUoY3B1KSAmIG1hc2s7DQorCQlpZiAo
YWN0aXZlKQ0KIAkJCWdvdG8gcmV0cnk7DQogCX0NCiANCi0JbG9jYWxfYmhf
ZW5hYmxlKCk7DQorCV9fbG9jYWxfYmhfZW5hYmxlKCk7DQorb3V0Og0KIA0K
IAkvKiBMZWF2ZSB3aXRoIGxvY2FsbHkgZGlzYWJsZWQgaGFyZCBpcnFzLiBJ
dCBpcyBjcml0aWNhbCB0byBjbG9zZQ0KIAkgKiB3aW5kb3cgZm9yIGluZmlu
aXRlIHJlY3Vyc2lvbiwgd2hpbGUgd2UgaGVscCBsb2NhbCBiaCBjb3VudCwN
CkBAIC0xMjEsNiArMTIxLDQ1IEBADQogDQogc3RydWN0IHRhc2tsZXRfaGVh
ZCB0YXNrbGV0X3ZlY1tOUl9DUFVTXSBfX2NhY2hlbGluZV9hbGlnbmVkOw0K
IA0KK3ZvaWQgdGFza2xldF9zY2hlZHVsZShzdHJ1Y3QgdGFza2xldF9zdHJ1
Y3QgKnQpDQorew0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKwlpbnQgY3B1
Ow0KKw0KKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7DQorCWxvY2FsX2ly
cV9zYXZlKGZsYWdzKTsNCisJLyoNCisJICogSWYgbm9ib2R5IGlzIHJ1bm5p
bmcgaXQgdGhlbiBhZGQgaXQgdG8gdGhpcyBDUFUncw0KKwkgKiB0YXNrbGV0
IHF1ZXVlLg0KKwkgKi8NCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFRBU0tM
RVRfU1RBVEVfU0NIRUQsICZ0LT5zdGF0ZSkgJiYNCisJCQkJCQl0YXNrbGV0
X3RyeWxvY2sodCkpIHsNCisJCXQtPm5leHQgPSB0YXNrbGV0X3ZlY1tjcHVd
Lmxpc3Q7DQorCQl0YXNrbGV0X3ZlY1tjcHVdLmxpc3QgPSB0Ow0KKwkJX19j
cHVfcmFpc2Vfc29mdGlycShjcHUsIFRBU0tMRVRfU09GVElSUSk7DQorCQl0
YXNrbGV0X3VubG9jayh0KTsNCisJfQ0KKwlsb2NhbF9pcnFfcmVzdG9yZShm
bGFncyk7DQorfQ0KKw0KK3ZvaWQgdGFza2xldF9oaV9zY2hlZHVsZShzdHJ1
Y3QgdGFza2xldF9zdHJ1Y3QgKnQpDQorew0KKwl1bnNpZ25lZCBsb25nIGZs
YWdzOw0KKwlpbnQgY3B1Ow0KKw0KKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lk
KCk7DQorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsNCisNCisJaWYgKCF0ZXN0
X2FuZF9zZXRfYml0KFRBU0tMRVRfU1RBVEVfU0NIRUQsICZ0LT5zdGF0ZSkg
JiYNCisJCQkJCQl0YXNrbGV0X3RyeWxvY2sodCkpIHsNCisJCXQtPm5leHQg
PSB0YXNrbGV0X2hpX3ZlY1tjcHVdLmxpc3Q7DQorCQl0YXNrbGV0X2hpX3Zl
Y1tjcHVdLmxpc3QgPSB0Ow0KKwkJX19jcHVfcmFpc2Vfc29mdGlycShjcHUs
IEhJX1NPRlRJUlEpOw0KKwkJdGFza2xldF91bmxvY2sodCk7DQorCX0NCisJ
bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOw0KK30NCisNCiBzdGF0aWMgdm9p
ZCB0YXNrbGV0X2FjdGlvbihzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKmEpDQog
ew0KIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOw0KQEAgLTEyOSwz
NyArMTY4LDM3IEBADQogCWxvY2FsX2lycV9kaXNhYmxlKCk7DQogCWxpc3Qg
PSB0YXNrbGV0X3ZlY1tjcHVdLmxpc3Q7DQogCXRhc2tsZXRfdmVjW2NwdV0u
bGlzdCA9IE5VTEw7DQotCWxvY2FsX2lycV9lbmFibGUoKTsNCiANCi0Jd2hp
bGUgKGxpc3QgIT0gTlVMTCkgew0KKwl3aGlsZSAobGlzdCkgew0KIAkJc3Ry
dWN0IHRhc2tsZXRfc3RydWN0ICp0ID0gbGlzdDsNCiANCiAJCWxpc3QgPSBs
aXN0LT5uZXh0Ow0KIA0KLQkJaWYgKHRhc2tsZXRfdHJ5bG9jayh0KSkgew0K
LQkJCWlmIChhdG9taWNfcmVhZCgmdC0+Y291bnQpID09IDApIHsNCi0JCQkJ
Y2xlYXJfYml0KFRBU0tMRVRfU1RBVEVfU0NIRUQsICZ0LT5zdGF0ZSk7DQot
DQotCQkJCXQtPmZ1bmModC0+ZGF0YSk7DQotCQkJCS8qDQotCQkJCSAqIHRh
bGtsZXRfdHJ5bG9jaygpIHVzZXMgdGVzdF9hbmRfc2V0X2JpdCB0aGF0IGlt
cGx5DQotCQkJCSAqIGFuIG1iIHdoZW4gaXQgcmV0dXJucyB6ZXJvLCB0aHVz
IHdlIG5lZWQgdGhlIGV4cGxpY2l0DQotCQkJCSAqIG1iIG9ubHkgaGVyZTog
d2hpbGUgY2xvc2luZyB0aGUgY3JpdGljYWwgc2VjdGlvbi4NCi0JCQkJICov
DQotI2lmZGVmIENPTkZJR19TTVANCi0JCQkJc21wX21iX19iZWZvcmVfY2xl
YXJfYml0KCk7DQotI2VuZGlmDQotCQkJCXRhc2tsZXRfdW5sb2NrKHQpOw0K
LQkJCQljb250aW51ZTsNCi0JCQl9DQotCQkJdGFza2xldF91bmxvY2sodCk7
DQorCQkvKg0KKwkJICogQSB0YXNrbGV0IGlzIG9ubHkgYWRkZWQgdG8gdGhl
IHF1ZXVlIHdoaWxlIGl0J3MNCisJCSAqIGxvY2tlZCwgc28gbm8gb3RoZXIg
Q1BVIGNhbiBoYXZlIHRoaXMgdGFza2xldA0KKwkJICogcGVuZGluZzoNCisJ
CSAqLw0KKwkJaWYgKCF0YXNrbGV0X3RyeWxvY2sodCkpDQorCQkJQlVHKCk7
DQorcmVwZWF0Og0KKwkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoVEFTS0xF
VF9TVEFURV9TQ0hFRCwgJnQtPnN0YXRlKSkNCisJCQlCVUcoKTsNCisJCWlm
ICghYXRvbWljX3JlYWQoJnQtPmNvdW50KSkgew0KKwkJCWxvY2FsX2lycV9l
bmFibGUoKTsNCisJCQl0LT5mdW5jKHQtPmRhdGEpOw0KKwkJCWxvY2FsX2ly
cV9kaXNhYmxlKCk7DQorCQkJLyoNCisJCQkgKiBPbmUgbW9yZSBydW4gaWYg
dGhlIHRhc2tsZXQgZ290IHJlYWN0aXZhdGVkOg0KKwkJCSAqLw0KKwkJCWlm
ICh0ZXN0X2JpdChUQVNLTEVUX1NUQVRFX1NDSEVELCAmdC0+c3RhdGUpKQ0K
KwkJCQlnb3RvIHJlcGVhdDsNCiAJCX0NCi0JCWxvY2FsX2lycV9kaXNhYmxl
KCk7DQotCQl0LT5uZXh0ID0gdGFza2xldF92ZWNbY3B1XS5saXN0Ow0KLQkJ
dGFza2xldF92ZWNbY3B1XS5saXN0ID0gdDsNCi0JCV9fY3B1X3JhaXNlX3Nv
ZnRpcnEoY3B1LCBUQVNLTEVUX1NPRlRJUlEpOw0KLQkJbG9jYWxfaXJxX2Vu
YWJsZSgpOw0KKwkJdGFza2xldF91bmxvY2sodCk7DQorCQlpZiAodGVzdF9i
aXQoVEFTS0xFVF9TVEFURV9TQ0hFRCwgJnQtPnN0YXRlKSkNCisJCQl0YXNr
bGV0X3NjaGVkdWxlKHQpOw0KIAl9DQorCWxvY2FsX2lycV9lbmFibGUoKTsN
CiB9DQogDQogDQpAQCAtMTc0LDM5ICsyMTMsNDAgQEANCiAJbG9jYWxfaXJx
X2Rpc2FibGUoKTsNCiAJbGlzdCA9IHRhc2tsZXRfaGlfdmVjW2NwdV0ubGlz
dDsNCiAJdGFza2xldF9oaV92ZWNbY3B1XS5saXN0ID0gTlVMTDsNCi0JbG9j
YWxfaXJxX2VuYWJsZSgpOw0KIA0KLQl3aGlsZSAobGlzdCAhPSBOVUxMKSB7
DQorCXdoaWxlIChsaXN0KSB7DQogCQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3Qg
KnQgPSBsaXN0Ow0KIA0KIAkJbGlzdCA9IGxpc3QtPm5leHQ7DQogDQotCQlp
ZiAodGFza2xldF90cnlsb2NrKHQpKSB7DQotCQkJaWYgKGF0b21pY19yZWFk
KCZ0LT5jb3VudCkgPT0gMCkgew0KLQkJCQljbGVhcl9iaXQoVEFTS0xFVF9T
VEFURV9TQ0hFRCwgJnQtPnN0YXRlKTsNCi0NCi0JCQkJdC0+ZnVuYyh0LT5k
YXRhKTsNCi0JCQkJdGFza2xldF91bmxvY2sodCk7DQotCQkJCWNvbnRpbnVl
Ow0KLQkJCX0NCi0JCQl0YXNrbGV0X3VubG9jayh0KTsNCisJCWlmICghdGFz
a2xldF90cnlsb2NrKHQpKQ0KKwkJCUJVRygpOw0KK3JlcGVhdDoNCisJCWlm
ICghdGVzdF9hbmRfY2xlYXJfYml0KFRBU0tMRVRfU1RBVEVfU0NIRUQsICZ0
LT5zdGF0ZSkpDQorCQkJQlVHKCk7DQorCQlpZiAoIWF0b21pY19yZWFkKCZ0
LT5jb3VudCkpIHsNCisJCQlsb2NhbF9pcnFfZW5hYmxlKCk7DQorCQkJdC0+
ZnVuYyh0LT5kYXRhKTsNCisJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOw0KKwkJ
CWlmICh0ZXN0X2JpdChUQVNLTEVUX1NUQVRFX1NDSEVELCAmdC0+c3RhdGUp
KQ0KKwkJCQlnb3RvIHJlcGVhdDsNCiAJCX0NCi0JCWxvY2FsX2lycV9kaXNh
YmxlKCk7DQotCQl0LT5uZXh0ID0gdGFza2xldF9oaV92ZWNbY3B1XS5saXN0
Ow0KLQkJdGFza2xldF9oaV92ZWNbY3B1XS5saXN0ID0gdDsNCi0JCV9fY3B1
X3JhaXNlX3NvZnRpcnEoY3B1LCBISV9TT0ZUSVJRKTsNCi0JCWxvY2FsX2ly
cV9lbmFibGUoKTsNCisJCXRhc2tsZXRfdW5sb2NrKHQpOw0KKwkJaWYgKHRl
c3RfYml0KFRBU0tMRVRfU1RBVEVfU0NIRUQsICZ0LT5zdGF0ZSkpDQorCQkJ
dGFza2xldF9oaV9zY2hlZHVsZSh0KTsNCiAJfQ0KKwlsb2NhbF9pcnFfZW5h
YmxlKCk7DQogfQ0KIA0KIA0KIHZvaWQgdGFza2xldF9pbml0KHN0cnVjdCB0
YXNrbGV0X3N0cnVjdCAqdCwNCiAJCSAgdm9pZCAoKmZ1bmMpKHVuc2lnbmVk
IGxvbmcpLCB1bnNpZ25lZCBsb25nIGRhdGEpDQogew0KLQl0LT5mdW5jID0g
ZnVuYzsNCi0JdC0+ZGF0YSA9IGRhdGE7DQorCXQtPm5leHQgPSBOVUxMOw0K
IAl0LT5zdGF0ZSA9IDA7DQogCWF0b21pY19zZXQoJnQtPmNvdW50LCAwKTsN
CisJdC0+ZnVuYyA9IGZ1bmM7DQorCXQtPmRhdGEgPSBkYXRhOw0KIH0NCiAN
CiB2b2lkIHRhc2tsZXRfa2lsbChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQp
DQotLS0gbGludXgvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaC5vcmlnCVR1
ZSBNYXkgMjkgMTI6NTU6MjkgMjAwMQ0KKysrIGxpbnV4L2luY2x1ZGUvbGlu
dXgvaW50ZXJydXB0LmgJVHVlIE1heSAyOSAxNzo0MTo0NiAyMDAxDQpAQCAt
NzQsMjAgKzc0LDE1IEBADQogYXNtbGlua2FnZSB2b2lkIGRvX3NvZnRpcnEo
dm9pZCk7DQogZXh0ZXJuIHZvaWQgb3Blbl9zb2Z0aXJxKGludCBuciwgdm9p
ZCAoKmFjdGlvbikoc3RydWN0IHNvZnRpcnFfYWN0aW9uKiksIHZvaWQgKmRh
dGEpOw0KIA0KKy8qIExvY2FsbHkgY2FjaGVkIGF0b21pYyB2YXJpYWJsZXMg
YXJlIGNoZWFwZXIgdGhhbiBjbGkvc3RpICovDQogc3RhdGljIGlubGluZSB2
b2lkIF9fY3B1X3JhaXNlX3NvZnRpcnEoaW50IGNwdSwgaW50IG5yKQ0KIHsN
Ci0Jc29mdGlycV9hY3RpdmUoY3B1KSB8PSAoMTw8bnIpOw0KKwlzZXRfYml0
KG5yLCAmc29mdGlycV9hY3RpdmUoY3B1KSk7DQogfQ0KIA0KLQ0KLS8qIEkg
ZG8gbm90IHdhbnQgdG8gdXNlIGF0b21pYyB2YXJpYWJsZXMgbm93LCBzbyB0
aGF0IGNsaS9zdGkgKi8NCiBzdGF0aWMgaW5saW5lIHZvaWQgcmFpc2Vfc29m
dGlycShpbnQgbnIpDQogew0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOw0KLQ0K
LQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7DQogCV9fY3B1X3JhaXNlX3NvZnRp
cnEoc21wX3Byb2Nlc3Nvcl9pZCgpLCBucik7DQotCWxvY2FsX2lycV9yZXN0
b3JlKGZsYWdzKTsNCiB9DQogDQogZXh0ZXJuIHZvaWQgc29mdGlycV9pbml0
KHZvaWQpOw0KQEAgLTE1NCwzNCArMTQ5LDggQEANCiAjZGVmaW5lIHRhc2ts
ZXRfdW5sb2NrKHQpIGRvIHsgfSB3aGlsZSAoMCkNCiAjZW5kaWYNCiANCi1z
dGF0aWMgaW5saW5lIHZvaWQgdGFza2xldF9zY2hlZHVsZShzdHJ1Y3QgdGFz
a2xldF9zdHJ1Y3QgKnQpDQotew0KLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQo
VEFTS0xFVF9TVEFURV9TQ0hFRCwgJnQtPnN0YXRlKSkgew0KLQkJaW50IGNw
dSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsNCi0JCXVuc2lnbmVkIGxvbmcgZmxh
Z3M7DQotDQotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7DQotCQl0LT5uZXh0
ID0gdGFza2xldF92ZWNbY3B1XS5saXN0Ow0KLQkJdGFza2xldF92ZWNbY3B1
XS5saXN0ID0gdDsNCi0JCV9fY3B1X3JhaXNlX3NvZnRpcnEoY3B1LCBUQVNL
TEVUX1NPRlRJUlEpOw0KLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOw0K
LQl9DQotfQ0KLQ0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrbGV0X2hpX3Nj
aGVkdWxlKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkNCi17DQotCWlmICgh
dGVzdF9hbmRfc2V0X2JpdChUQVNLTEVUX1NUQVRFX1NDSEVELCAmdC0+c3Rh
dGUpKSB7DQotCQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOw0KLQkJ
dW5zaWduZWQgbG9uZyBmbGFnczsNCi0NCi0JCWxvY2FsX2lycV9zYXZlKGZs
YWdzKTsNCi0JCXQtPm5leHQgPSB0YXNrbGV0X2hpX3ZlY1tjcHVdLmxpc3Q7
DQotCQl0YXNrbGV0X2hpX3ZlY1tjcHVdLmxpc3QgPSB0Ow0KLQkJX19jcHVf
cmFpc2Vfc29mdGlycShjcHUsIEhJX1NPRlRJUlEpOw0KLQkJbG9jYWxfaXJx
X3Jlc3RvcmUoZmxhZ3MpOw0KLQl9DQotfQ0KLQ0KK2V4dGVybiB2b2lkIHRh
c2tsZXRfc2NoZWR1bGUoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KTsNCitl
eHRlcm4gdm9pZCB0YXNrbGV0X2hpX3NjaGVkdWxlKHN0cnVjdCB0YXNrbGV0
X3N0cnVjdCAqdCk7DQogDQogc3RhdGljIGlubGluZSB2b2lkIHRhc2tsZXRf
ZGlzYWJsZV9ub3N5bmMoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KQ0KIHsN
CkBAIC0xOTYsNyArMTY1LDE0IEBADQogDQogc3RhdGljIGlubGluZSB2b2lk
IHRhc2tsZXRfZW5hYmxlKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkNCiB7
DQotCWF0b21pY19kZWMoJnQtPmNvdW50KTsNCisJaWYgKGF0b21pY19kZWNf
YW5kX3Rlc3QoJnQtPmNvdW50KSkNCisJCXRhc2tsZXRfc2NoZWR1bGUodCk7
DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrbGV0X2hpX2VuYWJs
ZShzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpDQorew0KKwlpZiAoYXRvbWlj
X2RlY19hbmRfdGVzdCgmdC0+Y291bnQpKQ0KKwkJdGFza2xldF9oaV9zY2hl
ZHVsZSh0KTsNCiB9DQogDQogZXh0ZXJuIHZvaWQgdGFza2xldF9raWxsKHN0
cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCk7DQotLS0gbGludXgvaW5jbHVkZS9h
c20taTM4Ni9zb2Z0aXJxLmgub3JpZwlTdW4gRGVjIDMxIDIwOjEwOjE3IDIw
MDANCisrKyBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L3NvZnRpcnEuaAlUdWUg
TWF5IDI5IDE3OjM3OjExIDIwMDENCkBAIC00LDExICs0LDE2IEBADQogI2lu
Y2x1ZGUgPGFzbS9hdG9taWMuaD4NCiAjaW5jbHVkZSA8YXNtL2hhcmRpcnEu
aD4NCiANCi0jZGVmaW5lIGNwdV9iaF9kaXNhYmxlKGNwdSkJZG8geyBsb2Nh
bF9iaF9jb3VudChjcHUpKys7IGJhcnJpZXIoKTsgfSB3aGlsZSAoMCkNCi0j
ZGVmaW5lIGNwdV9iaF9lbmFibGUoY3B1KQlkbyB7IGJhcnJpZXIoKTsgbG9j
YWxfYmhfY291bnQoY3B1KS0tOyB9IHdoaWxlICgwKQ0KKyNkZWZpbmUgX19j
cHVfYmhfZW5hYmxlKGNwdSkgXA0KKwkJZG8geyBiYXJyaWVyKCk7IGxvY2Fs
X2JoX2NvdW50KGNwdSktLTsgfSB3aGlsZSAoMCkNCisjZGVmaW5lIGNwdV9i
aF9kaXNhYmxlKGNwdSkgXA0KKwkJZG8geyBsb2NhbF9iaF9jb3VudChjcHUp
Kys7IGJhcnJpZXIoKTsgfSB3aGlsZSAoMCkNCisNCitleHRlcm4gdm9pZCBj
cHVfYmhfZW5hYmxlICh1bnNpZ25lZCBpbnQgY3B1KTsNCiANCiAjZGVmaW5l
IGxvY2FsX2JoX2Rpc2FibGUoKQljcHVfYmhfZGlzYWJsZShzbXBfcHJvY2Vz
c29yX2lkKCkpDQogI2RlZmluZSBsb2NhbF9iaF9lbmFibGUoKQljcHVfYmhf
ZW5hYmxlKHNtcF9wcm9jZXNzb3JfaWQoKSkNCisjZGVmaW5lIF9fbG9jYWxf
YmhfZW5hYmxlKCkJX19jcHVfYmhfZW5hYmxlKHNtcF9wcm9jZXNzb3JfaWQo
KSkNCiANCiAjZGVmaW5lIGluX3NvZnRpcnEoKSAobG9jYWxfYmhfY291bnQo
c21wX3Byb2Nlc3Nvcl9pZCgpKSAhPSAwKQ0KIA0KLS0tIGxpbnV4L25ldC9j
b3JlL2Rldi5jLm9yaWcJVHVlIE1heSAyOSAxNjo0MToyNyAyMDAxDQorKysg
bGludXgvbmV0L2NvcmUvZGV2LmMJVHVlIE1heSAyOSAxNzowMDo1NyAyMDAx
DQpAQCAtMTI3OCw3ICsxMjc4LDcgQEANCiANCiAJcmV0ID0gcHQtPmZ1bmMo
c2tiLCBza2ItPmRldiwgcHQpOw0KIA0KLQl0YXNrbGV0X2VuYWJsZShiaF90
YXNrX3ZlYytUSU1FUl9CSCk7DQorCXRhc2tsZXRfaGlfZW5hYmxlKGJoX3Rh
c2tfdmVjK1RJTUVSX0JIKTsNCiAJc3Bpbl91bmxvY2soJm5ldF9iaF9sb2Nr
KTsNCiAJcmV0dXJuIHJldDsNCiB9DQotLS0gbGludXgvYXJjaC9pMzg2L2tl
cm5lbC9pcnEuYy5vcmlnCVR1ZSBNYXkgMjkgMTI6NTU6MzggMjAwMQ0KKysr
IGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvaXJxLmMJVHVlIE1heSAyOSAxNzoz
NzoxNCAyMDAxDQpAQCAtNjM2LDkgKzYzNiwzOSBAQA0KIAlkZXNjLT5oYW5k
bGVyLT5lbmQoaXJxKTsNCiAJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOw0K
IA0KLQlpZiAoc29mdGlycV9hY3RpdmUoY3B1KSAmIHNvZnRpcnFfbWFzayhj
cHUpKQ0KKwlpZiAoIWluX2ludGVycnVwdCgpICYmIChzb2Z0aXJxX2FjdGl2
ZShjcHUpICYgc29mdGlycV9tYXNrKGNwdSkpKQ0KIAkJZG9fc29mdGlycSgp
Ow0KIAlyZXR1cm4gMTsNCit9DQorDQorLyoNCisgKiBBIGJoLWF0b21pYyBz
ZWN0aW9uIG1pZ2h0IGhhdmUgYmxvY2tlZCB0aGUgZXhlY3Rpb24gb2Ygc29m
dGlycXMuDQorICogcmUtcnVuIHRoZW0gaWYgYXBwcm9wcmlhdGUuDQorICoN
CisgKiBOT1RFOiBkb19zb2Z0aXJxKCkgd2lsbCByZS1lbmFibGUgaW50ZXJy
dXB0cywgc28gYmhfZW5hYmxlIHNob3VsZCBub3QNCisgKiBiZSB1c2VkIHdp
dGhpbiBJUlEtYXRvbWljIHNlY3Rpb25zLg0KKyAqLw0KK3ZvaWQgY3B1X2Jo
X2VuYWJsZSAodW5zaWduZWQgaW50IGNwdSkNCit7DQorCXVuc2lnbmVkIGxv
bmcgZmxhZ3MsIGxvY2FsX2VuYWJsZWQ7DQorDQorCWJhcnJpZXIoKTsNCisJ
aWYgKGxvY2FsX2lycV9jb3VudChjcHUpKQ0KKwkJQlVHKCk7DQorCV9fc2F2
ZV9mbGFncyhmbGFncyk7DQorCWxvY2FsX2VuYWJsZWQgPSAoZmxhZ3MgPj4g
RUZMQUdTX0lGX1NISUZUKSAmIDE7DQorCWlmICghbG9jYWxfZW5hYmxlZCkN
CisJCUJVRygpOw0KKwlpZiAoIS0tbG9jYWxfYmhfY291bnQoY3B1KSAmJg0K
KwkJCShzb2Z0aXJxX2FjdGl2ZShjcHUpICYgc29mdGlycV9tYXNrKGNwdSkp
KSB7DQorCQlkb19zb2Z0aXJxKCk7DQorCX0NCisJLyoNCisJICogV2UgaGF2
ZSB0byBkbyB0aGlzIG9ubHkgYWZ0ZXIgY2FsbGluZyBkb19zb2Z0aXJxKCks
IGJ1dA0KKwkgKiBpIG1vdmVkIGl0IGhlcmUgc28gd2Ugc2VlIGFsbCB0aGUg
cGxhY2VzIHRoYXQgYnJlYWsgbXVjaA0KKwkgKiBmYXN0ZXIuDQorCSAqLw0K
KwlfX3N0aSgpOw0KIH0NCiANCiAvKioNCi0tLSBsaW51eC9hcmNoL2kzODYv
a2VybmVsL3NtcC5jLm9yaWcJVHVlIE1heSAyOSAxMjo1NTozOCAyMDAxDQor
KysgbGludXgvYXJjaC9pMzg2L2tlcm5lbC9zbXAuYwlUdWUgTWF5IDI5IDEy
OjU2OjAyIDIwMDENCkBAIC00OTIsNyArNDkyLDcgQEANCiAJaWYgKHdhaXQp
DQogCQl3aGlsZSAoYXRvbWljX3JlYWQoJmRhdGEtPmZpbmlzaGVkKSAhPSBj
cHVzKQ0KIAkJCWJhcnJpZXIoKTsNCi0JbG9jYWxfYmhfZW5hYmxlKCk7DQor
CV9fbG9jYWxfYmhfZW5hYmxlKCk7DQogDQogCXJldHVybiAwOw0KIH0NCi0t
LSBsaW51eC9hcmNoL2kzODYva2VybmVsL2VudHJ5LlMub3JpZwlUaHUgTm92
ICA5IDAyOjA5OjUwIDIwMDANCisrKyBsaW51eC9hcmNoL2kzODYva2VybmVs
L2VudHJ5LlMJVHVlIE1heSAyOSAxMjo1NjowMiAyMDAxDQpAQCAtMTMzLDYg
KzEzMywxOCBAQA0KIAltb3ZsICQtODE5MiwgcmVnOyBcDQogCWFuZGwgJWVz
cCwgcmVnDQogDQorI2lmZGVmIENPTkZJR19TTVANCisjZGVmaW5lIENIRUNL
X1NPRlRJUlEgXA0KKwltb3ZsIHByb2Nlc3NvciglZWJ4KSwlZWF4OyBcDQor
CXNobGwgJENPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQsJWVheDsgXA0KKwlt
b3ZsIFNZTUJPTF9OQU1FKGlycV9zdGF0KSgsJWVheCksJWVjeDsgXA0KKwl0
ZXN0bCBTWU1CT0xfTkFNRShpcnFfc3RhdCkrNCgsJWVheCksJWVjeA0KKyNl
bHNlDQorI2RlZmluZSBDSEVDS19TT0ZUSVJRIFwNCisJbW92bCBTWU1CT0xf
TkFNRShpcnFfc3RhdCksJWVjeDsgXA0KKwl0ZXN0bCBTWU1CT0xfTkFNRShp
cnFfc3RhdCkrNCwlZWN4DQorI2VuZGlmDQorDQogRU5UUlkobGNhbGw3KQ0K
IAlwdXNoZmwJCQkjIFdlIGdldCBhIGRpZmZlcmVudCBzdGFjayBsYXlvdXQg
d2l0aCBjYWxsIGdhdGVzLA0KIAlwdXNobCAlZWF4CQkjIHdoaWNoIGhhcyB0
byBiZSBjbGVhbmVkIHVwIGxhdGVyLi4NCkBAIC0yMDMsMTggKzIxNSw5IEBA
DQogCWNhbGwgKlNZTUJPTF9OQU1FKHN5c19jYWxsX3RhYmxlKSgsJWVheCw0
KQ0KIAltb3ZsICVlYXgsRUFYKCVlc3ApCQkjIHNhdmUgdGhlIHJldHVybiB2
YWx1ZQ0KIEVOVFJZKHJldF9mcm9tX3N5c19jYWxsKQ0KLSNpZmRlZiBDT05G
SUdfU01QDQotCW1vdmwgcHJvY2Vzc29yKCVlYngpLCVlYXgNCi0Jc2hsbCAk
Q09ORklHX1g4Nl9MMV9DQUNIRV9TSElGVCwlZWF4DQotCW1vdmwgU1lNQk9M
X05BTUUoaXJxX3N0YXQpKCwlZWF4KSwlZWN4CQkjIHNvZnRpcnFfYWN0aXZl
DQotCXRlc3RsIFNZTUJPTF9OQU1FKGlycV9zdGF0KSs0KCwlZWF4KSwlZWN4
CSMgc29mdGlycV9tYXNrDQotI2Vsc2UNCi0JbW92bCBTWU1CT0xfTkFNRShp
cnFfc3RhdCksJWVjeAkJIyBzb2Z0aXJxX2FjdGl2ZQ0KLQl0ZXN0bCBTWU1C
T0xfTkFNRShpcnFfc3RhdCkrNCwlZWN4CSMgc29mdGlycV9tYXNrDQotI2Vu
ZGlmDQotCWpuZSAgIGhhbmRsZV9zb2Z0aXJxDQotCQ0KLXJldF93aXRoX3Jl
c2NoZWR1bGU6DQorCWNsaQ0KKwlDSEVDS19TT0ZUSVJRDQorCWpuZSBoYW5k
bGVfc29mdGlycQ0KIAljbXBsICQwLG5lZWRfcmVzY2hlZCglZWJ4KQ0KIAlq
bmUgcmVzY2hlZHVsZQ0KIAljbXBsICQwLHNpZ3BlbmRpbmcoJWVieCkNCkBA
IC0yMzAsNiArMjMzLDEzIEBADQogCWpuZSB2ODZfc2lnbmFsX3JldHVybg0K
IAl4b3JsICVlZHgsJWVkeA0KIAljYWxsIFNZTUJPTF9OQU1FKGRvX3NpZ25h
bCkNCisjaWZkZWYgQ09ORklHX1NNUA0KKwlHRVRfQ1VSUkVOVCglZWJ4KQ0K
KyNlbmRpZg0KKwljbGkNCisJQ0hFQ0tfU09GVElSUQ0KKwlqZSByZXN0b3Jl
X2FsbA0KKwljYWxsIFNZTUJPTF9OQU1FKGRvX3NvZnRpcnEpDQogCWptcCBy
ZXN0b3JlX2FsbA0KIA0KIAlBTElHTg0KQEAgLTIzOCw2ICsyNDgsMTMgQEAN
CiAJbW92bCAlZWF4LCVlc3ANCiAJeG9ybCAlZWR4LCVlZHgNCiAJY2FsbCBT
WU1CT0xfTkFNRShkb19zaWduYWwpDQorI2lmZGVmIENPTkZJR19TTVANCisJ
R0VUX0NVUlJFTlQoJWVieCkNCisjZW5kaWYNCisJY2xpDQorCUNIRUNLX1NP
RlRJUlENCisJamUgcmVzdG9yZV9hbGwNCisJY2FsbCBTWU1CT0xfTkFNRShk
b19zb2Z0aXJxKQ0KIAlqbXAgcmVzdG9yZV9hbGwNCiANCiAJQUxJR04NCkBA
IC0yNTgsMjQgKzI3NSwyMSBAQA0KIA0KIAlBTElHTg0KIHJldF9mcm9tX2V4
Y2VwdGlvbjoNCi0jaWZkZWYgQ09ORklHX1NNUA0KLQlHRVRfQ1VSUkVOVCgl
ZWJ4KQ0KLQltb3ZsIHByb2Nlc3NvciglZWJ4KSwlZWF4DQotCXNobGwgJENP
TkZJR19YODZfTDFfQ0FDSEVfU0hJRlQsJWVheA0KLQltb3ZsIFNZTUJPTF9O
QU1FKGlycV9zdGF0KSgsJWVheCksJWVjeAkJIyBzb2Z0aXJxX2FjdGl2ZQ0K
LQl0ZXN0bCBTWU1CT0xfTkFNRShpcnFfc3RhdCkrNCgsJWVheCksJWVjeAkj
IHNvZnRpcnFfbWFzaw0KLSNlbHNlDQotCW1vdmwgU1lNQk9MX05BTUUoaXJx
X3N0YXQpLCVlY3gJCSMgc29mdGlycV9hY3RpdmUNCi0JdGVzdGwgU1lNQk9M
X05BTUUoaXJxX3N0YXQpKzQsJWVjeAkjIHNvZnRpcnFfbWFzaw0KLSNlbmRp
Zg0KLQlqbmUgICBoYW5kbGVfc29mdGlycQ0KKwljbGkNCisJQ0hFQ0tfU09G
VElSUQ0KKwlqbmUgaGFuZGxlX3NvZnRpcnENCisJY21wbCAkMCxuZWVkX3Jl
c2NoZWQoJWVieCkNCisJam5lIHJlc2NoZWR1bGUNCisJY21wbCAkMCxzaWdw
ZW5kaW5nKCVlYngpDQorCWpuZSBzaWduYWxfcmV0dXJuDQorCWptcCByZXN0
b3JlX2FsbA0KIA0KIEVOVFJZKHJldF9mcm9tX2ludHIpDQogCUdFVF9DVVJS
RU5UKCVlYngpDQogCW1vdmwgRUZMQUdTKCVlc3ApLCVlYXgJCSMgbWl4IEVG
TEFHUyBhbmQgQ1MNCiAJbW92YiBDUyglZXNwKSwlYWwNCiAJdGVzdGwgJChW
TV9NQVNLIHwgMyksJWVheAkjIHJldHVybiB0byBWTTg2IG1vZGUgb3Igbm9u
LXN1cGVydmlzb3I/DQotCWpuZSByZXRfd2l0aF9yZXNjaGVkdWxlDQorCWpu
ZSByZXRfZnJvbV9zeXNfY2FsbA0KIAlqbXAgcmVzdG9yZV9hbGwNCiANCiAJ
QUxJR04NCi0tLSBsaW51eC9hcmNoL2kzODYva2VybmVsL2FwaWMuYy5vcmln
CVR1ZSBNYXkgMjkgMTI6NTU6MzggMjAwMQ0KKysrIGxpbnV4L2FyY2gvaTM4
Ni9rZXJuZWwvYXBpYy5jCVR1ZSBNYXkgMjkgMTM6MDA6MDkgMjAwMQ0KQEAg
LTEwMTAsNiArMTAxMCw5IEBADQogCWlycV9lbnRlcihjcHUsIDApOw0KIAlz
bXBfbG9jYWxfdGltZXJfaW50ZXJydXB0KHJlZ3MpOw0KIAlpcnFfZXhpdChj
cHUsIDApOw0KKw0KKwlpZiAoc29mdGlycV9hY3RpdmUoY3B1KSAmIHNvZnRp
cnFfbWFzayhjcHUpKQ0KKwkJZG9fc29mdGlycSgpOw0KIH0NCiANCiAvKg0K
--8323328-1548244277-991158597=:6012--
-
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/