SYSENTER based syscalls patch, 2.1.105, RFC

Sergio Bruno Rocha Monteiro (mingo@hal.cobaltmicro.com)
Sat, 13 Jun 1998 08:45:56 -0700 (PDT)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

--151683865-1120416864-897752756=:431
Content-Type: TEXT/PLAIN; charset=US-ASCII

the attached patch implements SYSENTER/SYSEXIT based system calls for P6
type x86 CPUs that support it. (tested only on PII, - K6, PPro anyone?)

with this patch, null-syscall latency got more than halved on PIIs:

[mingo@hal fastcall]$ ./fastcall
(INT $0x80 based getpid(), got pid 497) latency:282 cycles
(SYSENTER based getpid(), got pid 497) latency:138 cycles

on a 266 MHz PII this is 0.51 usecs for a getpid(). (was 1.06 usecs)

the interface is binary compatible, glibc support with auto-detection is
in the works (being worked on by Richard Hendersson).

At first sight it looks like as if schedule() got slower by loading the
MSR in switch_to(), but actually scheduling times get faster, because no
matter how we get into schedule(), we have done it through some syscall
interface ...

the implementation has a few FIXME's, but is more or less equivalent to
the final version. (performance-wise)

i've attached some small testcode too which demonstrates the new syscall
interface, compile it with:

gcc -fomit-frame-pointer -o fastcall fastcall.c

enjoy, reports/comments/suggestions welcome.

-- mingo

--151683865-1120416864-897752756=:431
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="fastcall-2.1.105-B"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.96.980613084556.431C@hal.cobaltmicro.com>
Content-Description:

