Hi All,
Grant table had been expanded before.
As a result, it is thought that it came to be able to use four VNIF or more.
The PV domain operated without trouble.
However, VNIF can be only used up to three in DomVTx(x86).
# xm network-attach 27
# xm network-attach 27
# xm network-attach 27
# xm network-attach 27
# xm network-list 27
Idx BE MAC Addr. handle state evt-ch tx-/rx-ring-ref BE-path
0 0 02:17:42:2f:01:11 0 4 5 1280 /1281
/local/domain/0/backend/vif/27/0
1 0 02:17:42:2f:03:11 1 4 6 1282 /1283
/local/domain/0/backend/vif/27/1
2 0 00:16:3e:4d:2f:0e 2 4 7 1792 /1793
/local/domain/0/backend/vif/27/2
3 0 00:16:3e:11:35:e0 3 6 -1 -1 /-1
/local/domain/0/backend/vif/27/3
The test environment is as follows.
- xen-unstable.hg : cs15072
- DomVTx(X86) with PV-ON-HVM
This problem was investigated a little.
The cause is not to be able to execute HYPERVISOR_grant_table_op from the hvm
domain.
Therefore, the number of boot_max_nr_grant_frames is four.
・unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
platform_pci_init()
-> ・linux-2.6-xen-sparse/drivers/xen/core/gnttab.c
gnttab_init()
__max_nr_grant_frames()
The size of the grant table is acquired here.
404 static unsigned int __max_nr_grant_frames(void)
405 {
406 struct gnttab_query_size query;
407 int rc;
408
409 query.dom = DOMID_SELF;
410
411 rc = HYPERVISOR_grant_table_op(GNTTABOP_query_size, &query, 1); <<==
This
412 if ((rc < 0) || (query.status != GNTST_okay))
413 return 4; /* Legacy max supported number of frames */
414
415 return query.max_nr_frames;
416 }
=> ・xen/arch/x86/hvm/hvm.c
736 int hvm_do_hypercall(struct cpu_user_regs *regs)
737 {
...
759 if ( (eax >= NR_hypercalls) || !hvm_hypercall32_table[eax] )
760 {
761 if ( eax != __HYPERVISOR_grant_table_op )
762 gdprintk(XENLOG_WARNING, "HVM vcpu %d:%d bad hypercall %u.\n",
763 current->domain->domain_id, current->vcpu_id, eax);
764 regs->eax = -ENOSYS;
765 return HVM_HCALL_completed;
766 }
hvm_hypercall32_table is as follows.
Therefore, grant_table_op cannot be called.
726 static hvm_hypercall_t *hvm_hypercall32_table[NR_hypercalls] = {
727 HYPERCALL_COMPAT32(memory_op),
728 HYPERCALL(xen_version),
729 HYPERCALL(event_channel_op),
730 HYPERCALL(sched_op),
731 HYPERCALL(hvm_op)
732 };
Cannot grant_table_op make it call from the hvm domain?
How should we correct it if so?
Best Regard,
--
Takanori Kasai
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|