diff for duplicates of <200608190109.15129.arnd@arndb.de> diff --git a/a/1.txt b/N1/1.txt index eb9c720..d192b61 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -1,22 +1,33 @@ -T24gU2F0dXJkYXkgMTkgQXVndXN0IDIwMDYgMDA6MjEsIExpbmFzIFZlcHN0YXMgd3JvdGU6Cj4g -K6CgoKCgoKAvKiBNZWFzdXJlIHRoZSBsZW5ndGggb2YgdGhlIHF1ZXVlLiAqLwo+ICugoKCgoKCg -d2hpbGUgKGRlc2NyICE9IGNhcmQtPnR4X2NoYWluLmhlYWQpIHsKPiAroKCgoKCgoKCgoKCgoKCg -c3RhdHVzID0gZGVzY3ItPmRtYWNfY21kX3N0YXR1cyAmIFNQSURFUl9ORVRfREVTQ1JfTk9UX0lO -X1VTRTsKPiAroKCgoKCgoKCgoKCgoKCgaWYgKHN0YXR1cyA9PSBTUElERVJfTkVUX0RFU0NSX05P -VF9JTl9VU0UpCj4gK6CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgYnJlYWs7Cj4gK6CgoKCgoKCgoKCg -oKCgoGRlc2NyID0gZGVzY3ItPm5leHQ7Cj4gK6CgoKCgoKCgoKCgoKCgoGNudCsrOwo+ICugoKCg -oKCgfQo+ICugoKCgoKCgaWYgKGNudCA9PSAwKQo+ICugoKCgoKCgoKCgoKCgoKByZXR1cm47Cj4g -Kwo+ICugoKCgoKCgLyogU2V0IGxvdy13YXRlcm1hcmsgMy80dGgncyBvZiB0aGUgd2F5IGludG8g -dGhlIHF1ZXVlLiAqLwo+ICugoKCgoKCgZGVzY3IgPSBjYXJkLT50eF9jaGFpbi50YWlsOwo+ICug -oKCgoKCgY250ID0gKGNudCozKS80Owo+ICugoKCgoKCgZm9yIChpPTA7aTxjbnQ7IGkrKykKPiAr -oKCgoKCgoKCgoKCgoKCgZGVzY3IgPSBkZXNjci0+bmV4dDsKCkkgd29uZGVyIGlmIGNhbGxpbmcg -dGhpcyBmcmVxdWVudGx5IHJlc3VsdHMgaW4gYSBzaWduaWZpY2FudCBwcm9jZXNzaW5nCm92ZXJo -ZWFkIGluIHRoZSBDUFUuIERvZXMgdGhlIHNwaWRlcl9uZXRfc2V0X2xvd193YXRlcm1hcmsgZnVu -Y3Rpb24Kc2hvdyB1cCBpbiB5b3VyIHByb2ZpbGVzPwoKQSBtb3JlIGVmZmljaWVudCBpbXBsZW1l -bnRhdGlvbiBtaWdodCBiZSB0byBtYXJrIG9uZSBkZXNjcmlwdG9yIHRoYXQKaXMgYXQgYSBmaXhl -ZCBvZmZzZXQgZnJvbSB0aGUgVFggcXVldWUgdGFpbCwgc28gd2Ugb25seSBuZWVkIHRvIGRvCgpj -YXJkLT5sb3dfd2F0ZXJtYXJrLT5uZXh0LT5kbWFjX2NtZF9zdGF0dXMgfD0gU1BJREVSX05FVF9E -RVNDUl9UWERFU0ZMRzsKbWIoKTsKY2FyZC0+bG93X3dhdGVybWFyay0+ZG1hY19jbWRfc3RhdHVz -ICY9IH5TUElERVJfTkVUX0RFU0NSX1RYREVTRkxHOwpjYXJkLT5sb3dfd2F0ZXJtYXJrID0gY2Fy -ZC0+bG93X3dhdGVybWFyay0+bmV4dDsKCndoZW4gd2UgcXVldWUgYW5vdGhlciBmcmFtZSBmb3Ig -VFguCgoJQXJuZCA8PjwK +On Saturday 19 August 2006 00:21, Linas Vepstas wrote: +> + /* Measure the length of the queue. */ +> + while (descr != card->tx_chain.head) { +> + status = descr->dmac_cmd_status & SPIDER_NET_DESCR_NOT_IN_USE; +> + if (status == SPIDER_NET_DESCR_NOT_IN_USE) +> + break; +> + descr = descr->next; +> + cnt++; +> + } +> + if (cnt == 0) +> + return; +> + +> + /* Set low-watermark 3/4th's of the way into the queue. */ +> + descr = card->tx_chain.tail; +> + cnt = (cnt*3)/4; +> + for (i=0;i<cnt; i++) +> + descr = descr->next; + +I wonder if calling this frequently results in a significant processing +overhead in the CPU. Does the spider_net_set_low_watermark function +show up in your profiles? + +A more efficient implementation might be to mark one descriptor that +is at a fixed offset from the TX queue tail, so we only need to do + +card->low_watermark->next->dmac_cmd_status |= SPIDER_NET_DESCR_TXDESFLG; +mb(); +card->low_watermark->dmac_cmd_status &= ~SPIDER_NET_DESCR_TXDESFLG; +card->low_watermark = card->low_watermark->next; + +when we queue another frame for TX. + + Arnd <>< diff --git a/a/content_digest b/N1/content_digest index 4273c80..b3cde06 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -12,27 +12,38 @@ " ens Osterkamp <Jens.Osterkamp@de.ibm.com>\0" "\00:1\0" "b\0" - "T24gU2F0dXJkYXkgMTkgQXVndXN0IDIwMDYgMDA6MjEsIExpbmFzIFZlcHN0YXMgd3JvdGU6Cj4g\n" - "K6CgoKCgoKAvKiBNZWFzdXJlIHRoZSBsZW5ndGggb2YgdGhlIHF1ZXVlLiAqLwo+ICugoKCgoKCg\n" - "d2hpbGUgKGRlc2NyICE9IGNhcmQtPnR4X2NoYWluLmhlYWQpIHsKPiAroKCgoKCgoKCgoKCgoKCg\n" - "c3RhdHVzID0gZGVzY3ItPmRtYWNfY21kX3N0YXR1cyAmIFNQSURFUl9ORVRfREVTQ1JfTk9UX0lO\n" - "X1VTRTsKPiAroKCgoKCgoKCgoKCgoKCgaWYgKHN0YXR1cyA9PSBTUElERVJfTkVUX0RFU0NSX05P\n" - "VF9JTl9VU0UpCj4gK6CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgYnJlYWs7Cj4gK6CgoKCgoKCgoKCg\n" - "oKCgoGRlc2NyID0gZGVzY3ItPm5leHQ7Cj4gK6CgoKCgoKCgoKCgoKCgoGNudCsrOwo+ICugoKCg\n" - "oKCgfQo+ICugoKCgoKCgaWYgKGNudCA9PSAwKQo+ICugoKCgoKCgoKCgoKCgoKByZXR1cm47Cj4g\n" - "Kwo+ICugoKCgoKCgLyogU2V0IGxvdy13YXRlcm1hcmsgMy80dGgncyBvZiB0aGUgd2F5IGludG8g\n" - "dGhlIHF1ZXVlLiAqLwo+ICugoKCgoKCgZGVzY3IgPSBjYXJkLT50eF9jaGFpbi50YWlsOwo+ICug\n" - "oKCgoKCgY250ID0gKGNudCozKS80Owo+ICugoKCgoKCgZm9yIChpPTA7aTxjbnQ7IGkrKykKPiAr\n" - "oKCgoKCgoKCgoKCgoKCgZGVzY3IgPSBkZXNjci0+bmV4dDsKCkkgd29uZGVyIGlmIGNhbGxpbmcg\n" - "dGhpcyBmcmVxdWVudGx5IHJlc3VsdHMgaW4gYSBzaWduaWZpY2FudCBwcm9jZXNzaW5nCm92ZXJo\n" - "ZWFkIGluIHRoZSBDUFUuIERvZXMgdGhlIHNwaWRlcl9uZXRfc2V0X2xvd193YXRlcm1hcmsgZnVu\n" - "Y3Rpb24Kc2hvdyB1cCBpbiB5b3VyIHByb2ZpbGVzPwoKQSBtb3JlIGVmZmljaWVudCBpbXBsZW1l\n" - "bnRhdGlvbiBtaWdodCBiZSB0byBtYXJrIG9uZSBkZXNjcmlwdG9yIHRoYXQKaXMgYXQgYSBmaXhl\n" - "ZCBvZmZzZXQgZnJvbSB0aGUgVFggcXVldWUgdGFpbCwgc28gd2Ugb25seSBuZWVkIHRvIGRvCgpj\n" - "YXJkLT5sb3dfd2F0ZXJtYXJrLT5uZXh0LT5kbWFjX2NtZF9zdGF0dXMgfD0gU1BJREVSX05FVF9E\n" - "RVNDUl9UWERFU0ZMRzsKbWIoKTsKY2FyZC0+bG93X3dhdGVybWFyay0+ZG1hY19jbWRfc3RhdHVz\n" - "ICY9IH5TUElERVJfTkVUX0RFU0NSX1RYREVTRkxHOwpjYXJkLT5sb3dfd2F0ZXJtYXJrID0gY2Fy\n" - "ZC0+bG93X3dhdGVybWFyay0+bmV4dDsKCndoZW4gd2UgcXVldWUgYW5vdGhlciBmcmFtZSBmb3Ig\n" - VFguCgoJQXJuZCA8PjwK + "On Saturday 19 August 2006 00:21, Linas Vepstas wrote:\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240/* Measure the length of the queue. */\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240while (descr != card->tx_chain.head) {\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240status = descr->dmac_cmd_status & SPIDER_NET_DESCR_NOT_IN_USE;\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (status == SPIDER_NET_DESCR_NOT_IN_USE)\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240break;\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240descr = descr->next;\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240cnt++;\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240}\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240if (cnt == 0)\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240return;\n" + "> +\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240/* Set low-watermark 3/4th's of the way into the queue. */\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240descr = card->tx_chain.tail;\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240cnt = (cnt*3)/4;\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240for (i=0;i<cnt; i++)\n" + "> +\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240descr = descr->next;\n" + "\n" + "I wonder if calling this frequently results in a significant processing\n" + "overhead in the CPU. Does the spider_net_set_low_watermark function\n" + "show up in your profiles?\n" + "\n" + "A more efficient implementation might be to mark one descriptor that\n" + "is at a fixed offset from the TX queue tail, so we only need to do\n" + "\n" + "card->low_watermark->next->dmac_cmd_status |= SPIDER_NET_DESCR_TXDESFLG;\n" + "mb();\n" + "card->low_watermark->dmac_cmd_status &= ~SPIDER_NET_DESCR_TXDESFLG;\n" + "card->low_watermark = card->low_watermark->next;\n" + "\n" + "when we queue another frame for TX.\n" + "\n" + "\tArnd <><" -1dfb1f20da73b392bc6242404e12e327cfbeb2a837683f058a6f528872e30e27 +0d670a79cbae200725025422d840769a36086e9a077d6eec4fee0a10a024a4a6
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.