From patchwork Wed May 10 14:35:12 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bhupinder Thakur X-Patchwork-Id: 99001 Delivered-To: patch@linaro.org Received: by 10.182.142.97 with SMTP id rv1csp234168obb; Wed, 10 May 2017 07:39:25 -0700 (PDT) X-Received: by 10.36.31.143 with SMTP id d137mr1696329itd.95.1494427165354; Wed, 10 May 2017 07:39:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1494427165; cv=none; d=google.com; s=arc-20160816; b=eFfq/3NAxyl1y6QQUmcUaXWokL6uDjC+YwQJCcwvphYvEJ2hSzuzsDj4ysjX5lzQMw Umbmp4O92KhK7V7HTskVbtfmZe2gumnSi7jUpAKVkdx+SqonhdL77WklFq07/rpIRRs3 ib5hClwtBaS/pNqz/ehUGcfDdRSJBJYYBY83iEMLSXLAy8BduJBM3Y1TdhGDfGINj77J I49ov2I5v7QnDAW1euQ1h759gAvQLJWq2Jw/olPCr8QS/TVJMAkSM+LljrwNI9B9E8ZL 9sBSnA3OIxq8FTPsdiTH5+6Cf6XCKw9+EcfzWSY/0tIRT5TUgc6OD0nVZRklq808OCse BO4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-unsubscribe:list-id :precedence:subject:cc:message-id:date:to:from:dkim-signature :arc-authentication-results; bh=YmQsn5QEMwhdIcuS+XxbsfKjp/Z/CkkRCNQHLq4LItM=; b=Jv/cWzcufapaN7eJjS3+UptOBejgnxX3R8/Ag6eDMzONaIFpOzutFdcBHQsU1e/ijY oFqLsYBiqQGq08sjqVFRbn6nEzQkBsWqtc7Oedo/3btXL+o/cKdDUkJAfocaHvGX1swh Ugi3rucNT+ZVtsc537Jlq5yzP/CZgRWO3CPR2qw3axPNjN0mz4DFj7yja8L99Jortiey EdChGFr6FRfLn3i3YFAn5QRu/d1SHSfehZNittXP4kEACUG3ccrko0nTVShYu57/kOia vm2iu7tJztmG8/jeln3/DWj29kt6XlnNiCoIRDJ6BjZgkoIcjYXA//WN8cuKz4WbFPcL KODg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) smtp.mailfrom=xen-devel-bounces@lists.xen.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.xenproject.org (lists.xenproject.org. [192.237.175.120]) by mx.google.com with ESMTPS id 201si3922747itw.49.2017.05.10.07.39.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 10 May 2017 07:39:25 -0700 (PDT) Received-SPF: neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) client-ip=192.237.175.120; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) smtp.mailfrom=xen-devel-bounces@lists.xen.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d8SkB-0004jN-H7; Wed, 10 May 2017 14:37:35 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d8SkA-0004iG-PY for xen-devel@lists.xenproject.org; Wed, 10 May 2017 14:37:34 +0000 Received: from [85.158.139.211] by server-15.bemta-5.messagelabs.com id 38/FF-01730-EA523195; Wed, 10 May 2017 14:37:34 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpjkeJIrShJLcpLzFFi42Lxqg3W1V2rKhx psHOPqMX3LZOZHBg9Dn+4whLAGMWamZeUX5HAmtFw0bbgjU9F19k2lgbGH2ZdjFwcQgIzGCU+ 333DBuKwCLQzS0y8O4kZxJEQeMcica3/OnsXIweQEyfxbF1GFyMnkFkpsermPRYQW0hAS+Loq dmsEJOamSQ+nT/OCFLPJmAiMatDAqRGREBJ4t6qyUwgNrOAt8SHI//YQWxhAX+Jo+9mM4PYLA KqElsungaL8wLVTDm7jxFil5zEzXOdzBMY+RYwMqxi1ChOLSpLLdI1tNRLKspMzyjJTczM0TU 0MNXLTS0uTkxPzUlMKtZLzs/dxAgMk3oGBsYdjI/6/Q4xSnIwKYny6u4SihTiS8pPqcxILM6I LyrNSS0+xCjDwaEkwRulIhwpJFiUmp5akZaZAwxYmLQEB4+SCG8zSJq3uCAxtzgzHSJ1ilGX4 9HKH++ZhFjy8vNSpcR5O0GKBECKMkrz4EbAoucSo6yUMC8jAwODEE9BalFuZgmq/CtGcQ5GJW FeWZApPJl5JXCbXgEdwQR0RCCDAMgRJYkIKakGxlkfBazj3rS/Co56VFvEe70xcXL2HPlVdu8 yloesNilWFxcWP3083zFdR0/R/U/klcjSDfZ/tkRx2/9l356yom7jQb7VzoU72qcXKU3jqjJY cTZo8fNu7yM3yk6LfxRoyFy2y058Y8VO4aD5Fu//S6/SSjodet7v+898yzt+1Zrpm5Lu9qjMV WIpzkg01GIuKk4EANiQ+ymZAgAA X-Env-Sender: bhupinder.thakur@linaro.org X-Msg-Ref: server-4.tower-206.messagelabs.com!1494427051!97288007!1 X-Originating-IP: [74.125.83.45] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.4.12; banners=-,-,- X-VirusChecked: Checked Received: (qmail 53111 invoked from network); 10 May 2017 14:37:33 -0000 Received: from mail-pg0-f45.google.com (HELO mail-pg0-f45.google.com) (74.125.83.45) by server-4.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted SMTP; 10 May 2017 14:37:33 -0000 Received: by mail-pg0-f45.google.com with SMTP id u28so17710925pgn.1 for ; Wed, 10 May 2017 07:37:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=FE2nmDnhcMOMFKEcmeYebitEJNL/bFbJ3zZcPiKbL4U=; b=ccqHqZwLvX3jNelGr+rSeejZ0aBS/mUC4InMDWAEN7STbaAGJNZDB9jQCHgHBKFpbK 37ln69wDBWjNCIkbh3UOD0eC/CPcMOfH97v5yJXdTWYsnaaiM1hpq2uSgMB1MbBCxItk 7VT8I8YlvQvv08KWr6F7kc8JaM16el++kKZ5o= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=FE2nmDnhcMOMFKEcmeYebitEJNL/bFbJ3zZcPiKbL4U=; b=VKd+0R5V+F383kYMkfCHUsEVovxsuzAWnYhd3kj+RsO0tUnIoRcy0bsTOG06VU5w+f pmJa4rzR53UBkKeI2Syt85PZjTHLWTZKRzUHZeZyZBexXRxrmQWHBpLsIqc26qY3bajK uKB3TQVVhFbnZWuiPfklSiXdimOrUKljjGCSgohNZAMj1msXzM9s5p1m/UiMzkrE0Ou2 CO1MZVUoq34ddtlBjPNnmkLIJXZl74MHg2k1oLKXbsUqfGOGCHVm9loAPhYkItMdenH+ 6VuDcnLZ632iJsES3HX0HZTKBrX/NAlapBlGfz0zzb5gZpBNVsSibgCo3JothczX5cTq fCoQ== X-Gm-Message-State: AODbwcBkMj0xZtgMMz+eZika1GYFPJf/x6AdbAVhVBsalTjscNOP6Gvy vW6SyGZdMc5RdXWI X-Received: by 10.84.232.76 with SMTP id f12mr8748531pln.101.1494427051320; Wed, 10 May 2017 07:37:31 -0700 (PDT) Received: from blr-ubuntu-linaro.wlan.qualcomm.com ([61.0.91.57]) by smtp.gmail.com with ESMTPSA id r73sm6167781pfa.65.2017.05.10.07.37.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 10 May 2017 07:37:30 -0700 (PDT) From: Bhupinder Thakur To: xen-devel@lists.xenproject.org Date: Wed, 10 May 2017 20:05:12 +0530 Message-Id: <1494426918-32737-1-git-send-email-bhupinder.thakur@linaro.org> X-Mailer: git-send-email 2.7.4 Cc: Wei Liu , Ian Jackson Subject: [Xen-devel] [PATCH 06/12 v3] xen/arm: vpl011: Add a new vuart node in the xenstore X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" Add a new vuart console node to xenstore. This node is added at /local/domain/$DOMID/vuart/0. The node contains information such as the ring-ref, event channel, buffer limit and type of console. Signed-off-by: Bhupinder Thakur --- tools/libxl/libxl_console.c | 33 ++++++++++++++++++++++++++ tools/libxl/libxl_create.c | 24 +++++++++++++++---- tools/libxl/libxl_device.c | 45 ++++++++++++++++++++++++++---------- tools/libxl/libxl_internal.h | 4 ++++ tools/libxl/libxl_types_internal.idl | 1 + 5 files changed, 91 insertions(+), 16 deletions(-) diff --git a/tools/libxl/libxl_console.c b/tools/libxl/libxl_console.c index 853be15..870cb9c 100644 --- a/tools/libxl/libxl_console.c +++ b/tools/libxl/libxl_console.c @@ -344,6 +344,39 @@ out: return rc; } +int libxl__device_vuart_add(libxl__gc *gc, uint32_t domid, + libxl__device_console *console, + libxl__domain_build_state *state, + libxl__device *device) +{ + flexarray_t *ro_front; + int rc; + + ro_front = flexarray_make(gc, 16, 1); + + device->backend_devid = console->devid; + device->backend_domid = console->backend_domid; + device->backend_kind = LIBXL__DEVICE_KIND_VUART; + device->devid = console->devid; + device->domid = domid; + device->kind = LIBXL__DEVICE_KIND_VUART; + + flexarray_append(ro_front, "port"); + flexarray_append(ro_front, GCSPRINTF("%"PRIu32, state->vuart_port)); + flexarray_append(ro_front, "ring-ref"); + flexarray_append(ro_front, GCSPRINTF("%lu", state->vuart_gfn)); + flexarray_append(ro_front, "limit"); + flexarray_append(ro_front, GCSPRINTF("%d", LIBXL_XENCONSOLE_LIMIT)); + flexarray_append(ro_front, "type"); + flexarray_append(ro_front, "xenconsoled"); + + rc = libxl__device_generic_add(gc, XBT_NULL, device, + NULL, + NULL, + libxl__xs_kvs_of_flexarray(gc, ro_front)); + return rc; +} + int libxl__init_console_from_channel(libxl__gc *gc, libxl__device_console *console, int dev_num, diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index 29daa35..39da2d0 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -1332,10 +1332,18 @@ static void domcreate_launch_dm(libxl__egc *egc, libxl__multidev *multidev, switch (d_config->c_info.type) { case LIBXL_DOMAIN_TYPE_HVM: { - libxl__device_console console; - libxl__device device; + libxl__device_console console, vuart; + libxl__device device, vuart_device; libxl_device_vkb vkb; + if (d_config->b_info.vuart) + { + init_console_info(gc, &vuart, 0); + vuart.backend_domid = state->console_domid; + libxl__device_vuart_add(gc, domid, &vuart, state, &vuart_device); + libxl__device_console_dispose(&vuart); + } + init_console_info(gc, &console, 0); console.backend_domid = state->console_domid; libxl__device_console_add(gc, domid, &console, state, &device); @@ -1369,14 +1377,22 @@ static void domcreate_launch_dm(libxl__egc *egc, libxl__multidev *multidev, } case LIBXL_DOMAIN_TYPE_PV: { - libxl__device_console console; - libxl__device device; + libxl__device_console console, vuart; + libxl__device device, vuart_device; for (i = 0; i < d_config->num_vfbs; i++) { libxl__device_vfb_add(gc, domid, &d_config->vfbs[i]); libxl__device_vkb_add(gc, domid, &d_config->vkbs[i]); } + if (d_config->b_info.vuart) + { + init_console_info(gc, &vuart, 0); + vuart.backend_domid = state->console_domid; + libxl__device_vuart_add(gc, domid, &vuart, state, &vuart_device); + libxl__device_console_dispose(&vuart); + } + init_console_info(gc, &console, 0); console.backend_domid = state->console_domid; libxl__device_console_add(gc, domid, &console, state, &device); diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c index 5e96676..bb25672 100644 --- a/tools/libxl/libxl_device.c +++ b/tools/libxl/libxl_device.c @@ -26,6 +26,9 @@ static char *libxl__device_frontend_path(libxl__gc *gc, libxl__device *device) if (device->kind == LIBXL__DEVICE_KIND_CONSOLE && device->devid == 0) return GCSPRINTF("%s/console", dom_path); + if (device->kind == LIBXL__DEVICE_KIND_VUART) + return GCSPRINTF("%s/vuart/%d", dom_path, device->devid); + return GCSPRINTF("%s/device/%s/%d", dom_path, libxl__device_kind_to_string(device->kind), device->devid); @@ -151,13 +154,19 @@ retry_transaction: if (rc) goto out; if (!libxl_only) { - rc = libxl__xs_write_checked(gc, t, GCSPRINTF("%s/frontend",libxl_path), - frontend_path); - if (rc) goto out; + if (fents || ro_fents) + { + rc = libxl__xs_write_checked(gc, t, GCSPRINTF("%s/frontend",libxl_path), + frontend_path); + if (rc) goto out; + } - rc = libxl__xs_write_checked(gc, t, GCSPRINTF("%s/backend",libxl_path), - backend_path); - if (rc) goto out; + if (bents) + { + rc = libxl__xs_write_checked(gc, t, GCSPRINTF("%s/backend",libxl_path), + backend_path); + if (rc) goto out; + } } /* xxx much of this function lacks error checks! */ @@ -170,14 +179,20 @@ retry_transaction: * historically contained other information, such as the * vnc-port, which we don't want the guest fiddling with. */ - if (device->kind == LIBXL__DEVICE_KIND_CONSOLE && device->devid == 0) + if ((device->kind == LIBXL__DEVICE_KIND_CONSOLE && device->devid == 0) || + (device->kind == LIBXL__DEVICE_KIND_VUART)) xs_set_permissions(ctx->xsh, t, frontend_path, ro_frontend_perms, ARRAY_SIZE(ro_frontend_perms)); else xs_set_permissions(ctx->xsh, t, frontend_path, frontend_perms, ARRAY_SIZE(frontend_perms)); - xs_write(ctx->xsh, t, GCSPRINTF("%s/backend", frontend_path), - backend_path, strlen(backend_path)); + /* + * Create backend node only if there are entries to be populated in the + * backend node. + */ + if (bents) + xs_write(ctx->xsh, t, GCSPRINTF("%s/backend", frontend_path), + backend_path, strlen(backend_path)); if (fents) libxl__xs_writev_perms(gc, t, frontend_path, fents, frontend_perms, ARRAY_SIZE(frontend_perms)); @@ -192,8 +207,13 @@ retry_transaction: xs_mkdir(ctx->xsh, t, backend_path); xs_set_permissions(ctx->xsh, t, backend_path, backend_perms, ARRAY_SIZE(backend_perms)); - xs_write(ctx->xsh, t, GCSPRINTF("%s/frontend", backend_path), - frontend_path, strlen(frontend_path)); + /* + * Create frontend node only if there are entries populated in the + * frontend node. + */ + if (fents || ro_fents) + xs_write(ctx->xsh, t, GCSPRINTF("%s/frontend", backend_path), + frontend_path, strlen(frontend_path)); libxl__xs_writev(gc, t, backend_path, bents); } @@ -800,7 +820,8 @@ void libxl__devices_destroy(libxl__egc *egc, libxl__devices_remove_state *drs) dev->domid = domid; dev->kind = kind; dev->devid = atoi(devs[j]); - if (dev->backend_kind == LIBXL__DEVICE_KIND_CONSOLE) { + if (dev->backend_kind == LIBXL__DEVICE_KIND_CONSOLE || + dev->backend_kind == LIBXL__DEVICE_KIND_VUART) { /* Currently console devices can be destroyed * synchronously by just removing xenstore entries, * this is what libxl__device_destroy does. diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 4e2c247..7a22db0 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -1202,6 +1202,10 @@ _hidden int libxl__device_console_add(libxl__gc *gc, uint32_t domid, libxl__device_console *console, libxl__domain_build_state *state, libxl__device *device); +_hidden int libxl__device_vuart_add(libxl__gc *gc, uint32_t domid, + libxl__device_console *console, + libxl__domain_build_state *state, + libxl__device *device); /* Returns 1 if device exists, 0 if not, ERROR_* (<0) on error. */ _hidden int libxl__device_exists(libxl__gc *gc, xs_transaction_t t, diff --git a/tools/libxl/libxl_types_internal.idl b/tools/libxl/libxl_types_internal.idl index 7dc4d0f..c463c33 100644 --- a/tools/libxl/libxl_types_internal.idl +++ b/tools/libxl/libxl_types_internal.idl @@ -26,6 +26,7 @@ libxl__device_kind = Enumeration("device_kind", [ (9, "VUSB"), (10, "QUSB"), (11, "9PFS"), + (12, "VUART"), ]) libxl__console_backend = Enumeration("console_backend", [ From patchwork Wed May 10 14:35:13 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bhupinder Thakur X-Patchwork-Id: 99002 Delivered-To: patch@linaro.org Received: by 10.182.142.97 with SMTP id rv1csp234171obb; Wed, 10 May 2017 07:39:25 -0700 (PDT) X-Received: by 10.36.214.200 with SMTP id o191mr1212108itg.48.1494427165803; Wed, 10 May 2017 07:39:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1494427165; cv=none; d=google.com; s=arc-20160816; b=RJ0L2kNOPQoIH1AZO0ImWUWboucYZsXZAvSXuhygOw4FtMGGTHns8yVf0qioQNvEqI FvF+0pZPlbQTw9OJUB6PFrdwHHGhh/rLRsYqLfuBuPHwvH7SiqsFWxQiQtFyg3HnaC/X m7rGpuKiEQrhJVuWT6fWYtQZ8uHVTpp9Bil6iolIeMpGgDfvKDLN901cF6zJKQ0AA0iv JTADW7slelFA7Z9P6wqG8RLD7B1YmYAtIqLj1lAOTCmfgbnSmUOLKvb9tZLczhLRyD0K xTi0rrmBWO8f42Yw/lZj9hsVKrYe0b9FxEXAlrY6S6KpyDffWxqMw63hAAXFD9Zc5xHO Xp5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-unsubscribe:list-id :precedence:subject:cc:references:in-reply-to:message-id:date:to :from:dkim-signature:arc-authentication-results; bh=Dekwgr+qJK6dKTGvNRrqiGt0F4m5GVRgwmiHVW4Yuf4=; b=tbLR4MIPdV7hwJpOXZaNrhnei1yJNoGqRdeX9hUCK4Xh4LeKmG2ospw0yq863KVxlZ 5SECGtNKDxEm3n1izraJoS6ksU82xNL+hhyeoJthaQvGqz2N/3dfcndtlwB8V3A4eCtE vQKBFgKIcXGUeviZw+CElCobNlN6fsphKAGgDiJzMmGdNU9PUxgwmmBniGZMbH6ZzEc7 0/t412hzOeEwiCKym185/Ke86GkPRgPEk013YpuhNa/vaVg/SXTHabFWWJmIhv24GYeB xpOTdIK4JE8rxzwLRZXQqJXto8Iu/qXhWGKF42/JbK/iq+xC9KkI4VxsdNwSTJ8k9DIr VMLw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) smtp.mailfrom=xen-devel-bounces@lists.xen.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.xenproject.org (lists.xenproject.org. [192.237.175.120]) by mx.google.com with ESMTPS id i126si2360319iof.53.2017.05.10.07.39.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 10 May 2017 07:39:25 -0700 (PDT) Received-SPF: neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) client-ip=192.237.175.120; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) smtp.mailfrom=xen-devel-bounces@lists.xen.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d8SkG-0004lc-OX; Wed, 10 May 2017 14:37:40 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d8SkF-0004kt-BV for xen-devel@lists.xenproject.org; Wed, 10 May 2017 14:37:39 +0000 Received: from [193.109.254.147] by server-11.bemta-6.messagelabs.com id 1A/DB-03587-2B523195; Wed, 10 May 2017 14:37:38 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprPIsWRWlGSWpSXmKPExsXiVRtsqLtRVTj SYN0Pa4vvWyYzOTB6HP5whSWAMYo1My8pvyKBNePsx7csBe+EK9pX9rM1MF4V6GLk4hASmMko 0X9wPhuIwyIwj1li//o5YI6EQD+rxJFvxxi7GDmBnDiJDdO6oOwyiUNLVrGD2EICWhJHT81mh RjVzCSxYOYh5i5GDg42AROJWR0SIDUiAkoS91ZNZgKxmQW8JT4c+QfWKywQIfH44VUwm0VAVe LU7hmsIK28QDXNXZoQq+Qkbp7rZAaxOQV8JBa9eskCsdZb4tHnPywTGAUWMDKsYtQoTi0qSy3 SNbLUSyrKTM8oyU3MzNE1NDDTy00tLk5MT81JTCrWS87P3cQIDCwGINjBeGBR4CFGSQ4mJVFe 3V1CkUJ8SfkplRmJxRnxRaU5qcWHGGU4OJQkeE+oCEcKCRalpqdWpGXmAEMcJi3BwaMkwrsXJ M1bXJCYW5yZDpE6xajL8Wjlj/dMQix5+XmpUuK8nSBFAiBFGaV5cCNg8XaJUVZKmJcR6Cghno LUotzMElT5V4ziHIxKwrwXQKbwZOaVwG16BXQEE9ARgQwCIEeUJCKkpBoYD+xLOxWRrjjLyN9 qY742k+7h42a2fXqTL7JWWT+1Udgl92ZuQpPVp2CGxF7O2d99NnUVxn177bPRkkE8rVN7Zdv/ 5gVLIi6ef7jw9PwqkyC+ntio5doz3Xl5THvyDWYZV7C8+VyhfXP2qa2TzPKUWa9Fz1KKeaJ++ /JRg+8mjfsSjkY3zYxSYinOSDTUYi4qTgQAGnezr7ICAAA= X-Env-Sender: bhupinder.thakur@linaro.org X-Msg-Ref: server-3.tower-27.messagelabs.com!1494427056!101067131!1 X-Originating-IP: [74.125.83.49] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.4.12; banners=-,-,- X-VirusChecked: Checked Received: (qmail 53408 invoked from network); 10 May 2017 14:37:37 -0000 Received: from mail-pg0-f49.google.com (HELO mail-pg0-f49.google.com) (74.125.83.49) by server-3.tower-27.messagelabs.com with AES128-GCM-SHA256 encrypted SMTP; 10 May 2017 14:37:37 -0000 Received: by mail-pg0-f49.google.com with SMTP id u187so17673265pgb.0 for ; Wed, 10 May 2017 07:37:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=+6Sy4cq/rwVv/N/EC7bK+kPiSgzhsQKhN5hatALg6Fc=; b=GZtv2Gdkbyiet+APqQFws8q7GBSrllxxCKoAN0qwJumT9gXhZb8Ht0Nx5CsTpQcXED +sKYkrL2iV0aAeZdlIhNX6POTmt/eAPhrDWxDnCUISSjzC71uYnH80Akl2mxqfEhKoIP 7/S8hMxL4Ppu+ltcbxh6IxOnCChvxDdVeEYwc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=+6Sy4cq/rwVv/N/EC7bK+kPiSgzhsQKhN5hatALg6Fc=; b=dZiu3Pj2nQQqcr9z6uCCL+Kugpd1572+t9HRm0rXrjw6P2tGDREHpZe6/FlbAsjDBc lGdW4DcFVq61+y0OGu38ZoxyaVW4hE0+vOqkxmlUgkwkbB/IM2OaCst1kTAlx/yoTH+e W4Vn/RlfP+5ZW4mGm5JWQVS5AVy6h3Z2DebXIbvZFBcza7EdPPzs2KPR85X5dlS03Hqs 43nPmgOu1Jdd8YUN37vX2JwzEHD6dfCrJHzxdDvORqyOR3ZL5EMiUwz0qE08FU1PrRGA 6um2tzo/Az2D/+mhttgP7B8/fPiOP4xW5h7ADY8RCELeGFVjTewPjHkNvacNwCqrtEoi jbxQ== X-Gm-Message-State: AODbwcBRKqnOoxWyQB07RZu5TXHQSk8ZSpivUOZynGI3zMO9NpYMmIGY R9hDJCxX6/I0A/E6 X-Received: by 10.99.164.2 with SMTP id c2mr6837147pgf.73.1494427056545; Wed, 10 May 2017 07:37:36 -0700 (PDT) Received: from blr-ubuntu-linaro.wlan.qualcomm.com ([61.0.91.57]) by smtp.gmail.com with ESMTPSA id r73sm6167781pfa.65.2017.05.10.07.37.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 10 May 2017 07:37:36 -0700 (PDT) From: Bhupinder Thakur To: xen-devel@lists.xenproject.org Date: Wed, 10 May 2017 20:05:13 +0530 Message-Id: <1494426918-32737-2-git-send-email-bhupinder.thakur@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1494426918-32737-1-git-send-email-bhupinder.thakur@linaro.org> References: <1494426918-32737-1-git-send-email-bhupinder.thakur@linaro.org> Cc: Wei Liu , Ian Jackson Subject: [Xen-devel] [PATCH 07/12 v3] xen/arm: vpl011: Allocate a new GFN in the toolstack for vuart X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" Allocate a new gfn to be used as a ring buffer between xenconsole and Xen for sending/receiving pl011 data. Signed-off-by: Bhupinder Thakur Acked-by: Wei Liu Reviewed-by: Stefano Stabellini --- Changes since v2: - Removed the DOMCTL call to set the GFN as now this information is passed in the DOMCTL call to initialize vpl011 emulation. tools/libxc/include/xc_dom.h | 2 ++ tools/libxc/xc_dom_arm.c | 5 ++++- tools/libxc/xc_dom_boot.c | 2 ++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/tools/libxc/include/xc_dom.h b/tools/libxc/include/xc_dom.h index ce47058..6e06ef1 100644 --- a/tools/libxc/include/xc_dom.h +++ b/tools/libxc/include/xc_dom.h @@ -216,6 +216,8 @@ struct xc_dom_image { /* Extra SMBIOS structures passed to HVMLOADER */ struct xc_hvm_firmware_module smbios_module; + + xen_pfn_t vuart_gfn; }; /* --- pluggable kernel loader ------------------------------------- */ diff --git a/tools/libxc/xc_dom_arm.c b/tools/libxc/xc_dom_arm.c index e7d4bd0..c981b7a 100644 --- a/tools/libxc/xc_dom_arm.c +++ b/tools/libxc/xc_dom_arm.c @@ -26,10 +26,11 @@ #include "xg_private.h" #include "xc_dom.h" -#define NR_MAGIC_PAGES 3 +#define NR_MAGIC_PAGES 4 #define CONSOLE_PFN_OFFSET 0 #define XENSTORE_PFN_OFFSET 1 #define MEMACCESS_PFN_OFFSET 2 +#define VUART_PFN_OFFSET 3 #define LPAE_SHIFT 9 @@ -85,10 +86,12 @@ static int alloc_magic_pages(struct xc_dom_image *dom) dom->console_pfn = base + CONSOLE_PFN_OFFSET; dom->xenstore_pfn = base + XENSTORE_PFN_OFFSET; + dom->vuart_gfn = base + VUART_PFN_OFFSET; xc_clear_domain_page(dom->xch, dom->guest_domid, dom->console_pfn); xc_clear_domain_page(dom->xch, dom->guest_domid, dom->xenstore_pfn); xc_clear_domain_page(dom->xch, dom->guest_domid, base + MEMACCESS_PFN_OFFSET); + xc_clear_domain_page(dom->xch, dom->guest_domid, base + VUART_PFN_OFFSET); xc_hvm_param_set(dom->xch, dom->guest_domid, HVM_PARAM_CONSOLE_PFN, dom->console_pfn); xc_hvm_param_set(dom->xch, dom->guest_domid, HVM_PARAM_STORE_PFN, diff --git a/tools/libxc/xc_dom_boot.c b/tools/libxc/xc_dom_boot.c index c3b44dd..8a376d0 100644 --- a/tools/libxc/xc_dom_boot.c +++ b/tools/libxc/xc_dom_boot.c @@ -226,6 +226,8 @@ int xc_dom_boot_image(struct xc_dom_image *dom) return rc; if ( (rc = clear_page(dom, dom->xenstore_pfn)) != 0 ) return rc; + if ( (rc = clear_page(dom, dom->vuart_gfn)) != 0 ) + return rc; /* start info page */ if ( dom->arch_hooks->start_info ) From patchwork Wed May 10 14:35:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bhupinder Thakur X-Patchwork-Id: 99006 Delivered-To: patch@linaro.org Received: by 10.182.142.97 with SMTP id rv1csp234319obb; Wed, 10 May 2017 07:39:45 -0700 (PDT) X-Received: by 10.107.189.194 with SMTP id n185mr1315177iof.13.1494427185701; Wed, 10 May 2017 07:39:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1494427185; cv=none; d=google.com; s=arc-20160816; b=rBsUqd5whdHoi2qSj1lTKC6qn7rtrhRAt7lLUrNXbaHt6hYDuFiLSryXnzOL2MIXIh K++29GWk4popG0I8u+5tOC93ly7Ex2mQwAk7fw25HYZoQsKYBetlSGeCy+hYwF/n2Are Jg5SVxyfWLdVfoHy3y3DxTVCjAsjbCTXXqNC7saLv4OpGA0029Pu0N7G+y8CYaxnMyfg 40sxsWsDd4uCfKAqW4hF41jcPe4exGgJS/ez/3rxd5NJwFRj5UCOFiDkZzUCrI/5c+PV z07SAjD76opbM3kdz52UN9y3Ailsu2W6KexeD143HfCXt1s3GrJ5X7A8CqMwBHQMDMrR BFlw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-unsubscribe:list-id :precedence:subject:cc:references:in-reply-to:message-id:date:to :from:dkim-signature:arc-authentication-results; bh=FrRoJVUeXIiMgXrzEjvYLeqRs+NxvpGWQBizWW2qzBk=; b=WFgCVfvBtpN8/K0/l3JG8GnzW0sT0cGVK2Xai9hYBfu8lPDf4w7qkdlJ1czjpVZh6C 1eQ93+tOFi/uSuNo3L9QEbRyk4aZfLOHJdgS7TkpUkbwgdLkQBFoDuIzDUD+uoy4ROiO xbFMZE+ubCPEHwuCRMc+tLtq5PkHyvyQTfGHTchZxkTSQ0FQmR8eMYgNgFBKlOJcXcNs xFA3Faa+uGQSjwpWXzNPXjmySsyleBxvtdJ3NSJgEHh+6dXomNZrlOjx+6mG07w8B3QP yDEHFg3UAl4NvAzgjsQxwrKVEoYb+Jf1Ip96azDH2wTXc5q8TTo3ZIcE1BBJeD3XYkQX q8kA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) smtp.mailfrom=xen-devel-bounces@lists.xen.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.xenproject.org (lists.xenproject.org. [192.237.175.120]) by mx.google.com with ESMTPS id c5si3582217ith.16.2017.05.10.07.39.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 10 May 2017 07:39:45 -0700 (PDT) Received-SPF: neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) client-ip=192.237.175.120; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) smtp.mailfrom=xen-devel-bounces@lists.xen.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d8SkT-0004qn-4A; Wed, 10 May 2017 14:37:53 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d8SkR-0004qG-N3 for xen-devel@lists.xenproject.org; Wed, 10 May 2017 14:37:51 +0000 Received: from [193.109.254.147] by server-10.bemta-6.messagelabs.com id C4/E1-03613-FB523195; Wed, 10 May 2017 14:37:51 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrHIsWRWlGSWpSXmKPExsVyMfTAKt29qsK RBpefmll83zKZyYHR4/CHKywBjFGsmXlJ+RUJrBnLTuxnKui9wFix+fx+tgbGrysYuxi5OIQE ZjFKLN38hgnEYRGYxyzx7cArsIyEQD+rxPRZr9i6GDmBnDSJrT+3M0LYlRJ7JpwHs4UEtCSOn prNCjGqmUni4CWQBAcHm4CJxKwOCZAaEQEliXurJjOB2MwC3hIfjvxjB7GFBSIl1i56BjaHRU BVYnvnUrAaXqCapR1zWCB2yUncPNfJDGJzCvhILHr1kgVir7fEo89/WCYwCixgZFjFqFGcWlS WWqRrZKKXVJSZnlGSm5iZo2toYKaXm1pcnJiempOYVKyXnJ+7iREYXgxAsINx38fIQ4ySHExK ory6u4QihfiS8lMqMxKLM+KLSnNSiw8xynBwKEnwnlARjhQSLEpNT61Iy8wBBjpMWoKDR0mEt xkkzVtckJhbnJkOkTrFaMnx4vL790wc75Z+AJJPVv54zyTEkpeflyolzisN0iAA0pBRmgc3Dh aNlxhlpYR5GYEOFOIpSC3KzSxBlX/FKM7BqCTMGwkyhSczrwRu6yugg5iADgpkEAA5qCQRISX VwKjGtiGMx3zSoW6fW2dfHdjBZXypc+W8nqnhl0q855zZon9Ym+eUj/fHdVcMEk6Vr+TynvBq WX/FbhY1w1lL0hlFbjG1RK563xnV9jCjIln0wTFxt1k1BzSUDDkWPYrZIrUsfcaO4CmxNsaNm 99NjWj3tPq5+RXzS905h+3zU9jtk9apb1x/hEuJpTgj0VCLuag4EQBYL6IwwQIAAA== X-Env-Sender: bhupinder.thakur@linaro.org X-Msg-Ref: server-8.tower-27.messagelabs.com!1494427068!91082852!1 X-Originating-IP: [209.85.192.170] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.4.12; banners=-,-,- X-VirusChecked: Checked Received: (qmail 57052 invoked from network); 10 May 2017 14:37:49 -0000 Received: from mail-pf0-f170.google.com (HELO mail-pf0-f170.google.com) (209.85.192.170) by server-8.tower-27.messagelabs.com with AES128-GCM-SHA256 encrypted SMTP; 10 May 2017 14:37:49 -0000 Received: by mail-pf0-f170.google.com with SMTP id e193so16900086pfh.0 for ; Wed, 10 May 2017 07:37:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=bxM0Bssas6tHj1St6JXCyFMy85TKHgrDqFdzjWmykqg=; b=ezYMVfls6KYFJTL0FkRqYlDj4fCJhubeRl6mICg0SRu5f1Fa1dKwwt9fSwU4QQWFyc ZnAc9brIhY6tTzE7yU/QhE0A5JF3FOI1TORCHgHkTMJxE/vHi6+/WSdkoPqlGnubngYE o9rluhs58Lz7S4qWfv5vtzQsDcxZbdqn0zYNU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=bxM0Bssas6tHj1St6JXCyFMy85TKHgrDqFdzjWmykqg=; b=d/xxcmx/d4lr7cq1wjVp4+iI7WX/3EDRIAFIk1nN+bjYdGLsosSSIPzda5yrO9kQmE pWzyp932DwKQm0OXrim5WVxwer0HUs/ztOnf6mm2KMEWPWAKW+uwJNsAsVirA+VOCa6S G1KOAIQrVlstubKdoX1HsqEgPGre/4NI89YwJd4aDvcAGUtHOMJjoEK7dBATvvdSDdQ8 Ya4GuHShOeZZ19yGfV9Xcgc+HdsApViEe4p6Eub+yS07tQQ0dwRpF24a8U+ccVsiF3ZO uryNBcVLU+fSTPLPL9EqltBcefEs5nHGDiBOUwmMoiOHPJAKi1J1io1DO0MWU3pE8tiH qiSQ== X-Gm-Message-State: AODbwcBs4/b4OfXgXp8Vl+DMIn8WLJDN99TgzkJOvVcdjKErvkJ9VtDD daHjC3Sr0aXSiRirMtvATw== X-Received: by 10.84.176.129 with SMTP id v1mr8655318plb.192.1494427067630; Wed, 10 May 2017 07:37:47 -0700 (PDT) Received: from blr-ubuntu-linaro.wlan.qualcomm.com ([61.0.91.57]) by smtp.gmail.com with ESMTPSA id r73sm6167781pfa.65.2017.05.10.07.37.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 10 May 2017 07:37:47 -0700 (PDT) From: Bhupinder Thakur To: xen-devel@lists.xenproject.org Date: Wed, 10 May 2017 20:05:14 +0530 Message-Id: <1494426918-32737-3-git-send-email-bhupinder.thakur@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1494426918-32737-1-git-send-email-bhupinder.thakur@linaro.org> References: <1494426918-32737-1-git-send-email-bhupinder.thakur@linaro.org> Cc: Wei Liu , Ian Jackson Subject: [Xen-devel] [PATCH 08/12 v3] xen/arm: vpl011: Modify xenconsole to support multiple consoles X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" Xenconsole supports only PV console currently. This patch adds support for supporting multiple consoles. This patch modifies different data structures and APIs used in xenconsole to support multiple consoles. Change summary: 1. Split the domain structure into a console structure and the domain structure, where each console structure represents one console. 2. Modify different APIs such as buffer_append() etc. to take console structure as input and perform per console specific operations. 3. Define a generic console_create_ring(), which sets up the ring buffer and event channel for each console. 3. Modify domain_create_ring() to use console_create_ring(). 4. Modifications in handle_ring_read() to read ring buffer data from multiple consoles. 5. Add log file support for multiple consoles. Signed-off-by: Bhupinder Thakur --- Changes since v2: - Defined a new function console_create_ring() which sets up the ring buffer and event channel a new console. domain_create_ring() uses this function to setup a console. - This patch does not contain vuart specific changes, which would be introduced in the next patch. - Changes for keeping the PV log file name unchanged. Changes since v1: - Split the domain struture to a separate console structure - Modified the functions to operate on the console struture - Replaced repetitive per console code with generic code tools/console/daemon/io.c | 650 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 460 insertions(+), 190 deletions(-) diff --git a/tools/console/daemon/io.c b/tools/console/daemon/io.c index 7e6a886..9bb14de 100644 --- a/tools/console/daemon/io.c +++ b/tools/console/daemon/io.c @@ -89,29 +89,139 @@ struct buffer { size_t max_capacity; }; -struct domain { - int domid; +struct console { + char *xsname; + char *ttyname; int master_fd; int master_pollfd_idx; int slave_fd; int log_fd; - bool is_dead; - unsigned last_seen; struct buffer buffer; - struct domain *next; - char *conspath; int ring_ref; xenevtchn_port_or_error_t local_port; xenevtchn_port_or_error_t remote_port; + struct xencons_interface *interface; + struct domain *d; /* Reference to the domain it is contained in. */ + char *xspath; + int (*map_ring_ref)(struct console *, int); + bool mandatory; +}; + +struct console_data { + char *xsname; + char *ttyname; + int (*mapfunc)(struct console *, int); + bool mandatory; +}; + +static int map_pvcon_ring_ref(struct console *, int ); + +static struct console_data console_data[] = { + + { + .xsname = "/console", + .ttyname = "tty", + .mapfunc = map_pvcon_ring_ref, + .mandatory = true + }, +}; + +#define MAX_CONSOLE (sizeof(console_data)/sizeof(struct console_data)) + +struct domain { + int domid; + bool is_dead; + unsigned last_seen; + struct domain *next; xenevtchn_handle *xce_handle; int xce_pollfd_idx; - struct xencons_interface *interface; int event_count; long long next_period; + struct console console[MAX_CONSOLE]; }; static struct domain *dom_head; +typedef void (*VOID_ITER_FUNC_ARG1)(struct console *); +typedef bool (*BOOL_ITER_FUNC_ARG1)(struct console *); +typedef int (*INT_ITER_FUNC_ARG1)(struct console *); +typedef void (*VOID_ITER_FUNC_ARG2)(struct console *, unsigned int); +typedef int (*INT_ITER_FUNC_ARG3)(struct console *, + struct domain *dom, void **); + +static inline bool console_enabled(struct console *con) +{ + return con->local_port != -1; +} + +static inline void console_iter_void_arg1(struct domain *d, + VOID_ITER_FUNC_ARG1 iter_func) +{ + int i = 0; + struct console *con = &(d->console[0]); + + for (i = 0; i < MAX_CONSOLE; i++, con++) + { + iter_func(con); + } +} + +static inline void console_iter_void_arg2(struct domain *d, + VOID_ITER_FUNC_ARG2 iter_func, + unsigned int iter_data) +{ + int i = 0; + struct console *con = &(d->console[0]); + + for (i = 0; i < MAX_CONSOLE; i++, con++) + { + iter_func(con, iter_data); + } +} + +static inline bool console_iter_bool_arg1(struct domain *d, + BOOL_ITER_FUNC_ARG1 iter_func) +{ + int i = 0; + struct console *con = &(d->console[0]); + + for (i = 0; i < MAX_CONSOLE; i++, con++) + { + if (iter_func(con)) + return true; + } + return false; +} + +static inline int console_iter_int_arg1(struct domain *d, + INT_ITER_FUNC_ARG1 iter_func) +{ + int i = 0; + struct console *con = &(d->console[0]); + + for (i = 0; i < MAX_CONSOLE; i++, con++) + { + if (iter_func(con)) + return 1; + } + return 0; +} + +static inline int console_iter_int_arg3(struct domain *d, + INT_ITER_FUNC_ARG3 iter_func, + void *iter_data) +{ + int i = 0; + struct console *con = &(d->console[0]); + + for (i = 0; i < MAX_CONSOLE; i++, con++) + { + if (iter_func(con, d, iter_data)) + return 1; + } + return 0; +} + static int write_all(int fd, const char* buf, size_t len) { while (len) { @@ -158,11 +268,29 @@ static int write_with_timestamp(int fd, const char *data, size_t sz, return 0; } -static void buffer_append(struct domain *dom) +static inline bool buffer_available(struct console *con) { - struct buffer *buffer = &dom->buffer; + if (discard_overflowed_data || + !con->buffer.max_capacity || + con->buffer.size < con->buffer.max_capacity) + return true; + else + return false; +} + +static void buffer_append(struct console *con, unsigned int data) +{ + struct buffer *buffer = &con->buffer; + struct xencons_interface *intf = con->interface; + xenevtchn_port_or_error_t port = con->local_port; + struct domain *dom = con->d; + xenevtchn_port_or_error_t rxport = (xenevtchn_port_or_error_t)data; + XENCONS_RING_IDX cons, prod, size; - struct xencons_interface *intf = dom->interface; + + /* If incoming data is not for the current console then ignore. */ + if (port != rxport) + return; cons = intf->out_cons; prod = intf->out_prod; @@ -187,22 +315,22 @@ static void buffer_append(struct domain *dom) xen_mb(); intf->out_cons = cons; - xenevtchn_notify(dom->xce_handle, dom->local_port); + xenevtchn_notify(dom->xce_handle, port); /* Get the data to the logfile as early as possible because if * no one is listening on the console pty then it will fill up * and handle_tty_write will stop being called. */ - if (dom->log_fd != -1) { + if (con->log_fd != -1) { int logret; if (log_time_guest) { logret = write_with_timestamp( - dom->log_fd, + con->log_fd, buffer->data + buffer->size - size, size, &log_time_guest_needts); } else { logret = write_all( - dom->log_fd, + con->log_fd, buffer->data + buffer->size - size, size); } @@ -290,12 +418,13 @@ static int create_hv_log(void) return fd; } -static int create_domain_log(struct domain *dom) +static int create_console_log(struct console *con) { char logfile[PATH_MAX]; char *namepath, *data, *s; int fd; unsigned int len; + struct domain *dom = con->d; namepath = xs_get_domain_path(xs, dom->domid); s = realloc(namepath, strlen(namepath) + 6); @@ -314,7 +443,9 @@ static int create_domain_log(struct domain *dom) return -1; } - snprintf(logfile, PATH_MAX-1, "%s/guest-%s.log", log_dir, data); + snprintf(logfile, PATH_MAX-1, "%s%s/guest-%s.log", + log_dir, con->xspath, data); + free(data); logfile[PATH_MAX-1] = '\0'; @@ -336,19 +467,24 @@ static int create_domain_log(struct domain *dom) return fd; } -static void domain_close_tty(struct domain *dom) +static void console_close_tty(struct console *con) { - if (dom->master_fd != -1) { - close(dom->master_fd); - dom->master_fd = -1; + if (con->master_fd != -1) { + close(con->master_fd); + con->master_fd = -1; } - if (dom->slave_fd != -1) { - close(dom->slave_fd); - dom->slave_fd = -1; + if (con->slave_fd != -1) { + close(con->slave_fd); + con->slave_fd = -1; } } +static void domain_close_tty(struct domain *dom) +{ + console_iter_void_arg1(dom, console_close_tty); +} + #ifdef __sun__ static int openpty(int *amaster, int *aslave, char *name, struct termios *termp, struct winsize *winp) @@ -409,7 +545,7 @@ void cfmakeraw(struct termios *termios_p) } #endif /* __sun__ */ -static int domain_create_tty(struct domain *dom) +static int console_create_tty(struct console *con) { const char *slave; char *path; @@ -418,19 +554,23 @@ static int domain_create_tty(struct domain *dom) char *data; unsigned int len; struct termios term; + struct domain *dom = con->d; + + if (!console_enabled(con)) + return 0; - assert(dom->slave_fd == -1); - assert(dom->master_fd == -1); + assert(con->master_fd == -1); + assert(con->slave_fd == -1); - if (openpty(&dom->master_fd, &dom->slave_fd, NULL, NULL, NULL) < 0) { + if (openpty(&con->master_fd, &con->slave_fd, NULL, NULL, NULL) < 0) { err = errno; dolog(LOG_ERR, "Failed to create tty for domain-%d " - "(errno = %i, %s)", - dom->domid, err, strerror(err)); - return 0; + "(errno = %i, %s)", + dom->domid, err, strerror(err)); + goto out; } - if (tcgetattr(dom->slave_fd, &term) < 0) { + if (tcgetattr(con->slave_fd, &term) < 0) { err = errno; dolog(LOG_ERR, "Failed to get tty attributes for domain-%d " "(errno = %i, %s)", @@ -438,7 +578,7 @@ static int domain_create_tty(struct domain *dom) goto out; } cfmakeraw(&term); - if (tcsetattr(dom->slave_fd, TCSANOW, &term) < 0) { + if (tcsetattr(con->slave_fd, TCSANOW, &term) < 0) { err = errno; dolog(LOG_ERR, "Failed to set tty attributes for domain-%d " "(errno = %i, %s)", @@ -446,40 +586,54 @@ static int domain_create_tty(struct domain *dom) goto out; } - if ((slave = ptsname(dom->master_fd)) == NULL) { + if ((slave = ptsname(con->master_fd)) == NULL) { err = errno; dolog(LOG_ERR, "Failed to get slave name for domain-%d " - "(errno = %i, %s)", - dom->domid, err, strerror(err)); + "(errno = %i, %s)", + dom->domid, err, strerror(err)); goto out; } - success = asprintf(&path, "%s/limit", dom->conspath) != + success = asprintf(&path, "%s/limit", con->xspath) != -1; if (!success) goto out; data = xs_read(xs, XBT_NULL, path, &len); if (data) { - dom->buffer.max_capacity = strtoul(data, 0, 0); + con->buffer.max_capacity = strtoul(data, 0, 0); free(data); } free(path); - success = (asprintf(&path, "%s/tty", dom->conspath) != -1); + success = (asprintf(&path, "%s/%s", con->xspath, con->ttyname) != -1); + if (!success) goto out; success = xs_write(xs, XBT_NULL, path, slave, strlen(slave)); free(path); - if (!success) + + if (fcntl(con->master_fd, F_SETFL, O_NONBLOCK) == -1) goto out; - if (fcntl(dom->master_fd, F_SETFL, O_NONBLOCK) == -1) + if (!success) goto out; - return 1; -out: - domain_close_tty(dom); return 0; + +out: + return 1; +} + +static int domain_create_tty(struct domain *dom) +{ + int ret; + + ret = console_iter_int_arg1(dom, console_create_tty); + + if (ret) + domain_close_tty(dom); + + return ret; } /* Takes tuples of names, scanf-style args, and void **, NULL terminated. */ @@ -517,31 +671,106 @@ static int xs_gather(struct xs_handle *xs, const char *dir, ...) return ret; } -static void domain_unmap_interface(struct domain *dom) +static void console_unmap_interface(struct console *con) { - if (dom->interface == NULL) + if (con->interface == NULL) return; - if (xgt_handle && dom->ring_ref == -1) - xengnttab_unmap(xgt_handle, dom->interface, 1); + if (xgt_handle && con->ring_ref == -1) + xengnttab_unmap(xgt_handle, con->interface, 1); else - munmap(dom->interface, XC_PAGE_SIZE); - dom->interface = NULL; - dom->ring_ref = -1; + munmap(con->interface, XC_PAGE_SIZE); + con->interface = NULL; + con->ring_ref = -1; +} + +static void domain_unmap_interface(struct domain *dom) +{ + console_iter_void_arg1(dom, console_unmap_interface); +} + +static int bind_event_channel(struct domain *dom, + int new_rport, + int *lport, + int *rport) +{ + int err = 0, rc; + + /* Go no further if port has not changed and we are still bound. */ + if (new_rport == *rport) { + xc_evtchn_status_t status = { + .dom = DOMID_SELF, + .port = *lport }; + if ((xc_evtchn_status(xc, &status) == 0) && + (status.status == EVTCHNSTAT_interdomain)) + goto out; + } + + *lport = -1; + *rport = -1; + rc = xenevtchn_bind_interdomain(dom->xce_handle, + dom->domid, new_rport); + + if (rc == -1) { + err = errno; + goto out; + } + + *lport = rc; + *rport = new_rport; +out: + return err; } -static int domain_create_ring(struct domain *dom) +static int map_pvcon_ring_ref(struct console *con, int ring_ref) { - int err, remote_port, ring_ref, rc; + int err = 0; + struct domain *dom = con->d; + + if (!con->interface && xgt_handle) { + /* Prefer using grant table */ + con->interface = xengnttab_map_grant_ref(xgt_handle, + dom->domid, + GNTTAB_RESERVED_CONSOLE, + PROT_READ|PROT_WRITE); + con->ring_ref = -1; + } + + if (!con->interface) { + con->interface = xc_map_foreign_range(xc, + dom->domid, + XC_PAGE_SIZE, + PROT_READ|PROT_WRITE, + (unsigned long)ring_ref); + if (con->interface == NULL) { + err = EINVAL; + goto out; + } + con->ring_ref = ring_ref; + } + +out: + return err; +} + +static int console_create_ring(struct console *con) +{ + int err, remote_port, ring_ref; char *type, path[PATH_MAX]; + struct domain *dom = con->d; + + err = xs_gather(xs, con->xspath, + "ring-ref", "%u", &ring_ref, + "port", "%i", &remote_port, + NULL); - err = xs_gather(xs, dom->conspath, - "ring-ref", "%u", &ring_ref, - "port", "%i", &remote_port, - NULL); if (err) + { + /* If the console is not mandatory then do not return an error. */ + if (!con->mandatory) + err = 0; goto out; + } - snprintf(path, sizeof(path), "%s/type", dom->conspath); + snprintf(path, sizeof(path), "%s/type", con->xspath); type = xs_read(xs, XBT_NULL, path, NULL); if (type && strcmp(type, "xenconsoled") != 0) { free(type); @@ -550,41 +779,44 @@ static int domain_create_ring(struct domain *dom) free(type); /* If using ring_ref and it has changed, remap */ - if (ring_ref != dom->ring_ref && dom->ring_ref != -1) - domain_unmap_interface(dom); + if (ring_ref != con->ring_ref && con->ring_ref != -1) + console_unmap_interface(con); - if (!dom->interface && xgt_handle) { - /* Prefer using grant table */ - dom->interface = xengnttab_map_grant_ref(xgt_handle, - dom->domid, GNTTAB_RESERVED_CONSOLE, - PROT_READ|PROT_WRITE); - dom->ring_ref = -1; - } - if (!dom->interface) { - /* Fall back to xc_map_foreign_range */ - dom->interface = xc_map_foreign_range( - xc, dom->domid, XC_PAGE_SIZE, - PROT_READ|PROT_WRITE, - (unsigned long)ring_ref); - if (dom->interface == NULL) { - err = EINVAL; - goto out; + err = con->map_ring_ref(con, ring_ref); + + if (err) + goto out; + + err = bind_event_channel(dom, remote_port, + &con->local_port, + &con->remote_port); + if (err) + goto out1; + + if (con->master_fd == -1) { + if (console_create_tty(con)) { + err = errno; + con->local_port = -1; + con->remote_port = -1; + goto out1; } - dom->ring_ref = ring_ref; } - /* Go no further if port has not changed and we are still bound. */ - if (remote_port == dom->remote_port) { - xc_evtchn_status_t status = { - .dom = DOMID_SELF, - .port = dom->local_port }; - if ((xc_evtchn_status(xc, &status) == 0) && - (status.status == EVTCHNSTAT_interdomain)) - goto out; - } + if (log_guest && (con->log_fd == -1)) + con->log_fd = create_console_log(con); + + return err; + + out1: + console_unmap_interface(con); + out: + return err; +} + +static int domain_create_ring(struct domain *dom) +{ + int err; - dom->local_port = -1; - dom->remote_port = -1; if (dom->xce_handle != NULL) xenevtchn_close(dom->xce_handle); @@ -592,37 +824,17 @@ static int domain_create_ring(struct domain *dom) * wasteful, but that's how the code is structured... */ dom->xce_handle = xenevtchn_open(NULL, 0); if (dom->xce_handle == NULL) { - err = errno; - goto out; + return errno; } - - rc = xenevtchn_bind_interdomain(dom->xce_handle, - dom->domid, remote_port); - if (rc == -1) { - err = errno; + err = console_iter_int_arg1(dom, console_create_ring); + + if (err) + { xenevtchn_close(dom->xce_handle); dom->xce_handle = NULL; - goto out; - } - dom->local_port = rc; - dom->remote_port = remote_port; - - if (dom->master_fd == -1) { - if (!domain_create_tty(dom)) { - err = errno; - xenevtchn_close(dom->xce_handle); - dom->xce_handle = NULL; - dom->local_port = -1; - dom->remote_port = -1; - goto out; - } } - if (log_guest && (dom->log_fd == -1)) - dom->log_fd = create_domain_log(dom); - - out: return err; } @@ -630,27 +842,66 @@ static bool watch_domain(struct domain *dom, bool watch) { char domid_str[3 + MAX_STRLEN(dom->domid)]; bool success; + char *path = dom->console[0].xspath; snprintf(domid_str, sizeof(domid_str), "dom%u", dom->domid); if (watch) { - success = xs_watch(xs, dom->conspath, domid_str); + success = xs_watch(xs, path, domid_str); if (success) domain_create_ring(dom); else - xs_unwatch(xs, dom->conspath, domid_str); + xs_unwatch(xs, path, domid_str); } else { - success = xs_unwatch(xs, dom->conspath, domid_str); + success = xs_unwatch(xs, path, domid_str); } return success; } +static int console_init(struct console *con, struct domain *dom, void **data) +{ + char *s; + int err = -1; + struct console_data **con_data = (struct console_data **)data; + + con->master_fd = -1; + con->master_pollfd_idx = -1; + con->slave_fd = -1; + con->log_fd = -1; + con->ring_ref = -1; + con->local_port = -1; + con->remote_port = -1; + con->d = dom; + con->ttyname = (*con_data)->ttyname; + con->xsname = (*con_data)->xsname; + con->map_ring_ref = (*con_data)->mapfunc; + con->mandatory = (*con_data)->mandatory; + con->xspath = xs_get_domain_path(xs, dom->domid); + s = realloc(con->xspath, strlen(con->xspath) + + strlen(con->xsname) + 1); + + (*con_data)++; + + if (s) + { + con->xspath = s; + strcat(con->xspath, con->xsname); + err = 0; + } + return err; +} + +static void console_free(struct console *con) +{ + if (con->xspath) + free(con->xspath); +} static struct domain *create_domain(int domid) { struct domain *dom; - char *s; struct timespec ts; + struct console_data *con_data = &console_data[0]; if (clock_gettime(CLOCK_MONOTONIC, &ts) < 0) { dolog(LOG_ERR, "Cannot get time of day %s:%s:L%d", @@ -667,26 +918,13 @@ static struct domain *create_domain(int domid) dom->domid = domid; - dom->conspath = xs_get_domain_path(xs, dom->domid); - s = realloc(dom->conspath, strlen(dom->conspath) + - strlen("/console") + 1); - if (s == NULL) + if (console_iter_int_arg3(dom, console_init, (void **)&con_data)) goto out; - dom->conspath = s; - strcat(dom->conspath, "/console"); - dom->master_fd = -1; - dom->master_pollfd_idx = -1; - dom->slave_fd = -1; - dom->log_fd = -1; dom->xce_pollfd_idx = -1; dom->next_period = ((long long)ts.tv_sec * 1000) + (ts.tv_nsec / 1000000) + RATE_LIMIT_PERIOD; - dom->ring_ref = -1; - dom->local_port = -1; - dom->remote_port = -1; - if (!watch_domain(dom, true)) goto out; @@ -696,8 +934,10 @@ static struct domain *create_domain(int domid) dolog(LOG_DEBUG, "New domain %d", domid); return dom; + out: - free(dom->conspath); + console_iter_void_arg1(dom, console_free); + free(dom); return NULL; } @@ -727,20 +967,24 @@ static void remove_domain(struct domain *dom) } } -static void cleanup_domain(struct domain *d) -{ - domain_close_tty(d); - if (d->log_fd != -1) { - close(d->log_fd); - d->log_fd = -1; +static void console_cleanup(struct console *con) +{ + if (con->log_fd != -1) { + close(con->log_fd); + con->log_fd = -1; } + free(con->buffer.data); + con->buffer.data = NULL; + free(con->xspath); + con->xspath = NULL; +} - free(d->buffer.data); - d->buffer.data = NULL; +static void cleanup_domain(struct domain *d) +{ + domain_close_tty(d); - free(d->conspath); - d->conspath = NULL; + console_iter_void_arg1(d, console_cleanup); remove_domain(d); } @@ -780,9 +1024,9 @@ static void enum_domains(void) } } -static int ring_free_bytes(struct domain *dom) +static int ring_free_bytes(struct console *con) { - struct xencons_interface *intf = dom->interface; + struct xencons_interface *intf = con->interface; XENCONS_RING_IDX cons, prod, space; cons = intf->in_cons; @@ -807,25 +1051,27 @@ static void domain_handle_broken_tty(struct domain *dom, int recreate) } } -static void handle_tty_read(struct domain *dom) +static void handle_tty_read(struct console *con) { ssize_t len = 0; char msg[80]; int i; - struct xencons_interface *intf = dom->interface; XENCONS_RING_IDX prod; + struct xencons_interface *intf = con->interface; + xenevtchn_port_or_error_t port = con->local_port; + struct domain *dom = con->d; if (dom->is_dead) return; - len = ring_free_bytes(dom); + len = ring_free_bytes(con); if (len == 0) return; if (len > sizeof(msg)) len = sizeof(msg); - len = read(dom->master_fd, msg, len); + len = read(con->master_fd, msg, len); /* * Note: on Solaris, len == 0 means the slave closed, and this * is no problem, but Linux can't handle this usefully, so we @@ -841,31 +1087,39 @@ static void handle_tty_read(struct domain *dom) } xen_wmb(); intf->in_prod = prod; - xenevtchn_notify(dom->xce_handle, dom->local_port); + xenevtchn_notify(dom->xce_handle, port); } else { domain_close_tty(dom); shutdown_domain(dom); } } -static void handle_tty_write(struct domain *dom) +static void handle_tty_write(struct console *con) { ssize_t len; + struct domain *dom = con->d; if (dom->is_dead) return; - len = write(dom->master_fd, dom->buffer.data + dom->buffer.consumed, - dom->buffer.size - dom->buffer.consumed); + len = write(con->master_fd, + con->buffer.data + con->buffer.consumed, + con->buffer.size - con->buffer.consumed); if (len < 1) { dolog(LOG_DEBUG, "Write failed on domain %d: %zd, %d\n", dom->domid, len, errno); domain_handle_broken_tty(dom, domain_is_valid(dom->domid)); } else { - buffer_advance(&dom->buffer, len); + buffer_advance(&con->buffer, len); } } +static void console_event_unmask(struct console *con) +{ + if (con->local_port != -1) + (void)xenevtchn_unmask(con->d->xce_handle, con->local_port); +} + static void handle_ring_read(struct domain *dom) { xenevtchn_port_or_error_t port; @@ -878,10 +1132,10 @@ static void handle_ring_read(struct domain *dom) dom->event_count++; - buffer_append(dom); + console_iter_void_arg2(dom, buffer_append, port); if (dom->event_count < RATE_LIMIT_ALLOWANCE) - (void)xenevtchn_unmask(dom->xce_handle, port); + console_iter_void_arg1(dom, console_event_unmask); } static void handle_xs(void) @@ -943,14 +1197,22 @@ static void handle_hv_logs(xenevtchn_handle *xce_handle, bool force) (void)xenevtchn_unmask(xce_handle, port); } +static void console_open_log(struct console *con) +{ + if (console_enabled(con)) + { + if (con->log_fd != -1) + close(con->log_fd); + con->log_fd = create_console_log(con); + } +} + static void handle_log_reload(void) { if (log_guest) { struct domain *d; for (d = dom_head; d; d = d->next) { - if (d->log_fd != -1) - close(d->log_fd); - d->log_fd = create_domain_log(d); + console_iter_void_arg1(d, console_open_log); } } @@ -1002,6 +1264,40 @@ static void reset_fds(void) memset(fds, 0, sizeof(struct pollfd) * current_array_size); } +static void add_console_fd(struct console *con) +{ + if (con->master_fd != -1) { + short events = 0; + if (!con->d->is_dead && ring_free_bytes(con)) + events |= POLLIN; + + if (!buffer_empty(&con->buffer)) + events |= POLLOUT; + + if (events) + con->master_pollfd_idx = + set_fds(con->master_fd, events|POLLPRI); + } +} + +static void process_console(struct console *con) +{ + if (con->master_fd != -1 && con->master_pollfd_idx != -1) { + if (fds[con->master_pollfd_idx].revents & + ~(POLLIN|POLLOUT|POLLPRI)) + domain_handle_broken_tty(con->d, domain_is_valid(con->d->domid)); + else { + if (fds[con->master_pollfd_idx].revents & + POLLIN) + handle_tty_read(con); + if (fds[con->master_pollfd_idx].revents & + POLLOUT) + handle_tty_write(con); + } + } + con->master_pollfd_idx = -1; +} + void handle_io(void) { int ret; @@ -1068,7 +1364,7 @@ void handle_io(void) if ((now+5) > d->next_period) { d->next_period = now + RATE_LIMIT_PERIOD; if (d->event_count >= RATE_LIMIT_ALLOWANCE) { - (void)xenevtchn_unmask(d->xce_handle, d->local_port); + console_iter_void_arg1(d, console_event_unmask); } d->event_count = 0; } @@ -1081,28 +1377,15 @@ void handle_io(void) d->next_period < next_timeout) next_timeout = d->next_period; } else if (d->xce_handle != NULL) { - if (discard_overflowed_data || - !d->buffer.max_capacity || - d->buffer.size < d->buffer.max_capacity) { + if (console_iter_bool_arg1(d, buffer_available)) + { int evtchn_fd = xenevtchn_fd(d->xce_handle); d->xce_pollfd_idx = set_fds(evtchn_fd, - POLLIN|POLLPRI); + POLLIN|POLLPRI); } } - if (d->master_fd != -1) { - short events = 0; - if (!d->is_dead && ring_free_bytes(d)) - events |= POLLIN; - - if (!buffer_empty(&d->buffer)) - events |= POLLOUT; - - if (events) - d->master_pollfd_idx = - set_fds(d->master_fd, - events|POLLPRI); - } + console_iter_void_arg1(d, add_console_fd); } /* If any domain has been rate limited, we need to work @@ -1170,22 +1453,9 @@ void handle_io(void) handle_ring_read(d); } - if (d->master_fd != -1 && d->master_pollfd_idx != -1) { - if (fds[d->master_pollfd_idx].revents & - ~(POLLIN|POLLOUT|POLLPRI)) - domain_handle_broken_tty(d, - domain_is_valid(d->domid)); - else { - if (fds[d->master_pollfd_idx].revents & - POLLIN) - handle_tty_read(d); - if (fds[d->master_pollfd_idx].revents & - POLLOUT) - handle_tty_write(d); - } - } + console_iter_void_arg1(d, process_console); - d->xce_pollfd_idx = d->master_pollfd_idx = -1; + d->xce_pollfd_idx = -1; if (d->last_seen != enum_pass) shutdown_domain(d); From patchwork Wed May 10 14:35:15 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bhupinder Thakur X-Patchwork-Id: 99004 Delivered-To: patch@linaro.org Received: by 10.182.142.97 with SMTP id rv1csp234277obb; Wed, 10 May 2017 07:39:39 -0700 (PDT) X-Received: by 10.107.129.232 with SMTP id l101mr3527618ioi.194.1494427179015; Wed, 10 May 2017 07:39:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1494427179; cv=none; d=google.com; s=arc-20160816; b=if20hyVnlHs8W5xM+1IaWqbn0C2EiumJiU62MprMX8CzrMGmnrwFxqDDLbS+vu/aHL IAzW9HkTMyMKvQHL0TLbNyFVfTxGPDNjtKBG6jMSHTEpVX/j0DMyTEM9AVSo2mOUAjb8 7B5n6I55SGCfqqIuhymMlCZlwGe4FF5n1JGBTTkYGUygEO/VHX5EgQoE+W+J7GCyRt0h znxrDH3RVhd5FaMtHeZ5fkfJOm88aDfRSrUHzfE7lULFK3F6GDlFVMFGP7Uoiqfx4f2w oLUpw///5McQ2vNiTu8G9GxA7KCs/HHCtkjHo/QUOF3U9JmA9HRPYzFh4zWNrqPATgYe uc9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-unsubscribe:list-id :precedence:subject:cc:references:in-reply-to:message-id:date:to :from:dkim-signature:arc-authentication-results; bh=9575YpikiLaS0t1oo/Vc3ajV7T4TG735UFHtKxWxTrk=; b=bMqHIycBfNIrMyAQKkOJPTww3BTu2n57o4bq+pM3TytIB5G3gm/gx4zV3+tnQO9L6Z Fgo/bQbON1ohU5/jzAw5Yd2hUFPLFbTu/b4+PrShqJtkJTomYzAqGwQ8TFDlL+VZNqNg lHEXca+rQx2vTohS7DrwZYd8lxoZnjFQwa9WXZ6vrMRYD1E7aD9nFjPicq555tMSbw1K wKkzEEFvwWBsbzeacqwnEbz9r6Pt38kmyrcUbGWD8kYgiaQQvnu5+xKPHIY9Vm5UW827 yZob/49b/XXRPYh9712uQ5DkUJRM51qxPB7BK2dBP6BVB80E79HvOR7K6l49Td9MiRkZ zoDg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) smtp.mailfrom=xen-devel-bounces@lists.xen.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.xenproject.org (lists.xenproject.org. [192.237.175.120]) by mx.google.com with ESMTPS id f35si2287096ioj.122.2017.05.10.07.39.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 10 May 2017 07:39:39 -0700 (PDT) Received-SPF: neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) client-ip=192.237.175.120; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) smtp.mailfrom=xen-devel-bounces@lists.xen.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d8SkX-0004tI-ER; Wed, 10 May 2017 14:37:57 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d8SkW-0004qG-1Y for xen-devel@lists.xenproject.org; Wed, 10 May 2017 14:37:56 +0000 Received: from [193.109.254.147] by server-10.bemta-6.messagelabs.com id 7D/22-03613-3C523195; Wed, 10 May 2017 14:37:55 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrKIsWRWlGSWpSXmKPExsVyMfTAJt3DqsK RBmuuCVt83zKZyYHR4/CHKywBjFGsmXlJ+RUJrBl7Nl1mLjjJV7Fr+k3mBsb33F2MXBxCAjMZ JbbsP8oC4rAIzGOWOPD0PTOIIyHQzyrxrWkaUIYTyImTmPNiCxOEXS7xdfoOZhBbSEBL4uip2 awQo5qZJGY3PABKcHCwCZhIzOqQAKkREVCSuLdqMlgvs4C3xIcj/9hBbGEBP4nDR1eAzWcRUJ V42P0WLM4LVPNmzQJ2iF1yEjfPdYLt4hTwkVj06iULxF5viUef/7BMYBRYwMiwilG9OLWoLLV I11AvqSgzPaMkNzEzR9fQwEwvN7W4ODE9NScxqVgvOT93EyMwsBiAYAfjzudOhxglOZiURHl1 dwlFCvEl5adUZiQWZ8QXleakFh9ilOHgUJLgjVIRjhQSLEpNT61Iy8wBhjhMWoKDR0mEtxkkz VtckJhbnJkOkTrFaMzx4vL790wcT1b+eM8kxJKXn5cqJc4rDVIqAFKaUZoHNwgWe5cYZaWEeR mBThPiKUgtys0sQZV/xSjOwagkzHsBZApPZl4J3L5XQKcwAZ0SyCAAckpJIkJKqoFR5t/bk4m Bu9xkkuxn3bFRWmk9WbVxAvtvzuw6/ZOP9rnVxSefCOBdNZenpXcdx4wbR1exWWQcW8nxd/Zs 6apDMzj+1AYk8i9MP5xzoOtYds7zhT+YHfu+db+uXb6/5hejh5Ip/3XZT8mKsYdvNh9J/sLio Ov4kVXZfZuEsqEA664SqZS+TceUWIozEg21mIuKEwGlgmY7uAIAAA== X-Env-Sender: bhupinder.thakur@linaro.org X-Msg-Ref: server-8.tower-27.messagelabs.com!1494427074!91082874!1 X-Originating-IP: [209.85.192.178] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.4.12; banners=-,-,- X-VirusChecked: Checked Received: (qmail 57849 invoked from network); 10 May 2017 14:37:55 -0000 Received: from mail-pf0-f178.google.com (HELO mail-pf0-f178.google.com) (209.85.192.178) by server-8.tower-27.messagelabs.com with AES128-GCM-SHA256 encrypted SMTP; 10 May 2017 14:37:55 -0000 Received: by mail-pf0-f178.google.com with SMTP id v14so16876786pfd.2 for ; Wed, 10 May 2017 07:37:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Qa+jlV2xAWOW0IE9+jTCxltG+mZz9lMM/Jwv52ahi+c=; b=JVUiEJsNeJgqqiW2Ff8ViCasF1d1UcBBYK5HEApivv4PPxAHKDcAo6+YiG/88wVigv jgOcHn3iBnj7LuA21+Yo3PfJqKZghA+GP0QD5LskEmV+941hN2YTIGORbPoURaYExkNX X1uwwrDuuQkUzK1tQQFPBiKxIyhx/5FcSu3sM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Qa+jlV2xAWOW0IE9+jTCxltG+mZz9lMM/Jwv52ahi+c=; b=XFQGXG27iZ0aziKBcxd0B4K2L1WGLlovXUai3p+f5fpPjapFXDfpkGj8Sa7W55EXa2 Qz2nUcpuWaWUwzD/gD6evT3yHJqWHalNjFBnYOZpWefnujA57G5s4F/qj5yY2OC7giql kQ6z9MFfRV55OVMEEiEMmi13ewxr9NPWOO1gDm65yFmhRvqaIRbyafqhoBdQ17KD+PML e6FOOoNWIkmZbuNdvUQBI23KryY2MrJ/yh8orWajm7qo7qx0ml7SFgIL9do61/Wk/blJ Yx/RT3LMRBs7Ueciccx4zov6XxJ45Gd+Z5Gvvj5CSLSScZUUgsWjo5/2qYUML4VKZfXS KezA== X-Gm-Message-State: AODbwcDg/fr20IRCPURrePPq6tDvvzfSbI3b9PTUY4YQljMrPEZS8aja QZuydE6gkbitaFjX X-Received: by 10.84.254.65 with SMTP id a1mr1573391pln.64.1494427073598; Wed, 10 May 2017 07:37:53 -0700 (PDT) Received: from blr-ubuntu-linaro.wlan.qualcomm.com ([61.0.91.57]) by smtp.gmail.com with ESMTPSA id r73sm6167781pfa.65.2017.05.10.07.37.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 10 May 2017 07:37:53 -0700 (PDT) From: Bhupinder Thakur To: xen-devel@lists.xenproject.org Date: Wed, 10 May 2017 20:05:15 +0530 Message-Id: <1494426918-32737-4-git-send-email-bhupinder.thakur@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1494426918-32737-1-git-send-email-bhupinder.thakur@linaro.org> References: <1494426918-32737-1-git-send-email-bhupinder.thakur@linaro.org> Cc: Wei Liu , Ian Jackson Subject: [Xen-devel] [PATCH 09/12 v3] xen/arm: vpl011: Add support for vuart in xenconsole X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" Xenconsole supports only PV console currently. This patch adds support for vuart console, which allows emulated pl011 UART to be accessed as a console. Signed-off-by: Bhupinder Thakur --- One review comment was to keep the vuart code under CONFIG_ARM64 && CONFIG_ACPI flags. This code review could not be incorporated as I could not find out the appropriate flags unders which this code can be kept. Are the CONFIG* flags exported to xenconsole? tools/console/daemon/io.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tools/console/daemon/io.c b/tools/console/daemon/io.c index 9bb14de..19a2f35 100644 --- a/tools/console/daemon/io.c +++ b/tools/console/daemon/io.c @@ -115,6 +115,7 @@ struct console_data { }; static int map_pvcon_ring_ref(struct console *, int ); +static int map_vuartcon_ring_ref(struct console *, int ); static struct console_data console_data[] = { @@ -124,6 +125,12 @@ static struct console_data console_data[] = { .mapfunc = map_pvcon_ring_ref, .mandatory = true }, + { + .xsname = "/vuart/0", + .ttyname = "tty", + .mapfunc = map_vuartcon_ring_ref, + .mandatory = false + } }; #define MAX_CONSOLE (sizeof(console_data)/sizeof(struct console_data)) @@ -751,6 +758,28 @@ out: return err; } +static int map_vuartcon_ring_ref(struct console *con, int ring_ref) +{ + int err = 0; + struct domain *dom = con->d; + + if (!con->interface) { + con->interface = xc_map_foreign_range(xc, + dom->domid, + XC_PAGE_SIZE, + PROT_READ|PROT_WRITE, + (unsigned long)ring_ref); + if (con->interface == NULL) { + err = EINVAL; + goto out; + } + con->ring_ref = ring_ref; + } + +out: + return err; +} + static int console_create_ring(struct console *con) { int err, remote_port, ring_ref; From patchwork Wed May 10 14:35:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bhupinder Thakur X-Patchwork-Id: 99005 Delivered-To: patch@linaro.org Received: by 10.182.142.97 with SMTP id rv1csp234350obb; Wed, 10 May 2017 07:39:50 -0700 (PDT) X-Received: by 10.36.72.6 with SMTP id p6mr5820495ita.80.1494427190676; Wed, 10 May 2017 07:39:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1494427190; cv=none; d=google.com; s=arc-20160816; b=MZic8tSDibVHJoaZrl2frDKAVxQ2GuyV09H433ngFzRyneuVg2VLm1nIB7kaviefGH yOjSp0Z36F0jAfgKwiNGuHiNYofWRClsIyGfn4XqrAKRcshZU2vc8dY1rwOIFEZ14Gu7 tW0G/OOrxNS8ECo8tyZ85Tzwm88rMwvoPiByHN+4usA1iosiAFWzVpp52WYPtTk101Ub uw9nfM2pbEfkRkiTu8n/W0gLgtl/hiSD2JDMoDRpW3LVOwD6AwL2Ok234laXdEt7uT73 Ycpai8k6GPnE/KAfvsjofhVl4uO/2zmjT9k8Ysk5U1DYYnwHzp3a05kI/7u8fNuis0mq 7CSw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-unsubscribe:list-id :precedence:subject:cc:references:in-reply-to:message-id:date:to :from:dkim-signature:arc-authentication-results; bh=pFKyo/3iNozSAK2GxC6TgzqAxNvmkLcH6Kg3i93al4E=; b=BmQSlTueThL/saOaFm2Hg98/Hu0yH8xucLdfKlWopRvuahsOEmG2VYvdP3NE2t56i5 C+JvsAPCnwMyJXW6jWgOh9bkv2yiZ+yviY9n6j/kPv6bXyFRvdWEhUs1SyJuhAxNjGVE eyinfY7Q3KgihNgTcSI8jjKeXTNtAtmNxz6U352KzkuaPlCn7bf6n+ujHA2XrP95B7DT dSl0K7Qt9eZuznObUhkx0vAuNT+nu7WclWnAX6c4Rrv3vdmhkrhOGqbdHP/RUIcM0tjT RjfG4/s25YvqO5xZK8S0yxPQoypj2ukQLvdfoj2O4/nETA/a39m6JZjcu0NsXCyR9LqJ k8hw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) smtp.mailfrom=xen-devel-bounces@lists.xen.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.xenproject.org (lists.xenproject.org. [192.237.175.120]) by mx.google.com with ESMTPS id z95si3852161ita.64.2017.05.10.07.39.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 10 May 2017 07:39:50 -0700 (PDT) Received-SPF: neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) client-ip=192.237.175.120; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) smtp.mailfrom=xen-devel-bounces@lists.xen.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d8Ska-0004vV-LQ; Wed, 10 May 2017 14:38:00 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d8SkZ-0004uZ-Kb for xen-devel@lists.xenproject.org; Wed, 10 May 2017 14:37:59 +0000 Received: from [85.158.143.35] by server-7.bemta-6.messagelabs.com id CE/01-03620-7C523195; Wed, 10 May 2017 14:37:59 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrMIsWRWlGSWpSXmKPExsVyMfTAGt1jqsK RBpP/yFl83zKZyYHR4/CHKywBjFGsmXlJ+RUJrBkrD6xjLpjLV/H36FTGBsZW7i5GTg4hgZmM EpMPKnUxcnGwCMxjlrhy4ScziCMh0M8q8XzxFNYuRg4gJ07i1cRykAYJgQqJ7R+vMkM0a0kcP TWbFaReSKCZSWLWiuVsIPVsAiYSszokQGpEBJQk7q2azARiMwt4S3w48o8dxBYWiJE48e47O0 g5i4CqROMDN5AwL1DJnU9bWSBWyUncPNcJtopTwEdi0auXLBBrvSUeff7DMoFRYAEjwypGjeL UorLUIl0jM72kosz0jJLcxMwcXUMDM73c1OLixPTUnMSkYr3k/NxNjMCgYgCCHYxnFgQeYpTk YFIS5dXdJRQpxJeUn1KZkVicEV9UmpNafIhRhoNDSYI3SkU4UkiwKDU9tSItMwcY3jBpCQ4eJ RHeZpA0b3FBYm5xZjpE6hSjMceLy+/fM3E8WfnjPZMQS15+XqqUOG8nSKkASGlGaR7cIFjcXW KUlRLmZQQ6TYinILUoN7MEVf4VozgHo5Iw7wWQKTyZeSVw+14BncIEdEoggwDIKSWJCCmpBsZ CKeX3p5iXui9Z/0/u9WtT4eazJZOWBE7azh7Mk+R3Lrnmq/zZ+qZHKxR5TNkS33NcVan+0RoZ dKlm6cYZB2rSt3JetQx/Inbyh8NJ/muRZ8WuHfk96aWt1Pf55u86Dot90p+U/cq4kUslnPXl5 0O188vvlSasWLvLOkpNqsnl4uOvfzfsCD2oxFKckWioxVxUnAgA5EqUHrYCAAA= X-Env-Sender: bhupinder.thakur@linaro.org X-Msg-Ref: server-14.tower-21.messagelabs.com!1494427077!61024075!1 X-Originating-IP: [209.85.192.172] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.4.12; banners=-,-,- X-VirusChecked: Checked Received: (qmail 39917 invoked from network); 10 May 2017 14:37:58 -0000 Received: from mail-pf0-f172.google.com (HELO mail-pf0-f172.google.com) (209.85.192.172) by server-14.tower-21.messagelabs.com with AES128-GCM-SHA256 encrypted SMTP; 10 May 2017 14:37:58 -0000 Received: by mail-pf0-f172.google.com with SMTP id e64so16910225pfd.1 for ; Wed, 10 May 2017 07:37:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=CDJELpVqmod1G5B3AiRVXaQx1S0QvCBUY3UGK/9AQak=; b=kT4vhzp0svSZPKjqqax1BftUQy9u6aMAbgURcMBEzMCJe9q0SUdlg5eSdPugC7Qhpx uMUkDKrcnUByvPcYTLDCqMnPBiee7rwtjzRAvtJgDTQYjxspbWiIgt7JF6Lwp4LFP8AL kpxCYk37VC8oTdlAmqznjn5wINmbjZiQv1PZs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=CDJELpVqmod1G5B3AiRVXaQx1S0QvCBUY3UGK/9AQak=; b=Bc6VPFWrL6WzNT/J5sdhzrLqAI1FlwHhst/zkyXIUjpAb5oYDXPFwW/ofndB4/MYLL yKIbiVJz+CPo/s2HNSag9jB5mSiShe+H/g/DyVVMeWNXyp1yzUeAPCnzCYpS/EaXcyMs Ak7l1c+jNfb3X1jOIRsjZ79ijFKuD9//xaZmQiUH8L6sbm8ofkCy6YT1+UYS2UReAp1F tos0XLEDHe5khBnTP+fFFxgpwsOYfCjukdj8l+NJt/MgtiNkClmXVdG29nhrnMsIRucZ QSOXqIjFG1LabSwyHWOJoUkbTwSWhuBb4TQgGyU/z79uyzA0qelXg+ykCHuep1k72jk2 AqJA== X-Gm-Message-State: AODbwcCW68WPZiOE1H/ZhxfPitnDvFzqZKGCvQeuijxWGpcimey0XSRw u6lRWNzlRZZqP3px X-Received: by 10.98.74.135 with SMTP id c7mr6753909pfj.140.1494427077055; Wed, 10 May 2017 07:37:57 -0700 (PDT) Received: from blr-ubuntu-linaro.wlan.qualcomm.com ([61.0.91.57]) by smtp.gmail.com with ESMTPSA id r73sm6167781pfa.65.2017.05.10.07.37.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 10 May 2017 07:37:56 -0700 (PDT) From: Bhupinder Thakur To: xen-devel@lists.xenproject.org Date: Wed, 10 May 2017 20:05:16 +0530 Message-Id: <1494426918-32737-5-git-send-email-bhupinder.thakur@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1494426918-32737-1-git-send-email-bhupinder.thakur@linaro.org> References: <1494426918-32737-1-git-send-email-bhupinder.thakur@linaro.org> Cc: Wei Liu , Ian Jackson Subject: [Xen-devel] [PATCH 10/12 v3] xen/arm: vpl011: Add a new vuart console type to xenconsole client X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" Add a new console type VUART to connect to guest's emualated vuart console. Signed-off-by: Bhupinder Thakur Acked-by: Wei Liu Reviewed-by: Stefano Stabellini --- tools/console/client/main.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/console/client/main.c b/tools/console/client/main.c index 977779f..6f4405f 100644 --- a/tools/console/client/main.c +++ b/tools/console/client/main.c @@ -76,7 +76,7 @@ static void usage(const char *program) { "\n" " -h, --help display this help and exit\n" " -n, --num N use console number N\n" - " --type TYPE console type. must be 'pv' or 'serial'\n" + " --type TYPE console type. must be 'pv', 'serial' or 'vuart'\n" " --start-notify-fd N file descriptor used to notify parent\n" , program); } @@ -264,6 +264,7 @@ typedef enum { CONSOLE_INVAL, CONSOLE_PV, CONSOLE_SERIAL, + CONSOLE_VUART, } console_type; static struct termios stdin_old_attr; @@ -361,6 +362,8 @@ int main(int argc, char **argv) type = CONSOLE_SERIAL; else if (!strcmp(optarg, "pv")) type = CONSOLE_PV; + else if (!strcmp(optarg, "vuart")) + type = CONSOLE_VUART; else { fprintf(stderr, "Invalid type argument\n"); fprintf(stderr, "Console types supported are: serial, pv\n"); @@ -436,6 +439,9 @@ int main(int argc, char **argv) else snprintf(path, strlen(dom_path) + strlen("/device/console/%d/tty") + 5, "%s/device/console/%d/tty", dom_path, num); } + if (type == CONSOLE_VUART) { + snprintf(path, strlen(dom_path) + strlen("/vuart/0/tty") + 1, + "%s/vuart/0/tty", dom_path); + } /* FIXME consoled currently does not assume domain-0 doesn't have a console which is good when we break domain-0 up. To keep us From patchwork Wed May 10 14:35:17 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bhupinder Thakur X-Patchwork-Id: 99003 Delivered-To: patch@linaro.org Received: by 10.182.142.97 with SMTP id rv1csp234383obb; Wed, 10 May 2017 07:39:54 -0700 (PDT) X-Received: by 10.107.24.132 with SMTP id 126mr3587161ioy.118.1494427194465; Wed, 10 May 2017 07:39:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1494427194; cv=none; d=google.com; s=arc-20160816; b=qCib2xdBil8A/ZIxThnAFtq9I/i/9LlE7v0ybgNUBlgFRAghOwLsNrqzVOpUtDQYNC Wx1sdQNzy9f403gRmNAI+R9wXmuGbadPYJmjSkGM/JnYusmJy90ZtKZ0MxTBP97hTNrK N0HJdTeN77IJzE7lzt8Emu4oGkk9AEee7R3l5zkc/GS/xzPyJTQnK/zpSY2vDfwpagw8 5ckm4lhZiyre0psJlbOGQLS8ufgKcQFgVbmgNMuA1X9/GleE6jhfMTdtKjqwOCbYkxHT 4gm6SMuw1KOVPRIWJ5sGGPoyrKJNn6RmOTHIZcQGWL45Eqa/egMns1ND5po+ytxTydpa BYvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-unsubscribe:list-id :precedence:subject:cc:references:in-reply-to:message-id:date:to :from:dkim-signature:arc-authentication-results; bh=/ZRvUDH6in8D4Bqb3rB6C3bu2vkLWeEhnp6EDCyr3VY=; b=U+hbPtAsTR1KuE73hfSPTS/JperQuSVoyS+XxsduwcpLFMv14d+qJ0J1WZmXg2fBg8 N4LOAIvRpgj9d1fu5lGYwvV8OHCO16fCTzIkCfAS/W3rAjjlcsIFwQXPajfmZ1Piu7/y QPG8AOlvUgrSLUMVqAcsrdtAUCgyhz+0KPnxt3T491Xn07xxZH+SCGLPGqo4E2wuCuER dZMby8qDQlm6WN5aFyn+drBnqZ/g1zy8amio+yqQX3F/IjFZqdN2u32HcZZ5yMP/YsRc fgD11vS/emHmyI7blxg9E/vCByr8vnk4eKSEn7/TJmIT6vACwLezcGuoDNtFzSvHQdo4 490Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) smtp.mailfrom=xen-devel-bounces@lists.xen.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.xenproject.org (lists.xenproject.org. [192.237.175.120]) by mx.google.com with ESMTPS id p11si2384842iod.111.2017.05.10.07.39.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 10 May 2017 07:39:54 -0700 (PDT) Received-SPF: neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) client-ip=192.237.175.120; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) smtp.mailfrom=xen-devel-bounces@lists.xen.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d8Skk-00051a-3a; Wed, 10 May 2017 14:38:10 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d8Ski-000506-W1 for xen-devel@lists.xenproject.org; Wed, 10 May 2017 14:38:09 +0000 Received: from [85.158.139.211] by server-6.bemta-5.messagelabs.com id F9/5D-02180-0D523195; Wed, 10 May 2017 14:38:08 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrCIsWRWlGSWpSXmKPExsVyMfTABt0zqsK RBgu/qVl83zKZyYHR4/CHKywBjFGsmXlJ+RUJrBlXz65hKXgpWzFh1nOmBsbLYl2MXBxCAjMZ JZYc2sLcxcjJwSIwj1li1Uo5kISEQD+rxKc7P5m6GDmAnDiJg5fNQWokBMol9t+dzwJiCwloS Rw9NZsVYlAzk8T0rRtZQerZBEwkZnVIgNSICChJ3Fs1mQnEZhbwlvhw5B87iC0sECPRur0daq +qxJKpE8Bm8gLV9D5dxgqxS07i5rlOsBpOAR+JRa9eQu31lnj0+Q/LBEaBBYwMqxg1ilOLylK LdI0s9ZKKMtMzSnITM3N0DQ1M9XJTi4sT01NzEpOK9ZLzczcxAsOqnoGBcQfj5S1+hxglOZiU RHl1dwlFCvEl5adUZiQWZ8QXleakFh9ilOHgUJLgjVIRjhQSLEpNT61Iy8wBBjhMWoKDR0mEt xkkzVtckJhbnJkOkTrFaMzx4vL790wcT1b+eM8kxJKXn5cqJc4rDVIqAFKaUZoHNwgWeZcYZa WEeRkZGBiEeApSi3IzS1DlXzGKczAqCfNOBZnCk5lXArfvFdApTECnBDIIgJxSkoiQkmpgDPp llqHGLrZE1CLo1uurdy5eSpuVG7pe5SmbzpqXCbO5EowM21SUI3lVD+xoNm7Xesv+gf1pk0Si 7uLp093fdl9X+Pp4/iXjPelCjx5l86oqn/217px/3bKc0nuXPj3VYNp5ZenUf7d7ZO5x3nxlv dJuXtrnvk3Ty/Zb1Bmfnu4kfOa3nukDRiWW4oxEQy3mouJEAO1VlY+3AgAA X-Env-Sender: bhupinder.thakur@linaro.org X-Msg-Ref: server-12.tower-206.messagelabs.com!1494427082!61038842!1 X-Originating-IP: [209.85.192.176] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.4.12; banners=-,-,- X-VirusChecked: Checked Received: (qmail 44270 invoked from network); 10 May 2017 14:38:03 -0000 Received: from mail-pf0-f176.google.com (HELO mail-pf0-f176.google.com) (209.85.192.176) by server-12.tower-206.messagelabs.com with AES128-GCM-SHA256 encrypted SMTP; 10 May 2017 14:38:03 -0000 Received: by mail-pf0-f176.google.com with SMTP id m17so16892523pfg.3 for ; Wed, 10 May 2017 07:38:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=pZJbGwtFrFjhxXZhX2CofCVXtTjcHxZ2asByuzAQ4qs=; b=drRdTcY4zDgOtZYGu0EAMCXnSPPFmGQrXOvAWKxq4X/hopDmWyOKN5SPtvpeOM7hYC ZMqIlWP18nAgXhAgwebZ470mYPeiSSBBLEbx4rjOCZNP7SAoudhZ1bxxFGEDeQHPt0gh EYlN9apRM0CbVaRWcsP+V5e/1+PzNWKIHDi00= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=pZJbGwtFrFjhxXZhX2CofCVXtTjcHxZ2asByuzAQ4qs=; b=c40tSVFP6CCNa42r6NzaT/hVGjDD6H/WvGjRuLAX/5tJ8elJxtGq7Cjhy8gLfAfvEQ 41Wtmx0wp0kmA0jgXxAvni+36URIyUD8K5NEowfZj9mm3yfdIqdosOCgB2T/ekyD7CsS MbruaAHC5uz82VfCEHo23zwU4qnjF4GzIzzUY37jl78RHvJAa7nW7uvSWF//hVpUr/zX 8Wo2I3IuwA3/Y5sGZjjYl57ztAL567zJPi2wco0q4jyWTxRWhOBzhYKlweK1dXHCJNCZ zW+uhmYCo4E00osVdrDEv+KBjVMAJ1LQnV7Ckw4mUfUJCeC4siscoJLhO6y+kymaNxCN GW6Q== X-Gm-Message-State: AODbwcD+9rQgoVMUi7CiOzXgGjj4aqnxlB1s792GyZySV19i2RTF3D9X 0kpilXQvwt1KMeX+ X-Received: by 10.84.135.129 with SMTP id 1mr3336353plj.57.1494427081385; Wed, 10 May 2017 07:38:01 -0700 (PDT) Received: from blr-ubuntu-linaro.wlan.qualcomm.com ([61.0.91.57]) by smtp.gmail.com with ESMTPSA id r73sm6167781pfa.65.2017.05.10.07.37.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 10 May 2017 07:38:00 -0700 (PDT) From: Bhupinder Thakur To: xen-devel@lists.xenproject.org Date: Wed, 10 May 2017 20:05:17 +0530 Message-Id: <1494426918-32737-6-git-send-email-bhupinder.thakur@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1494426918-32737-1-git-send-email-bhupinder.thakur@linaro.org> References: <1494426918-32737-1-git-send-email-bhupinder.thakur@linaro.org> Cc: Wei Liu , Ian Jackson Subject: [Xen-devel] [PATCH 11/12 v3] xen/arm: vpl011: Add a pl011 uart DT node in the guest device tree X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" The SBSA uart node format is as specified in Documentation/devicetree/bindings/serial/arm_sbsa_uart.txt and given below: ARM SBSA defined generic UART ------------------------------ This UART uses a subset of the PL011 registers and consequently lives in the PL011 driver. It's baudrate and other communication parameters cannot be adjusted at runtime, so it lacks a clock specifier here. Required properties: - compatible: must be "arm,sbsa-uart" - reg: exactly one register range - interrupts: exactly one interrupt specifier - current-speed: the (fixed) baud rate set by the firmware Signed-off-by: Bhupinder Thakur Reviewed-by: Stefano Stabellini --- Changes since v2: - Currently device discovery using ACPI is not supported. - Dropped the reviewed-by tag by Stefano as there were some IRQ related changes done later. tools/libxl/libxl_arm.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/tools/libxl/libxl_arm.c b/tools/libxl/libxl_arm.c index d842d88..f88ef0d 100644 --- a/tools/libxl/libxl_arm.c +++ b/tools/libxl/libxl_arm.c @@ -44,10 +44,23 @@ int libxl__arch_domain_prepare_config(libxl__gc *gc, uint32_t nr_spis = 0; unsigned int i; + /* + * If pl011 vuart is enabled then increment the nr_spis to allow allocation + * of SPI VIRQ for pl011. + */ + if (d_config->b_info.vuart) + nr_spis += (GUEST_VPL011_SPI - 32) + 1; + for (i = 0; i < d_config->b_info.num_irqs; i++) { uint32_t irq = d_config->b_info.irqs[i]; uint32_t spi; + if (d_config->b_info.vuart && (irq == GUEST_VPL011_SPI)) + { + LOG(ERROR, "Physical IRQ %u conflicting with pl011 SPI\n", irq); + return ERROR_FAIL; + } + if (irq < 32) continue; @@ -130,9 +143,10 @@ static struct arch_info { const char *guest_type; const char *timer_compat; const char *cpu_compat; + const char *uart_compat; } arch_info[] = { - {"xen-3.0-armv7l", "arm,armv7-timer", "arm,cortex-a15" }, - {"xen-3.0-aarch64", "arm,armv8-timer", "arm,armv8" }, + {"xen-3.0-armv7l", "arm,armv7-timer", "arm,cortex-a15", "arm,sbsa-uart" }, + {"xen-3.0-aarch64", "arm,armv8-timer", "arm,armv8", "arm,sbsa-uart" }, }; /* @@ -590,6 +604,38 @@ static int make_hypervisor_node(libxl__gc *gc, void *fdt, return 0; } +static int make_vpl011_uart_node(libxl__gc *gc, void *fdt, + const struct arch_info *ainfo, + struct xc_dom_image *dom) +{ + int res; + gic_interrupt intr; + + res = fdt_begin_node(fdt, "sbsa-pl011"); + if (res) return res; + + res = fdt_property_compat(gc, fdt, 1, ainfo->uart_compat); + if (res) return res; + + res = fdt_property_regs(gc, fdt, ROOT_ADDRESS_CELLS, ROOT_SIZE_CELLS, + 1, + GUEST_PL011_BASE, GUEST_PL011_SIZE); + if (res) return res; + + set_interrupt(intr, GUEST_VPL011_SPI, 0xf, DT_IRQ_TYPE_LEVEL_HIGH); + + res = fdt_property_interrupts(gc, fdt, &intr, 1); + if (res) return res; + + /* Use a default baud rate of 115200. */ + fdt_property_u32(fdt, "current-speed", 115200); + + res = fdt_end_node(fdt); + if (res) return res; + + return 0; +} + static const struct arch_info *get_arch_info(libxl__gc *gc, const struct xc_dom_image *dom) { @@ -889,6 +935,9 @@ next_resize: FDT( make_timer_node(gc, fdt, ainfo, xc_config->clock_frequency) ); FDT( make_hypervisor_node(gc, fdt, vers) ); + if (info->vuart) + FDT( make_vpl011_uart_node(gc, fdt, ainfo, dom) ); + if (pfdt) FDT( copy_partial_fdt(gc, fdt, pfdt) ); From patchwork Wed May 10 14:35:18 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bhupinder Thakur X-Patchwork-Id: 99007 Delivered-To: patch@linaro.org Received: by 10.182.142.97 with SMTP id rv1csp234371obb; Wed, 10 May 2017 07:39:52 -0700 (PDT) X-Received: by 10.107.40.81 with SMTP id o78mr3371009ioo.192.1494427192805; Wed, 10 May 2017 07:39:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1494427192; cv=none; d=google.com; s=arc-20160816; b=n+BWMYGYKYjJEVUryYrUJX8C+NZWKBi6rwCYUf7fuRY+Va+q4yIidkl7x5k2XJHSHC lV1O30ozNdA0EcQTUq0JkOSblv/2AK4CNutYIHf3XAbGXmJFGxVYHkxoUxm0yurAT43W AfZQpqywR9PeO/kISXICvrD8t8JZijwoivHz3i3vYk/UnqVwafLRTGG9btYWVvp3NXm3 FSIqlCOy83lNyM3yfH7RqqNPo9NL8SUisd1X0r9X9Tj9/10i1uOw5WahmZXfkQO5IvxO Eqmo8U8H2bPce58UA77l+3WHW+HR4RTHROk0epNGfI4FtUfpux6eawqjaC8Lf3LawZae RLKA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-unsubscribe:list-id :precedence:subject:cc:references:in-reply-to:message-id:date:to :from:dkim-signature:arc-authentication-results; bh=N7dIzOM2IF5KtDb8WsElmkmrnF5ttNi4K0J/M1jxoxo=; b=ZHHp44mSF4waBQJ880ORanmdUt1zbE16KieCfufuaTsDDxgF7oPxOpak/3N7zLkb/n /LgZ+DcJIdegsN0rgv/KbNYgWYaly8GMYYY+JMWy0fzwa9/aCvV5cmm6SHyOv+YHPxsN S8FarJUZJHAGwKJYbP22Rmnqe+uSaXVLVx3BX+bqsM/IThgWc+27IWKkqOA+LxwQH9+1 AwHSnnyRWIgLH4Q18CrqdBBJ+ds8hQFSs3/sXzoFIkteIwAw3MWeGMtSDCXZs8Q5ANq3 3fSImS6Qy6tc5hdBofe8tpYIZZlVdQxNz3YxumnryJkFcuvNIgDs0VAck7LtnReFkeza zj3w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) smtp.mailfrom=xen-devel-bounces@lists.xen.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.xenproject.org (lists.xenproject.org. [192.237.175.120]) by mx.google.com with ESMTPS id v73si3411682ith.26.2017.05.10.07.39.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 10 May 2017 07:39:52 -0700 (PDT) Received-SPF: neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) client-ip=192.237.175.120; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=neutral (google.com: 192.237.175.120 is neither permitted nor denied by best guess record for domain of xen-devel-bounces@lists.xen.org) smtp.mailfrom=xen-devel-bounces@lists.xen.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d8Ski-00050P-So; Wed, 10 May 2017 14:38:08 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d8Skh-0004zQ-KV for xen-devel@lists.xenproject.org; Wed, 10 May 2017 14:38:07 +0000 Received: from [85.158.143.35] by server-10.bemta-6.messagelabs.com id 79/D2-03613-FC523195; Wed, 10 May 2017 14:38:07 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrGIsWRWlGSWpSXmKPExsVyMfTAet1zqsK RBhM3Slp83zKZyYHR4/CHKywBjFGsmXlJ+RUJrBkf979jLNgnXXFn40WWBsbPYl2MXBxCArMY Je5OfsAE4rAIzGOW+Hj7IRuIIyHQzyrx5PM/li5GTiAnTuLfxlVsEHa5xNO2A4wgtpCAlsTRU 7NZIUY1M0nMmv8PyOHgYBMwkZjVIQFSIyKgJHFv1WQmEJtZwFviw5F/7CC2sECkxIX+F2BzWA RUJVacuQc2nxeo5sTBg1C75CRunutkBrE5BXwkFr16yQKx11vi0ec/LBMYBRYwMqxi1ChOLSp LLdI1MtJLKspMzyjJTczM0TU0MNPLTS0uTkxPzUlMKtZLzs/dxAgMLQYg2MG4Zn7gIUZJDiYl UV7dXUKRQnxJ+SmVGYnFGfFFpTmpxYcYZTg4lCR4o1SEI4UEi1LTUyvSMnOAQQ6TluDgURLhb QZJ8xYXJOYWZ6ZDpE4xGnO8uPz+PRPHk5U/3jMJseTl56VKifNKg5QKgJRmlObBDYJF3yVGWS lhXkag04R4ClKLcjNLUOVfMYpzMCoJ80aCTOHJzCuB2/cK6BQmoFMCGQRATilJREhJNTBKOIR rHxGYy5tZlyCpeO/px9c7tkld18o+deqXhGbpYqEirhzT5NJJ7IG6Zr/mH89x1OFL+hO+bkat k9yj+o+1sn/6nh91mmIc0lq27alefqTV4cDrJw/90unsUZS88ye3UCWI922Rw1tzpcILei3uH 06bB1bq97cz896odDhR92ub3KykaiWW4oxEQy3mouJEABMfQMW5AgAA X-Env-Sender: bhupinder.thakur@linaro.org X-Msg-Ref: server-9.tower-21.messagelabs.com!1494427085!67543265!1 X-Originating-IP: [209.85.192.175] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.4.12; banners=-,-,- X-VirusChecked: Checked Received: (qmail 40372 invoked from network); 10 May 2017 14:38:06 -0000 Received: from mail-pf0-f175.google.com (HELO mail-pf0-f175.google.com) (209.85.192.175) by server-9.tower-21.messagelabs.com with AES128-GCM-SHA256 encrypted SMTP; 10 May 2017 14:38:06 -0000 Received: by mail-pf0-f175.google.com with SMTP id e193so16903942pfh.0 for ; Wed, 10 May 2017 07:38:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=jaekUM7vzx5L1funR/k5gcuXHCOpV5cjoYkfhVDjKJ8=; b=FAuInPvAuUELDaQJLvLv1yyuD2Hf374O8y9ZmrzaYnhc7XHyZ9KZvOMSjVQqcM616Q v+w948S2iFRChE2JmCCpW0m9BkZ16nGEfaEjuPJPgWuX9d927C53z3ZrsQcuctIEavvK wKCp+GK8A1KFk9EtZCNuNhR9uuwcfZfSnKmJY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=jaekUM7vzx5L1funR/k5gcuXHCOpV5cjoYkfhVDjKJ8=; b=o1g6aGD36ozqh46QoFhy0XWYd8Mw6axjrxeBjULR6ptQ/hiSaRrTShtWkkJ8f9xrWm zz63P7Dv6WV73PI0p+a+yYCk4n02dafkltF3NJjl70wgD2Pgr5ZP0A6Tv9YTSVrlXM19 waifpCYwfWpbhxy9Z2ogAgdKwbRXfU3ojvXce6qLU1eFWRSgaaP/9DD7WqAL6HSr3JDe 9G/yyLCnhZrHvNQY2HgHUfmJMjNKwxRmbUAZIGW7PDbGyVYl+3RNLbfc658MdR6ZSj3S yDE3n2t2rm66KKXa6KOI1+SV1c7QGBHXBsWTzQq3V9W+TX0U1Sp4scx9Ru7FVFBRB/L/ NnTg== X-Gm-Message-State: AODbwcCPHFoqZElQiIuUg3JonTUBuzcEMCqnVYjIPByW4ptHMoz7qgG8 ht3TMEQRLNgpuCq9 X-Received: by 10.99.1.141 with SMTP id 135mr684312pgb.164.1494427084899; Wed, 10 May 2017 07:38:04 -0700 (PDT) Received: from blr-ubuntu-linaro.wlan.qualcomm.com ([61.0.91.57]) by smtp.gmail.com with ESMTPSA id r73sm6167781pfa.65.2017.05.10.07.38.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 10 May 2017 07:38:04 -0700 (PDT) From: Bhupinder Thakur To: xen-devel@lists.xenproject.org Date: Wed, 10 May 2017 20:05:18 +0530 Message-Id: <1494426918-32737-7-git-send-email-bhupinder.thakur@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1494426918-32737-1-git-send-email-bhupinder.thakur@linaro.org> References: <1494426918-32737-1-git-send-email-bhupinder.thakur@linaro.org> Cc: Wei Liu , Ian Jackson Subject: [Xen-devel] [PATCH 12/12 v3] xen/arm: vpl011: Update documentation for vuart console support X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" 1. Update documentation for a new vuart option added. 2. Update documentation about SPI irq reserved for vpl011. Signed-off-by: Bhupinder Thakur Acked-by: Wei Liu Reviewed-by: Stefano Stabellini --- Changes since v2: - Incorporated the review comments on the documentation. docs/man/xl.cfg.pod.5.in | 9 +++++++++ docs/misc/console.txt | 31 ++++++++++++++++++++++++++----- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/docs/man/xl.cfg.pod.5.in b/docs/man/xl.cfg.pod.5.in index 13167ff..3397cda 100644 --- a/docs/man/xl.cfg.pod.5.in +++ b/docs/man/xl.cfg.pod.5.in @@ -1085,6 +1085,15 @@ Allow a guest to access specific physical IRQs. It is recommended to use this option only for trusted VMs under administrator control. +If the virtual uart is enabled then irq 32 is reserved for it. By +default, it is disabled. If the user specifies the following option in +the VM config file then the vuart gets enabled. Today, only the +"pl011" model is supported. + +vuart = "pl011" + +Currently vuart console is available only for ARM64. + =item B Limit the guest to using at most N event channels (PV interrupts). diff --git a/docs/misc/console.txt b/docs/misc/console.txt index 16da805..9eccfa1 100644 --- a/docs/misc/console.txt +++ b/docs/misc/console.txt @@ -19,7 +19,20 @@ The first PV console path in xenstore remains: /local/domain/$DOMID/console -the other PV consoles follow the conventional xenstore device path and +The virtual UART console path in xenstore is defined as: + +/local/domain/$DOMID/vuart/0 + +The vuart console provides access to a virtual pl011 UART on ARM64 systems. To +enable vuart the following line has to be added to the guest configuration +file: + +vuart = "pl011" + +In Linux you can select the virtual pl011 UART by using the "ttyAMA0" +console instead of "hvc0". + +The other PV consoles follow the conventional xenstore device path and live in: /local/domain/$DOMID/device/console/$DEVID. @@ -61,6 +74,14 @@ output = pty The backend will write the pty device name to the "tty" node in the console frontend. +For the PV console the tty node is added at + +/local/domain/$DOMID/console/tty + +For the virtual UART console the tty node is added at + +/local/domain/$DOMID/vuart/0/tty + If the toolstack wants a listening Unix domain socket to be created at path , a connection accepted and data proxied to the console, it will write: @@ -79,8 +100,8 @@ For example: ioemu The supported values are only xenconsoled or ioemu; xenconsoled has -several limitations: it can only be used for the first PV console and it -can only connect to a pty. +several limitations: it can only be used for the first PV or virtual UART console +and it can only connect to a pty. Emulated serials are provided by qemu-dm only to hvm guests; the number of emulated serials depends on how many "-serial" command line options @@ -90,8 +111,8 @@ xenstore in the following path: /local/domain/$DOMID/serial/$SERIAL_NUM/tty -xenconsole is the tool to connect to a PV console or an emulated serial -that has a pty as output. Xenconsole takes a domid as parameter plus an +xenconsole is the tool to connect to a PV or virtual UART console or an +emulated serial that has a pty as output. Xenconsole takes a domid as parameter plus an optional console type (pv for PV consoles or serial for emulated serials) and console number. Depending on the type and console number, xenconsole will look for the tty node in different xenstore