LS0tIC4vaW5jbHVkZS9hc20taTM4Ni9zeXN0ZW0uaC5vcmlnCVNhdCBKdW4g
MTMgMDc6NTM6MjQgMTk5OA0KKysrIC4vaW5jbHVkZS9hc20taTM4Ni9zeXN0
ZW0uaAlTYXQgSnVuIDEzIDA3OjU3OjAwIDE5OTgNCkBAIC01Miw3ICs1Miwx
MCBAQA0KICAqIEl0IGFsc28gcmVsb2FkcyB0aGUgZGVidWcgcmVncyBpZiBu
ZWNlc3NhcnkuLg0KICAqLw0KIA0KLSANCisjZGVmaW5lIExPQURfRkFTVFNZ
UyBcDQorIF9fYXNtX18gX192b2xhdGlsZV9fKCJ3cm1zciIgOiA6IFwNCisJ
ImMiICgweDE3NSksICJhIiAoKGludCkobmV4dCkgKyAyKlBBR0VfU0laRSks
ICJkIiAoMCkpDQorDQogI2lmZGVmIF9fU01QX18NCiAJLyoNCiAJICoJS2Vl
cCB0aGUgbG9jayBkZXB0aCBzdHJhaWdodC4gSWYgd2Ugc3dpdGNoIG9uIGFu
IGludGVycnVwdCBmcm9tDQpAQCAtNzYsNiArNzksNyBAQA0KIAkJX19hc21f
XyBfX3ZvbGF0aWxlX18oImZ3YWl0Iik7IFwNCiAJCXByZXYtPmZsYWdzJj1+
UEZfVVNFREZQVTsJIFwNCiAJfSBcDQorCUxPQURfRkFTVFNZUzsgXA0KIF9f
YXNtX18oImxqbXAgJTBcblx0IiBcDQogCTogLyogbm8gb3V0cHV0ICovIFwN
CiAJOiJtIiAoKigoKGNoYXIgKikmbmV4dC0+dHNzLnRyKS00KSksIFwNCkBA
IC05Myw2ICs5Nyw3IEBADQogDQogI2Vsc2UNCiAjZGVmaW5lIHN3aXRjaF90
byhwcmV2LG5leHQpIGRvIHsgXA0KKwlMT0FEX0ZBU1RTWVM7IFwNCiBfX2Fz
bV9fKCJsam1wICUwXG5cdCIgXA0KIAkiY21wbCAlMSwiU1lNQk9MX05BTUVf
U1RSKGxhc3RfdGFza191c2VkX21hdGgpIlxuXHQiIFwNCiAJImpuZSAxZlxu
XHQiIFwNCi0tLSAuL2FyY2gvaTM4Ni9rZXJuZWwvZW50cnkuUy5vcmlnCVR1
ZSBNYXkgMTIgMTM6MTM6MTUgMTk5OA0KKysrIC4vYXJjaC9pMzg2L2tlcm5l
bC9lbnRyeS5TCVNhdCBKdW4gMTMgMDg6NDA6MTQgMTk5OA0KQEAgLTEsNyAr
MSw3IEBADQogLyoNCiAgKiAgbGludXgvYXJjaC9pMzg2L2VudHJ5LlMNCiAg
Kg0KLSAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZh
bGRzDQorICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5OCAgTGlu
dXMgVG9ydmFsZHMsIEluZ28gTW9sbmFyDQogICovDQogDQogLyoNCkBAIC05
NCw3ICs5NCw3IEBADQogCW1vdmwgJWR4LCVkczsgXA0KIAltb3ZsICVkeCwl
ZXM7DQogDQotI2RlZmluZSBSRVNUT1JFX0FMTCBcDQorI2RlZmluZSBSRVNU
T1JFX0FMTF9SRUdTIFwNCiAJcG9wbCAlZWJ4OyBcDQogCXBvcGwgJWVjeDsg
XA0KIAlwb3BsICVlZHg7IFwNCkBAIC0xMDQsOSArMTA0LDE4IEBADQogCXBv
cGwgJWVheDsgXA0KIAlwb3BsICVkczsgXA0KIAlwb3BsICVlczsgXA0KLQlh
ZGRsICQ0LCVlc3A7IFwNCisJYWRkbCAkNCwlZXNwOw0KKw0KKyNkZWZpbmUg
UkVTVE9SRV9BTEwgXA0KKwlSRVNUT1JFX0FMTF9SRUdTIFwNCiAJaXJldA0K
IA0KKyNkZWZpbmUgUkVTVE9SRV9BTExfRkFTVFNZUyBcDQorCVJFU1RPUkVf
QUxMX1JFR1MgXA0KKwltb3ZsICVlYnAsICVlY3g7IFwNCisJbW92bCAoJWVi
cCksICVlZHg7IFwNCisJLmJ5dGUgMHgwZiwgMHgzNTsNCisNCiAjZGVmaW5l
IEdFVF9DVVJSRU5UKHJlZykgXA0KIAltb3ZsICVlc3AsIHJlZzsgXA0KIAlh
bmRsICQtODE5MiwgcmVnOw0KQEAgLTEzOSw2ICsxNDgsOTIgQEANCiAJYnRy
bAkkMCwgU1lNQk9MX05BTUUoc2NoZWR1bGVyX2xvY2spDQogCWptcAlyZXRf
ZnJvbV9zeXNfY2FsbA0KICNlbmRpZiAvKiBfX1NNUF9fICovDQorDQorRU5U
UlkoZmFzdF9zeXN0ZW1fY2FsbCkNCisNCisvKg0KKyAqICVlYnAgaGFzIHRo
ZSBjYWxsZXIncyBzdGFjaywgZmlyc3QgZW50cnkgb24gdGhlIHN0YWNrIGlz
IHRoZQ0KKyAqIHJldHVybiBlaXAgLi4uIHVnbHkgYnV0IHdlIGhhdmUgdG8g
ZG8gaXQgdGhpcyB3YXkgZHVlIHRvDQorICogdGhlIChvbmx5PykgNSBwYXJh
bWV0ZXIgc3lzdGVtIGNhbGwgc2VsZWN0KCkNCisgKi8NCisNCisJc3RpCQkJ
CSMgdWdoISBTWVNFTlRFUiBkaXNhYmxlcyBJUlFzDQorDQorCXB1c2hsICVl
YXgJCQkjIHNhdmUgb3JpZ19lYXgNCisJU0FWRV9BTEwNCisNCisJIw0KKwkj
IHZhbGlkYXRlIHRoZSB1c2VyIHByb3ZpZGVkIHJldHVybiBzdGFjay1wb2lu
dGVyIGFuZCBFSVANCisJIyBfYmVmb3JlXyB3ZSBleGVjdXRlIHRoZSBzeXN0
ZW0gY2FsbC4NCisJIw0KKw0KKwlHRVRfQ1VSUkVOVCglZWJ4KQ0KKw0KKyNp
ZiAwDQorLyoNCisgKiBGSVhNRTogdXNlci1zcGFjZSBhY2Nlc3MsIGFkZCBl
eGNlcHRpb24gY29kZQ0KKyAqLw0KKwljbXBsICAlZWJwLCBhZGRyX2xpbWl0
KCVlYngpDQorCWpnZSAgIGJhZGZhc3RzeXMNCisJbW92bCAgKCVlYnApLCAl
ZWR4Ow0KKwljbXBsICAlZWR4LCBhZGRyX2xpbWl0KCVlYngpDQorCWpnZSAg
IGJhZGZhc3RzeXMNCisjZW5kaWYNCisJY21wbCAgJChOUl9zeXNjYWxscyks
JWVheA0KKwlqYWUgICBiYWRmYXN0c3lzDQorDQorCXRlc3RiICQweDIwLGZs
YWdzKCVlYngpCQkjIFBGX1RSQUNFU1lTDQorCWpuZSB0cmFjZWZhc3RzeXMN
CisJY2FsbCAqU1lNQk9MX05BTUUoc3lzX2NhbGxfdGFibGUpKCwlZWF4LDQp
DQorCW1vdmwgJWVheCxFQVgoJWVzcCkJCSMgc2F2ZSB0aGUgcmV0dXJuIHZh
bHVlDQorCUFMSUdODQorCS5nbG9ibCByZXRfZnJvbV9mYXN0c3lzX2NhbGwN
CityZXRfZnJvbV9mYXN0c3lzX2NhbGw6DQorCW1vdmwgU1lNQk9MX05BTUUo
YmhfbWFzayksJWVheA0KKwlhbmRsIFNZTUJPTF9OQU1FKGJoX2FjdGl2ZSks
JWVheA0KKwlqbmUgaGFuZGxlX2JvdHRvbV9oYWxmX2Zhc3RzeXMNCisJY21w
bCAkMCxTWU1CT0xfTkFNRShuZWVkX3Jlc2NoZWQpDQorCWpuZSByZXNjaGVk
dWxlX2Zhc3RzeXMNCisJY21wbCAkMCxzaWdwZW5kaW5nKCVlYngpDQorCWpu
ZSBzaWduYWxfcmV0dXJuX2Zhc3RzeXMNCisJUkVTVE9SRV9BTExfRkFTVFNZ
Uw0KKwlBTElHTg0KK3NpZ25hbF9yZXR1cm5fZmFzdHN5czoNCisJdGVzdGwg
JChWTV9NQVNLKSxFRkxBR1MoJWVzcCkNCisJcHVzaGwgJWVzcA0KKwlqbmUg
djg2X3NpZ25hbF9yZXR1cm5fZmFzdHN5cw0KKwlwdXNobCAkMA0KKwljYWxs
IFNZTUJPTF9OQU1FKGRvX3NpZ25hbCkNCisJYWRkbCAkOCwlZXNwDQorCVJF
U1RPUkVfQUxMX0ZBU1RTWVMNCisJQUxJR04NCit2ODZfc2lnbmFsX3JldHVy
bl9mYXN0c3lzOg0KKwljYWxsIFNZTUJPTF9OQU1FKHNhdmVfdjg2X3N0YXRl
KQ0KKwltb3ZsICVlYXgsJWVzcA0KKwlwdXNobCAlZWF4DQorCXB1c2hsICQw
DQorCWNhbGwgU1lNQk9MX05BTUUoZG9fc2lnbmFsKQ0KKwlhZGRsICQ4LCVl
c3ANCisJUkVTVE9SRV9BTExfRkFTVFNZUw0KKwlBTElHTg0KK3RyYWNlZmFz
dHN5czoNCisJbW92bCAkLUVOT1NZUyxFQVgoJWVzcCkNCisJY2FsbCBTWU1C
T0xfTkFNRShzeXNjYWxsX3RyYWNlKQ0KKwltb3ZsIE9SSUdfRUFYKCVlc3Ap
LCVlYXgNCisJY2FsbCAqU1lNQk9MX05BTUUoc3lzX2NhbGxfdGFibGUpKCwl
ZWF4LDQpDQorCW1vdmwgJWVheCxFQVgoJWVzcCkJCSMgc2F2ZSB0aGUgcmV0
dXJuIHZhbHVlDQorCWNhbGwgU1lNQk9MX05BTUUoc3lzY2FsbF90cmFjZSkN
CisJam1wIHJldF9mcm9tX2Zhc3RzeXNfY2FsbA0KK2hhbmRsZV9ib3R0b21f
aGFsZl9mYXN0c3lzOg0KKwlwdXNobCAkcmV0X2Zyb21fZmFzdHN5c19jYWxs
DQorCWptcCBTWU1CT0xfTkFNRShkb19ib3R0b21faGFsZikNCisJQUxJR04N
CityZXNjaGVkdWxlX2Zhc3RzeXM6DQorCXB1c2hsICRyZXRfZnJvbV9mYXN0
c3lzX2NhbGwNCisJam1wIFNZTUJPTF9OQU1FKHNjaGVkdWxlKSAgICAjIHRl
c3QNCitiYWRmYXN0c3lzOg0KKwltb3ZsICQtRU5PU1lTLEVBWCglZXNwKQ0K
KwlqbXAgcmV0X2Zyb21fZmFzdHN5c19jYWxsDQogDQogLyoNCiAgKiBSZXR1
cm4gdG8gdXNlciBtb2RlIGlzIG5vdCBhcyBjb21wbGV4IGFzIGFsbCB0aGlz
IGxvb2tzLA0KLS0tIC4vYXJjaC9pMzg2L2tlcm5lbC9tdHJyLmMub3JpZwlU
dWUgSnVuICA5IDIxOjQ5OjE5IDE5OTgNCisrKyAuL2FyY2gvaTM4Ni9rZXJu
ZWwvbXRyci5jCVNhdCBKdW4gMTMgMDM6NTY6MjYgMTk5OA0KQEAgLTEyMDUs
NiArMTIwNSwxMyBAQA0KIF9faW5pdGZ1bmMoaW50IG10cnJfaW5pdCh2b2lk
KSkNCiAjZW5kaWYNCiB7DQorCWV4dGVybiBjaGFyIGZhc3Rfc3lzdGVtX2Nh
bGw7DQorDQorCXByaW50aygiZmFzdHN5cyBpbml0XG4iKTsNCisJd3Jtc3Io
MHgxNzQsIDB4MTAsIDApOw0KKwl3cm1zcigweDE3NSwgMCwgMCk7DQorCXdy
bXNyKDB4MTc2LCAmZmFzdF9zeXN0ZW1fY2FsbCwgMCk7DQorDQogICAgIGlm
ICggIShib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5ICYgWDg2X0ZFQVRV
UkVfTVRSUikgKSByZXR1cm4gMDsNCiAjICBpZiAhZGVmaW5lZChfX1NNUF9f
KSB8fCBkZWZpbmVkKE1PRFVMRSkgDQogICAgIHByaW50aygibXRycjogdiVz
IFJpY2hhcmQgR29vY2ggKHJnb29jaEBhdG5mLmNzaXJvLmF1KVxuIiwgTVRS
Ul9WRVJTSU9OKTsNCg==
--151683865-1120416864-897752756=:431
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="fastcall.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.96.980613084556.431D@hal.cobaltmicro.com>
Content-Description:

