Message ID | 1714406135-451286-14-git-send-email-steven.sistare@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Live update: cpr-exec | expand |
Steve Sistare <steven.sistare@oracle.com> writes: > Create a common subroutine to allocate a RAMBlock, de-duping the code to > populate its common fields. Add a trace point for good measure. > No functional change. > > Signed-off-by: Steve Sistare <steven.sistare@oracle.com> > --- > system/physmem.c | 47 ++++++++++++++++++++++++++--------------------- > system/trace-events | 3 +++ > 2 files changed, 29 insertions(+), 21 deletions(-) > > diff --git a/system/physmem.c b/system/physmem.c > index c3d04ca..6216b14 100644 > --- a/system/physmem.c > +++ b/system/physmem.c > @@ -52,6 +52,7 @@ > #include "sysemu/hw_accel.h" > #include "sysemu/xen-mapcache.h" > #include "trace/trace-root.h" > +#include "trace.h" > > #ifdef CONFIG_FALLOCATE_PUNCH_HOLE > #include <linux/falloc.h> > @@ -1918,11 +1919,29 @@ out_free: > } > } > > +static RAMBlock *ram_block_create(MemoryRegion *mr, ram_addr_t size, > + ram_addr_t max_size, uint32_t ram_flags) > +{ > + RAMBlock *rb = g_malloc0(sizeof(*rb)); > + > + rb->used_length = size; > + rb->max_length = max_size; > + rb->fd = -1; > + rb->flags = ram_flags; > + rb->page_size = qemu_real_host_page_size(); > + rb->mr = mr; > + rb->guest_memfd = -1; > + trace_ram_block_create(rb->idstr, rb->flags, rb->fd, rb->used_length, There's no idstr at this point, is there? I think this needs to be memory_region_name(mr). > + rb->max_length, mr->align); > + return rb; > +} > + > #ifdef CONFIG_POSIX > RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr, > uint32_t ram_flags, int fd, off_t offset, > Error **errp) > { > + void *host; > RAMBlock *new_block; > Error *local_err = NULL; > int64_t file_size, file_align; > @@ -1962,19 +1981,14 @@ RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr, > return NULL; > } > > - new_block = g_malloc0(sizeof(*new_block)); > - new_block->mr = mr; > - new_block->used_length = size; > - new_block->max_length = size; > - new_block->flags = ram_flags; > - new_block->guest_memfd = -1; > - new_block->host = file_ram_alloc(new_block, size, fd, !file_size, offset, > - errp); > - if (!new_block->host) { > + new_block = ram_block_create(mr, size, size, ram_flags); > + host = file_ram_alloc(new_block, size, fd, !file_size, offset, errp); > + if (!host) { > g_free(new_block); > return NULL; > } > > + new_block->host = host; > ram_block_add(new_block, &local_err); > if (local_err) { > g_free(new_block); > @@ -1982,7 +1996,6 @@ RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr, > return NULL; > } > return new_block; > - > } > > > @@ -2054,18 +2067,10 @@ RAMBlock *qemu_ram_alloc_internal(ram_addr_t size, ram_addr_t max_size, > align = MAX(align, TARGET_PAGE_SIZE); > size = ROUND_UP(size, align); > max_size = ROUND_UP(max_size, align); > - > - new_block = g_malloc0(sizeof(*new_block)); > - new_block->mr = mr; > - new_block->resized = resized; > - new_block->used_length = size; > - new_block->max_length = max_size; > assert(max_size >= size); > - new_block->fd = -1; > - new_block->guest_memfd = -1; > - new_block->page_size = qemu_real_host_page_size(); > - new_block->host = host; > - new_block->flags = ram_flags; > + new_block = ram_block_create(mr, size, max_size, ram_flags); > + new_block->resized = resized; > + > ram_block_add(new_block, &local_err); > if (local_err) { > g_free(new_block); > diff --git a/system/trace-events b/system/trace-events > index 69c9044..f0a80ba 100644 > --- a/system/trace-events > +++ b/system/trace-events > @@ -38,3 +38,6 @@ dirtylimit_state_finalize(void) > dirtylimit_throttle_pct(int cpu_index, uint64_t pct, int64_t time_us) "CPU[%d] throttle percent: %" PRIu64 ", throttle adjust time %"PRIi64 " us" > dirtylimit_set_vcpu(int cpu_index, uint64_t quota) "CPU[%d] set dirty page rate limit %"PRIu64 > dirtylimit_vcpu_execute(int cpu_index, int64_t sleep_time_us) "CPU[%d] sleep %"PRIi64 " us" > + > +# physmem.c > +ram_block_create(const char *name, uint32_t flags, int fd, size_t used_length, size_t max_length, size_t align) "%s, flags %u, fd %d, len %lu, maxlen %lu, align %lu"
On 5/13/2024 2:37 PM, Fabiano Rosas wrote: > Steve Sistare <steven.sistare@oracle.com> writes: > >> Create a common subroutine to allocate a RAMBlock, de-duping the code to >> populate its common fields. Add a trace point for good measure. >> No functional change. >> >> Signed-off-by: Steve Sistare <steven.sistare@oracle.com> >> --- >> system/physmem.c | 47 ++++++++++++++++++++++++++--------------------- >> system/trace-events | 3 +++ >> 2 files changed, 29 insertions(+), 21 deletions(-) >> >> diff --git a/system/physmem.c b/system/physmem.c >> index c3d04ca..6216b14 100644 >> --- a/system/physmem.c >> +++ b/system/physmem.c >> @@ -52,6 +52,7 @@ >> #include "sysemu/hw_accel.h" >> #include "sysemu/xen-mapcache.h" >> #include "trace/trace-root.h" >> +#include "trace.h" >> >> #ifdef CONFIG_FALLOCATE_PUNCH_HOLE >> #include <linux/falloc.h> >> @@ -1918,11 +1919,29 @@ out_free: >> } >> } >> >> +static RAMBlock *ram_block_create(MemoryRegion *mr, ram_addr_t size, >> + ram_addr_t max_size, uint32_t ram_flags) >> +{ >> + RAMBlock *rb = g_malloc0(sizeof(*rb)); >> + >> + rb->used_length = size; >> + rb->max_length = max_size; >> + rb->fd = -1; >> + rb->flags = ram_flags; >> + rb->page_size = qemu_real_host_page_size(); >> + rb->mr = mr; >> + rb->guest_memfd = -1; >> + trace_ram_block_create(rb->idstr, rb->flags, rb->fd, rb->used_length, > > There's no idstr at this point, is there? I think this needs to be > memory_region_name(mr). Thanks, will fix. That is a bug in my patch factoring. I add the call to qemu_ram_set_idstr in patch "physmem: set ram block idstr earlier". - Steve >> + rb->max_length, mr->align); >> + return rb; >> +} >> + >> #ifdef CONFIG_POSIX >> RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr, >> uint32_t ram_flags, int fd, off_t offset, >> Error **errp) >> { >> + void *host; >> RAMBlock *new_block; >> Error *local_err = NULL; >> int64_t file_size, file_align; >> @@ -1962,19 +1981,14 @@ RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr, >> return NULL; >> } >> >> - new_block = g_malloc0(sizeof(*new_block)); >> - new_block->mr = mr; >> - new_block->used_length = size; >> - new_block->max_length = size; >> - new_block->flags = ram_flags; >> - new_block->guest_memfd = -1; >> - new_block->host = file_ram_alloc(new_block, size, fd, !file_size, offset, >> - errp); >> - if (!new_block->host) { >> + new_block = ram_block_create(mr, size, size, ram_flags); >> + host = file_ram_alloc(new_block, size, fd, !file_size, offset, errp); >> + if (!host) { >> g_free(new_block); >> return NULL; >> } >> >> + new_block->host = host; >> ram_block_add(new_block, &local_err); >> if (local_err) { >> g_free(new_block); >> @@ -1982,7 +1996,6 @@ RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr, >> return NULL; >> } >> return new_block; >> - >> } >> >> >> @@ -2054,18 +2067,10 @@ RAMBlock *qemu_ram_alloc_internal(ram_addr_t size, ram_addr_t max_size, >> align = MAX(align, TARGET_PAGE_SIZE); >> size = ROUND_UP(size, align); >> max_size = ROUND_UP(max_size, align); >> - >> - new_block = g_malloc0(sizeof(*new_block)); >> - new_block->mr = mr; >> - new_block->resized = resized; >> - new_block->used_length = size; >> - new_block->max_length = max_size; >> assert(max_size >= size); >> - new_block->fd = -1; >> - new_block->guest_memfd = -1; >> - new_block->page_size = qemu_real_host_page_size(); >> - new_block->host = host; >> - new_block->flags = ram_flags; >> + new_block = ram_block_create(mr, size, max_size, ram_flags); >> + new_block->resized = resized; >> + >> ram_block_add(new_block, &local_err); >> if (local_err) { >> g_free(new_block); >> diff --git a/system/trace-events b/system/trace-events >> index 69c9044..f0a80ba 100644 >> --- a/system/trace-events >> +++ b/system/trace-events >> @@ -38,3 +38,6 @@ dirtylimit_state_finalize(void) >> dirtylimit_throttle_pct(int cpu_index, uint64_t pct, int64_t time_us) "CPU[%d] throttle percent: %" PRIu64 ", throttle adjust time %"PRIi64 " us" >> dirtylimit_set_vcpu(int cpu_index, uint64_t quota) "CPU[%d] set dirty page rate limit %"PRIu64 >> dirtylimit_vcpu_execute(int cpu_index, int64_t sleep_time_us) "CPU[%d] sleep %"PRIi64 " us" >> + >> +# physmem.c >> +ram_block_create(const char *name, uint32_t flags, int fd, size_t used_length, size_t max_length, size_t align) "%s, flags %u, fd %d, len %lu, maxlen %lu, align %lu"
diff --git a/system/physmem.c b/system/physmem.c index c3d04ca..6216b14 100644 --- a/system/physmem.c +++ b/system/physmem.c @@ -52,6 +52,7 @@ #include "sysemu/hw_accel.h" #include "sysemu/xen-mapcache.h" #include "trace/trace-root.h" +#include "trace.h" #ifdef CONFIG_FALLOCATE_PUNCH_HOLE #include <linux/falloc.h> @@ -1918,11 +1919,29 @@ out_free: } } +static RAMBlock *ram_block_create(MemoryRegion *mr, ram_addr_t size, + ram_addr_t max_size, uint32_t ram_flags) +{ + RAMBlock *rb = g_malloc0(sizeof(*rb)); + + rb->used_length = size; + rb->max_length = max_size; + rb->fd = -1; + rb->flags = ram_flags; + rb->page_size = qemu_real_host_page_size(); + rb->mr = mr; + rb->guest_memfd = -1; + trace_ram_block_create(rb->idstr, rb->flags, rb->fd, rb->used_length, + rb->max_length, mr->align); + return rb; +} + #ifdef CONFIG_POSIX RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr, uint32_t ram_flags, int fd, off_t offset, Error **errp) { + void *host; RAMBlock *new_block; Error *local_err = NULL; int64_t file_size, file_align; @@ -1962,19 +1981,14 @@ RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr, return NULL; } - new_block = g_malloc0(sizeof(*new_block)); - new_block->mr = mr; - new_block->used_length = size; - new_block->max_length = size; - new_block->flags = ram_flags; - new_block->guest_memfd = -1; - new_block->host = file_ram_alloc(new_block, size, fd, !file_size, offset, - errp); - if (!new_block->host) { + new_block = ram_block_create(mr, size, size, ram_flags); + host = file_ram_alloc(new_block, size, fd, !file_size, offset, errp); + if (!host) { g_free(new_block); return NULL; } + new_block->host = host; ram_block_add(new_block, &local_err); if (local_err) { g_free(new_block); @@ -1982,7 +1996,6 @@ RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr, return NULL; } return new_block; - } @@ -2054,18 +2067,10 @@ RAMBlock *qemu_ram_alloc_internal(ram_addr_t size, ram_addr_t max_size, align = MAX(align, TARGET_PAGE_SIZE); size = ROUND_UP(size, align); max_size = ROUND_UP(max_size, align); - - new_block = g_malloc0(sizeof(*new_block)); - new_block->mr = mr; - new_block->resized = resized; - new_block->used_length = size; - new_block->max_length = max_size; assert(max_size >= size); - new_block->fd = -1; - new_block->guest_memfd = -1; - new_block->page_size = qemu_real_host_page_size(); - new_block->host = host; - new_block->flags = ram_flags; + new_block = ram_block_create(mr, size, max_size, ram_flags); + new_block->resized = resized; + ram_block_add(new_block, &local_err); if (local_err) { g_free(new_block); diff --git a/system/trace-events b/system/trace-events index 69c9044..f0a80ba 100644 --- a/system/trace-events +++ b/system/trace-events @@ -38,3 +38,6 @@ dirtylimit_state_finalize(void) dirtylimit_throttle_pct(int cpu_index, uint64_t pct, int64_t time_us) "CPU[%d] throttle percent: %" PRIu64 ", throttle adjust time %"PRIi64 " us" dirtylimit_set_vcpu(int cpu_index, uint64_t quota) "CPU[%d] set dirty page rate limit %"PRIu64 dirtylimit_vcpu_execute(int cpu_index, int64_t sleep_time_us) "CPU[%d] sleep %"PRIi64 " us" + +# physmem.c +ram_block_create(const char *name, uint32_t flags, int fd, size_t used_length, size_t max_length, size_t align) "%s, flags %u, fd %d, len %lu, maxlen %lu, align %lu"
Create a common subroutine to allocate a RAMBlock, de-duping the code to populate its common fields. Add a trace point for good measure. No functional change. Signed-off-by: Steve Sistare <steven.sistare@oracle.com> --- system/physmem.c | 47 ++++++++++++++++++++++++++--------------------- system/trace-events | 3 +++ 2 files changed, 29 insertions(+), 21 deletions(-)