diff mbox

[3/9] runstate: Add runstate store

Message ID 1431620920-19710-4-git-send-email-quintela@redhat.com
State New
Headers show

Commit Message

Juan Quintela May 14, 2015, 4:28 p.m. UTC
This allows us to store the current state to send it through migration.

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 include/sysemu/sysemu.h |  1 +
 vl.c                    | 11 +++++++++++
 2 files changed, 12 insertions(+)

Comments

Dr. David Alan Gilbert May 18, 2015, 10:35 a.m. UTC | #1
* Juan Quintela (quintela@redhat.com) wrote:
> This allows us to store the current state to send it through migration.
> 
> Signed-off-by: Juan Quintela <quintela@redhat.com>
> ---
>  include/sysemu/sysemu.h |  1 +
>  vl.c                    | 11 +++++++++++
>  2 files changed, 12 insertions(+)
> 
> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
> index 8a52934..c1a403e 100644
> --- a/include/sysemu/sysemu.h
> +++ b/include/sysemu/sysemu.h
> @@ -28,6 +28,7 @@ bool runstate_check(RunState state);
>  void runstate_set(RunState new_state);
>  int runstate_is_running(void);
>  bool runstate_needs_reset(void);
> +int runstate_store(char *str, int size);
>  typedef struct vm_change_state_entry VMChangeStateEntry;
>  typedef void VMChangeStateHandler(void *opaque, int running, RunState state);
> 
> diff --git a/vl.c b/vl.c
> index 15bccc4..7dca13f 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -609,6 +609,17 @@ bool runstate_check(RunState state)
>      return current_run_state == state;
>  }
> 
> +int runstate_store(char *str, int size)
> +{

size_t size

and perhaps a bool for the return type?

> +    const char *state = RunState_lookup[current_run_state];
> +
> +    if (strlen(state)+1 > size) {
> +        return -1;
> +    }
> +    strncpy(str, state, strlen(state)+1);

Why not a plain strcpy?

(I'd be very tempted by an assert if it's too long; I mean it really
shouldn't happen; although I don't like asserts in the migrate path).

Dave


> +    return 0;
> +}
> +
>  static void runstate_init(void)
>  {
>      const RunStateTransition *p;
> -- 
> 2.4.0
> 
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
Denis V. Lunev May 18, 2015, 10:38 a.m. UTC | #2
On 14/05/15 19:28, Juan Quintela wrote:
> This allows us to store the current state to send it through migration.
>
> Signed-off-by: Juan Quintela <quintela@redhat.com>
> ---
>   include/sysemu/sysemu.h |  1 +
>   vl.c                    | 11 +++++++++++
>   2 files changed, 12 insertions(+)
>
> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
> index 8a52934..c1a403e 100644
> --- a/include/sysemu/sysemu.h
> +++ b/include/sysemu/sysemu.h
> @@ -28,6 +28,7 @@ bool runstate_check(RunState state);
>   void runstate_set(RunState new_state);
>   int runstate_is_running(void);
>   bool runstate_needs_reset(void);
> +int runstate_store(char *str, int size);
>   typedef struct vm_change_state_entry VMChangeStateEntry;
>   typedef void VMChangeStateHandler(void *opaque, int running, RunState state);
>
> diff --git a/vl.c b/vl.c
> index 15bccc4..7dca13f 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -609,6 +609,17 @@ bool runstate_check(RunState state)
>       return current_run_state == state;
>   }
>
> +int runstate_store(char *str, int size)
> +{
> +    const char *state = RunState_lookup[current_run_state];
> +
> +    if (strlen(state)+1 > size) {
> +        return -1;
> +    }
> +    strncpy(str, state, strlen(state)+1);
> +    return 0;
> +}
> +
>   static void runstate_init(void)
>   {
>       const RunStateTransition *p;
>

minor. why to call strlen() twice?

if you have the length in hand it would be better to call
memcpy to copy data.
Eric Blake May 18, 2015, 2:50 p.m. UTC | #3
On 05/18/2015 04:38 AM, Denis V. Lunev wrote:
> On 14/05/15 19:28, Juan Quintela wrote:
>> This allows us to store the current state to send it through migration.
>>
>> Signed-off-by: Juan Quintela <quintela@redhat.com>
>> ---

>> +    if (strlen(state)+1 > size) {
>> +        return -1;
>> +    }
>> +    strncpy(str, state, strlen(state)+1);
>> +    return 0;
>> +}
>> +
>>   static void runstate_init(void)
>>   {
>>       const RunStateTransition *p;
>>
> 
> minor. why to call strlen() twice?

Also, why no spaces around binary '+'?
Juan Quintela June 17, 2015, 12:28 a.m. UTC | #4
"Dr. David Alan Gilbert" <dgilbert@redhat.com> wrote:
> * Juan Quintela (quintela@redhat.com) wrote:
>> This allows us to store the current state to send it through migration.
>> 
>> Signed-off-by: Juan Quintela <quintela@redhat.com>
>> ---
>>  include/sysemu/sysemu.h |  1 +
>>  vl.c                    | 11 +++++++++++
>>  2 files changed, 12 insertions(+)
>> 
>> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
>> index 8a52934..c1a403e 100644
>> --- a/include/sysemu/sysemu.h
>> +++ b/include/sysemu/sysemu.h
>> @@ -28,6 +28,7 @@ bool runstate_check(RunState state);
>>  void runstate_set(RunState new_state);
>>  int runstate_is_running(void);
>>  bool runstate_needs_reset(void);
>> +int runstate_store(char *str, int size);
>>  typedef struct vm_change_state_entry VMChangeStateEntry;
>>  typedef void VMChangeStateHandler(void *opaque, int running, RunState state);
>> 
>> diff --git a/vl.c b/vl.c
>> index 15bccc4..7dca13f 100644
>> --- a/vl.c
>> +++ b/vl.c
>> @@ -609,6 +609,17 @@ bool runstate_check(RunState state)
>>      return current_run_state == state;
>>  }
>> 
>> +int runstate_store(char *str, int size)
>> +{
>
> size_t size
>
> and perhaps a bool for the return type?

ack

>
>> +    const char *state = RunState_lookup[current_run_state];
>> +
>> +    if (strlen(state)+1 > size) {
>> +        return -1;
>> +    }
>> +    strncpy(str, state, strlen(state)+1);
>
> Why not a plain strcpy?

asked for memcpy, I don't really cared one way or another, it is a
really small string.

Thanks, Juan.
Juan Quintela June 17, 2015, 12:55 a.m. UTC | #5
"Denis V. Lunev" <den-lists@parallels.com> wrote:
> On 14/05/15 19:28, Juan Quintela wrote:
>> This allows us to store the current state to send it through migration.
>>
>> Signed-off-by: Juan Quintela <quintela@redhat.com>
>> ---
>>   include/sysemu/sysemu.h |  1 +
>>   vl.c                    | 11 +++++++++++
>>   2 files changed, 12 insertions(+)
>>
>> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
>> index 8a52934..c1a403e 100644
>> --- a/include/sysemu/sysemu.h
>> +++ b/include/sysemu/sysemu.h
>> @@ -28,6 +28,7 @@ bool runstate_check(RunState state);
>>   void runstate_set(RunState new_state);
>>   int runstate_is_running(void);
>>   bool runstate_needs_reset(void);
>> +int runstate_store(char *str, int size);
>>   typedef struct vm_change_state_entry VMChangeStateEntry;
>>   typedef void VMChangeStateHandler(void *opaque, int running, RunState state);
>>
>> diff --git a/vl.c b/vl.c
>> index 15bccc4..7dca13f 100644
>> --- a/vl.c
>> +++ b/vl.c
>> @@ -609,6 +609,17 @@ bool runstate_check(RunState state)
>>       return current_run_state == state;
>>   }
>>
>> +int runstate_store(char *str, int size)
>> +{
>> +    const char *state = RunState_lookup[current_run_state];
>> +
>> +    if (strlen(state)+1 > size) {
>> +        return -1;
>> +    }
>> +    strncpy(str, state, strlen(state)+1);
>> +    return 0;
>> +}
>> +
>>   static void runstate_init(void)
>>   {
>>       const RunStateTransition *p;
>>
>
> minor. why to call strlen() twice?
>
> if you have the length in hand it would be better to call
> memcpy to copy data.

Done, thanks.
diff mbox

Patch

diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
index 8a52934..c1a403e 100644
--- a/include/sysemu/sysemu.h
+++ b/include/sysemu/sysemu.h
@@ -28,6 +28,7 @@  bool runstate_check(RunState state);
 void runstate_set(RunState new_state);
 int runstate_is_running(void);
 bool runstate_needs_reset(void);
+int runstate_store(char *str, int size);
 typedef struct vm_change_state_entry VMChangeStateEntry;
 typedef void VMChangeStateHandler(void *opaque, int running, RunState state);

diff --git a/vl.c b/vl.c
index 15bccc4..7dca13f 100644
--- a/vl.c
+++ b/vl.c
@@ -609,6 +609,17 @@  bool runstate_check(RunState state)
     return current_run_state == state;
 }

+int runstate_store(char *str, int size)
+{
+    const char *state = RunState_lookup[current_run_state];
+
+    if (strlen(state)+1 > size) {
+        return -1;
+    }
+    strncpy(str, state, strlen(state)+1);
+    return 0;
+}
+
 static void runstate_init(void)
 {
     const RunStateTransition *p;