mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-08-10 12:32:45 +00:00
Revert "DM: make removing vGSI capability option as local"
This reverts commit f0de34176d
.
This commit is contained in:
parent
1336f9b578
commit
257aff8565
@ -137,6 +137,7 @@ usage(int code)
|
||||
" -H: vmexit from the guest on hlt\n"
|
||||
" -l: LPC device configuration\n"
|
||||
" -m: memory size in MB\n"
|
||||
" -M: do not hide INTx link for MSI&INTx capable ptdev\n"
|
||||
" -p: pin 'vcpu' to 'hostcpu'\n"
|
||||
" -P: vmexit from the guest on pause\n"
|
||||
" -s: <slot,driver,configinfo> PCI slot config\n"
|
||||
@ -618,6 +619,7 @@ static struct option long_options[] = {
|
||||
{"kernel", required_argument, 0, 'k' },
|
||||
{"ramdisk", required_argument, 0, 'r' },
|
||||
{"bootargs", required_argument, 0, 'B' },
|
||||
{"ptdev_msi", no_argument, 0, 'M' },
|
||||
{"version", no_argument, 0, 'v' },
|
||||
{"gvtargs", required_argument, 0, 'G' },
|
||||
{"help", no_argument, 0, 'h' },
|
||||
@ -656,7 +658,7 @@ main(int argc, char *argv[])
|
||||
if (signal(SIGINT, sig_handler_term) == SIG_ERR)
|
||||
fprintf(stderr, "cannot register handler for SIGINT\n");
|
||||
|
||||
optstr = "abehuwxACHIPSTWYvk:r:B:p:g:c:s:m:l:U:G:i:";
|
||||
optstr = "abehuwxACHIMPSTWYvk:r:B:p:g:c:s:m:l:U:G:i:";
|
||||
while ((c = getopt_long(argc, argv, optstr, long_options,
|
||||
&option_idx)) != -1) {
|
||||
switch (c) {
|
||||
@ -772,6 +774,9 @@ main(int argc, char *argv[])
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
case 'M':
|
||||
ptdev_prefer_msi(false);
|
||||
break;
|
||||
case 'v':
|
||||
print_version();
|
||||
break;
|
||||
|
@ -85,6 +85,9 @@ static int memfd = -1;
|
||||
static int pciaccess_ref_cnt;
|
||||
static pthread_mutex_t ref_cnt_mtx = PTHREAD_MUTEX_INITIALIZER;
|
||||
|
||||
/* Prefer MSI over INTx for ptdev */
|
||||
static bool prefer_msi = true;
|
||||
|
||||
/* Not check reset capability before assign ptdev.
|
||||
* Set false by default, that is, always check.
|
||||
*/
|
||||
@ -109,6 +112,12 @@ struct passthru_dev {
|
||||
struct pci_device *phys_dev;
|
||||
};
|
||||
|
||||
void
|
||||
ptdev_prefer_msi(bool enable)
|
||||
{
|
||||
prefer_msi = enable;
|
||||
}
|
||||
|
||||
void ptdev_no_reset(bool enable)
|
||||
{
|
||||
no_reset = enable;
|
||||
@ -925,28 +934,16 @@ passthru_init(struct vmctx *ctx, struct pci_vdev *dev, char *opts)
|
||||
struct passthru_dev *ptdev;
|
||||
struct pci_device_iterator *iter;
|
||||
struct pci_device *phys_dev;
|
||||
char *opt;
|
||||
bool keep_gsi = false;
|
||||
|
||||
ptdev = NULL;
|
||||
error = -EINVAL;
|
||||
|
||||
if (opts == NULL) {
|
||||
warnx("Empty passthru options\n");
|
||||
if (opts == NULL ||
|
||||
sscanf(opts, "%x/%x/%x", &bus, &slot, &func) != 3) {
|
||||
warnx("invalid passthru options, %s", opts);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
opt = strsep(&opts, ",");
|
||||
if (sscanf(opt, "%x/%x/%x", &bus, &slot, &func) != 3) {
|
||||
warnx("Invalid passthru options, %s", opt);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
while ((opt = strsep(&opts, ",")) != NULL) {
|
||||
if (!strncmp(opt, "keep_gsi", 8))
|
||||
keep_gsi = true;
|
||||
}
|
||||
|
||||
if (vm_assign_ptdev(ctx, bus, slot, func) != 0) {
|
||||
warnx("PCI device at %x/%x/%x is not using the pt(4) driver",
|
||||
bus, slot, func);
|
||||
@ -1011,7 +1008,7 @@ passthru_init(struct vmctx *ctx, struct pci_vdev *dev, char *opts)
|
||||
* Forge Guest to use MSI/MSIX in this case to mitigate IRQ sharing
|
||||
* issue
|
||||
*/
|
||||
if (error == IRQ_MSI && !keep_gsi)
|
||||
if (error == IRQ_MSI && prefer_msi)
|
||||
return 0;
|
||||
|
||||
/* Allocates the virq if ptdev only support INTx */
|
||||
|
@ -48,5 +48,6 @@ int vmexit_task_switch(struct vmctx *ctx, struct vhm_request *vhm_req,
|
||||
void *paddr_guest2host(struct vmctx *ctx, uintptr_t addr, size_t len);
|
||||
void *dm_gpa2hva(uint64_t gpa, size_t size);
|
||||
int virtio_uses_msix(void);
|
||||
void ptdev_prefer_msi(bool enable);
|
||||
void ptdev_no_reset(bool enable);
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user