[dpdk-dev] [PATCH 2/6] vhost: get guest/host physical address mappings

Yuanhan Liu yuanhan.liu at linux.intel.com
Tue Aug 23 15:49:24 CEST 2016


On Tue, Aug 23, 2016 at 03:25:33PM +0200, Maxime Coquelin wrote:
> 
> 
> On 08/23/2016 02:32 PM, Yuanhan Liu wrote:
> >>>+
> >>>> >+	/* FIXME */
> >>>> >+	RTE_LOG(INFO, VHOST_CONFIG, ":: %u ::\n", pre_read);
> >>> For my information, what is the purpose of pre_read?
> >Again, I put a FIXME here, but I forgot to add some explanation.
> >
> >Here is the thing: the read will make sure the kernel populate the
> >corresponding PTE entry, so that rte_mem_virt2phy() will return proper
> >physical address, otherwise, invalid value is returned.
> >
> >I can't simply do the read but do not actually reference/consume it.
> >Otherwise, the compiler will treat it as some noops and remove it.
> >
> >An ugly RTE_LOG will make sure the read operation is not eliminated.
> >I'm seeking a more proper way to achieve that. Maybe I can add a new
> >field in virtio_net structure and store it there.
> >
> >Or, do you have better ideas?
> 
> This behavior is pretty twisted, no?

I have to say, yes, kind of.

> Shouldn't be rte_mem_virt2phy() role to ensure returning a valid value?

Not exactly. I think rte_mem_virt2phy() is more likely to fetch the
physical address of huge pages. And for those huge pages, EAL makes
sure they will be populated: it used to do a zero memset before to
achieve that. Since 5ce3ace1de45 ("eal: remove unnecessary hugepage
zero-filling"), it uses MAP_POPULATE option instead.

So, thank you that you just remind me of the MAP_POPULATE option.
I just had a quick try, it worked like a charm :)

	--yliu

> I have no better idea for now, but I will think about it.
> 
> Regards,
> Maxime


More information about the dev mailing list