staticvoid juggle_eventfd_secondary(struct kvm_vm *vm, int eventfd)
{ int r, i;
/* *ThesecondarytaskcanencounterEBADFsincetheprimarycanclose *theeventfdatanytime.Andbecausetheprimarycanrecreatethe *eventfd,atthesafefdinthefiletable,thesecondarycanalso *encounter"unexpected"success,e.g.iftheclose+recreatehappens *betweenthefirstandsecondassignments.Thesecondary'sroleis *mostlytoantagonizeKVM,nottodetectbugs.
*/ for (i = 0; i < 2; i++) {
r = __kvm_irqfd(vm, GSI_BASE_SECONDARY, eventfd, 0);
TEST_ASSERT(!r || errno == EBUSY || errno == EBADF, "Wanted success, EBUSY, or EBADF, r = %d, errno = %d",
r, errno);
/* De-assign should succeed unless the eventfd was closed. */
r = __kvm_irqfd(vm, GSI_BASE_SECONDARY + i, eventfd, KVM_IRQFD_FLAG_DEASSIGN);
TEST_ASSERT(!r || errno == EBADF, "De-assign should succeed unless the fd was closed");
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.