On 12/09/19 04:51, Wei Yang wrote: > On Fri, Aug 23, 2019 at 09:07:50AM +0800, Wei Yang wrote: >> On Thu, Aug 22, 2019 at 12:24:32PM +0200, Paolo Bonzini wrote: >>> On 21/03/19 09:25, Wei Yang wrote: >>>> PHYS_MAP_NODE_NIL is assigned to PhysPageEntry.ptr in case this is not a >>>> leaf entry, while map->nodes_nb range in [0, nodes_nb_alloc). >>>> >>>> Seems we are asserting on two different things, just remove it. >>> >>> The assertion checks that this "if" is not entered incorrectly: >>> >>> if (lp->skip && lp->ptr == PHYS_MAP_NODE_NIL) { >>> lp->ptr = phys_map_node_alloc(map, level == 0); >>> } >>> >> >> Hmm... I may not get your point. >> >> phys_map_node_alloc() will get an available PhysPageEntry and return its >> index, which will be assigned to its parent's ptr. >> >> The "if" checks on the parent's ptr, while the assertion asserts the index >> for >> the new child. I may miss something? >> > > Hi, Paolo, > > Do I miss something?
Sorry, I was on vacation. phys_page_set_level can be called multiple times, with the same lp. The assertion checks that only the first call will reach phys_map_node_alloc. Paolo