Re: [v3 1/6] system/dirtylimit: Fix a race situation

2023-11-02 Thread Juan Quintela
Hyman Huang  wrote:
> Fix a race situation for global variable dirtylimit_state.
>
> Also, replace usleep by g_usleep to increase platform
> accessibility to the sleep function.
>
> Signed-off-by: Hyman Huang 
> Reviewed-by: Fabiano Rosas 
> Message-Id: 
> 

Reviewed-by: Juan Quintela 

queued.




[v3 1/6] system/dirtylimit: Fix a race situation

2023-11-01 Thread Hyman Huang
Fix a race situation for global variable dirtylimit_state.

Also, replace usleep by g_usleep to increase platform
accessibility to the sleep function.

Signed-off-by: Hyman Huang 
Reviewed-by: Fabiano Rosas 
Message-Id: 

---
 system/dirtylimit.c | 20 ++--
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/system/dirtylimit.c b/system/dirtylimit.c
index fa959d7743..3666c4cb7c 100644
--- a/system/dirtylimit.c
+++ b/system/dirtylimit.c
@@ -411,12 +411,20 @@ void dirtylimit_set_all(uint64_t quota,
 
 void dirtylimit_vcpu_execute(CPUState *cpu)
 {
-if (dirtylimit_in_service() &&
-dirtylimit_vcpu_get_state(cpu->cpu_index)->enabled &&
-cpu->throttle_us_per_full) {
-trace_dirtylimit_vcpu_execute(cpu->cpu_index,
-cpu->throttle_us_per_full);
-usleep(cpu->throttle_us_per_full);
+if (cpu->throttle_us_per_full) {
+dirtylimit_state_lock();
+
+if (dirtylimit_in_service() &&
+dirtylimit_vcpu_get_state(cpu->cpu_index)->enabled) {
+dirtylimit_state_unlock();
+trace_dirtylimit_vcpu_execute(cpu->cpu_index,
+cpu->throttle_us_per_full);
+
+g_usleep(cpu->throttle_us_per_full);
+return;
+}
+
+dirtylimit_state_unlock();
 }
 }
 
-- 
2.39.1