[PATCH 2/2] generator: Rewrite to use coroutine module

David Gibson <[email protected]> Tue, 29 Nov 2016 00:18:30 +1100
Newsgroups org.ozlabs.lists.ccan
Message-ID <[email protected]>
VXNlIHRoZSBuZXcgY29yb3V0aW5lIG1vZHVsZSB0byBhYnN0cmFjdCBhd2F5IG91ciBkZXBlbmRl
bmNlIG9uCnVjb250ZXh0LgoKU2lnbmVkLW9mZi1ieTogRGF2aWQgR2lic29uIDxkYXZpZEBnaWJz
b24uZHJvcGJlYXIuaWQuYXU+Ci0tLQogY2Nhbi9nZW5lcmF0b3IvX2luZm8gICAgICAgfCAgOSAr
KysrKystLS0KIGNjYW4vZ2VuZXJhdG9yL2dlbmVyYXRvci5jIHwgMzkgKysrKysrKysrKysrKysr
KysrLS0tLS0tLS0tLS0tLS0tLS0tCiBjY2FuL2dlbmVyYXRvci9nZW5lcmF0b3IuaCB8IDQ5ICsr
KysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDMgZmlsZXMgY2hh
bmdlZCwgNDEgaW5zZXJ0aW9ucygrKSwgNTYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY2Nh
bi9nZW5lcmF0b3IvX2luZm8gYi9jY2FuL2dlbmVyYXRvci9faW5mbwppbmRleCAxMTc1M2E1Li40
ODliOWRkIDEwMDY0NAotLS0gYS9jY2FuL2dlbmVyYXRvci9faW5mbworKysgYi9jY2FuL2dlbmVy
YXRvci9faW5mbwpAQCAtMiw2ICsyLDggQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUg
PHN0cmluZy5oPgogCisjaW5jbHVkZSA8Y2Nhbi9jb3JvdXRpbmUvY29yb3V0aW5lLmg+CisKIC8q
KgogICogZ2VuZXJhdG9yIC0gZ2VuZXJhdG9ycyBmb3IgQwogICoKQEAgLTU2LDE4ICs1OCwxOSBA
QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJaWYgKHN0cmNtcChhcmd2WzFd
LCAiZGVwZW5kcyIpID09IDApIHsKIAkJcHJpbnRmKCJjY2FuL2J1aWxkX2Fzc2VydFxuIik7Ci0J
CXByaW50ZigiY2Nhbi9wdHJpbnRcbiIpOwogCQlwcmludGYoImNjYW4vYWxpZ25vZlxuIik7CisJ
CXByaW50ZigiY2Nhbi9jb3JvdXRpbmVcbiIpOwogCQlwcmludGYoImNjYW4vY3BwbWFnaWNcbiIp
OwogCQlwcmludGYoImNjYW4vY29tcGlsZXJcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAo
c3RyY21wKGFyZ3ZbMV0sICJwb3J0ZWQiKSA9PSAwKSB7Ci0jaWYgSEFWRV9VQ09OVEVYVAorI2lm
IENPUk9VVElORV9BVkFJTEFCTEUKIAkJcHJpbnRmKCJcbiIpOworCQlyZXR1cm4gMTsKICNlbHNl
Ci0JCXByaW50ZigiTmVlZHMgdWNvbnRleHQgc3VwcG9ydFxuIik7CisJCXByaW50ZigiTmVlZHMg
Y29yb3V0aW5lIHN1cHBvcnRcbiIpOwogI2VuZGlmCiAJfQogCmRpZmYgLS1naXQgYS9jY2FuL2dl
bmVyYXRvci9nZW5lcmF0b3IuYyBiL2NjYW4vZ2VuZXJhdG9yL2dlbmVyYXRvci5jCmluZGV4IGQy
MTc2NjUuLjY1NmNiZTcgMTAwNjQ0Ci0tLSBhL2NjYW4vZ2VuZXJhdG9yL2dlbmVyYXRvci5jCisr
KyBiL2NjYW4vZ2VuZXJhdG9yL2dlbmVyYXRvci5jCkBAIC0xMCwxMCArMTAsMTggQEAKICNkZWZp
bmUgREVGQVVMVF9TVEFURV9TSVpFCTgxOTIKICNkZWZpbmUgU1RBVEVfQUxJR04JCUFMSUdOT0Yo
c3RydWN0IGdlbmVyYXRvcl8pCiAKLXZvaWQgKmdlbmVyYXRvcl9uZXdfKGdlbmVyYXRvcl93cmFw
cGVyXyAqZm4sIHNpemVfdCByZXRzaXplKQorc3RhdGljIHNpemVfdCBnZW5lcmF0b3JfbWV0YXNp
emUoc2l6ZV90IHJldHNpemUpCit7CisJcmV0c2l6ZSA9IChyZXRzaXplICsgU1RBVEVfQUxJR04p
ICYgfihTVEFURV9BTElHTiAtIDEpOworCXJldHVybiBzaXplb2Yoc3RydWN0IGdlbmVyYXRvcl8p
ICsgcmV0c2l6ZTsKK30KKwordm9pZCAqZ2VuZXJhdG9yX25ld18odm9pZCAoKmZuKSh2b2lkICop
LCBzaXplX3QgcmV0c2l6ZSkKIHsKIAljaGFyICpiYXNlOwogCXNpemVfdCBzaXplID0gREVGQVVM
VF9TVEFURV9TSVpFOworCXNpemVfdCBtZXRhc2l6ZSA9IGdlbmVyYXRvcl9tZXRhc2l6ZShyZXRz
aXplKTsKKwlzdHJ1Y3QgY29yb3V0aW5lX3N0YWNrICpzdGFjazsKIAl2b2lkICpyZXQ7CiAJc3Ry
dWN0IGdlbmVyYXRvcl8gKmdlbjsKIApAQCAtMjIsMzMgKzMwLDI2IEBAIHZvaWQgKmdlbmVyYXRv
cl9uZXdfKGdlbmVyYXRvcl93cmFwcGVyXyAqZm4sIHNpemVfdCByZXRzaXplKQogCQlhYm9ydCgp
OwogCiAJcmV0c2l6ZSA9IChyZXRzaXplICsgU1RBVEVfQUxJR04pICYgfihTVEFURV9BTElHTiAt
IDEpOwotCXJldCA9IGJhc2UgKyBzaXplIC0gcmV0c2l6ZTsKLQlnZW4gPSAoc3RydWN0IGdlbmVy
YXRvcl8gKilyZXQgLSAxOworCisJc3RhY2sgPSBjb3JvdXRpbmVfc3RhY2tfaW5pdChiYXNlLCBz
aXplLCBtZXRhc2l6ZSk7CisJZ2VuID0gY29yb3V0aW5lX3N0YWNrX3RvX21ldGFkYXRhKHN0YWNr
LCBtZXRhc2l6ZSk7CisJcmV0ID0gZ2VuICsgMTsKIAogCWdlbi0+YmFzZSA9IGJhc2U7CiAJZ2Vu
LT5jb21wbGV0ZSA9IGZhbHNlOwogCi0JZ2V0Y29udGV4dCgmZ2VuLT5nZW4pOwotCi0JZ2VuLT5n
ZW4udWNfc3RhY2suc3Nfc3AgPSBnZW4tPmJhc2U7Ci0JZ2VuLT5nZW4udWNfc3RhY2suc3Nfc2l6
ZSA9IChjaGFyICopZ2VuIC0gYmFzZTsKLQotCWlmIChIQVZFX1BPSU5URVJfU0FGRV9NQUtFQ09O
VEVYVCkgewotCQltYWtlY29udGV4dCgmZ2VuLT5nZW4sICh2b2lkICopZm4sIDEsIHJldCk7Ci0J
fSBlbHNlIHsKLQkJcHRyZGlmZl90IHNpID0gcHRyMmludChyZXQpOwotCQlwdHJkaWZmX3QgbWFz
ayA9ICgxVUwgPDwgKHNpemVvZihpbnQpICogOCkpIC0gMTsKLQkJaW50IGxvID0gc2kgJiBtYXNr
OwotCQlpbnQgaGkgPSBzaSA+PiAoc2l6ZW9mKGludCkgKiA4KTsKLQotCQltYWtlY29udGV4dCgm
Z2VuLT5nZW4sICh2b2lkICopZm4sIDIsIGxvLCBoaSk7Ci0JfQorCWNvcm91dGluZV9pbml0KCZn
ZW4tPmdlbiwgZm4sIHJldCwgc3RhY2spOwogCiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBnZW5l
cmF0b3JfZnJlZV8odm9pZCAqcmV0KQordm9pZCBnZW5lcmF0b3JfZnJlZV8odm9pZCAqcmV0LCBz
aXplX3QgcmV0c2l6ZSkKIHsKIAlzdHJ1Y3QgZ2VuZXJhdG9yXyAqZ2VuID0gZ2VuZXJhdG9yX3N0
YXRlXyhyZXQpOworCXNpemVfdCBtZXRhc2l6ZSA9IGdlbmVyYXRvcl9tZXRhc2l6ZShyZXRzaXpl
KTsKKwlzdHJ1Y3QgY29yb3V0aW5lX3N0YWNrICpzdGFjazsKKworCXN0YWNrID0gY29yb3V0aW5l
X3N0YWNrX2Zyb21fbWV0YWRhdGEoZ2VuLCBtZXRhc2l6ZSk7CisJY29yb3V0aW5lX3N0YWNrX3Jl
bGVhc2Uoc3RhY2spOwogCWZyZWUoZ2VuLT5iYXNlKTsKIH0KZGlmZiAtLWdpdCBhL2NjYW4vZ2Vu
ZXJhdG9yL2dlbmVyYXRvci5oIGIvY2Nhbi9nZW5lcmF0b3IvZ2VuZXJhdG9yLmgKaW5kZXggMTIx
ZjE0YS4uNzEyMmY1NSAxMDA2NDQKLS0tIGEvY2Nhbi9nZW5lcmF0b3IvZ2VuZXJhdG9yLmgKKysr
IGIvY2Nhbi9nZW5lcmF0b3IvZ2VuZXJhdG9yLmgKQEAgLTMsMTAgKzMsNiBAQAogI2RlZmluZSBD
Q0FOX0dFTkVSQVRPUl9ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiAhSEFWRV9VQ09OVEVY
VAotI2Vycm9yIEdlbmVyYXRvcnMgcmVxdWlyZSB3b3JraW5nIHVjb250ZXh0LmggZnVuY3Rpb25z
Ci0jZW5kaWYKLQogI2lmICFIQVZFX1RZUEVPRgogI2Vycm9yIEdlbmVyYXRvcnMgcmVxdWlyZSB0
eXBlb2YKICNlbmRpZgpAQCAtMTgsMjAgKzE0LDIyIEBACiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAj
aW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8c3RkYm9vbC5oPgotI2luY2x1ZGUgPHVjb250
ZXh0Lmg+CiAKLSNpbmNsdWRlIDxjY2FuL3B0cmludC9wdHJpbnQuaD4KLSNpbmNsdWRlIDxjY2Fu
L2J1aWxkX2Fzc2VydC9idWlsZF9hc3NlcnQuaD4KICNpbmNsdWRlIDxjY2FuL2NwcG1hZ2ljL2Nw
cG1hZ2ljLmg+CiAjaW5jbHVkZSA8Y2Nhbi9jb21waWxlci9jb21waWxlci5oPgorI2luY2x1ZGUg
PGNjYW4vY29yb3V0aW5lL2Nvcm91dGluZS5oPgorCisjaWYgIUNPUk9VVElORV9BVkFJTEFCTEUK
KyNlcnJvciBHZW5lcmF0b3JzIHJlcXVpcmUgY29yb3V0aW5lcworI2VuZGlmCiAKIC8qCiAgKiBJ
bnRlcm5hbHMgLSBpbmNsdWRlZCBqdXN0IGZvciB0aGUgdXNlIG9mIGlubGluZXMgYW5kIG1hY3Jv
cwogICovCiAKIHN0cnVjdCBnZW5lcmF0b3JfIHsKLQl1Y29udGV4dF90IGdlbjsKLQl1Y29udGV4
dF90IGNhbGxlcjsKKwlzdHJ1Y3QgY29yb3V0aW5lX3N0YXRlIGdlbjsKKwlzdHJ1Y3QgY29yb3V0
aW5lX3N0YXRlIGNhbGxlcjsKIAlib29sIGNvbXBsZXRlOwogCXZvaWQgKmJhc2U7CiB9OwpAQCAt
NTEsMTUgKzQ5LDggQEAgc3RydWN0IGdlbmVyYXRvcl9pbmNvbXBsZXRlXzsKICNkZWZpbmUgZ2Vu
ZXJhdG9yX3J0eXBlXyhnZW5fKQkJCVwKIAl0eXBlb2YoKCooZ2VuXykpKChzdHJ1Y3QgZ2VuZXJh
dG9yX2luY29tcGxldGVfICopTlVMTCkpCiAKLSNpZiBIQVZFX1BPSU5URVJfU0FGRV9NQUtFQ09O
VEVYVAotI2RlZmluZSBnZW5lcmF0b3Jfd3JhcHBlcl9hcmdzXygpCXZvaWQgKnJldAotI2Vsc2UK
LSNkZWZpbmUgZ2VuZXJhdG9yX3dyYXBwZXJfYXJnc18oKQlpbnQgbG8sIGludCBoaQotI2VuZGlm
Ci10eXBlZGVmIHZvaWQgZ2VuZXJhdG9yX3dyYXBwZXJfKGdlbmVyYXRvcl93cmFwcGVyX2FyZ3Nf
KCkpOwotCi12b2lkICpnZW5lcmF0b3JfbmV3XyhnZW5lcmF0b3Jfd3JhcHBlcl8gKmZuLCBzaXpl
X3QgcmV0c2l6ZSk7Ci12b2lkIGdlbmVyYXRvcl9mcmVlXyh2b2lkICpyZXQpOwordm9pZCAqZ2Vu
ZXJhdG9yX25ld18odm9pZCAoKmZuKSh2b2lkICopLCBzaXplX3QgcmV0c2l6ZSk7Cit2b2lkIGdl
bmVyYXRvcl9mcmVlXyh2b2lkICpyZXQsIHNpemVfdCByZXRzaXplKTsKIAogLyoKICAqIEFQSQpA
QCAtMTI4LDIyICsxMTksMTUgQEAgdm9pZCBnZW5lcmF0b3JfZnJlZV8odm9pZCAqcmV0KTsKICNk
ZWZpbmUgZ2VuZXJhdG9yX2RlZl8obmFtZV8sIHJ0eXBlXywgc3RvcmFnZV8sIC4uLikJCQlcCiAJ
c3RhdGljIHZvaWQgbmFtZV8jI19nZW5lcmF0b3JfKHJ0eXBlXyAqcmV0XwkJCVwKIAkJCQkgICAg
ICAgZ2VuZXJhdG9yX3Bhcm1zX2lubmVyXyhfX1ZBX0FSR1NfXykpOyBcCi0Jc3RhdGljIHZvaWQg
bmFtZV8jI19nZW5lcmF0b3JfXyhnZW5lcmF0b3Jfd3JhcHBlcl9hcmdzXygpKQlcCisJc3RhdGlj
IHZvaWQgbmFtZV8jI19nZW5lcmF0b3JfXyh2b2lkICpyZXQpCQkJXAogCXsJCQkJCQkJCVwKIAkJ
c3RydWN0IGdlbmVyYXRvcl8gKmdlbjsJCQkJCVwKIAkJVU5ORUVERUQgZ2VuZXJhdG9yX2FyZ3N0
cnVjdF8oX19WQV9BUkdTX18pICphcmdzOwlcCi0JCUNQUE1BR0lDX0lGRUxTRShIQVZFX1BPSU5U
RVJfU0FGRV9NQUtFQ09OVEVYVCkJCVwKLQkJCSgpCQkJCQkJXAotCQkJKHB0cmRpZmZfdCBoaWxv
ID0gKChwdHJkaWZmX3QpaGkgPDwgKDgqc2l6ZW9mKGludCkpKSBcCi0JCQkgCSsgKHB0cmRpZmZf
dClsbzsJCQlcCi0JCQlydHlwZV8gKnJldCA9IChydHlwZV8gKilpbnQycHRyKGhpbG8pOwkJXAot
CQkJQlVJTERfQVNTRVJUKHNpemVvZihzdHJ1Y3QgZ2VuZXJhdG9yXyAqKQlcCi0JCQkJICAgICA8
PSAyKnNpemVvZihpbnQpKTspCQlcCiAJCWdlbiA9IGdlbmVyYXRvcl9zdGF0ZV8ocmV0KTsJCQkJ
XAogCQlhcmdzID0gZ2VuZXJhdG9yX2FyZ3BfKHJldCk7CQkJCVwKIAkJbmFtZV8jI19nZW5lcmF0
b3JfKHJldCBnZW5lcmF0b3JfYXJnc191bnBhY2tfKF9fVkFfQVJHU19fKSk7IFwKIAkJZ2VuLT5j
b21wbGV0ZSA9IHRydWU7CQkJCQlcCi0JCXNldGNvbnRleHQoJmdlbi0+Y2FsbGVyKTsJCQkJXAor
CQljb3JvdXRpbmVfanVtcCgmZ2VuLT5jYWxsZXIpOwkJCQlcCiAJCWFzc2VydCgwKTsJCQkJCQlc
CiAJfQkJCQkJCQkJXAogCXN0b3JhZ2VfIGdlbmVyYXRvcl90KHJ0eXBlXykJCQkJCVwKQEAgLTE4
NCwxMCArMTY4LDggQEAgdm9pZCBnZW5lcmF0b3JfZnJlZV8odm9pZCAqcmV0KTsKICNkZWZpbmUg
Z2VuZXJhdG9yX3lpZWxkKHZhbF8pCQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKIAkJc3RydWN0IGdl
bmVyYXRvcl8gKmdlbl8gPSBnZW5lcmF0b3Jfc3RhdGVfKHJldF8pOwlcCi0JCWludCByYzsJCQkJ
CQkJXAogCQkqKHJldF8pID0gKHZhbF8pOwkJCQkJXAotCQlyYyA9IHN3YXBjb250ZXh0KCZnZW5f
LT5nZW4sICZnZW5fLT5jYWxsZXIpOwkJXAotCQlhc3NlcnQocmMgPT0gMCk7CQkJCQlcCisJCWNv
cm91dGluZV9zd2l0Y2goJmdlbl8tPmdlbiwgJmdlbl8tPmNhbGxlcik7CQlcCiAJfSB3aGlsZSAo
MCkKIAogLyoqCkBAIC0yMDIsMTMgKzE4NCwxMSBAQCB2b2lkIGdlbmVyYXRvcl9mcmVlXyh2b2lk
ICpyZXQpOwogc3RhdGljIGlubGluZSB2b2lkICpnZW5lcmF0b3JfbmV4dF8odm9pZCAqcmV0XykK
IHsKIAlzdHJ1Y3QgZ2VuZXJhdG9yXyAqZ2VuID0gZ2VuZXJhdG9yX3N0YXRlXyhyZXRfKTsKLQlp
bnQgcmM7CiAKIAlpZiAoZ2VuLT5jb21wbGV0ZSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyYyA9IHN3
YXBjb250ZXh0KCZnZW4tPmNhbGxlciwgJmdlbi0+Z2VuKTsKLQlhc3NlcnQocmMgPT0gMCk7CisJ
Y29yb3V0aW5lX3N3aXRjaCgmZ2VuLT5jYWxsZXIsICZnZW4tPmdlbik7CiAKIAlyZXR1cm4gZ2Vu
LT5jb21wbGV0ZSA/IE5VTEwgOiByZXRfOwogfQpAQCAtMjM0LDYgKzIxNCw3IEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCAqZ2VuZXJhdG9yX25leHRfKHZvaWQgKnJldF8pCiAJfSkKIAogI2RlZmluZSBn
ZW5lcmF0b3JfZnJlZShnZW5fKQkJCQkJXAotCWdlbmVyYXRvcl9mcmVlXygoZ2VuZXJhdG9yX3J0
eXBlXyhnZW5fKSAqKShnZW5fKSkKKwlnZW5lcmF0b3JfZnJlZV8oKGdlbmVyYXRvcl9ydHlwZV8o
Z2VuXykgKikoZ2VuXyksCVwKKwkJCXNpemVvZihnZW5lcmF0b3JfcnR5cGVfKGdlbl8pKSkKIAog
I2VuZGlmIC8qIENDQU5fR0VORVJBVE9SX0ggKi8KLS0gCjIuOS4zCgpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpjY2FuIG1haWxpbmcgbGlzdApjY2FuQGxp
c3RzLm96bGFicy5vcmcKaHR0cHM6Ly9saXN0cy5vemxhYnMub3JnL2xpc3RpbmZvL2NjYW4K