> -----Original Message----- > From: Maxime Coquelin <[email protected]> > Sent: Friday, March 31, 2023 11:43 PM > To: [email protected]; [email protected]; Xia, Chenbo > <[email protected]>; [email protected]; [email protected]; > [email protected]; Liang, Cunming <[email protected]>; Xie, Yongji > <[email protected]>; [email protected]; [email protected]; > [email protected] > Cc: Maxime Coquelin <[email protected]>; [email protected] > Subject: [RFC 06/27] vhost: don't dump unneeded pages with IOTLB > > On IOTLB entry removal, previous fixes took care of not > marking pages shared with other IOTLB entries as DONTDUMP. > > However, if an IOTLB entry is spanned on multiple pages, > the other pages were kept as DODUMP while they might not > have been shared with other entries, increasing needlessly > the coredump size. > > This patch addresses this issue by excluding only the > shared pages from madvise's DONTDUMP. > > Fixes: dea092d0addb ("vhost: fix madvise arguments alignment") > Cc: [email protected] > > Signed-off-by: Maxime Coquelin <[email protected]> > --- > lib/vhost/iotlb.c | 21 ++++++++++++++------- > 1 file changed, 14 insertions(+), 7 deletions(-) > > diff --git a/lib/vhost/iotlb.c b/lib/vhost/iotlb.c > index d919f74704..f598c0a8c4 100644 > --- a/lib/vhost/iotlb.c > +++ b/lib/vhost/iotlb.c > @@ -54,16 +54,23 @@ static void > vhost_user_iotlb_clear_dump(struct virtio_net *dev, struct > vhost_iotlb_entry *node, > struct vhost_iotlb_entry *prev, struct vhost_iotlb_entry *next) > { > - uint64_t align; > + uint64_t align, start, end; > + > + start = node->uaddr; > + end = node->uaddr + node->size; > > align = hua_to_alignment(dev->mem, (void *)(uintptr_t)node->uaddr); > > - /* Don't disable coredump if the previous node is in the same page > */ > - if (!vhost_user_iotlb_share_page(prev, node, align)) { > - /* Don't disable coredump if the next node is in the same page > */ > - if (!vhost_user_iotlb_share_page(node, next, align)) > - mem_set_dump((void *)(uintptr_t)node->uaddr, node->size, > false, align); > - } > + /* Skip first page if shared with previous entry. */ > + if (vhost_user_iotlb_share_page(prev, node, align)) > + start = RTE_ALIGN_CEIL(start, align); > + > + /* Skip last page if shared with next entry. */ > + if (vhost_user_iotlb_share_page(node, next, align)) > + end = RTE_ALIGN_FLOOR(end, align); > + > + if (end > start) > + mem_set_dump((void *)(uintptr_t)start, end - start, false, > align); > } > > static struct vhost_iotlb_entry * > -- > 2.39.2
Reviewed-by: Chenbo Xia <[email protected]>

