qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v1 6/6] mem: change tcg code to rcu style


From: liu ping fan
Subject: Re: [Qemu-devel] [PATCH v1 6/6] mem: change tcg code to rcu style
Date: Wed, 29 May 2013 17:00:18 +0800

On Wed, May 29, 2013 at 3:22 PM, Paolo Bonzini <address@hidden> wrote:
> Il 29/05/2013 04:11, Liu Ping Fan ha scritto:
>> From: Liu Ping Fan <address@hidden>
>>
>> When adopting rcu style, for tcg code, need to fix two kind of path:
>>  -tlb_set_page() will cache translation info.
>>  -instruction emualation path
>>
>> Signed-off-by: Liu Ping Fan <address@hidden>
>> ----
>> Not sure about tcg code, so I took helper_st as the example.
>> ---
>>  cputlb.c                        |   25 +++++++++++++++++-
>>  exec.c                          |    2 +-
>>  include/exec/softmmu_template.h |   53 
>> +++++++++++++++++++++++++++++++-------
>>  3 files changed, 68 insertions(+), 12 deletions(-)
>>
>> diff --git a/cputlb.c b/cputlb.c
>> index 86666c8..6b55c70 100644
>> --- a/cputlb.c
>> +++ b/cputlb.c
>> @@ -249,6 +249,10 @@ void tlb_set_page(CPUArchState *env, target_ulong vaddr,
>>      uintptr_t addend;
>>      CPUTLBEntry *te;
>>      hwaddr iotlb, xlat, sz;
>> +    unsigned long start;
>> +    Node *map_base;
>> +    MemoryRegionSection *sections_base;
>> +    PhysPageEntry *roots_base;
>>
>>      assert(size >= TARGET_PAGE_SIZE);
>>      if (size != TARGET_PAGE_SIZE) {
>> @@ -256,8 +260,18 @@ void tlb_set_page(CPUArchState *env, target_ulong vaddr,
>>      }
>>
>>      sz = size;
>> +
>> +reload:
>> +    rcu_read_lock();
>
> It's really the whole of cpu_exec that has to be protected by a RCU
> critical section.
>
Ok.
>> +    start = seqlock_read_begin(&dispatch_table_lock);
>> +    map_base = cur_map_nodes;
>> +    sections_base = cur_phys_sections;
>> +    roots_base = cur_roots;
>
> Why the seqlock_read_check at the end and not here?
>
In case the tlb_flush() empty tlb entry, and we record incorrect index

> Remember that this code is running under the BQL, so there is no need to
> protect the TLB flushes otherwise.  There is also no need to do anything

Do you mean that cpu_exec() can not be out of BQL like kvm path?  If
it is true, then there is no changes needed for tcg code, right?

> as long as you ref the regions that are entered in the map, and unref
> them when you destroy the map.  Those refs will protect TCG's TLB too.
>
Worry about whether the TLB is the right index in the right
phys_sections, if the mem topology changes between tlb_set_page() and
instruction emulated.

> In the end, all of TCG's execution consists of a large RCU critical section.
>
Even stronger? If it runs with BQL protection.

Regards,
Pingfan

[...]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]