From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christopher Zimmermann Subject: SO_TIMESTAMPING fix and design decisions Date: Sat, 19 Sep 2009 19:25:49 +0200 Message-ID: <20090919192549.0735c93a@pundit> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=PGP-SHA1; boundary="Sig_/xrZmRaLEygiX.U=Gp4fFeqD"; protocol="application/pgp-signature" To: netdev@vger.kernel.org Return-path: Received: from moutng.kundenserver.de ([212.227.126.187]:61361 "EHLO moutng.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750832AbZISR0c (ORCPT ); Sat, 19 Sep 2009 13:26:32 -0400 Sender: netdev-owner@vger.kernel.org List-ID: --Sig_/xrZmRaLEygiX.U=Gp4fFeqD Content-Type: multipart/mixed; boundary="MP_/+9/nGkJD_JpcZEHT_h0FVJn" --MP_/+9/nGkJD_JpcZEHT_h0FVJn Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hi,=20 I'm currently working on the SO_TIMESTAMPING feature which is currently=20 pretty much broken. The current status is the following: -tx software timestamps don't work because of a race condition. See=20 commit cd4d8fdad1f1320. -rx software timestamps do work. But they are nothing new. SO_TIMESTAMP[NS] has been available for years. hardware timestamps only work for the Intel igb driver. I have access to=20 two test machines with NICs supported by this driver. -tx hardware timestamps do work. I still have to check what happens when=20 there is high load of packets requesting timestamping. -rx hardware timestamps work only for special PTP (Precision Time=20 Protocol) packets. There exists a HWTSTAMP_FILTER_ALL option to=20 timestamp all packets, but it doesn't work and it will not work. This is=20 due to a problem in the hardware design. The Intel hardware is tuned for=20 PTP (and so is the ioctl interface). Right now I'm trying to fix the software tx timestamps. I see several=20 ways to fix it: -Do skb_get() before calling ops->ndo_start_xmit(). This breaks the=20 wireless stack, because it is incompatible with pskb_expand_head(). -Do skb_clone() and skb_set_owner_w() before calling=20 ops->ndo_start_xmit(). If the driver promises to do timestamping=20 (shtx->in_progress=3D=3D1), then this clone will be abandoned. -> Software= =20 timestamps only as fallback. -Do skb_clone() and skb_set_owner_w() before calling=20 ops->ndo_start_xmit(). Use this to send the software timestamp=20 regardless of what the driver is doing. This results in software=20 timestamps being always generated. Not only as fallback. The drawback is=20 that userspace will eventually have to parse two timestamping messages=20 (only if requested). This is not a big deal. I chose the last option since it is easiest to implement without much=20 interaction with the driver. Patch is attached. Any comments or ideas=20 for a better implementation are welcome. Currently the tx timestamp is returned with the whole packet, including=20 all transport layer headers. I would like to return only the payload,=20 since this would make the interface easier for userspace. There is=20 nothing like a "payload" pointer in the sk_buff. How can I solve this?=20 Add such a pointer? To fix the hardware rx timestamps my idea is to change the ioctl=20 interface, so that it allows userspace to fine tune the relevant=20 hardware registers of the intel controler. This would allow hardware=20 timestamps to be used in other scenarios than just for PTP. I don't know any application which already uses this interface right=20 now. But if there is one it would be easy to fix. In case there appear some other controlers with timestamping support=20 they will either need their own custom interface (if they are similarly=20 limited) or they can just go without the ioctl interface and do hardware=20 timestamping of all received packages if they are not so limited. Could this be a way to go or what would you suggest? Regards,=20 Christopher Zimmermann --MP_/+9/nGkJD_JpcZEHT_h0FVJn Content-Type: application/octet-stream; name=patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=patch Y29tbWl0IGZlN2IzMDdhYjM3NGE0OTVmZWJhOGM5NTFmYjdkYTI1MThhNGU0MjIKQXV0aG9yOiBD aHJpc3RvcGhlciBaaW1tZXJtYW5uIDxtYWRyb2FjaEB6YWt3ZWIuZGU+CkRhdGU6ICAgU2F0IFNl cCAxOSAxOToyMToyOCAyMDA5ICswMjAwCgogICAgbmV0OiBJbXBsZW1lbnQgdGltZXN0YW1waW5n CiAgICAKICAgIEF2b2lkIHRoZSBza2JfY2xvbmUsIHNrYl9ob2xkIGFuZCBzb2Z0d2FyZSBmYWxs YmFjayBwcm9ibGVtcyBieQogICAgcmV0dXJuaW5nIHR3byBzZXBlcmF0ZSBtZXNzYWdlcyB0byB1 c2Vyc3BhY2UuIE9uZSBmb3Igc29mdHdhcmUgYW5kIG9uZQogICAgZm9yIGhhcmR3YXJlIHRpbWVz dGFtcC4KCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYyBiL2RyaXZlcnMv bmV0L2lnYi9pZ2JfbWFpbi5jCmluZGV4IGQyNjM5YzQuLjFiZGNlOTUgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5j CkBAIC00NDM1LDcgKzQ0MzUsNyBAQCBzdGF0aWMgdm9pZCBpZ2JfdHhfaHd0c3RhbXAoc3RydWN0 IGlnYl9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkJc2hod3RzdGFt cHMuaHd0c3RhbXAgPSBuc190b19rdGltZShucyk7CiAJCQlzaGh3dHN0YW1wcy5zeXN0c3RhbXAg PQogCQkJCXRpbWVjb21wYXJlX3RyYW5zZm9ybSgmYWRhcHRlci0+Y29tcGFyZSwgbnMpOwotCQkJ c2tiX3RzdGFtcF90eChza2IsICZzaGh3dHN0YW1wcyk7CisJCQlza2JfdHN0YW1wX2h3X3R4KHNr YiwgJnNoaHd0c3RhbXBzKTsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgv c2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IGRmN2IyM2EuLjMxNWE0YzQg MTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKKysrIGIvaW5jbHVkZS9saW51eC9z a2J1ZmYuaApAQCAtMTg2OCw3ICsxODY4LDcgQEAgc3RhdGljIGlubGluZSBrdGltZV90IG5ldF9p bnZhbGlkX3RpbWVzdGFtcCh2b2lkKQogfQogCiAvKioKLSAqIHNrYl90c3RhbXBfdHggLSBxdWV1 ZSBjbG9uZSBvZiBza2Igd2l0aCBzZW5kIHRpbWUgc3RhbXBzCisgKiBza2JfdHN0YW1wX3R4IC0g cXVldWUgY2xvbmUgb2Ygc2tiIHdpdGggaGFyZHdhcmUgc2VuZCB0aW1lIHN0YW1wcwogICogQG9y aWdfc2tiOgl0aGUgb3JpZ2luYWwgb3V0Z29pbmcgcGFja2V0CiAgKiBAaHd0c3RhbXBzOgloYXJk d2FyZSB0aW1lIHN0YW1wcywgbWF5IGJlIE5VTEwgaWYgbm90IGF2YWlsYWJsZQogICoKQEAgLTE4 NzgsOSArMTg3OCwyMSBAQCBzdGF0aWMgaW5saW5lIGt0aW1lX3QgbmV0X2ludmFsaWRfdGltZXN0 YW1wKHZvaWQpCiAgKiBnZW5lcmF0ZXMgYSBzb2Z0d2FyZSB0aW1lIHN0YW1wIChvdGhlcndpc2Up LCB0aGVuIHF1ZXVlcyB0aGUgY2xvbmUKICAqIHRvIHRoZSBlcnJvciBxdWV1ZSBvZiB0aGUgc29j a2V0LiAgRXJyb3JzIGFyZSBzaWxlbnRseSBpZ25vcmVkLgogICovCi1leHRlcm4gdm9pZCBza2Jf dHN0YW1wX3R4KHN0cnVjdCBza19idWZmICpvcmlnX3NrYiwKK2V4dGVybiB2b2lkIHNrYl90c3Rh bXBfaHdfdHgoc3RydWN0IHNrX2J1ZmYgKm9yaWdfc2tiLAogCQkJc3RydWN0IHNrYl9zaGFyZWRf aHd0c3RhbXBzICpod3RzdGFtcHMpOwogCisvKioKKyAqIHNrYl90c3RhbXBfdHggLSBxdWV1ZSBj bG9uZSBvZiBza2Igd2l0aCBzb2Z0d2FyZSBnZW5lcmF0ZWQgc2VuZCB0aW1lIHN0YW1wcworICog QG9yaWdfc2tiOgl0aGUgb3JpZ2luYWwgb3V0Z29pbmcgcGFja2V0CisgKgorICogSWYgdGhlIHNr YiBoYXMgYSBzb2NrZXQgYXNzb2NpYXRlZCwgdGhlbiB0aGlzIGZ1bmN0aW9uIGNsb25lcyB0aGUK KyAqIHNrYiAodGh1cyBzaGFyaW5nIHRoZSBhY3R1YWwgZGF0YSBhbmQgb3B0aW9uYWwgc3RydWN0 dXJlcyksIGdlbmVyYXRlcyBhCisgKiBzb2Z0d2FyZSB0aW1lIHN0YW1wLCB0aGVuIHF1ZXVlcyB0 aGUgY2xvbmUgdG8gdGhlIGVycm9yIHF1ZXVlIG9mIHRoZSBzb2NrZXQuCisgKiBFcnJvcnMgYXJl IHNpbGVudGx5IGlnbm9yZWQuCisgKi8KK2V4dGVybiB2b2lkIHNrYl90c3RhbXBfdHgoc3RydWN0 IHNrX2J1ZmYgKnNrYik7CisJCQkKKwogZXh0ZXJuIF9fc3VtMTYgX19za2JfY2hlY2tzdW1fY29t cGxldGVfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKTsKIGV4dGVybiBfX3N1bTE2 IF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpOwogCmRpZmYgLS1n aXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDU2MGM4YzkuLmMwNGQz ZGQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC0x NzAxLDYgKzE3MDEsMTYgQEAgaW50IGRldl9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYg KnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHsKIAljb25zdCBzdHJ1Y3QgbmV0X2Rldmlj ZV9vcHMgKm9wcyA9IGRldi0+bmV0ZGV2X29wczsKIAlpbnQgcmM7CisJc3RydWN0IHNrX2J1ZmYg KnNrYl90c3RhbXAgPSBOVUxMOworCisJaWYgKHVubGlrZWx5KHNrYl90eChza2IpLT5zb2Z0d2Fy ZSAmJiBza2ItPnNrKSkgeworCQlza2JfdHN0YW1wID0gc2tiX2Nsb25lKHNrYiwgMCk7CisKKwkJ LyogVE9ETzogSXMgYSBzb2NrX2hvbGQoKSBuZWVkZWQgaGVyZT8KKwkJICogc2tiX3NldF9vd25l cl93IGRvZXNuJ3QgZG8gaXQuICovCisJCWlmIChsaWtlbHkoc2tiX3RzdGFtcCkpCisJCSAgICAJ c2tiX3NldF9vd25lcl93KHNrYl90c3RhbXAsIHNrYi0+c2spOworCX0KIAogCWlmIChsaWtlbHko IXNrYi0+bmV4dCkpIHsKIAkJaWYgKCFsaXN0X2VtcHR5KCZwdHlwZV9hbGwpKQpAQCAtMTcyMSw4 ICsxNzMxLDExIEBAIGludCBkZXZfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2Is IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQlza2JfZHN0X2Ryb3Aoc2tiKTsKIAogCQlyYyA9 IG9wcy0+bmRvX3N0YXJ0X3htaXQoc2tiLCBkZXYpOwotCQlpZiAocmMgPT0gTkVUREVWX1RYX09L KQorCQlpZiAocmMgPT0gTkVUREVWX1RYX09LKSB7CisJCQlpZiAodW5saWtlbHkoc2tiX3RzdGFt cCkpCisJCQkJc2tiX3RzdGFtcF90eChza2JfdHN0YW1wKTsKIAkJCXR4cV90cmFuc191cGRhdGUo dHhxKTsKKwkJfQogCQkvKgogCQkgKiBUT0RPOiBpZiBza2Jfb3JwaGFuKCkgd2FzIGNhbGxlZCBi eQogCQkgKiBkZXYtPmhhcmRfc3RhcnRfeG1pdCgpIChmb3IgZXhhbXBsZSwgdGhlIHVubW9kaWZp ZWQKQEAgLTE3NTIsNiArMTc2NSw4IEBAIGdzbzoKIAkJCXNrYi0+bmV4dCA9IG5za2I7CiAJCQly ZXR1cm4gcmM7CiAJCX0KKwkJaWYgKHVubGlrZWx5KHNrYl90c3RhbXApKQorCQkJc2tiX3RzdGFt cF90eChza2JfdHN0YW1wKTsKIAkJdHhxX3RyYW5zX3VwZGF0ZSh0eHEpOwogCQlpZiAodW5saWtl bHkobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpICYmIHNrYi0+bmV4dCkpCiAJCQlyZXR1cm4g TkVUREVWX1RYX0JVU1k7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3Jl L3NrYnVmZi5jCmluZGV4IDgwYTk2MTYuLjE1MTdhNWUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3Nr YnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC0yOTY3LDcgKzI5NjcsNyBAQCBpbnQg c2tiX2Nvd19kYXRhKHN0cnVjdCBza19idWZmICpza2IsIGludCB0YWlsYml0cywgc3RydWN0IHNr X2J1ZmYgKip0cmFpbGVyKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2tiX2Nvd19kYXRhKTsKIAot dm9pZCBza2JfdHN0YW1wX3R4KHN0cnVjdCBza19idWZmICpvcmlnX3NrYiwKK3ZvaWQgc2tiX3Rz dGFtcF9od190eChzdHJ1Y3Qgc2tfYnVmZiAqb3JpZ19za2IsCiAJCXN0cnVjdCBza2Jfc2hhcmVk X2h3dHN0YW1wcyAqaHd0c3RhbXBzKQogewogCXN0cnVjdCBzb2NrICpzayA9IG9yaWdfc2tiLT5z azsKQEAgLTI5ODIsMTcgKzI5ODIsOSBAQCB2b2lkIHNrYl90c3RhbXBfdHgoc3RydWN0IHNrX2J1 ZmYgKm9yaWdfc2tiLAogCWlmICghc2tiKQogCQlyZXR1cm47CiAKLQlpZiAoaHd0c3RhbXBzKSB7 CisJaWYgKGh3dHN0YW1wcykKIAkJKnNrYl9od3RzdGFtcHMoc2tiKSA9CiAJCQkqaHd0c3RhbXBz OwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIG5vIGhhcmR3YXJlIHRpbWUgc3RhbXBzIGF2YWlsYWJs ZSwKLQkJICogc28ga2VlcCB0aGUgc2tiX3NoYXJlZF90eCBhbmQgb25seQotCQkgKiBzdG9yZSBz b2Z0d2FyZSB0aW1lIHN0YW1wCi0JCSAqLwotCQlza2ItPnRzdGFtcCA9IGt0aW1lX2dldF9yZWFs KCk7Ci0JfQogCiAJc2VyciA9IFNLQl9FWFRfRVJSKHNrYik7CiAJbWVtc2V0KHNlcnIsIDAsIHNp emVvZigqc2VycikpOwpAQCAtMzAwMiw2ICsyOTk0LDIzIEBAIHZvaWQgc2tiX3RzdGFtcF90eChz dHJ1Y3Qgc2tfYnVmZiAqb3JpZ19za2IsCiAJaWYgKGVycikKIAkJa2ZyZWVfc2tiKHNrYik7CiB9 CitFWFBPUlRfU1lNQk9MX0dQTChza2JfdHN0YW1wX2h3X3R4KTsKKwordm9pZCBza2JfdHN0YW1w X3R4KHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHNvY2tfZXh0ZXJyX3NrYiAqc2Vy cjsKKwlpbnQgZXJyOworCisJc2tiLT50c3RhbXAgPSBrdGltZV9nZXRfcmVhbCgpOworCisJc2Vy ciA9IFNLQl9FWFRfRVJSKHNrYik7CisJbWVtc2V0KHNlcnIsIDAsIHNpemVvZigqc2VycikpOwor CXNlcnItPmVlLmVlX2Vycm5vID0gRU5PTVNHOworCXNlcnItPmVlLmVlX29yaWdpbiA9IFNPX0VF X09SSUdJTl9USU1FU1RBTVBJTkc7CisJZXJyID0gc29ja19xdWV1ZV9lcnJfc2tiKHNrYi0+c2ss IHNrYik7CisJaWYgKGVycikKKwkJa2ZyZWVfc2tiKHNrYik7Cit9CiBFWFBPUlRfU1lNQk9MX0dQ TChza2JfdHN0YW1wX3R4KTsKIAogCg== --MP_/+9/nGkJD_JpcZEHT_h0FVJn-- --Sig_/xrZmRaLEygiX.U=Gp4fFeqD Content-Type: application/pgp-signature; name=signature.asc Content-Disposition: attachment; filename=signature.asc -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) iEYEARECAAYFAkq1FB0ACgkQET+LZnf0EFyyzQCeJzAhjcV2idZHDVuIUaMSLwuf 4zIAnjkh3qbxeX8qkENDglTbdSitfNk2 =VS8Q -----END PGP SIGNATURE----- --Sig_/xrZmRaLEygiX.U=Gp4fFeqD--