pagemap: print page regions in the format start - end

During investigations, it’s much easier to read logs when regions are
printed in the start - end format rather than `start/size`.

In addition, all page counters and memory sizes are now printed in
hexadecimal, as they are hard to read in decimal form.

Signed-off-by: Andrei Vagin <avagin@gmail.com>
This commit is contained in:
Andrei Vagin 2025-09-19 15:10:25 +00:00 committed by Andrei Vagin
parent 7e0da4d975
commit 2e26b36d44
4 changed files with 19 additions and 15 deletions

View file

@ -87,7 +87,8 @@ static int cr_dedup_one_pagemap(unsigned long img_id, int flags)
if (ret <= 0)
goto exit;
pr_debug("dedup iovec base=%" PRIx64 ", len=%lu\n", pr.pe->vaddr, pagemap_len(pr.pe));
pr_debug("dedup iovec %" PRIx64 " - %" PRIx64 "\n",
pr.pe->vaddr, pr.pe->vaddr + pagemap_len(pr.pe));
if (!pagemap_in_parent(pr.pe)) {
ret = dedup_one_iovec(prp, pr.pe->vaddr, pagemap_len(pr.pe));
if (ret)

View file

@ -446,17 +446,17 @@ void debug_show_page_pipe(struct page_pipe *pp)
pr_debug("Page pipe:\n");
pr_debug("* %u pipes %u/%u iovs:\n", pp->nr_pipes, pp->free_iov, pp->nr_iovs);
list_for_each_entry(ppb, &pp->bufs, l) {
pr_debug("\tbuf %lu pages, %u iovs, flags: %x pipe_off: %lx :\n", ppb->pages_in, ppb->nr_segs, ppb->flags,
pr_debug("\tbuf %lx pages, %u iovs, flags: %x pipe_off: %lx :\n", ppb->pages_in, ppb->nr_segs, ppb->flags,
ppb->pipe_off);
for (i = 0; i < ppb->nr_segs; i++) {
iov = &ppb->iov[i];
pr_debug("\t\t%p %lu\n", iov->iov_base, iov->iov_len / PAGE_SIZE);
pr_debug("\t\t%p - %p\n", iov->iov_base, iov->iov_base + iov->iov_len);
}
}
pr_debug("* %u holes:\n", pp->free_hole);
for (i = 0; i < pp->free_hole; i++) {
iov = &pp->holes[i];
pr_debug("\t%p %lu\n", iov->iov_base, iov->iov_len / PAGE_SIZE);
pr_debug("\t%p - %p\n", iov->iov_base, iov->iov_base + iov->iov_len);
}
}

View file

@ -178,12 +178,12 @@ static int write_pages_to_server(struct page_xfer *xfer, int p, unsigned long le
ssize_t ret, left = len;
if (opts.tls) {
pr_debug("Sending %lu bytes / %lu pages\n", len, len / PAGE_SIZE);
pr_debug("Sending %lx bytes\n", len);
if (tls_send_data_from_fd(p, len))
return -1;
} else {
pr_debug("Splicing %lu bytes / %lu pages into socket\n", len, len / PAGE_SIZE);
pr_debug("Splicing %lx bytes into socket\n", len);
while (left > 0) {
ret = splice(p, NULL, xfer->sk, NULL, left, SPLICE_F_MOVE);
@ -192,7 +192,7 @@ static int write_pages_to_server(struct page_xfer *xfer, int p, unsigned long le
return -1;
}
pr_debug("\tSpliced: %lu bytes sent\n", (unsigned long)ret);
pr_debug("\tSpliced: %lx bytes sent\n", (unsigned long)ret);
left -= ret;
}
}
@ -288,7 +288,7 @@ static int check_pagehole_in_parent(struct page_read *p, struct iovec *iov)
* read_pagemap_page routine.
*/
pr_debug("Checking %p/%zu hole\n", iov->iov_base, iov->iov_len);
pr_debug("Checking %p - %p hole\n", iov->iov_base, iov->iov_base + iov->iov_len);
off = (unsigned long)iov->iov_base;
end = off + iov->iov_len;
while (1) {
@ -300,7 +300,8 @@ static int check_pagehole_in_parent(struct page_read *p, struct iovec *iov)
return -1;
}
pr_debug("\tFound %" PRIx64 "/%lu\n", p->pe->vaddr, pagemap_len(p->pe));
pr_debug("\tFound %" PRIx64 " - %" PRIx64 "\n",
p->pe->vaddr, p->pe->vaddr + pagemap_len(p->pe));
/*
* The pagemap entry in parent may happen to be
@ -340,7 +341,8 @@ static int write_pagemap_loc(struct page_xfer *xfer, struct iovec *iov, u32 flag
if (xfer->parent != NULL) {
ret = check_pagehole_in_parent(xfer->parent, iov);
if (ret) {
pr_err("Hole %p/%zu not found in parent\n", iov->iov_base, iov->iov_len);
pr_err("Hole %p - %p not found in parent\n",
iov->iov_base, iov->iov_base + iov->iov_len);
return -1;
}
}
@ -850,7 +852,7 @@ int page_xfer_predump_pages(int pid, struct page_xfer *xfer, struct page_pipe *p
BUG_ON(iov.iov_base < (void *)xfer->offset);
iov.iov_base -= xfer->offset;
pr_debug("\t p %p [%u]\n", iov.iov_base, (unsigned int)(iov.iov_len / PAGE_SIZE));
pr_debug("\t p %p - %p\n", iov.iov_base, iov.iov_base + iov.iov_len);
flags = ppb_xfer_flags(xfer, ppb);
@ -886,7 +888,7 @@ int page_xfer_dump_pages(struct page_xfer *xfer, struct page_pipe *pp)
list_for_each_entry(ppb, &pp->bufs, l) {
unsigned int i;
pr_debug("\tbuf %ld/%d\n", ppb->pages_in, ppb->nr_segs);
pr_debug("\tbuf %lx/%d\n", ppb->pages_in, ppb->nr_segs);
for (i = 0; i < ppb->nr_segs; i++) {
struct iovec iov = ppb->iov[i];
@ -898,7 +900,7 @@ int page_xfer_dump_pages(struct page_xfer *xfer, struct page_pipe *pp)
BUG_ON(iov.iov_base < (void *)xfer->offset);
iov.iov_base -= xfer->offset;
pr_debug("\tp %p [%u]\n", iov.iov_base, (unsigned int)(iov.iov_len / PAGE_SIZE));
pr_debug("\tp %p - %p\n", iov.iov_base, iov.iov_base + iov.iov_len);
flags = ppb_xfer_flags(xfer, ppb);
@ -1071,7 +1073,8 @@ static int page_server_add(int sk, struct page_server_iov *pi, u32 flags)
struct page_xfer *lxfer = &cxfer.loc_xfer;
struct iovec iov;
pr_debug("Adding %" PRIx64 "/%lu\n", pi->vaddr, pi->nr_pages);
pr_debug("Adding %" PRIx64 " - %" PRIx64 "\n",
pi->vaddr, pi->vaddr + pi->nr_pages * PAGE_SIZE);
if (prep_loc_xfer(pi))
return -1;

View file

@ -171,7 +171,7 @@ static int seek_pagemap(struct page_read *pr, unsigned long vaddr)
static inline void pagemap_bound_check(PagemapEntry *pe, unsigned long vaddr, unsigned long int nr)
{
if (vaddr < pe->vaddr || (vaddr - pe->vaddr) / PAGE_SIZE + nr > pe->nr_pages) {
pr_err("Page read err %" PRIx64 ":%lu vs %lx:%lu\n", pe->vaddr, pe->nr_pages, vaddr, nr);
pr_err("Page read err %" PRIx64 ":%lx vs %lx:%lx\n", pe->vaddr, pe->nr_pages, vaddr, nr);
BUG();
}
}