TX bindings use PAGE_SIZE net_iovs, and the TX lookup hard-codes it. Derive the index and offset from binding->niov_shift instead, so TX bindings can use larger net_iovs. No functional change, TX bindings are still created with PAGE_SHIFT. Signed-off-by: Stanislav Fomichev Reviewed-by: Mina Almasry --- net/core/devmem.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/net/core/devmem.c b/net/core/devmem.c index 32fafbfa1359..6339f221bc82 100644 --- a/net/core/devmem.c +++ b/net/core/devmem.c @@ -455,13 +455,15 @@ struct net_iov * net_devmem_get_niov_at(struct net_devmem_dmabuf_binding *binding, size_t virt_addr, size_t *off, size_t *size) { + size_t niov_size = 1UL << binding->niov_shift; + if (virt_addr >= binding->dmabuf->size) return NULL; - *off = virt_addr % PAGE_SIZE; - *size = PAGE_SIZE - *off; + *off = virt_addr & (niov_size - 1); + *size = niov_size - *off; - return binding->tx_vec[virt_addr / PAGE_SIZE]; + return binding->tx_vec[virt_addr >> binding->niov_shift]; } /*** "Dmabuf devmem memory provider" ***/ -- 2.53.0-Meta