[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC PATCH 2/2] mem: prepare address_space listener rcu
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [RFC PATCH 2/2] mem: prepare address_space listener rcu style |
Date: |
Thu, 16 May 2013 11:09:33 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130311 Thunderbird/17.0.4 |
Better:
rcu_read_lock();
do {
pgtbl = d->cur_pgtbl;
smp_rmb();
root = d->cur_root;
smp_rmb();
/* d->cur_pgtbl == d->next_pgtbl only during an update. */
} while (pgtbl == d->next_pgtbl);
...
rcu_read_unlock();
And in the writer:
old_pgtbl = d->cur_pgtbl;
/* Point to the new page table, tell readers cur_root is invalid. */
smp_wmb();
d->cur_pgtbl = d->next_pgtbl;
/* Write the root before updating the page table. */
smp_wmb();
d->cur_root = d->next_root;
/* Write cur_root before telling readers it is valid. */
smp_wmb();
d->next_pgtbl = NULL;
/* Drop reference once readers will be done with it. */
call_rcu(page_table_unref, old_pgtbl, rcu);
Paolo
- Re: [Qemu-devel] [RFC PATCH 1/2] mem: make phys_section and phys_map_nodes prepared for RCU, (continued)
[Qemu-devel] [RFC PATCH 2/2] mem: prepare address_space listener rcu style, Liu Ping Fan, 2013/05/12
- Re: [Qemu-devel] [RFC PATCH 2/2] mem: prepare address_space listener rcu style, Paolo Bonzini, 2013/05/13
- Re: [Qemu-devel] [RFC PATCH 2/2] mem: prepare address_space listener rcu style, liu ping fan, 2013/05/14
- Re: [Qemu-devel] [RFC PATCH 2/2] mem: prepare address_space listener rcu style, Paolo Bonzini, 2013/05/14
- Re: [Qemu-devel] [RFC PATCH 2/2] mem: prepare address_space listener rcu style, liu ping fan, 2013/05/14
- Re: [Qemu-devel] [RFC PATCH 2/2] mem: prepare address_space listener rcu style, Paolo Bonzini, 2013/05/15
- Re: [Qemu-devel] [RFC PATCH 2/2] mem: prepare address_space listener rcu style, liu ping fan, 2013/05/15
- Re: [Qemu-devel] [RFC PATCH 2/2] mem: prepare address_space listener rcu style, Paolo Bonzini, 2013/05/15
Re: [Qemu-devel] [RFC PATCH 2/2] mem: prepare address_space listener rcu style,
Paolo Bonzini <=