On 2015/2/10 16:46, Michael S. Tsirkin wrote:
> On Tue, Feb 10, 2015 at 01:48:12PM +0800, linhaifeng wrote:
>> From: Linhaifeng <[email protected]>
>>
>> Slave should reply to master and set u64 to 0 if
>> mmap all regions success otherwise set u64 to 1.
>>
>> Signed-off-by: Linhaifeng <[email protected]>
>
> How does this work with existig slaves though?
>
Slaves should work like this:
int set_mem_table(...)
{
....
for (idx = 0, i = 0; idx < memory.nregions; idx++) {
....
mem = mmap(..);
if (MAP_FAILED == mem) {
msg->msg.u64 = 1;
msg->msg.size = MEMB_SIZE(VhostUserMsg, u64);
return 1;
}
}
....
msg->msg.u64 = 0;
msg->msg.size = MEMB_SIZE(VhostUserMsg, u64);
return 1;
}
If slaves not reply QEMU will always wait.
>> ---
>> docs/specs/vhost-user.txt | 1 +
>> 1 file changed, 1 insertion(+)
>>
>> diff --git a/docs/specs/vhost-user.txt b/docs/specs/vhost-user.txt
>> index 650bb18..c96bf6b 100644
>> --- a/docs/specs/vhost-user.txt
>> +++ b/docs/specs/vhost-user.txt
>> @@ -171,6 +171,7 @@ Message types
>> Id: 5
>> Equivalent ioctl: VHOST_SET_MEM_TABLE
>> Master payload: memory regions description
>> + Slave payload: u64 (0:success >0:failed)
>>
>> Sets the memory map regions on the slave so it can translate the vring
>> addresses. In the ancillary data there is an array of file descriptors
>> --
>> 1.7.12.4
>>
>
>
--
Regards,
Haifeng