I2luY2x1ZGUgPHNpZ25hbC5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5j
bHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8ZmNudGwuaD4NCiNpbmNsdWRl
IDxzY2hlZC5oPg0KDQp1bnNpZ25lZCBpbnQgdDEsdDIsdDMsdDQ7DQoNCnVu
c2lnbmVkIGludCBUSU1FNjQgKHZvaWQpDQp7DQoJdW5zaWduZWQgaW50IGR1
bW15LGxvdzsNCg0KICAgICAgICBfX2FzbV9fKCJyZHRzYyINCiAgICAgICAg
ICAgICAgICA6Ij1hIiAobG93KSwNCiAgICAgICAgICAgICAgICAgIj1kIiAo
ZHVtbXkpKTsNCglyZXR1cm4gbG93Ow0KfQ0KDQppbnQgbWFpbih2b2lkKQ0K
ew0KCWludCBpLCBwaWQ7DQoNCglmb3IgKGk9MDsgaTwxMDA7IGkrKykNCgl7
DQoJCXQxID0gVElNRTY0KCk7DQoNCgkgICAgICAgIGFzbSB2b2xhdGlsZSAo
Ig0KCQkJCW1vdmwgJDIwLCAlJWVheA0KCQkJCWludCAkMHg4MA0KCQkJIjoi
PWEiKHBpZCk6OiJtZW1vcnkiKTsNCg0KCQl0MiA9IFRJTUU2NCgpOw0KDQoJ
fQ0KCWZvciAoaT0wOyBpPDEwMDsgaSsrKQ0KCXsNCgkJdDMgPSBUSU1FNjQo
KTsNCgkJdDQgPSBUSU1FNjQoKTsNCgl9DQoJcHJpbnRmKCIoSU5UICQweDgw
IGJhc2VkIGdldHBpZCgpLCBnb3QgcGlkICVkKSBsYXRlbmN5OiV1IGN5Y2xl
c1xuIiwNCgkJCXBpZCwgdDItdDEtKHQ0LXQzKSk7DQoNCglmb3IgKGk9MDsg
aTwxMDA7IGkrKykNCgl7DQoJCXQxID0gVElNRTY0KCk7DQoNCgkgICAgICAg
IGFzbSB2b2xhdGlsZSAoIg0KCQkJbW92ICQxZiwgJSVlZHg7DQoJCQlwdXNo
bCAlJWVkeA0KCQkJbW92bCAlJWVzcCwgJSVlY3g7DQoJCQltb3ZsICUlZXNw
LCAlJWVicA0KCQkJbW92bCAkMjAsICUlZWF4DQoJCQkuYnl0ZSAweDBmLCAw
eDM0Ow0KCQkxOg0KCQkJcG9wbCAlJWVkeA0KCQkiOiI9YSIocGlkKTo6Im1l
bW9yeSIpOw0KDQoJCXQyID0gVElNRTY0KCk7DQoJfQ0KDQoJcHJpbnRmKCIo
U1lTRU5URVIgIGJhc2VkIGdldHBpZCgpLCBnb3QgcGlkICVkKSBsYXRlbmN5
OiV1IGN5Y2xlc1xuIiwNCgkJcGlkLCB0Mi10MS0odDQtdDMpKTsNCglyZXR1
cm4gMDsNCn0NCg0K
--151683865-1120416864-897752756=:431--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu