On Mon, Oct 7, 2024 at 3:16 PM David Wei <dw@xxxxxxxxxxx> wrote: > > From: Pavel Begunkov <asml.silence@xxxxxxxxx> > > Currently net_iov stores a pointer to struct dmabuf_genpool_chunk_owner, > which serves as a useful abstraction to share data and provide a > context. However, it's too devmem specific, and we want to reuse it for > other memory providers, and for that we need to decouple net_iov from > devmem. Make net_iov to point to a new base structure called > net_iov_area, which dmabuf_genpool_chunk_owner extends. Similar feeling to Stan initially. I also thought you'd reuse dmabuf_genpool_chunk_owner. Seems like you're doing that but also renaming it to net_iov_area almost, which seems fine. I guess, with this patch, there is no way to tell, given just a net_iov whether it's dmabuf or something else, right? I wonder if that's an issue. In my mind when an skb is in tcp_recvmsg() we need to make sure it's a dmabuf net_iov specifically to call tcp_recvmsg_dmabuf for example. I'll look deeper here. ... > > static inline struct dmabuf_genpool_chunk_owner * > -net_iov_owner(const struct net_iov *niov) > +net_devmem_iov_to_chunk_owner(const struct net_iov *niov) > { > - return niov->owner; > -} > + struct net_iov_area *owner = net_iov_owner(niov); > > -static inline unsigned int net_iov_idx(const struct net_iov *niov) > -{ > - return niov - net_iov_owner(niov)->niovs; > + return container_of(owner, struct dmabuf_genpool_chunk_owner, area); Couldn't this end up returning garbage if the net_iov is not actually a dmabuf one? Is that handled somewhere in a later patch that I missed? -- Thanks, Mina