diff options
author | Christian Mauderer <christian.mauderer@embedded-brains.de> | 2020-05-27 13:49:08 +0200 |
---|---|---|
committer | Christian Mauderer <christian.mauderer@embedded-brains.de> | 2020-07-29 11:19:24 +0200 |
commit | 4a05b2e41cd660413f68ec9b52e154efd6710f41 (patch) | |
tree | 3d3bb0cc16f6363ca91b768949c51f86a717f516 | |
parent | 828969e52502d695ba294ab3827c9b81c85034d0 (diff) |
if_ffec: Align send buffers to cache if necessary.
-rw-r--r-- | freebsd/sys/dev/ffec/if_ffec.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/freebsd/sys/dev/ffec/if_ffec.c b/freebsd/sys/dev/ffec/if_ffec.c index aee2aa64..e8287ed2 100644 --- a/freebsd/sys/dev/ffec/if_ffec.c +++ b/freebsd/sys/dev/ffec/if_ffec.c @@ -714,8 +714,16 @@ ffec_encap(struct ifnet *ifp, struct ffec_softc *sc, struct mbuf *m0, tx_desc->buf_paddr = segs[i].ds_addr; tx_desc->flags2 = flags2; #ifdef __rtems__ - rtems_cache_flush_multiple_data_lines((void *)segs[i].ds_addr, - segs[i].ds_len); + uintptr_t addr_flush = (uintptr_t)segs[i].ds_addr; + size_t len_flush = segs[i].ds_len; +#ifdef CPU_CACHE_LINE_BYTES + /* mbufs should be cache line aligned. So we can just round. */ + addr_flush = addr_flush & ~(CPU_CACHE_LINE_BYTES - 1); + len_flush = (len_flush + (CPU_CACHE_LINE_BYTES - 1)) & + ~(CPU_CACHE_LINE_BYTES - 1); +#endif + rtems_cache_flush_multiple_data_lines((void*)addr_flush, + len_flush); #endif /* __rtems__ */ if (i == 0) { |