Page MenuHomeFreeBSD

D60602.1794382927.diff
No OneTemporary

Authored By
Unknown
Size
1 KB
Referenced Files
None
Subscribers
None

D60602.1794382927.diff

diff --git a/FreeBSD/sys/net/iflib.c b/FreeBSD/sys/net/iflib.c
--- a/FreeBSD/sys/net/iflib.c
+++ b/FreeBSD/sys/net/iflib.c
@@ -916,6 +916,21 @@
return (scctx->isc_ntxd[first_txq]);
}
+static __inline void
+prefetch(void *x)
+{
+ __builtin_prefetch(x);
+}
+
+static __inline void
+prefetch2cachelines(void *x)
+{
+ prefetch(x);
+#if (CACHE_LINE_SIZE < 128)
+ prefetch((char *)x + CACHE_LINE_SIZE);
+#endif
+}
+
#ifdef DEV_NETMAP
#include <sys/selinfo.h>
#include <net/netmap.h>
@@ -1198,9 +1213,9 @@
pi.ipi_qsidx = kring->ring_id;
nic_i = netmap_idx_k2n(kring, nm_i);
- __builtin_prefetch(&ring->slot[nm_i]);
- __builtin_prefetch(&txq->ift_sds.ifsd_m[nic_i]);
- __builtin_prefetch(&txq->ift_sds.ifsd_map[nic_i]);
+ prefetch(&ring->slot[nm_i]);
+ prefetch(&txq->ift_sds.ifsd_m[nic_i]);
+ prefetch(&txq->ift_sds.ifsd_map[nic_i]);
while (nm_i != head) {
struct netmap_slot *slot = &ring->slot[nm_i];
@@ -1248,9 +1263,9 @@
}
/* prefetch for next round */
- __builtin_prefetch(&ring->slot[nm_i + 1]);
- __builtin_prefetch(&txq->ift_sds.ifsd_m[nic_i + 1]);
- __builtin_prefetch(&txq->ift_sds.ifsd_map[nic_i + 1]);
+ prefetch(&ring->slot[nm_i + 1]);
+ prefetch(&txq->ift_sds.ifsd_m[nic_i + 1]);
+ prefetch(&txq->ift_sds.ifsd_map[nic_i + 1]);
NM_CHECK_ADDR_LEN_OFF(na, len, offset);
@@ -1552,33 +1567,6 @@
#define netmap_rx_irq(ifp, qid, budget) (0)
#endif
-#if defined(__i386__) || defined(__amd64__)
-static __inline void
-prefetch(void *x)
-{
- __asm volatile("prefetcht0 %0" :: "m" (*(unsigned long *)x));
-}
-
-static __inline void
-prefetch2cachelines(void *x)
-{
- __asm volatile("prefetcht0 %0" :: "m" (*(unsigned long *)x));
-#if (CACHE_LINE_SIZE < 128)
- __asm volatile("prefetcht0 %0" :: "m" (*(((unsigned long *)x) + CACHE_LINE_SIZE / (sizeof(unsigned long)))));
-#endif
-}
-#else
-static __inline void
-prefetch(void *x)
-{
-}
-
-static __inline void
-prefetch2cachelines(void *x)
-{
-}
-#endif
-
static void
iru_init(if_rxd_update_t iru, iflib_rxq_t rxq, uint8_t flid)
{

File Metadata

Mime Type
text/plain
Expires
Wed, Nov 11, 7:42 AM (3 h, 31 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
40631940
Default Alt Text
D60602.1794382927.diff (1 KB)

Event Timeline