diff mbox series

[RFC,v2,4/4] memory: Add memory_region_set_priority()

Message ID 20180405012241.25714-5-f4bug@amsat.org
State New
Headers show
Series memory: fix access_with_adjusted_size() and misc | expand

Commit Message

Philippe Mathieu-Daudé April 5, 2018, 1:22 a.m. UTC
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(-)

Comments

Alexey Kardashevskiy April 5, 2018, 3:25 a.m. UTC | #1
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,
>
KONRAD Frederic April 5, 2018, 8:44 a.m. UTC | #2
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,
>
Alexey Kardashevskiy April 6, 2018, 5:14 a.m. UTC | #3
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 mbox series

Patch

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,