Message ID | 20180405012241.25714-5-f4bug@amsat.org |
---|---|
State | New |
Headers | show |
Series | memory: fix access_with_adjusted_size() and misc | expand |
On 5/4/18 11:22 am, Philippe Mathieu-Daudé wrote: > Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> > --- > Sadly I'm missing something, this does not work. What does not work precisely? memory_region_set_priority() is not called or visit_type_int32() does not return priority, etc? > > memory.c | 18 +++++++++++++++++- > 1 file changed, 17 insertions(+), 1 deletion(-) > > diff --git a/memory.c b/memory.c > index eaa5fa7f23..ae45ea7779 100644 > --- a/memory.c > +++ b/memory.c > @@ -1225,6 +1225,22 @@ static void memory_region_get_priority(Object *obj, Visitor *v, > visit_type_int32(v, name, &value, errp); > } > > +static void memory_region_set_priority(Object *obj, Visitor *v, > + const char *name, void *opaque, > + Error **errp) > +{ > + MemoryRegion *mr = MEMORY_REGION(obj); > + int32_t priority; > + Error *local_err = NULL; > + > + visit_type_int32(v, name, &priority, &local_err); > + if (local_err) { > + error_propagate(errp, local_err); > + return; > + } > + mr->priority = priority; > +} > + > static void memory_region_get_size(Object *obj, Visitor *v, const char *name, > void *opaque, Error **errp) > { > @@ -1260,7 +1276,7 @@ static void memory_region_initfn(Object *obj) > NULL, NULL, &error_abort); > object_property_add(OBJECT(mr), "priority", "int32", > memory_region_get_priority, > - NULL, /* memory_region_set_priority */ > + memory_region_set_priority, > NULL, NULL, &error_abort); > object_property_add(OBJECT(mr), "size", "uint64", > memory_region_get_size, >
On 04/05/2018 03:22 AM, Philippe Mathieu-Daudé wrote: > Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> > --- > Sadly I'm missing something, this does not work. Hmmm is that supposed to work dynamically? If so I think you might need to call memory_region_update_container_subregions(..) because it will actually change the map? Take a look at how memory_add_subregion works. Thanks, Fred > > memory.c | 18 +++++++++++++++++- > 1 file changed, 17 insertions(+), 1 deletion(-) > > diff --git a/memory.c b/memory.c > index eaa5fa7f23..ae45ea7779 100644 > --- a/memory.c > +++ b/memory.c > @@ -1225,6 +1225,22 @@ static void memory_region_get_priority(Object *obj, Visitor *v, > visit_type_int32(v, name, &value, errp); > } > > +static void memory_region_set_priority(Object *obj, Visitor *v, > + const char *name, void *opaque, > + Error **errp) > +{ > + MemoryRegion *mr = MEMORY_REGION(obj); > + int32_t priority; > + Error *local_err = NULL; > + > + visit_type_int32(v, name, &priority, &local_err); > + if (local_err) { > + error_propagate(errp, local_err); > + return; > + } > + mr->priority = priority; > +} > + > static void memory_region_get_size(Object *obj, Visitor *v, const char *name, > void *opaque, Error **errp) > { > @@ -1260,7 +1276,7 @@ static void memory_region_initfn(Object *obj) > NULL, NULL, &error_abort); > object_property_add(OBJECT(mr), "priority", "int32", > memory_region_get_priority, > - NULL, /* memory_region_set_priority */ > + memory_region_set_priority, > NULL, NULL, &error_abort); > object_property_add(OBJECT(mr), "size", "uint64", > memory_region_get_size, >
On 5/4/18 6:44 pm, KONRAD Frederic wrote: > > > On 04/05/2018 03:22 AM, Philippe Mathieu-Daudé wrote: >> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> >> --- >> Sadly I'm missing something, this does not work. > > Hmmm is that supposed to work dynamically? > > If so I think you might need to call > memory_region_update_container_subregions(..) because it will > actually change the map? > > Take a look at how memory_add_subregion works. Ah, right, I guess it should be: memory_region_transaction_begin(); mr->priority = priority; memory_region_update_pending = true; memory_region_transaction_commit(); as the priority may change the final layout of flatview. > > Thanks, > Fred > >> >> memory.c | 18 +++++++++++++++++- >> 1 file changed, 17 insertions(+), 1 deletion(-) >> >> diff --git a/memory.c b/memory.c >> index eaa5fa7f23..ae45ea7779 100644 >> --- a/memory.c >> +++ b/memory.c >> @@ -1225,6 +1225,22 @@ static void memory_region_get_priority(Object >> *obj, Visitor *v, >> visit_type_int32(v, name, &value, errp); >> } >> +static void memory_region_set_priority(Object *obj, Visitor *v, >> + const char *name, void *opaque, >> + Error **errp) >> +{ >> + MemoryRegion *mr = MEMORY_REGION(obj); >> + int32_t priority; >> + Error *local_err = NULL; >> + >> + visit_type_int32(v, name, &priority, &local_err); >> + if (local_err) { >> + error_propagate(errp, local_err); >> + return; >> + } >> + mr->priority = priority; >> +} >> + >> static void memory_region_get_size(Object *obj, Visitor *v, const char >> *name, >> void *opaque, Error **errp) >> { >> @@ -1260,7 +1276,7 @@ static void memory_region_initfn(Object *obj) >> NULL, NULL, &error_abort); >> object_property_add(OBJECT(mr), "priority", "int32", >> memory_region_get_priority, >> - NULL, /* memory_region_set_priority */ >> + memory_region_set_priority, >> NULL, NULL, &error_abort); >> object_property_add(OBJECT(mr), "size", "uint64", >> memory_region_get_size, >>
diff --git a/memory.c b/memory.c index eaa5fa7f23..ae45ea7779 100644 --- a/memory.c +++ b/memory.c @@ -1225,6 +1225,22 @@ static void memory_region_get_priority(Object *obj, Visitor *v, visit_type_int32(v, name, &value, errp); } +static void memory_region_set_priority(Object *obj, Visitor *v, + const char *name, void *opaque, + Error **errp) +{ + MemoryRegion *mr = MEMORY_REGION(obj); + int32_t priority; + Error *local_err = NULL; + + visit_type_int32(v, name, &priority, &local_err); + if (local_err) { + error_propagate(errp, local_err); + return; + } + mr->priority = priority; +} + static void memory_region_get_size(Object *obj, Visitor *v, const char *name, void *opaque, Error **errp) { @@ -1260,7 +1276,7 @@ static void memory_region_initfn(Object *obj) NULL, NULL, &error_abort); object_property_add(OBJECT(mr), "priority", "int32", memory_region_get_priority, - NULL, /* memory_region_set_priority */ + memory_region_set_priority, NULL, NULL, &error_abort); object_property_add(OBJECT(mr), "size", "uint64", memory_region_get_size,
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> --- Sadly I'm missing something, this does not work. memory.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)