All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ye Xiaolong <xiaolong.ye@intel.com>
To: "Wang, Xiao W" <xiao.w.wang@intel.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>,
	Maxime Coquelin <maxime.coquelin@redhat.com>,
	"Bie, Tiwei" <tiwei.bie@intel.com>,
	"Wang, Zhihong" <zhihong.wang@intel.com>,
	Rami Rosen <roszenrami@gmail.com>,
	"Wang, Haiyue" <haiyue.wang@intel.com>
Subject: Re: [PATCH v2 2/2] examples/vdpa: introduce a new sample for vDPA
Date: Thu, 20 Sep 2018 06:23:03 +0800	[thread overview]
Message-ID: <20180919222303.GC42303@intel.com> (raw)
In-Reply-To: <B7F2E978279D1D49A3034B7786DACF406F9AB9F4@SHSMSX101.ccr.corp.intel.com>

On 09/19, Wang, Xiao W wrote:
>Hi Xiaolong,
>
[snip]
>> +.. note::
>> +    We need to bind VFIO-pci to VFs before running vdpa sample.
>
>Replace "VFIO-pci" with "vfio-pci".

Got it.

>
>> +
>> +    * modprobe vfio-pci
>> +    * ./usertools/dpdk-devbind.py -b vfio-pci 06:00.2 06:00.3
>> +
>> +Then we can create 2 vdpa ports in interactive cmdline.
>> +
>> +.. code-block:: console
>> +
>> +        vdpa> list
>> +        device id       device address
>> +        0               0000:06:00.2
>> +        1               0000:06:00.3
>
>Could we show out also the device's features and supported queue number?

Sure, it's a good suggestion.

