From nobody Mon Feb 9 12:04:19 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1667906688; cv=none; d=zohomail.com; s=zohoarc; b=fLgHBbniy4IlHVXynT6Ikae04ItZ/ix8Og9/BmNox3sZuatHibFT5L3UsQWrwfofpWm4YXAb2Q+8WZAX3nzJOh4OiK4y6YTompXLKphi1fntKUwxhfL2r7oZxQRIzEB626hVAWV/qdU/JWNRSPAC962CvDZ24dFAhDE0PNFz56w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1667906688; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=obQ8DZ5BACOYz3wKPJhR8jMno97FAVM9CyAho1QNHtU=; b=H3ReBUPMIXPMkd21xCOyzILmwYp//dcUPrWFUvDQlfPtYyWbpj5vN0+gGn3ysJy+WN1ULf5P5S2o9NfNnDBd3b4dkqbEveS+bCjmRnUmrdponvLH1fPy7yzLH+Mzk3DeABZh64yAf/7i6sPE3jU/rcHlJqGN7qcXC24sImZKlQc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1667906688429198.1065557464375; Tue, 8 Nov 2022 03:24:48 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.439976.694029 (Exim 4.92) (envelope-from ) id 1osMiS-00074Z-Nz; Tue, 08 Nov 2022 11:24:28 +0000 Received: by outflank-mailman (output) from mailman id 439976.694029; Tue, 08 Nov 2022 11:24:28 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1osMiS-00073j-Kp; Tue, 08 Nov 2022 11:24:28 +0000 Received: by outflank-mailman (input) for mailman id 439976; Tue, 08 Nov 2022 11:24:27 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1osMiR-0006S1-Cr for xen-devel@lists.xen.org; Tue, 08 Nov 2022 11:24:27 +0000 Received: from mail-pj1-x1034.google.com (mail-pj1-x1034.google.com [2607:f8b0:4864:20::1034]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id e6a6b81e-5f57-11ed-8fd1-01056ac49cbb; Tue, 08 Nov 2022 12:24:26 +0100 (CET) Received: by mail-pj1-x1034.google.com with SMTP id m14-20020a17090a3f8e00b00212dab39bcdso17645849pjc.0 for ; Tue, 08 Nov 2022 03:24:26 -0800 (PST) Received: from localhost ([122.172.84.80]) by smtp.gmail.com with ESMTPSA id u9-20020a17090a3fc900b00200461cfa99sm7754719pjm.11.2022.11.08.03.24.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Nov 2022 03:24:20 -0800 (PST) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: e6a6b81e-5f57-11ed-8fd1-01056ac49cbb DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=obQ8DZ5BACOYz3wKPJhR8jMno97FAVM9CyAho1QNHtU=; b=nVYHAI3sksJD2yknMbxKHfKQFu00MZDzVrbCEykWA85twFbEAZ1toG3GjsTJvXPA3d VjNpakqVoseWB1FrzcB5Pxza5WQ7w0HRey9z0+jxDJi3Zuu6TCbcnLVl3aWLuwX185nt aNHHIy7eG155pbz1NmU1d8nL2uG8CzsfM3DJ160XMjLY+ugegeEooIYWFcepc2la5rL+ wDGqbouymHRZfMj8Ynb6FtfVUJYl2I2tmUdH1wc+k6xh44BpLxUBP/TSsJrikaLsYlOq rh0+oC4H0iby0Av23Jks+J0Rug2muhVWDhq4uqu6PMubjfriqU0ew94LRrWmwaL+xQZn tIrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=obQ8DZ5BACOYz3wKPJhR8jMno97FAVM9CyAho1QNHtU=; b=GP+dcs9wi/vQLJcSYMix8HZ3BfbNBoywxPx8BIaPdy4DPYHBzVagGtRgE1e7+gLZeT gfzAYhl0kon2IngLKWqSgr4rwZPVrQmOy5PH2FHFJU1+KQu0dHRMemaU++2+UYkuYebf P17X7BKmLZeAL2RJTESMWOYqKC9G1YFZPm5ncqWjano6/p5I5lrq5fNxhHDaEKU4Wk8e ct5l7YqrpOQq5eM64eRgYnYRP1dpdUfJWYQp0zrf9uE+eeLdibzMKnETKbI7e3b8M4lX eSr3GsyMapW5dmTi5UIWLGv6EXsnRuDZVqpWitJgDR4Ni1Oe8dsg4I5VES59DYbHr9In 44RA== X-Gm-Message-State: ACrzQf30wW4VlPeF3BC2NzaZPUQY7DzKO1GxKqmxgpoDs5WNvqlfuYLE 7YFhD3gnoVvoH7O7nwlm3X5k2DmHC9Ccwg== X-Google-Smtp-Source: AMsMyM5S+xvSbtuyQCGITbssl4YxD30xFW0fcg8YeyElkvcQSPzwLPQRwxIPekz5tbxFH9eT2duHBw== X-Received: by 2002:a17:902:e8cd:b0:186:9efc:6790 with SMTP id v13-20020a170902e8cd00b001869efc6790mr55901025plg.91.1667906664869; Tue, 08 Nov 2022 03:24:24 -0800 (PST) From: Viresh Kumar To: xen-devel@lists.xen.org, Juergen Gross , Julien Grall , Anthony PERARD Cc: Viresh Kumar , Vincent Guittot , stratos-dev@op-lists.linaro.org, =?UTF-8?q?Alex=20Benn=C3=A9e?= , Stefano Stabellini , Mathieu Poirier , Mike Holmes , Oleksandr Tyshchenko , Wei Liu Subject: [PATCH V6 2/3] xl: Add support to parse generic virtio device Date: Tue, 8 Nov 2022 16:53:59 +0530 Message-Id: <73663851c5223b99ed0f23a163a0d44cba0ebe29.1667906228.git.viresh.kumar@linaro.org> X-Mailer: git-send-email 2.31.1.272.g89b43f80a514 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1667906689413100001 Content-Type: text/plain; charset="utf-8" This patch adds basic support for parsing generic Virtio backend. An example of domain configuration for mmio based Virtio I2C device is: virtio =3D ["type=3Dvirtio,device22,transport=3Dmmio"] Signed-off-by: Viresh Kumar --- tools/ocaml/libs/xl/genwrap.py | 1 + tools/ocaml/libs/xl/xenlight_stubs.c | 1 + tools/xl/xl_parse.c | 84 ++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) diff --git a/tools/ocaml/libs/xl/genwrap.py b/tools/ocaml/libs/xl/genwrap.py index 7bf26bdcd831..b188104299b1 100644 --- a/tools/ocaml/libs/xl/genwrap.py +++ b/tools/ocaml/libs/xl/genwrap.py @@ -36,6 +36,7 @@ DEVICE_LIST =3D [ ("list", ["ctx", "domid"= , "t list"]), functions =3D { # ( name , [type1,type2,....] ) "device_vfb": DEVICE_FUNCTIONS, "device_vkb": DEVICE_FUNCTIONS, + "device_virtio": DEVICE_FUNCTIONS, "device_disk": DEVICE_FUNCTIONS + DEVICE_LIST + [ ("insert", ["ctx", "t", "domid", "?async:'= a", "unit", "unit"]), ("of_vdev", ["ctx", "domid", "string", "t"]= ), diff --git a/tools/ocaml/libs/xl/xenlight_stubs.c b/tools/ocaml/libs/xl/xen= light_stubs.c index 45b8af61c74a..8e54f95da7c7 100644 --- a/tools/ocaml/libs/xl/xenlight_stubs.c +++ b/tools/ocaml/libs/xl/xenlight_stubs.c @@ -707,6 +707,7 @@ DEVICE_ADDREMOVE(disk) DEVICE_ADDREMOVE(nic) DEVICE_ADDREMOVE(vfb) DEVICE_ADDREMOVE(vkb) +DEVICE_ADDREMOVE(virtio) DEVICE_ADDREMOVE(pci) _DEVICE_ADDREMOVE(disk, cdrom, insert) =20 diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c index 1b5381cef033..c6f35c069d2a 100644 --- a/tools/xl/xl_parse.c +++ b/tools/xl/xl_parse.c @@ -1208,6 +1208,87 @@ static void parse_vkb_list(const XLU_Config *config, if (rc) exit(EXIT_FAILURE); } =20 +static int parse_virtio_config(libxl_device_virtio *virtio, char *token) +{ + char *oparg; + int rc; + + if (MATCH_OPTION("backend", token, oparg)) { + virtio->backend_domname =3D strdup(oparg); + } else if (MATCH_OPTION("type", token, oparg)) { + virtio->type =3D strdup(oparg); + } else if (MATCH_OPTION("transport", token, oparg)) { + rc =3D libxl_virtio_transport_from_string(oparg, &virtio->transpor= t); + if (rc) return rc; + } else if (MATCH_OPTION("irq", token, oparg)) { + virtio->irq =3D strtoul(oparg, NULL, 0); + } else if (MATCH_OPTION("base", token, oparg)) { + virtio->base =3D strtoul(oparg, NULL, 0); + } else { + fprintf(stderr, "Unknown string \"%s\" in virtio spec\n", token); + return -1; + } + + return 0; +} + +static void parse_virtio_list(const XLU_Config *config, + libxl_domain_config *d_config) +{ + XLU_ConfigList *virtios; + const char *item; + char *buf =3D NULL, *oparg, *str =3D NULL; + int rc; + + if (!xlu_cfg_get_list (config, "virtio", &virtios, 0, 0)) { + int entry =3D 0; + while ((item =3D xlu_cfg_get_listitem(virtios, entry)) !=3D NULL) { + libxl_device_virtio *virtio; + char *p; + + virtio =3D ARRAY_EXTEND_INIT(d_config->virtios, d_config->num_= virtios, + libxl_device_virtio_init); + + buf =3D strdup(item); + + p =3D strtok(buf, ","); + while (p !=3D NULL) + { + while (*p =3D=3D ' ') p++; + + // Type may contain a comma, do special handling. + if (MATCH_OPTION("type", p, oparg)) { + if (!strncmp(oparg, "virtio", strlen("virtio"))) { + char *p2 =3D strtok(NULL, ","); + str =3D malloc(strlen(p) + strlen(p2) + 2); + + strcpy(str, p); + strcat(str, ","); + strcat(str, p2); + p =3D str; + } + } + + rc =3D parse_virtio_config(virtio, p); + if (rc) goto out; + + free(str); + str =3D NULL; + p =3D strtok(NULL, ","); + } + + entry++; + free(buf); + } + } + + return; + +out: + free(buf); + if (rc) exit(EXIT_FAILURE); +} + void parse_config_data(const char *config_source, const char *config_data, int config_len, @@ -2309,8 +2390,10 @@ void parse_config_data(const char *config_source, =20 d_config->num_vfbs =3D 0; d_config->num_vkbs =3D 0; + d_config->num_virtios =3D 0; d_config->vfbs =3D NULL; d_config->vkbs =3D NULL; + d_config->virtios =3D NULL; =20 if (!xlu_cfg_get_list (config, "vfb", &cvfbs, 0, 0)) { while ((buf =3D xlu_cfg_get_listitem (cvfbs, d_config->num_vfbs)) = !=3D NULL) { @@ -2752,6 +2835,7 @@ void parse_config_data(const char *config_source, } =20 parse_vkb_list(config, d_config); + parse_virtio_list(config, d_config); =20 xlu_cfg_get_defbool(config, "xend_suspend_evtchn_compat", &c_info->xend_suspend_evtchn_compat, 0); --=20 2.31.1.272.g89b43f80a514