[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] expandable grant table bug?



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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.