Messages in this thread | | | Date | Tue, 24 Jun 2014 09:31:50 +0900 | From | Yasuaki Ishimatsu <> | Subject | Re: [PATCH 2/2] x86,mem-hotplug: modify PGD entry when removing memory |
| |
(2014/06/21 3:30), Toshi Kani wrote: > On Wed, 2014-06-18 at 15:38 +0900, Yasuaki Ishimatsu wrote: > : >> @@ -186,7 +186,12 @@ void sync_global_pgds(unsigned long start, unsigned long end) >> const pgd_t *pgd_ref = pgd_offset_k(address); >> struct page *page; >> >> - if (pgd_none(*pgd_ref)) >> + /* >> + * When it is called after memory hot remove, pgd_none() >> + * returns true. In this case (removed == 1), we must clear >> + * the PGD entries in the local PGD level page. >> + */ >> + if (pgd_none(*pgd_ref) && !removed) >> continue; >> >> spin_lock(&pgd_lock); >> @@ -199,12 +204,18 @@ void sync_global_pgds(unsigned long start, unsigned long end) >> pgt_lock = &pgd_page_get_mm(page)->page_table_lock; >> spin_lock(pgt_lock); >> >> - if (pgd_none(*pgd)) >> - set_pgd(pgd, *pgd_ref); >> - else
>> + if (!pgd_none(*pgd_ref) && !pgd_none(*pgd)) >> BUG_ON(pgd_page_vaddr(*pgd) >> != pgd_page_vaddr(*pgd_ref)); >> >> + if (removed) { > > Shouldn't this condition be "else if"?
The first if sentence checks whether PGDs hit to BUG_ON. And the second if sentence checks whether the function was called after hot-removing memory. I think that the first if sentence and the second if sentence check different things. So I think the condition should be "if" sentence.
Thanks, Yasuaki Ishimatsu
> > Thanks, > -Toshi > >> + if (pgd_none(*pgd_ref) && !pgd_none(*pgd)) >> + pgd_clear(pgd); >> + } else { >> + if (pgd_none(*pgd)) >> + set_pgd(pgd, *pgd_ref); >> + } >> + >> spin_unlock(pgt_lock); >> } > >
| |