Skip to content

Commit

Permalink
DM: Add option of no check against ptdev reset
Browse files Browse the repository at this point in the history
With '--ptdev_no_reset', DM doen not abort but warn when assign PCIe
dev without reset capability.

Signed-off-by: Edwin Zhai <edwin.zhai@intel.com>
Acked-by: Kevin Tian <kevin.tian@intel.com>
  • Loading branch information
gzhai7 authored and lijinxia committed May 29, 2018
1 parent b19d936 commit 4b4e1e1
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 2 deletions.
9 changes: 8 additions & 1 deletion devicemodel/core/main.c
Expand Up @@ -162,7 +162,8 @@ usage(int code)
" -i: ioc boot parameters\n"
" --vsbl: vsbl file path\n"
" --part_info: guest partition info file path\n"
" --enable_trusty: enable trusty for guest\n",
" --enable_trusty: enable trusty for guest\n"
" --ptdev_no_reset: disable reset check for ptdev\n",
progname, (int)strlen(progname), "", (int)strlen(progname), "",
(int)strlen(progname), "");

Expand Down Expand Up @@ -593,6 +594,7 @@ enum {
CMD_OPT_VSBL = 1000,
CMD_OPT_PART_INFO,
CMD_OPT_TRUSTY_ENABLE,
CMD_OPT_PTDEV_NO_RESET,
};

static struct option long_options[] = {
Expand Down Expand Up @@ -629,6 +631,8 @@ static struct option long_options[] = {
{"part_info", required_argument, 0, CMD_OPT_PART_INFO},
{"enable_trusty", no_argument, 0,
CMD_OPT_TRUSTY_ENABLE},
{"ptdev_no_reset", no_argument, 0,
CMD_OPT_PTDEV_NO_RESET},
{0, 0, 0, 0 },
};

Expand Down Expand Up @@ -795,6 +799,9 @@ main(int argc, char *argv[])
case CMD_OPT_TRUSTY_ENABLE:
trusty_enabled = 1;
break;
case CMD_OPT_PTDEV_NO_RESET:
ptdev_no_reset(true);
break;
case 'h':
usage(0);
default:
Expand Down
13 changes: 12 additions & 1 deletion devicemodel/hw/pci/passthrough.c
Expand Up @@ -91,6 +91,11 @@ 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.
*/
static bool no_reset = false;

struct passthru_dev {
struct pci_vdev *dev;
struct pcibar bar[PCI_BARMAX + 1];
Expand All @@ -116,6 +121,11 @@ ptdev_prefer_msi(bool enable)
prefer_msi = enable;
}

void ptdev_no_reset(bool enable)
{
no_reset = enable;
}

static int
msi_caplen(int msgctrl)
{
Expand Down Expand Up @@ -846,7 +856,8 @@ cfginit(struct vmctx *ctx, struct passthru_dev *ptdev, int bus,
warnx("No reset capability for PCIe %x/%x/%x, "
"remove it from ptdev list!!\n",
bus, slot, func);
return -1;
if (!no_reset)
return -1;
}
}

Expand Down
1 change: 1 addition & 0 deletions devicemodel/include/dm.h
Expand Up @@ -49,4 +49,5 @@ 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

0 comments on commit 4b4e1e1

Please sign in to comment.