[snip]
>
>> +	ret = rte_vhost_driver_unregister(socket_path);
>> +	if (ret != 0)
>> +		RTE_LOG(ERR, USER1,
>> +				"Fail to unregister vhost driver for %s.\n",
>> +				socket_path);
>> +}
>> +
>> +static void
>> +vdpa_sample_quit(void)
>> +{
>> +	int i;
>> +	for (i = 0; i <  RTE_MIN(MAX_VDPA_SAMPLE_PORTS, dev_total); i++) {
>
>Double " ".

Sorry, not quite understand what's your meaning here.


>
>> +		if (vports[i].ifname[0] != '\0')
>> +			close_vdpa(&vports[i]);
>> +	}
>> +}
>> +
>> +static void
>> +signal_handler(int signum)
>> +{
>> +	if (signum == SIGINT || signum == SIGTERM) {
>> +		printf("\nSignal %d received, preparing to exit...\n", signum);
>> +		vdpa_sample_quit();
>> +		exit(0);
>> +	}
>> +}
>> +
>> +/* interactive cmds */
>> +
>> +/* *** Help command with introduction. *** */
>> +struct cmd_help_result {
>> +	cmdline_fixed_string_t help;
>> +};
>> +
>> +static void cmd_help_parsed(__attribute__((unused)) void *parsed_result,
>> +		struct cmdline *cl,
>> +		__attribute__((unused)) void *data)
>> +{
>> +	cmdline_printf(
>> +		cl,
>> +		"\n"
>> +		"The following commands are currently available:\n\n"
>> +		"Control:\n"
>> +		"    help                                      : Show interactive instructions.\n"
>> +		"    list                                      : list all available vdpa devices.\n"
>> +		"    create <socket file> <vdev addr>          : create a new vdpa
>> port.\n"
>> +		"    quit                                      : exit vdpa sample app.\n"
>> +	);
>> +}
>> +
>> +cmdline_parse_token_string_t cmd_help_help =
>> +	TOKEN_STRING_INITIALIZER(struct cmd_help_result, help, "help");
>> +
>> +cmdline_parse_inst_t cmd_help = {
>> +	.f = cmd_help_parsed,
>> +	.data = NULL,
>> +	.help_str = "show help",
>> +	.tokens = {
>> +		(void *)&cmd_help_help,
>> +		NULL,
>> +	},
>> +};
>> +
>> +/* *** List all available vdpa devices *** */
>> +struct cmd_list_result {
>> +	cmdline_fixed_string_t action;
>> +};
>> +
>> +static void cmd_list_vdpa_devices_parsed(
>> +		__attribute__((unused)) void *parsed_result,
>> +		struct cmdline *cl,
>> +		__attribute__((unused)) void *data)
>> +{
>> +	int did;
>> +	struct rte_vdpa_device *vdev;
>> +	struct rte_pci_addr addr;
>> +
>> +	cmdline_printf(cl, "device id\tdevice address\n");
>> +	for (did = 0; did < dev_total; did++) {
>> +		vdev = rte_vdpa_get_device(did);
>> +		if (!vdev)
>> +			continue;
>> +		addr = vdev->addr.pci_addr;
>> +		cmdline_printf(cl, "%d\t\t"PCI_PRI_FMT"\n", did, addr.domain,
>> +				addr.bus, addr.devid, addr.function);
>> +	}
>> +}
>> +
>> +cmdline_parse_token_string_t cmd_action_list =
>> +	TOKEN_STRING_INITIALIZER(struct cmd_list_result, action, "list");
>> +
>> +cmdline_parse_inst_t cmd_list_vdpa_devices = {
>> +	.f = cmd_list_vdpa_devices_parsed,  /* function to call */
>> +	.data = NULL,      /* 2nd arg of func */
>> +	.help_str = "list all available vdpa devices",
>> +	.tokens = {        /* token list, NULL terminated */
>> +		(void *)&cmd_action_list,
>> +		NULL,
>> +	},
>> +};
>> +
>> +/* *** Create new vdpa port *** */
>> +struct cmd_create_result {
>> +	cmdline_fixed_string_t action;
>> +	cmdline_fixed_string_t socket_path;
>> +	cmdline_fixed_string_t bdf;
>> +};
>> +
>> +static void cmd_create_vdpa_port_parsed(void *parsed_result,
>> +		struct cmdline *cl,
>> +		__attribute__((unused)) void *data)
>> +{
>> +	int did;
>> +	struct cmd_create_result *res = parsed_result;
>> +	struct rte_vdpa_dev_addr addr;
>> +
>> +	strncpy(vports[devcnt].ifname, res->socket_path, MAX_PATH_LEN);
>> +	if (eal_parse_pci_DomBDF(res->bdf, &addr.pci_addr) != 0) {
>
>this is a deprecated API, use rte_pci_addr_parse.

Will update.

>
>> +		cmdline_printf(cl, "Unable to parse the given bdf.\n");
>> +		return;
>> +	}
>> +	addr.type = PCI_ADDR;
>> +	did = rte_vdpa_find_device_id(&addr);
>> +	if (did < 0) {
>> +		cmdline_printf(cl, "Unable to find vdpa devide id.\n");
>> +		return;
>> +	}
>> +
>> +	vports[devcnt].did = did;
>> +	start_vdpa(&vports[devcnt]);
>> +	devcnt++;
>> +}
>> +
>> +cmdline_parse_token_string_t cmd_action_create =
>> +	TOKEN_STRING_INITIALIZER(struct cmd_create_result, action,
>> "create");
>> +cmdline_parse_token_string_t cmd_socket_path =
>> +	TOKEN_STRING_INITIALIZER(struct cmd_create_result, socket_path,
>> NULL);
>> +cmdline_parse_token_string_t cmd_bdf =
>> +	TOKEN_STRING_INITIALIZER(struct cmd_create_result, bdf, NULL);
>> +
>> +cmdline_parse_inst_t cmd_create_vdpa_port = {
>> +	.f = cmd_create_vdpa_port_parsed,  /* function to call */
>> +	.data = NULL,      /* 2nd arg of func */
>> +	.help_str = "create a new vdpa port",
>> +	.tokens = {        /* token list, NULL terminated */
>> +		(void *)&cmd_action_create,
>> +		(void *)&cmd_socket_path,
>> +		(void *)&cmd_bdf,
>> +		NULL,
>> +	},
>> +};
>> +
>> +/* *** QUIT *** */
>> +struct cmd_quit_result {
>> +	cmdline_fixed_string_t quit;
>> +};
>> +
>> +static void cmd_quit_parsed(__attribute__((unused)) void *parsed_result,
>> +		struct cmdline *cl,
>> +		__attribute__((unused)) void *data)
>> +{
>> +	vdpa_sample_quit();
>> +	cmdline_quit(cl);
>> +}
>> +
>> +cmdline_parse_token_string_t cmd_quit_quit =
>> +	TOKEN_STRING_INITIALIZER(struct cmd_quit_result, quit, "quit");
>> +
>> +cmdline_parse_inst_t cmd_quit = {
>> +	.f = cmd_quit_parsed,
>> +	.data = NULL,
>> +	.help_str = "quit: exit application",
>> +	.tokens = {
>> +		(void *)&cmd_quit_quit,
>> +		NULL,
>> +	},
>> +};
>> +cmdline_parse_ctx_t main_ctx[] = {
>> +	(cmdline_parse_inst_t *)&cmd_help,
>> +	(cmdline_parse_inst_t *)&cmd_list_vdpa_devices,
>> +	(cmdline_parse_inst_t *)&cmd_create_vdpa_port,
>> +	(cmdline_parse_inst_t *)&cmd_quit,
>> +	NULL,
>> +};
>> +
>> +int
>> +main(int argc, char *argv[])
>> +{
>> +	char ch;
>> +	int i;
>> +	int ret;
>> +	struct cmdline *cl;
>> +
>> +	ret = rte_eal_init(argc, argv);
>> +	if (ret < 0)
>> +		rte_exit(EXIT_FAILURE, "eal init failed\n");
>> +	argc -= ret;
>> +	argv += ret;
>> +
>> +	signal(SIGINT, signal_handler);
>> +	signal(SIGTERM, signal_handler);
>> +
>> +	data_init();
>
>data_init first, then set signal handler, otherwise the signal handler may use some uninitialized variable.
>

Nice catch, will fix it.

Thanks,
Xiaolong

>> +
>> +	ret = parse_args(argc, argv);
>> +	if (ret < 0)
>> +		rte_exit(EXIT_FAILURE, "invalid argument\n");
>> +
>> +	if (interactive == 1) {
>> +		cl = cmdline_stdin_new(main_ctx, "vdpa> ");
>> +		if (cl == NULL)
>> +			rte_panic("Cannot create cmdline instance\n");
>> +		cmdline_interact(cl);
>> +		cmdline_stdin_exit(cl);
>> +	} else {
>> +		for (i = 0; i <  RTE_MIN(MAX_VDPA_SAMPLE_PORTS,
>> dev_total);
>
>double " "
>
>BRs,
>Xiao

  reply	other threads:[~2018-09-19 15:34 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-13 18:06 [PATCH v2 1/2] vhost: introduce API to get vDPA device number Xiaolong Ye
2018-09-13 18:06 ` [PATCH v2 2/2] examples/vdpa: introduce a new sample for vDPA Xiaolong Ye
2018-09-19 14:46   ` Wang, Xiao W
2018-09-19 22:23     ` Ye Xiaolong [this message]
2018-09-20  4:33       ` Wang, Xiao W
2018-09-19 14:46 ` [PATCH v2 1/2] vhost: introduce API to get vDPA device number Wang, Xiao W
2018-09-19 22:17   ` Ye Xiaolong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180919222303.GC42303@intel.com \
    --to=xiaolong.ye@intel.com \
    --cc=dev@dpdk.org \
    --cc=haiyue.wang@intel.com \
    --cc=maxime.coquelin@redhat.com \
    --cc=roszenrami@gmail.com \
    --cc=tiwei.bie@intel.com \
    --cc=xiao.w.wang@intel.com \
    --cc=zhihong.wang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.