* [PATCH RESEND 0/1] libxl: introduce an option for disabling the non-O_DIRECT
@ 2013-11-26 11:42 Ian Jackson
2013-11-26 11:42 ` [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround Ian Jackson
0 siblings, 1 reply; 13+ messages in thread
From: Ian Jackson @ 2013-11-26 11:42 UTC (permalink / raw)
To: xen-devel; +Cc: George Dunlap, Ian Campbell, Stefano Stabellini
I think I posted this patch before, but it looks like it was in
December 2012 (!).
1/1 libxl: introduce an option for disabling the non-O_DIRECT workaround
Ideally it would go into 4.4, at least. Provided the corresponding
qemu part has gone into qemu-xen, which I think it has. Can anyone
confirm ?
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround
2013-11-26 11:42 [PATCH RESEND 0/1] libxl: introduce an option for disabling the non-O_DIRECT Ian Jackson
@ 2013-11-26 11:42 ` Ian Jackson
2013-11-26 17:46 ` Konrad Rzeszutek Wilk
0 siblings, 1 reply; 13+ messages in thread
From: Ian Jackson @ 2013-11-26 11:42 UTC (permalink / raw)
To: xen-devel; +Cc: George Dunlap, Ian Jackson, Ian Campbell, Stefano Stabellini
From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Document and implement a new option that permits disk backends which
would otherwise have to avoid O_DIRECT (because of the network memory
lifetime bug) to use it anyway. This is:
direct-io-safe in the xl domain disk config specification
direct_io_safe in the libxl disk API
direct-io-safe in the backend xenstore interface
Add a reference to xen/include/public/io/blkif.h in
docs/misc/vbd-interface.txt.
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
---
docs/misc/vbd-interface.txt | 6 +
docs/misc/xl-disk-configuration.txt | 38 ++
tools/libxl/libxl.c | 4 +
tools/libxl/libxl.h | 7 +
tools/libxl/libxl_types.idl | 1 +
tools/libxl/libxlu_disk_l.c | 681 ++++++++++++++++++-----------------
tools/libxl/libxlu_disk_l.h | 2 +-
tools/libxl/libxlu_disk_l.l | 1 +
xen/include/public/io/blkif.h | 22 ++
9 files changed, 428 insertions(+), 334 deletions(-)
diff --git a/docs/misc/vbd-interface.txt b/docs/misc/vbd-interface.txt
index 3952e73..f873db0 100644
--- a/docs/misc/vbd-interface.txt
+++ b/docs/misc/vbd-interface.txt
@@ -125,3 +125,9 @@ because they directly map the bottom 8 bits of the xenstore integer
directly to the Linux guest's device number and throw away the rest;
they can crash due to minor number clashes. With these guests, the
workaround is not to supply problematic combinations of devices.
+
+
+Other frontend and backend options
+----------------------------------
+
+See xen/include/public/io/blkif.h for the full list of options.
diff --git a/docs/misc/xl-disk-configuration.txt b/docs/misc/xl-disk-configuration.txt
index 5bd456d..9c2650b 100644
--- a/docs/misc/xl-disk-configuration.txt
+++ b/docs/misc/xl-disk-configuration.txt
@@ -178,6 +178,44 @@ information to be interpreted by the executable program <script>,
These scripts are normally called "block-<script>".
+direct-io-safe
+--------------
+
+Description: Disables non-O_DIRECT workaround
+Supported values: absent, present
+Mandatory: No
+Default value: absent (workaround may be enabled)
+
+There is a memory lifetime bug in some driver domain (dom0) kernels
+which can cause crashes when using O_DIRECT. The bug occurs due to a
+mismatch between the backend-visible lifetime of pages used for the
+Xen PV network protocol and that expected by the backend kernel's
+networking subsystem. This can cause crashes when using certain
+backends with certain underlying storage.
+
+See:
+ http://lists.xen.org/archives/html/xen-devel/2012-12/msg01154.html
+
+For this reason, (this version of) the Xen libxl toolstack disables
+O_DIRECT when using the qemu-based Xen PV backend ("qdisk").
+
+However, this workaround has performance and scaling implications, and
+it is only necessary if the underlying device is a network filesystem.
+If the underlying device is not, then it is good to disable it; that
+is what this option is for.
+
+This option simply requests that the workaround be disabled. (However,
+not all backends versions which use the workaround understand this
+option, so this is on a best effort basis.)
+
+It's important to note that if you are storing the VM disk on a
+network filesystem or a network block device (NFS or ISCSI) it might
+not be safe to use this option. Otherwise specifying it is safe and
+can give better performances.
+
+If in the future the bug is fixed properly this option will then be
+silently ignored.
+
============================================
DEPRECATED PARAMETERS, PREFIXES AND SYNTAXES
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 2b847ef..62aa6d7 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -2189,6 +2189,10 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid,
flexarray_append(back, disk->readwrite ? "w" : "r");
flexarray_append(back, "device-type");
flexarray_append(back, disk->is_cdrom ? "cdrom" : "disk");
+ if (disk->direct_io_safe) {
+ flexarray_append(back, "direct-io-safe");
+ flexarray_append(back, "1");
+ }
flexarray_append(front, "backend-id");
flexarray_append(front, libxl__sprintf(gc, "%d", disk->backend_domid));
diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index a9663e4..06d1390 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -95,6 +95,13 @@
#define LIBXL_HAVE_BUILDINFO_EVENT_CHANNELS 1
/*
+ * LIBXL_HAVE_DEVICE_DISK_DIRECT_IO_SAFE indicates that a
+ * 'direct_io_safe' field (of boolean type) is present in
+ * libxl_device_disk.
+ */
+#define LIBXL_HAVE_DEVICE_DISK_DIRECT_IO_SAFE 1
+
+/*
* libxl ABI compatibility
*
* The only guarantee which libxl makes regarding ABI compatibility
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index cba8eff..8fb07b5 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -413,6 +413,7 @@ libxl_device_disk = Struct("device_disk", [
("removable", integer),
("readwrite", integer),
("is_cdrom", integer),
+ ("direct_io_safe", bool),
])
libxl_device_nic = Struct("device_nic", [
diff --git a/tools/libxl/libxlu_disk_l.c b/tools/libxl/libxlu_disk_l.c
index 03adfef..c97f0b2 100644
--- a/tools/libxl/libxlu_disk_l.c
+++ b/tools/libxl/libxlu_disk_l.c
@@ -361,8 +361,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
*yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp;
-#define YY_NUM_RULES 26
-#define YY_END_OF_BUFFER 27
+#define YY_NUM_RULES 27
+#define YY_END_OF_BUFFER 28
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -370,90 +370,92 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static yyconst flex_int16_t yy_acclist[454] =
+static yyconst flex_int16_t yy_acclist[470] =
{ 0,
- 25, 25, 27, 23, 24, 26, 8193, 23, 24, 26,
- 16385, 8193, 23, 26,16385, 23, 24, 26, 24, 26,
- 23, 24, 26, 23, 24, 26, 23, 24, 26, 23,
- 24, 26, 23, 24, 26, 23, 24, 26, 23, 24,
- 26, 23, 24, 26, 23, 24, 26, 23, 24, 26,
- 23, 24, 26, 23, 24, 26, 23, 24, 26, 23,
- 24, 26, 23, 24, 26, 25, 26, 26, 23, 23,
- 8193, 23, 8193, 23,16385, 8193, 23, 8193, 23, 23,
- 8214, 23,16406, 23, 23, 23, 23, 23, 23, 23,
- 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
-
- 23, 23, 25, 8193, 23, 8193, 23, 8193, 8214, 23,
- 8214, 23, 8214, 13, 23, 23, 23, 23, 23, 23,
- 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
- 23, 23, 8214, 23, 8214, 23, 8214, 13, 23, 18,
- 8214, 23,16406, 23, 23, 23, 23, 23, 23, 23,
- 8207, 8214, 23,16399,16406, 21, 8214, 23,16406, 23,
- 8206, 8214, 23,16398,16406, 23, 23, 8209, 8214, 23,
- 16401,16406, 23, 23, 23, 23, 18, 8214, 23, 18,
- 8214, 23, 18, 23, 18, 8214, 23, 3, 23, 23,
- 20, 8214, 23,16406, 23, 23, 8207, 8214, 23, 8207,
-
- 8214, 23, 8207, 23, 8207, 8214, 21, 8214, 23, 21,
- 8214, 23, 21, 23, 21, 8214, 8206, 8214, 23, 8206,
- 8214, 23, 8206, 23, 8206, 8214, 23, 8209, 8214, 23,
- 8209, 8214, 23, 8209, 23, 8209, 8214, 23, 23, 10,
- 23, 18, 8214, 23, 18, 8214, 23, 18, 8214, 18,
- 23, 18, 23, 3, 23, 23, 20, 8214, 23, 20,
- 8214, 23, 20, 23, 20, 8214, 23, 19, 8214, 23,
- 16406, 8207, 8214, 23, 8207, 8214, 23, 8207, 8214, 8207,
- 23, 8207, 21, 8214, 23, 21, 8214, 23, 21, 8214,
- 21, 23, 21, 8206, 8214, 23, 8206, 8214, 23, 8206,
-
- 8214, 8206, 23, 8206, 23, 8209, 8214, 23, 8209, 8214,
- 23, 8209, 8214, 8209, 23, 8209, 23, 23, 10, 13,
- 10, 7, 23, 23, 20, 8214, 23, 20, 8214, 23,
- 20, 8214, 20, 23, 20, 2, 19, 8214, 23, 19,
- 8214, 23, 19, 23, 19, 8214, 11, 23, 12, 10,
- 10, 13, 7, 13, 7, 8, 23, 6, 2, 13,
- 2, 19, 8214, 23, 19, 8214, 23, 19, 8214, 19,
- 23, 19, 11, 13, 11, 16, 8214, 23,16406, 12,
- 13, 12, 7, 7, 13, 8, 13, 8, 23, 6,
- 13, 6, 6, 13, 6, 13, 2, 2, 13, 11,
-
- 11, 13, 16, 8214, 23, 16, 8214, 23, 16, 23,
- 16, 8214, 12, 13, 8, 8, 13, 23, 6, 6,
- 13, 6, 6, 16, 8214, 23, 16, 8214, 23, 16,
- 8214, 16, 23, 16, 23, 6, 6, 9, 6, 5,
- 6, 9, 13, 9, 4, 6, 5, 6, 9, 9,
- 13, 4, 6
+ 26, 26, 28, 24, 25, 27, 8193, 24, 25, 27,
+ 16385, 8193, 24, 27,16385, 24, 25, 27, 25, 27,
+ 24, 25, 27, 24, 25, 27, 24, 25, 27, 24,
+ 25, 27, 24, 25, 27, 24, 25, 27, 24, 25,
+ 27, 24, 25, 27, 24, 25, 27, 24, 25, 27,
+ 24, 25, 27, 24, 25, 27, 24, 25, 27, 24,
+ 25, 27, 24, 25, 27, 26, 27, 27, 24, 24,
+ 8193, 24, 8193, 24,16385, 8193, 24, 8193, 24, 24,
+ 8215, 24,16407, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+
+ 24, 24, 24, 26, 8193, 24, 8193, 24, 8193, 8215,
+ 24, 8215, 24, 8215, 14, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 8215, 24, 8215, 24, 8215, 14,
+ 24, 19, 8215, 24,16407, 24, 24, 24, 24, 24,
+ 24, 24, 24, 8208, 8215, 24,16400,16407, 22, 8215,
+ 24,16407, 24, 8207, 8215, 24,16399,16407, 24, 24,
+ 8210, 8215, 24,16402,16407, 24, 24, 24, 24, 19,
+ 8215, 24, 19, 8215, 24, 19, 24, 19, 8215, 24,
+ 3, 24, 24, 24, 21, 8215, 24,16407, 24, 24,
+
+ 8208, 8215, 24, 8208, 8215, 24, 8208, 24, 8208, 8215,
+ 22, 8215, 24, 22, 8215, 24, 22, 24, 22, 8215,
+ 8207, 8215, 24, 8207, 8215, 24, 8207, 24, 8207, 8215,
+ 24, 8210, 8215, 24, 8210, 8215, 24, 8210, 24, 8210,
+ 8215, 24, 24, 10, 24, 19, 8215, 24, 19, 8215,
+ 24, 19, 8215, 19, 24, 19, 24, 3, 24, 24,
+ 24, 21, 8215, 24, 21, 8215, 24, 21, 24, 21,
+ 8215, 24, 20, 8215, 24,16407, 8208, 8215, 24, 8208,
+ 8215, 24, 8208, 8215, 8208, 24, 8208, 22, 8215, 24,
+ 22, 8215, 24, 22, 8215, 22, 24, 22, 8207, 8215,
+
+ 24, 8207, 8215, 24, 8207, 8215, 8207, 24, 8207, 24,
+ 8210, 8215, 24, 8210, 8215, 24, 8210, 8215, 8210, 24,
+ 8210, 24, 24, 10, 14, 10, 7, 24, 24, 24,
+ 21, 8215, 24, 21, 8215, 24, 21, 8215, 21, 24,
+ 21, 2, 20, 8215, 24, 20, 8215, 24, 20, 24,
+ 20, 8215, 11, 24, 13, 10, 10, 14, 7, 14,
+ 7, 8, 24, 6, 24, 2, 14, 2, 20, 8215,
+ 24, 20, 8215, 24, 20, 8215, 20, 24, 20, 11,
+ 14, 11, 17, 8215, 24,16407, 13, 14, 13, 7,
+ 7, 14, 8, 14, 8, 24, 6, 14, 6, 6,
+
+ 14, 6, 14, 24, 2, 2, 14, 11, 11, 14,
+ 17, 8215, 24, 17, 8215, 24, 17, 24, 17, 8215,
+ 13, 14, 8, 8, 14, 24, 6, 6, 14, 6,
+ 6, 24, 17, 8215, 24, 17, 8215, 24, 17, 8215,
+ 17, 24, 17, 24, 6, 6, 24, 9, 6, 5,
+ 6, 24, 9, 14, 9, 4, 6, 5, 6, 24,
+ 9, 9, 14, 4, 6, 12, 24, 12, 24
} ;
-static yyconst flex_int16_t yy_accept[257] =
+static yyconst flex_int16_t yy_accept[271] =
{ 0,
1, 1, 1, 2, 3, 4, 7, 12, 16, 19,
21, 24, 27, 30, 33, 36, 39, 42, 45, 48,
51, 54, 57, 60, 63, 66, 68, 69, 70, 71,
73, 76, 78, 79, 80, 81, 84, 84, 85, 86,
87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
- 97, 98, 99, 100, 101, 102, 103, 104, 106, 108,
- 109, 111, 113, 114, 115, 116, 117, 118, 119, 120,
+ 97, 98, 99, 100, 101, 102, 103, 104, 105, 107,
+ 109, 110, 112, 114, 115, 116, 117, 118, 119, 120,
121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
- 131, 132, 133, 135, 137, 138, 139, 140, 144, 145,
- 146, 147, 148, 149, 150, 151, 156, 160, 161, 166,
-
- 167, 168, 173, 174, 175, 176, 177, 180, 183, 185,
- 187, 188, 190, 191, 195, 196, 197, 200, 203, 205,
- 207, 210, 213, 215, 217, 220, 223, 225, 227, 228,
- 231, 234, 236, 238, 239, 240, 241, 242, 245, 248,
- 250, 252, 253, 254, 256, 257, 260, 263, 265, 267,
- 268, 272, 275, 278, 280, 282, 283, 286, 289, 291,
- 293, 294, 297, 300, 302, 304, 305, 306, 309, 312,
- 314, 316, 317, 318, 319, 321, 322, 323, 324, 325,
- 328, 331, 333, 335, 336, 337, 340, 343, 345, 347,
- 348, 349, 350, 351, 353, 355, 356, 357, 358, 359,
-
- 361, 362, 365, 368, 370, 372, 373, 375, 376, 380,
- 382, 383, 384, 386, 388, 389, 390, 392, 393, 395,
- 397, 398, 400, 401, 403, 406, 409, 411, 413, 415,
- 416, 418, 419, 420, 422, 423, 424, 427, 430, 432,
- 434, 435, 436, 437, 438, 439, 440, 442, 444, 445,
- 447, 449, 450, 452, 454, 454
+ 131, 132, 133, 134, 135, 137, 139, 140, 141, 142,
+ 146, 147, 148, 149, 150, 151, 152, 153, 154, 159,
+
+ 163, 164, 169, 170, 171, 176, 177, 178, 179, 180,
+ 183, 186, 188, 190, 191, 193, 194, 195, 199, 200,
+ 201, 204, 207, 209, 211, 214, 217, 219, 221, 224,
+ 227, 229, 231, 232, 235, 238, 240, 242, 243, 244,
+ 245, 246, 249, 252, 254, 256, 257, 258, 260, 261,
+ 262, 265, 268, 270, 272, 273, 277, 280, 283, 285,
+ 287, 288, 291, 294, 296, 298, 299, 302, 305, 307,
+ 309, 310, 311, 314, 317, 319, 321, 322, 323, 324,
+ 326, 327, 328, 329, 330, 331, 334, 337, 339, 341,
+ 342, 343, 346, 349, 351, 353, 354, 355, 356, 357,
+
+ 359, 361, 362, 363, 364, 365, 366, 368, 369, 372,
+ 375, 377, 379, 380, 382, 383, 387, 389, 390, 391,
+ 393, 395, 396, 397, 399, 400, 402, 404, 405, 406,
+ 408, 409, 411, 414, 417, 419, 421, 423, 424, 426,
+ 427, 428, 430, 431, 432, 433, 436, 439, 441, 443,
+ 444, 445, 446, 447, 448, 449, 450, 452, 453, 455,
+ 456, 458, 460, 461, 462, 464, 466, 468, 470, 470
} ;
static yyconst flex_int32_t yy_ec[256] =
@@ -496,244 +498,252 @@ static yyconst flex_int32_t yy_meta[34] =
1, 1, 1
} ;
-static yyconst flex_int16_t yy_base[315] =
+static yyconst flex_int16_t yy_base[329] =
{ 0,
- 0, 0, 563, 559, 558, 546, 32, 35, 665, 665,
- 44, 62, 30, 41, 50, 51, 532, 64, 47, 66,
- 67, 524, 68, 516, 72, 0, 665, 514, 665, 87,
- 91, 0, 0, 100, 500, 109, 0, 74, 95, 87,
- 32, 96, 105, 110, 77, 97, 40, 113, 116, 112,
- 118, 120, 121, 122, 123, 125, 0, 137, 0, 0,
- 147, 0, 0, 494, 129, 126, 134, 143, 145, 147,
- 148, 149, 151, 153, 156, 160, 155, 167, 162, 175,
- 168, 159, 188, 0, 0, 665, 166, 197, 179, 185,
- 176, 200, 460, 186, 193, 216, 225, 205, 234, 221,
-
- 237, 247, 204, 230, 244, 213, 254, 0, 256, 0,
- 251, 258, 254, 279, 256, 259, 267, 0, 269, 0,
- 286, 0, 288, 0, 290, 0, 297, 0, 267, 299,
- 0, 301, 0, 288, 297, 459, 302, 310, 0, 0,
- 0, 0, 305, 665, 307, 319, 0, 321, 0, 322,
- 332, 335, 0, 0, 0, 0, 339, 0, 0, 0,
- 0, 342, 0, 0, 0, 0, 340, 349, 0, 0,
- 0, 0, 337, 345, 450, 665, 442, 350, 352, 360,
- 0, 0, 0, 0, 424, 362, 0, 364, 0, 420,
- 319, 371, 419, 665, 418, 665, 417, 276, 368, 416,
-
- 665, 373, 0, 0, 0, 0, 415, 665, 382, 414,
- 0, 413, 665, 412, 665, 368, 411, 665, 384, 352,
- 410, 665, 409, 665, 391, 0, 395, 0, 0, 405,
- 665, 382, 316, 665, 385, 397, 399, 0, 0, 0,
- 0, 396, 403, 406, 271, 407, 228, 200, 665, 175,
- 665, 77, 665, 665, 665, 429, 433, 436, 440, 444,
- 448, 452, 456, 460, 464, 468, 472, 476, 480, 484,
- 488, 492, 496, 500, 504, 508, 512, 516, 520, 524,
- 528, 532, 536, 540, 544, 548, 552, 556, 560, 564,
- 568, 572, 576, 580, 584, 588, 592, 596, 600, 604,
-
- 608, 612, 616, 620, 624, 628, 632, 636, 640, 644,
- 648, 652, 656, 660
+ 0, 0, 673, 657, 648, 616, 32, 35, 691, 691,
+ 44, 62, 30, 41, 50, 51, 598, 64, 47, 66,
+ 67, 586, 68, 582, 72, 0, 691, 584, 691, 87,
+ 91, 0, 0, 100, 574, 109, 0, 74, 95, 87,
+ 71, 96, 97, 105, 110, 112, 113, 40, 116, 119,
+ 115, 120, 121, 124, 125, 127, 126, 0, 151, 0,
+ 0, 153, 0, 0, 572, 128, 135, 139, 137, 136,
+ 153, 156, 154, 148, 161, 162, 165, 166, 167, 170,
+ 169, 178, 179, 171, 189, 0, 0, 691, 172, 202,
+ 187, 174, 184, 202, 205, 558, 198, 206, 228, 237,
+
+ 211, 246, 210, 215, 255, 216, 251, 234, 199, 263,
+ 0, 265, 0, 252, 266, 261, 263, 292, 269, 270,
+ 278, 0, 280, 0, 299, 0, 301, 0, 303, 0,
+ 310, 0, 280, 312, 0, 314, 0, 301, 310, 556,
+ 243, 321, 0, 0, 0, 0, 275, 691, 312, 322,
+ 331, 0, 333, 0, 334, 344, 347, 0, 0, 0,
+ 0, 351, 0, 0, 0, 0, 354, 0, 0, 0,
+ 0, 352, 361, 0, 0, 0, 0, 318, 357, 548,
+ 691, 540, 359, 362, 388, 370, 0, 0, 0, 0,
+ 532, 372, 0, 374, 0, 520, 323, 381, 492, 691,
+
+ 485, 691, 476, 349, 382, 369, 468, 691, 395, 0,
+ 0, 0, 0, 449, 691, 406, 448, 0, 447, 691,
+ 446, 691, 391, 444, 691, 399, 273, 395, 442, 691,
+ 438, 691, 414, 0, 416, 0, 0, 398, 691, 412,
+ 376, 691, 401, 417, 406, 426, 0, 0, 0, 0,
+ 422, 423, 429, 426, 337, 433, 295, 423, 218, 691,
+ 83, 691, 425, 38, 691, 691, 436, 691, 691, 455,
+ 459, 462, 466, 470, 474, 478, 482, 486, 490, 494,
+ 498, 502, 506, 510, 514, 518, 522, 526, 530, 534,
+ 538, 542, 546, 550, 554, 558, 562, 566, 570, 574,
+
+ 578, 582, 586, 590, 594, 598, 602, 606, 610, 614,
+ 618, 622, 626, 630, 634, 638, 642, 646, 650, 654,
+ 658, 662, 666, 670, 674, 678, 682, 686
} ;
-static yyconst flex_int16_t yy_def[315] =
+static yyconst flex_int16_t yy_def[329] =
{ 0,
- 255, 1, 256, 256, 255, 257, 258, 258, 255, 255,
- 259, 259, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 260, 255, 257, 255, 261,
- 258, 262, 262, 263, 12, 257, 264, 12, 12, 12,
+ 269, 1, 270, 270, 269, 271, 272, 272, 269, 269,
+ 273, 273, 12, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 274, 269, 271, 269, 275,
+ 272, 276, 276, 277, 12, 271, 278, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 260, 261, 262, 262,
- 265, 266, 266, 255, 12, 12, 12, 12, 12, 12,
+ 12, 12, 12, 12, 12, 12, 12, 274, 275, 276,
+ 276, 279, 280, 280, 269, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 265, 266, 266, 255, 12, 267, 12, 12,
- 12, 12, 12, 12, 12, 268, 269, 12, 270, 12,
-
- 12, 271, 12, 12, 12, 12, 272, 273, 267, 273,
- 12, 12, 12, 274, 12, 12, 275, 276, 268, 276,
- 277, 278, 269, 278, 279, 280, 270, 280, 12, 281,
- 282, 271, 282, 12, 12, 283, 12, 272, 273, 273,
- 284, 284, 12, 255, 12, 285, 286, 274, 286, 12,
- 287, 275, 276, 276, 288, 288, 277, 278, 278, 289,
- 289, 279, 280, 280, 290, 290, 12, 281, 282, 282,
- 291, 291, 12, 12, 292, 255, 293, 12, 12, 285,
- 286, 286, 294, 294, 295, 296, 297, 287, 297, 298,
- 12, 299, 292, 255, 300, 255, 301, 12, 302, 303,
-
- 255, 296, 297, 297, 304, 304, 305, 255, 306, 307,
- 307, 300, 255, 308, 255, 12, 309, 255, 309, 309,
- 303, 255, 305, 255, 310, 311, 306, 311, 307, 308,
- 255, 12, 309, 255, 309, 309, 310, 311, 311, 312,
- 312, 12, 309, 309, 313, 309, 309, 314, 255, 309,
- 255, 314, 255, 255, 0, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255
+ 12, 12, 12, 12, 279, 280, 280, 269, 12, 281,
+ 12, 12, 12, 12, 12, 12, 12, 12, 282, 283,
+
+ 12, 284, 12, 12, 285, 12, 12, 12, 12, 286,
+ 287, 281, 287, 12, 12, 12, 12, 288, 12, 12,
+ 289, 290, 282, 290, 291, 292, 283, 292, 293, 294,
+ 284, 294, 12, 295, 296, 285, 296, 12, 12, 297,
+ 12, 286, 287, 287, 298, 298, 12, 269, 12, 12,
+ 299, 300, 288, 300, 12, 301, 289, 290, 290, 302,
+ 302, 291, 292, 292, 303, 303, 293, 294, 294, 304,
+ 304, 12, 295, 296, 296, 305, 305, 12, 12, 306,
+ 269, 307, 12, 12, 277, 299, 300, 300, 308, 308,
+ 309, 310, 311, 301, 311, 312, 12, 313, 306, 269,
+
+ 314, 269, 315, 12, 316, 185, 317, 269, 310, 311,
+ 311, 318, 318, 319, 269, 320, 321, 321, 314, 269,
+ 322, 269, 12, 323, 269, 323, 323, 185, 317, 269,
+ 319, 269, 324, 325, 320, 325, 321, 322, 269, 12,
+ 323, 269, 323, 323, 185, 324, 325, 325, 326, 326,
+ 12, 323, 323, 185, 327, 323, 323, 185, 328, 269,
+ 323, 269, 185, 328, 269, 269, 185, 269, 0, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269
} ;
-static yyconst flex_int16_t yy_nxt[699] =
+static yyconst flex_int16_t yy_nxt[725] =
{ 0,
6, 7, 8, 9, 6, 6, 6, 6, 10, 11,
12, 13, 14, 15, 16, 17, 17, 18, 17, 17,
17, 17, 19, 17, 20, 21, 22, 23, 24, 17,
25, 17, 17, 31, 31, 32, 31, 31, 32, 35,
- 33, 35, 41, 33, 28, 28, 28, 29, 34, 35,
- 35, 36, 37, 73, 42, 38, 35, 49, 68, 35,
- 35, 39, 28, 28, 28, 29, 34, 43, 45, 36,
- 37, 40, 44, 35, 46, 35, 35, 35, 51, 53,
- 249, 35, 50, 35, 55, 65, 35, 47, 56, 28,
- 59, 48, 31, 31, 32, 60, 35, 71, 67, 33,
-
- 28, 28, 28, 29, 35, 35, 35, 28, 37, 61,
- 61, 61, 62, 61, 35, 70, 61, 63, 66, 35,
- 49, 35, 35, 72, 74, 35, 69, 35, 75, 35,
- 35, 35, 35, 88, 35, 35, 82, 78, 35, 28,
- 59, 77, 87, 35, 76, 60, 80, 79, 81, 28,
- 84, 78, 35, 89, 35, 85, 35, 35, 35, 75,
- 35, 92, 35, 96, 35, 35, 90, 97, 35, 35,
- 93, 35, 94, 91, 99, 35, 35, 35, 254, 100,
- 95, 101, 102, 104, 35, 35, 98, 103, 35, 105,
- 28, 84, 111, 106, 35, 35, 85, 107, 107, 61,
-
- 108, 107, 35, 253, 107, 110, 112, 114, 113, 35,
- 75, 78, 99, 35, 35, 116, 117, 117, 61, 118,
- 117, 134, 35, 117, 120, 121, 121, 61, 122, 121,
- 35, 251, 121, 124, 125, 125, 61, 126, 125, 35,
- 137, 125, 128, 135, 102, 129, 35, 130, 130, 61,
- 131, 130, 136, 35, 130, 133, 28, 139, 28, 141,
- 35, 144, 140, 35, 142, 35, 151, 35, 35, 28,
- 153, 28, 155, 143, 249, 154, 35, 156, 145, 146,
- 146, 61, 147, 146, 150, 35, 146, 149, 28, 158,
- 28, 160, 28, 163, 159, 167, 161, 35, 164, 28,
-
- 165, 28, 169, 28, 171, 166, 35, 170, 216, 172,
- 177, 35, 28, 139, 35, 173, 35, 178, 140, 218,
- 179, 28, 181, 28, 183, 174, 209, 182, 35, 184,
- 185, 35, 186, 186, 61, 187, 186, 28, 153, 186,
- 189, 28, 158, 154, 28, 163, 35, 159, 190, 35,
- 164, 28, 169, 192, 35, 234, 191, 170, 197, 35,
- 199, 35, 28, 181, 28, 203, 28, 205, 182, 236,
- 204, 218, 206, 64, 211, 28, 203, 35, 198, 219,
- 220, 204, 225, 225, 61, 226, 225, 234, 218, 225,
- 228, 35, 232, 28, 238, 242, 235, 28, 240, 239,
-
- 218, 28, 238, 241, 245, 35, 218, 239, 215, 218,
- 218, 243, 208, 201, 234, 231, 196, 229, 224, 222,
- 215, 213, 176, 208, 244, 247, 246, 201, 250, 26,
- 26, 26, 26, 28, 28, 28, 30, 30, 30, 30,
- 35, 35, 35, 35, 57, 196, 57, 57, 58, 58,
- 58, 58, 60, 194, 60, 60, 34, 34, 34, 34,
- 64, 64, 176, 64, 83, 83, 83, 83, 85, 115,
- 85, 85, 109, 109, 109, 109, 119, 119, 119, 119,
- 123, 123, 123, 123, 127, 127, 127, 127, 132, 132,
- 132, 132, 138, 138, 138, 138, 140, 86, 140, 140,
-
- 148, 148, 148, 148, 152, 152, 152, 152, 154, 35,
- 154, 154, 157, 157, 157, 157, 159, 29, 159, 159,
- 162, 162, 162, 162, 164, 54, 164, 164, 168, 168,
- 168, 168, 170, 52, 170, 170, 175, 175, 175, 175,
- 142, 35, 142, 142, 180, 180, 180, 180, 182, 29,
- 182, 182, 188, 188, 188, 188, 156, 255, 156, 156,
- 161, 27, 161, 161, 166, 27, 166, 166, 172, 255,
- 172, 172, 193, 193, 193, 193, 195, 195, 195, 195,
- 184, 255, 184, 184, 200, 200, 200, 200, 202, 202,
- 202, 202, 204, 255, 204, 204, 207, 207, 207, 207,
-
- 210, 210, 210, 210, 212, 212, 212, 212, 214, 214,
- 214, 214, 217, 217, 217, 217, 221, 221, 221, 221,
- 206, 255, 206, 206, 223, 223, 223, 223, 227, 227,
- 227, 227, 211, 255, 211, 211, 230, 230, 230, 230,
- 233, 233, 233, 233, 237, 237, 237, 237, 239, 255,
- 239, 239, 241, 255, 241, 241, 248, 248, 248, 248,
- 252, 252, 252, 252, 5, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255
-
+ 33, 260, 41, 33, 28, 28, 28, 29, 34, 35,
+ 35, 36, 37, 75, 42, 38, 35, 50, 43, 35,
+ 35, 39, 28, 28, 28, 29, 34, 44, 46, 36,
+ 37, 40, 45, 35, 47, 35, 35, 35, 52, 54,
+ 35, 35, 51, 35, 56, 66, 266, 48, 57, 28,
+ 60, 49, 31, 31, 32, 61, 35, 69, 68, 33,
+
+ 28, 28, 28, 29, 35, 35, 35, 28, 37, 62,
+ 62, 62, 63, 62, 35, 72, 62, 64, 67, 35,
+ 50, 35, 35, 71, 35, 35, 70, 76, 35, 35,
+ 35, 77, 73, 35, 35, 35, 35, 35, 80, 74,
+ 84, 89, 90, 79, 35, 35, 35, 78, 35, 82,
+ 81, 83, 80, 28, 60, 28, 86, 35, 91, 61,
+ 92, 87, 35, 35, 93, 35, 94, 95, 77, 96,
+ 35, 35, 99, 100, 35, 35, 35, 102, 35, 35,
+ 35, 35, 97, 35, 104, 105, 103, 35, 35, 98,
+ 106, 28, 86, 35, 107, 115, 35, 87, 101, 109,
+
+ 114, 108, 110, 110, 62, 111, 110, 35, 35, 110,
+ 113, 35, 118, 117, 35, 35, 116, 80, 102, 35,
+ 35, 265, 105, 77, 35, 35, 141, 120, 121, 121,
+ 62, 122, 121, 138, 133, 121, 124, 125, 125, 62,
+ 126, 125, 140, 35, 125, 128, 129, 129, 62, 130,
+ 129, 182, 35, 129, 132, 134, 134, 62, 135, 134,
+ 35, 35, 134, 137, 139, 28, 143, 28, 145, 148,
+ 35, 144, 35, 146, 147, 35, 242, 156, 35, 35,
+ 28, 158, 28, 160, 35, 149, 159, 183, 161, 35,
+ 244, 150, 151, 151, 62, 152, 151, 155, 262, 151,
+
+ 154, 28, 163, 28, 165, 28, 168, 164, 172, 166,
+ 35, 169, 28, 170, 28, 174, 28, 176, 171, 35,
+ 175, 35, 177, 28, 143, 184, 185, 35, 178, 144,
+ 216, 35, 35, 28, 187, 28, 189, 197, 179, 188,
+ 260, 190, 191, 35, 192, 192, 62, 193, 192, 28,
+ 158, 192, 195, 28, 163, 159, 28, 168, 35, 164,
+ 196, 35, 169, 28, 174, 198, 35, 203, 35, 175,
+ 205, 35, 28, 187, 28, 210, 28, 212, 188, 225,
+ 211, 223, 213, 65, 218, 225, 34, 204, 28, 28,
+ 28, 29, 228, 226, 227, 28, 37, 28, 210, 245,
+
+ 35, 222, 242, 211, 225, 206, 233, 233, 62, 234,
+ 233, 243, 34, 233, 236, 240, 28, 247, 28, 249,
+ 225, 35, 248, 34, 250, 251, 225, 252, 28, 247,
+ 255, 35, 225, 254, 248, 258, 225, 263, 267, 268,
+ 34, 215, 34, 34, 253, 208, 256, 242, 257, 239,
+ 202, 237, 232, 34, 261, 26, 26, 26, 26, 28,
+ 28, 28, 30, 30, 30, 30, 35, 35, 35, 35,
+ 58, 230, 58, 58, 59, 59, 59, 59, 61, 222,
+ 61, 61, 34, 34, 34, 34, 65, 65, 220, 65,
+ 85, 85, 85, 85, 87, 181, 87, 87, 112, 112,
+
+ 112, 112, 123, 123, 123, 123, 127, 127, 127, 127,
+ 131, 131, 131, 131, 136, 136, 136, 136, 142, 142,
+ 142, 142, 144, 215, 144, 144, 153, 153, 153, 153,
+ 157, 157, 157, 157, 159, 208, 159, 159, 162, 162,
+ 162, 162, 164, 202, 164, 164, 167, 167, 167, 167,
+ 169, 200, 169, 169, 173, 173, 173, 173, 175, 181,
+ 175, 175, 180, 180, 180, 180, 146, 119, 146, 146,
+ 186, 186, 186, 186, 188, 88, 188, 188, 194, 194,
+ 194, 194, 161, 35, 161, 161, 166, 29, 166, 166,
+ 171, 55, 171, 171, 177, 53, 177, 177, 199, 199,
+
+ 199, 199, 201, 201, 201, 201, 190, 35, 190, 190,
+ 207, 207, 207, 207, 209, 209, 209, 209, 211, 29,
+ 211, 211, 214, 214, 214, 214, 217, 217, 217, 217,
+ 219, 219, 219, 219, 221, 221, 221, 221, 224, 224,
+ 224, 224, 229, 229, 229, 229, 213, 269, 213, 213,
+ 231, 231, 231, 231, 235, 235, 235, 235, 218, 27,
+ 218, 218, 238, 238, 238, 238, 241, 241, 241, 241,
+ 246, 246, 246, 246, 248, 27, 248, 248, 250, 269,
+ 250, 250, 259, 259, 259, 259, 264, 264, 264, 264,
+ 5, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269
} ;
-static yyconst flex_int16_t yy_chk[699] =
+static yyconst flex_int16_t yy_chk[725] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 7, 7, 7, 8, 8, 8, 13,
- 7, 41, 13, 8, 11, 11, 11, 11, 11, 47,
- 14, 11, 11, 47, 14, 11, 19, 19, 41, 15,
+ 7, 264, 13, 8, 11, 11, 11, 11, 11, 48,
+ 14, 11, 11, 48, 14, 11, 19, 19, 14, 15,
16, 11, 12, 12, 12, 12, 12, 14, 16, 12,
12, 12, 15, 18, 16, 20, 21, 23, 21, 23,
- 252, 25, 20, 38, 25, 38, 45, 18, 25, 30,
- 30, 18, 31, 31, 31, 30, 40, 45, 40, 31,
-
- 34, 34, 34, 34, 39, 42, 46, 34, 34, 36,
- 36, 36, 36, 36, 43, 43, 36, 36, 39, 44,
- 44, 50, 48, 46, 48, 49, 42, 51, 49, 52,
- 53, 54, 55, 66, 56, 66, 55, 56, 65, 58,
- 58, 51, 65, 67, 50, 58, 54, 53, 54, 61,
- 61, 52, 68, 67, 69, 61, 70, 71, 72, 70,
- 73, 71, 74, 75, 77, 75, 68, 76, 82, 76,
- 72, 79, 73, 69, 78, 87, 78, 81, 250, 79,
- 74, 80, 80, 81, 80, 91, 77, 80, 89, 82,
- 83, 83, 89, 87, 90, 94, 83, 88, 88, 88,
-
- 88, 88, 95, 248, 88, 88, 90, 92, 91, 92,
- 95, 98, 98, 103, 98, 94, 96, 96, 96, 96,
- 96, 103, 106, 96, 96, 97, 97, 97, 97, 97,
- 100, 247, 97, 97, 99, 99, 99, 99, 99, 104,
- 106, 99, 99, 104, 101, 100, 101, 102, 102, 102,
- 102, 102, 105, 105, 102, 102, 107, 107, 109, 109,
- 111, 112, 107, 113, 109, 115, 116, 112, 116, 117,
- 117, 119, 119, 111, 245, 117, 129, 119, 113, 114,
- 114, 114, 114, 114, 115, 198, 114, 114, 121, 121,
- 123, 123, 125, 125, 121, 129, 123, 134, 125, 127,
-
- 127, 130, 130, 132, 132, 127, 135, 130, 198, 132,
- 137, 137, 138, 138, 143, 134, 145, 143, 138, 233,
- 145, 146, 146, 148, 148, 135, 191, 146, 191, 148,
- 150, 150, 151, 151, 151, 151, 151, 152, 152, 151,
- 151, 157, 157, 152, 162, 162, 173, 157, 167, 167,
- 162, 168, 168, 174, 174, 220, 173, 168, 178, 178,
- 179, 179, 180, 180, 186, 186, 188, 188, 180, 220,
- 186, 199, 188, 192, 192, 202, 202, 216, 178, 199,
- 199, 202, 209, 209, 209, 209, 209, 219, 235, 209,
- 209, 232, 216, 225, 225, 232, 219, 227, 227, 225,
-
- 236, 237, 237, 227, 242, 242, 243, 237, 230, 244,
- 246, 235, 223, 221, 217, 214, 212, 210, 207, 200,
- 197, 195, 193, 190, 236, 244, 243, 185, 246, 256,
- 256, 256, 256, 257, 257, 257, 258, 258, 258, 258,
- 259, 259, 259, 259, 260, 177, 260, 260, 261, 261,
- 261, 261, 262, 175, 262, 262, 263, 263, 263, 263,
- 264, 264, 136, 264, 265, 265, 265, 265, 266, 93,
- 266, 266, 267, 267, 267, 267, 268, 268, 268, 268,
- 269, 269, 269, 269, 270, 270, 270, 270, 271, 271,
- 271, 271, 272, 272, 272, 272, 273, 64, 273, 273,
-
- 274, 274, 274, 274, 275, 275, 275, 275, 276, 35,
- 276, 276, 277, 277, 277, 277, 278, 28, 278, 278,
- 279, 279, 279, 279, 280, 24, 280, 280, 281, 281,
- 281, 281, 282, 22, 282, 282, 283, 283, 283, 283,
- 284, 17, 284, 284, 285, 285, 285, 285, 286, 6,
- 286, 286, 287, 287, 287, 287, 288, 5, 288, 288,
- 289, 4, 289, 289, 290, 3, 290, 290, 291, 0,
- 291, 291, 292, 292, 292, 292, 293, 293, 293, 293,
- 294, 0, 294, 294, 295, 295, 295, 295, 296, 296,
- 296, 296, 297, 0, 297, 297, 298, 298, 298, 298,
-
- 299, 299, 299, 299, 300, 300, 300, 300, 301, 301,
- 301, 301, 302, 302, 302, 302, 303, 303, 303, 303,
- 304, 0, 304, 304, 305, 305, 305, 305, 306, 306,
- 306, 306, 307, 0, 307, 307, 308, 308, 308, 308,
- 309, 309, 309, 309, 310, 310, 310, 310, 311, 0,
- 311, 311, 312, 0, 312, 312, 313, 313, 313, 313,
- 314, 314, 314, 314, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255
-
+ 41, 25, 20, 38, 25, 38, 261, 18, 25, 30,
+ 30, 18, 31, 31, 31, 30, 40, 41, 40, 31,
+
+ 34, 34, 34, 34, 39, 42, 43, 34, 34, 36,
+ 36, 36, 36, 36, 44, 44, 36, 36, 39, 45,
+ 45, 46, 47, 43, 51, 49, 42, 49, 50, 52,
+ 53, 50, 46, 54, 55, 57, 56, 66, 57, 47,
+ 56, 66, 67, 52, 67, 70, 69, 51, 68, 55,
+ 54, 55, 53, 59, 59, 62, 62, 74, 68, 59,
+ 69, 62, 71, 73, 70, 72, 71, 73, 72, 74,
+ 75, 76, 77, 78, 77, 78, 79, 80, 81, 80,
+ 84, 89, 75, 92, 82, 82, 81, 82, 83, 76,
+ 82, 85, 85, 93, 83, 92, 91, 85, 79, 89,
+
+ 91, 84, 90, 90, 90, 90, 90, 97, 109, 90,
+ 90, 94, 95, 94, 95, 98, 93, 101, 101, 103,
+ 101, 259, 104, 98, 104, 106, 109, 97, 99, 99,
+ 99, 99, 99, 106, 103, 99, 99, 100, 100, 100,
+ 100, 100, 108, 108, 100, 100, 102, 102, 102, 102,
+ 102, 141, 141, 102, 102, 105, 105, 105, 105, 105,
+ 107, 114, 105, 105, 107, 110, 110, 112, 112, 115,
+ 116, 110, 117, 112, 114, 115, 227, 120, 119, 120,
+ 121, 121, 123, 123, 147, 116, 121, 147, 123, 133,
+ 227, 117, 118, 118, 118, 118, 118, 119, 257, 118,
+
+ 118, 125, 125, 127, 127, 129, 129, 125, 133, 127,
+ 138, 129, 131, 131, 134, 134, 136, 136, 131, 139,
+ 134, 149, 136, 142, 142, 149, 150, 178, 138, 142,
+ 197, 150, 197, 151, 151, 153, 153, 178, 139, 151,
+ 255, 153, 155, 155, 156, 156, 156, 156, 156, 157,
+ 157, 156, 156, 162, 162, 157, 167, 167, 204, 162,
+ 172, 172, 167, 173, 173, 179, 179, 183, 183, 173,
+ 184, 184, 186, 186, 192, 192, 194, 194, 186, 241,
+ 192, 204, 194, 198, 198, 205, 206, 183, 185, 185,
+ 185, 185, 206, 205, 205, 185, 185, 209, 209, 228,
+
+ 223, 238, 226, 209, 243, 185, 216, 216, 216, 216,
+ 216, 226, 228, 216, 216, 223, 233, 233, 235, 235,
+ 244, 240, 233, 245, 235, 240, 252, 243, 246, 246,
+ 251, 251, 253, 245, 246, 254, 256, 258, 263, 267,
+ 258, 231, 263, 254, 244, 229, 252, 224, 253, 221,
+ 219, 217, 214, 267, 256, 270, 270, 270, 270, 271,
+ 271, 271, 272, 272, 272, 272, 273, 273, 273, 273,
+ 274, 207, 274, 274, 275, 275, 275, 275, 276, 203,
+ 276, 276, 277, 277, 277, 277, 278, 278, 201, 278,
+ 279, 279, 279, 279, 280, 199, 280, 280, 281, 281,
+
+ 281, 281, 282, 282, 282, 282, 283, 283, 283, 283,
+ 284, 284, 284, 284, 285, 285, 285, 285, 286, 286,
+ 286, 286, 287, 196, 287, 287, 288, 288, 288, 288,
+ 289, 289, 289, 289, 290, 191, 290, 290, 291, 291,
+ 291, 291, 292, 182, 292, 292, 293, 293, 293, 293,
+ 294, 180, 294, 294, 295, 295, 295, 295, 296, 140,
+ 296, 296, 297, 297, 297, 297, 298, 96, 298, 298,
+ 299, 299, 299, 299, 300, 65, 300, 300, 301, 301,
+ 301, 301, 302, 35, 302, 302, 303, 28, 303, 303,
+ 304, 24, 304, 304, 305, 22, 305, 305, 306, 306,
+
+ 306, 306, 307, 307, 307, 307, 308, 17, 308, 308,
+ 309, 309, 309, 309, 310, 310, 310, 310, 311, 6,
+ 311, 311, 312, 312, 312, 312, 313, 313, 313, 313,
+ 314, 314, 314, 314, 315, 315, 315, 315, 316, 316,
+ 316, 316, 317, 317, 317, 317, 318, 5, 318, 318,
+ 319, 319, 319, 319, 320, 320, 320, 320, 321, 4,
+ 321, 321, 322, 322, 322, 322, 323, 323, 323, 323,
+ 324, 324, 324, 324, 325, 3, 325, 325, 326, 0,
+ 326, 326, 327, 327, 327, 327, 328, 328, 328, 328,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
+ 269, 269, 269, 269
} ;
#define YY_TRAILING_MASK 0x2000
@@ -890,7 +900,7 @@ static int vdev_and_devtype(DiskParseContext *dpc, char *str) {
#define DPC ((DiskParseContext*)yyextra)
-#line 894 "libxlu_disk_l.c"
+#line 904 "libxlu_disk_l.c"
#define INITIAL 0
#define LEXERR 1
@@ -1131,7 +1141,7 @@ YY_DECL
/*----- the scanner rules which do the parsing -----*/
-#line 1135 "libxlu_disk_l.c"
+#line 1145 "libxlu_disk_l.c"
if ( !yyg->yy_init )
{
@@ -1195,14 +1205,14 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 256 )
+ if ( yy_current_state >= 270 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
*yyg->yy_state_ptr++ = yy_current_state;
++yy_cp;
}
- while ( yy_current_state != 255 );
+ while ( yy_current_state != 269 );
yy_find_action:
yy_current_state = *--yyg->yy_state_ptr;
@@ -1313,34 +1323,39 @@ YY_RULE_SETUP
#line 175 "libxlu_disk_l.l"
{ STRIP(','); SAVESTRING("script", script, FROMEQUALS); }
YY_BREAK
-/* the target magic parameter, eats the rest of the string */
case 12:
YY_RULE_SETUP
-#line 179 "libxlu_disk_l.l"
+#line 176 "libxlu_disk_l.l"
+{ DPC->disk->direct_io_safe = 1; }
+ YY_BREAK
+/* the target magic parameter, eats the rest of the string */
+case 13:
+YY_RULE_SETUP
+#line 180 "libxlu_disk_l.l"
{ STRIP(','); SAVESTRING("target", pdev_path, FROMEQUALS); }
YY_BREAK
/* unknown parameters */
-case 13:
-/* rule 13 can match eol */
+case 14:
+/* rule 14 can match eol */
YY_RULE_SETUP
-#line 183 "libxlu_disk_l.l"
+#line 184 "libxlu_disk_l.l"
{ xlu__disk_err(DPC,yytext,"unknown parameter"); }
YY_BREAK
/* deprecated prefixes */
/* the "/.*" in these patterns ensures that they count as if they
* matched the whole string, so these patterns take precedence */
-case 14:
+case 15:
YY_RULE_SETUP
-#line 190 "libxlu_disk_l.l"
+#line 191 "libxlu_disk_l.l"
{
STRIP(':');
DPC->had_depr_prefix=1; DEPRECATE("use `[format=]...,'");
setformat(DPC, yytext);
}
YY_BREAK
-case 15:
+case 16:
YY_RULE_SETUP
-#line 196 "libxlu_disk_l.l"
+#line 197 "libxlu_disk_l.l"
{
char *newscript;
STRIP(':');
@@ -1354,30 +1369,22 @@ YY_RULE_SETUP
free(newscript);
}
YY_BREAK
-case 16:
+case 17:
*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
yyg->yy_c_buf_p = yy_cp = yy_bp + 8;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 209 "libxlu_disk_l.l"
-{ DPC->had_depr_prefix=1; DEPRECATE(0); }
- YY_BREAK
-case 17:
-YY_RULE_SETUP
#line 210 "libxlu_disk_l.l"
{ DPC->had_depr_prefix=1; DEPRECATE(0); }
YY_BREAK
case 18:
-*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
-yyg->yy_c_buf_p = yy_cp = yy_bp + 4;
-YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 211 "libxlu_disk_l.l"
{ DPC->had_depr_prefix=1; DEPRECATE(0); }
YY_BREAK
case 19:
*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
-yyg->yy_c_buf_p = yy_cp = yy_bp + 6;
+yyg->yy_c_buf_p = yy_cp = yy_bp + 4;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 212 "libxlu_disk_l.l"
@@ -1385,7 +1392,7 @@ YY_RULE_SETUP
YY_BREAK
case 20:
*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
-yyg->yy_c_buf_p = yy_cp = yy_bp + 5;
+yyg->yy_c_buf_p = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 213 "libxlu_disk_l.l"
@@ -1393,26 +1400,34 @@ YY_RULE_SETUP
YY_BREAK
case 21:
*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
-yyg->yy_c_buf_p = yy_cp = yy_bp + 4;
+yyg->yy_c_buf_p = yy_cp = yy_bp + 5;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 214 "libxlu_disk_l.l"
{ DPC->had_depr_prefix=1; DEPRECATE(0); }
YY_BREAK
case 22:
-/* rule 22 can match eol */
+*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
+yyg->yy_c_buf_p = yy_cp = yy_bp + 4;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
+YY_RULE_SETUP
+#line 215 "libxlu_disk_l.l"
+{ DPC->had_depr_prefix=1; DEPRECATE(0); }
+ YY_BREAK
+case 23:
+/* rule 23 can match eol */
YY_RULE_SETUP
-#line 216 "libxlu_disk_l.l"
+#line 217 "libxlu_disk_l.l"
{
xlu__disk_err(DPC,yytext,"unknown deprecated disk prefix");
return 0;
}
YY_BREAK
/* positional parameters */
-case 23:
-/* rule 23 can match eol */
+case 24:
+/* rule 24 can match eol */
YY_RULE_SETUP
-#line 223 "libxlu_disk_l.l"
+#line 224 "libxlu_disk_l.l"
{
STRIP(',');
@@ -1439,27 +1454,27 @@ YY_RULE_SETUP
}
}
YY_BREAK
-case 24:
+case 25:
YY_RULE_SETUP
-#line 249 "libxlu_disk_l.l"
+#line 250 "libxlu_disk_l.l"
{
BEGIN(LEXERR);
yymore();
}
YY_BREAK
-case 25:
+case 26:
YY_RULE_SETUP
-#line 253 "libxlu_disk_l.l"
+#line 254 "libxlu_disk_l.l"
{
xlu__disk_err(DPC,yytext,"bad disk syntax"); return 0;
}
YY_BREAK
-case 26:
+case 27:
YY_RULE_SETUP
-#line 256 "libxlu_disk_l.l"
+#line 257 "libxlu_disk_l.l"
YY_FATAL_ERROR( "flex scanner jammed" );
YY_BREAK
-#line 1463 "libxlu_disk_l.c"
+#line 1478 "libxlu_disk_l.c"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(LEXERR):
yyterminate();
@@ -1723,7 +1738,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 256 )
+ if ( yy_current_state >= 270 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1747,11 +1762,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 256 )
+ if ( yy_current_state >= 270 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- yy_is_jam = (yy_current_state == 255);
+ yy_is_jam = (yy_current_state == 269);
if ( ! yy_is_jam )
*yyg->yy_state_ptr++ = yy_current_state;
@@ -2551,4 +2566,4 @@ void xlu__disk_yyfree (void * ptr , yyscan_t yyscanner)
#define YYTABLES_NAME "yytables"
-#line 256 "libxlu_disk_l.l"
+#line 257 "libxlu_disk_l.l"
diff --git a/tools/libxl/libxlu_disk_l.h b/tools/libxl/libxlu_disk_l.h
index 0176249..59ce7cf 100644
--- a/tools/libxl/libxlu_disk_l.h
+++ b/tools/libxl/libxlu_disk_l.h
@@ -344,7 +344,7 @@ extern int xlu__disk_yylex (yyscan_t yyscanner);
#undef YY_DECL
#endif
-#line 256 "libxlu_disk_l.l"
+#line 257 "libxlu_disk_l.l"
#line 350 "libxlu_disk_l.h"
#undef xlu__disk_yyIN_HEADER
diff --git a/tools/libxl/libxlu_disk_l.l b/tools/libxl/libxlu_disk_l.l
index 7c4e7f1..ba8577c 100644
--- a/tools/libxl/libxlu_disk_l.l
+++ b/tools/libxl/libxlu_disk_l.l
@@ -173,6 +173,7 @@ backendtype=[^,]*,? { STRIP(','); setbackendtype(DPC,FROMEQUALS); }
vdev=[^,]*,? { STRIP(','); SAVESTRING("vdev", vdev, FROMEQUALS); }
script=[^,]*,? { STRIP(','); SAVESTRING("script", script, FROMEQUALS); }
+direct-io-safe,? { DPC->disk->direct_io_safe = 1; }
/* the target magic parameter, eats the rest of the string */
diff --git a/xen/include/public/io/blkif.h b/xen/include/public/io/blkif.h
index b9b9d98..2dbb12f 100644
--- a/xen/include/public/io/blkif.h
+++ b/xen/include/public/io/blkif.h
@@ -97,6 +97,28 @@
*
* The type of the backing device/object.
*
+ *
+ * direct-io-safe
+ * Values: 0/1 (boolean)
+ * Default Value: 0
+ *
+ * The underlying storage is not affected by the direct IO memory
+ * lifetime bug. See:
+ * http://lists.xen.org/archives/html/xen-devel/2012-12/msg01154.html
+ *
+ * Therefore this option gives the backend permission to use
+ * O_DIRECT, notwithstanding that bug.
+ *
+ * That is, if this option is enabled, use of O_DIRECT is safe,
+ * in circumstances where we would normally have avoided it as a
+ * workaround for that bug. This option is not relevant for all
+ * backends, and even not necessarily supported for those for
+ * which it is relevant. A backend which knows that it is not
+ * affected by the bug can ignore this option.
+ *
+ * This option doesn't require a backend to use O_DIRECT, so it
+ * should not be used to try to control the caching behaviour.
+ *
*--------------------------------- Features ---------------------------------
*
* feature-barrier
--
1.7.10.4
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround
2013-11-26 11:42 ` [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround Ian Jackson
@ 2013-11-26 17:46 ` Konrad Rzeszutek Wilk
2013-11-26 17:56 ` George Dunlap
0 siblings, 1 reply; 13+ messages in thread
From: Konrad Rzeszutek Wilk @ 2013-11-26 17:46 UTC (permalink / raw)
To: Ian Jackson; +Cc: George Dunlap, xen-devel, Ian Campbell, Stefano Stabellini
On Tue, Nov 26, 2013 at 11:42:31AM +0000, Ian Jackson wrote:
> From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
>
> Document and implement a new option that permits disk backends which
> would otherwise have to avoid O_DIRECT (because of the network memory
> lifetime bug) to use it anyway. This is:
I thought this was fixed in the Linux kernel with:
commit cd9151e26d31048b2b5e00fd02e110e07d2200c9
Author: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Date: Sun Aug 4 15:39:40 2013 +0100
xen/balloon: set a mapping for ballooned out pages
Currently ballooned out pages are mapped to 0 and have INVALID_P2M_ENTRY
in the p2m. These ballooned out pages are used to map foreign grants
by gntdev and blkback (see alloc_xenballooned_pages).
Allocate a page per cpu and map all the ballooned out pages to the
corresponding mfn. Set the p2m accordingly. This way reading from a
ballooned out page won't cause a kernel crash (see
http://lists.xen.org/archives/html/xen-devel/2012-12/msg01154.html).
?
> direct-io-safe in the xl domain disk config specification
> direct_io_safe in the libxl disk API
> direct-io-safe in the backend xenstore interface
>
> Add a reference to xen/include/public/io/blkif.h in
> docs/misc/vbd-interface.txt.
>
> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
> Acked-by: Ian Campbell <ian.campbell@citrix.com>
> ---
> docs/misc/vbd-interface.txt | 6 +
> docs/misc/xl-disk-configuration.txt | 38 ++
> tools/libxl/libxl.c | 4 +
> tools/libxl/libxl.h | 7 +
> tools/libxl/libxl_types.idl | 1 +
> tools/libxl/libxlu_disk_l.c | 681 ++++++++++++++++++-----------------
> tools/libxl/libxlu_disk_l.h | 2 +-
> tools/libxl/libxlu_disk_l.l | 1 +
> xen/include/public/io/blkif.h | 22 ++
> 9 files changed, 428 insertions(+), 334 deletions(-)
>
> diff --git a/docs/misc/vbd-interface.txt b/docs/misc/vbd-interface.txt
> index 3952e73..f873db0 100644
> --- a/docs/misc/vbd-interface.txt
> +++ b/docs/misc/vbd-interface.txt
> @@ -125,3 +125,9 @@ because they directly map the bottom 8 bits of the xenstore integer
> directly to the Linux guest's device number and throw away the rest;
> they can crash due to minor number clashes. With these guests, the
> workaround is not to supply problematic combinations of devices.
> +
> +
> +Other frontend and backend options
> +----------------------------------
> +
> +See xen/include/public/io/blkif.h for the full list of options.
> diff --git a/docs/misc/xl-disk-configuration.txt b/docs/misc/xl-disk-configuration.txt
> index 5bd456d..9c2650b 100644
> --- a/docs/misc/xl-disk-configuration.txt
> +++ b/docs/misc/xl-disk-configuration.txt
> @@ -178,6 +178,44 @@ information to be interpreted by the executable program <script>,
> These scripts are normally called "block-<script>".
>
>
> +direct-io-safe
> +--------------
> +
> +Description: Disables non-O_DIRECT workaround
> +Supported values: absent, present
> +Mandatory: No
> +Default value: absent (workaround may be enabled)
> +
> +There is a memory lifetime bug in some driver domain (dom0) kernels
> +which can cause crashes when using O_DIRECT. The bug occurs due to a
> +mismatch between the backend-visible lifetime of pages used for the
> +Xen PV network protocol and that expected by the backend kernel's
> +networking subsystem. This can cause crashes when using certain
> +backends with certain underlying storage.
> +
> +See:
> + http://lists.xen.org/archives/html/xen-devel/2012-12/msg01154.html
> +
> +For this reason, (this version of) the Xen libxl toolstack disables
> +O_DIRECT when using the qemu-based Xen PV backend ("qdisk").
> +
> +However, this workaround has performance and scaling implications, and
> +it is only necessary if the underlying device is a network filesystem.
> +If the underlying device is not, then it is good to disable it; that
> +is what this option is for.
> +
> +This option simply requests that the workaround be disabled. (However,
> +not all backends versions which use the workaround understand this
> +option, so this is on a best effort basis.)
> +
> +It's important to note that if you are storing the VM disk on a
> +network filesystem or a network block device (NFS or ISCSI) it might
> +not be safe to use this option. Otherwise specifying it is safe and
> +can give better performances.
> +
> +If in the future the bug is fixed properly this option will then be
> +silently ignored.
> +
>
> ============================================
> DEPRECATED PARAMETERS, PREFIXES AND SYNTAXES
> diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
> index 2b847ef..62aa6d7 100644
> --- a/tools/libxl/libxl.c
> +++ b/tools/libxl/libxl.c
> @@ -2189,6 +2189,10 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid,
> flexarray_append(back, disk->readwrite ? "w" : "r");
> flexarray_append(back, "device-type");
> flexarray_append(back, disk->is_cdrom ? "cdrom" : "disk");
> + if (disk->direct_io_safe) {
> + flexarray_append(back, "direct-io-safe");
> + flexarray_append(back, "1");
> + }
>
> flexarray_append(front, "backend-id");
> flexarray_append(front, libxl__sprintf(gc, "%d", disk->backend_domid));
> diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
> index a9663e4..06d1390 100644
> --- a/tools/libxl/libxl.h
> +++ b/tools/libxl/libxl.h
> @@ -95,6 +95,13 @@
> #define LIBXL_HAVE_BUILDINFO_EVENT_CHANNELS 1
>
> /*
> + * LIBXL_HAVE_DEVICE_DISK_DIRECT_IO_SAFE indicates that a
> + * 'direct_io_safe' field (of boolean type) is present in
> + * libxl_device_disk.
> + */
> +#define LIBXL_HAVE_DEVICE_DISK_DIRECT_IO_SAFE 1
> +
> +/*
> * libxl ABI compatibility
> *
> * The only guarantee which libxl makes regarding ABI compatibility
> diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
> index cba8eff..8fb07b5 100644
> --- a/tools/libxl/libxl_types.idl
> +++ b/tools/libxl/libxl_types.idl
> @@ -413,6 +413,7 @@ libxl_device_disk = Struct("device_disk", [
> ("removable", integer),
> ("readwrite", integer),
> ("is_cdrom", integer),
> + ("direct_io_safe", bool),
> ])
>
> libxl_device_nic = Struct("device_nic", [
> diff --git a/tools/libxl/libxlu_disk_l.c b/tools/libxl/libxlu_disk_l.c
> index 03adfef..c97f0b2 100644
> --- a/tools/libxl/libxlu_disk_l.c
> +++ b/tools/libxl/libxlu_disk_l.c
> @@ -361,8 +361,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
> *yy_cp = '\0'; \
> yyg->yy_c_buf_p = yy_cp;
>
> -#define YY_NUM_RULES 26
> -#define YY_END_OF_BUFFER 27
> +#define YY_NUM_RULES 27
> +#define YY_END_OF_BUFFER 28
> /* This struct is not used in this scanner,
> but its presence is necessary. */
> struct yy_trans_info
> @@ -370,90 +370,92 @@ struct yy_trans_info
> flex_int32_t yy_verify;
> flex_int32_t yy_nxt;
> };
> -static yyconst flex_int16_t yy_acclist[454] =
> +static yyconst flex_int16_t yy_acclist[470] =
> { 0,
> - 25, 25, 27, 23, 24, 26, 8193, 23, 24, 26,
> - 16385, 8193, 23, 26,16385, 23, 24, 26, 24, 26,
> - 23, 24, 26, 23, 24, 26, 23, 24, 26, 23,
> - 24, 26, 23, 24, 26, 23, 24, 26, 23, 24,
> - 26, 23, 24, 26, 23, 24, 26, 23, 24, 26,
> - 23, 24, 26, 23, 24, 26, 23, 24, 26, 23,
> - 24, 26, 23, 24, 26, 25, 26, 26, 23, 23,
> - 8193, 23, 8193, 23,16385, 8193, 23, 8193, 23, 23,
> - 8214, 23,16406, 23, 23, 23, 23, 23, 23, 23,
> - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
> -
> - 23, 23, 25, 8193, 23, 8193, 23, 8193, 8214, 23,
> - 8214, 23, 8214, 13, 23, 23, 23, 23, 23, 23,
> - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
> - 23, 23, 8214, 23, 8214, 23, 8214, 13, 23, 18,
> - 8214, 23,16406, 23, 23, 23, 23, 23, 23, 23,
> - 8207, 8214, 23,16399,16406, 21, 8214, 23,16406, 23,
> - 8206, 8214, 23,16398,16406, 23, 23, 8209, 8214, 23,
> - 16401,16406, 23, 23, 23, 23, 18, 8214, 23, 18,
> - 8214, 23, 18, 23, 18, 8214, 23, 3, 23, 23,
> - 20, 8214, 23,16406, 23, 23, 8207, 8214, 23, 8207,
> -
> - 8214, 23, 8207, 23, 8207, 8214, 21, 8214, 23, 21,
> - 8214, 23, 21, 23, 21, 8214, 8206, 8214, 23, 8206,
> - 8214, 23, 8206, 23, 8206, 8214, 23, 8209, 8214, 23,
> - 8209, 8214, 23, 8209, 23, 8209, 8214, 23, 23, 10,
> - 23, 18, 8214, 23, 18, 8214, 23, 18, 8214, 18,
> - 23, 18, 23, 3, 23, 23, 20, 8214, 23, 20,
> - 8214, 23, 20, 23, 20, 8214, 23, 19, 8214, 23,
> - 16406, 8207, 8214, 23, 8207, 8214, 23, 8207, 8214, 8207,
> - 23, 8207, 21, 8214, 23, 21, 8214, 23, 21, 8214,
> - 21, 23, 21, 8206, 8214, 23, 8206, 8214, 23, 8206,
> -
> - 8214, 8206, 23, 8206, 23, 8209, 8214, 23, 8209, 8214,
> - 23, 8209, 8214, 8209, 23, 8209, 23, 23, 10, 13,
> - 10, 7, 23, 23, 20, 8214, 23, 20, 8214, 23,
> - 20, 8214, 20, 23, 20, 2, 19, 8214, 23, 19,
> - 8214, 23, 19, 23, 19, 8214, 11, 23, 12, 10,
> - 10, 13, 7, 13, 7, 8, 23, 6, 2, 13,
> - 2, 19, 8214, 23, 19, 8214, 23, 19, 8214, 19,
> - 23, 19, 11, 13, 11, 16, 8214, 23,16406, 12,
> - 13, 12, 7, 7, 13, 8, 13, 8, 23, 6,
> - 13, 6, 6, 13, 6, 13, 2, 2, 13, 11,
> -
> - 11, 13, 16, 8214, 23, 16, 8214, 23, 16, 23,
> - 16, 8214, 12, 13, 8, 8, 13, 23, 6, 6,
> - 13, 6, 6, 16, 8214, 23, 16, 8214, 23, 16,
> - 8214, 16, 23, 16, 23, 6, 6, 9, 6, 5,
> - 6, 9, 13, 9, 4, 6, 5, 6, 9, 9,
> - 13, 4, 6
> + 26, 26, 28, 24, 25, 27, 8193, 24, 25, 27,
> + 16385, 8193, 24, 27,16385, 24, 25, 27, 25, 27,
> + 24, 25, 27, 24, 25, 27, 24, 25, 27, 24,
> + 25, 27, 24, 25, 27, 24, 25, 27, 24, 25,
> + 27, 24, 25, 27, 24, 25, 27, 24, 25, 27,
> + 24, 25, 27, 24, 25, 27, 24, 25, 27, 24,
> + 25, 27, 24, 25, 27, 26, 27, 27, 24, 24,
> + 8193, 24, 8193, 24,16385, 8193, 24, 8193, 24, 24,
> + 8215, 24,16407, 24, 24, 24, 24, 24, 24, 24,
> + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> +
> + 24, 24, 24, 26, 8193, 24, 8193, 24, 8193, 8215,
> + 24, 8215, 24, 8215, 14, 24, 24, 24, 24, 24,
> + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> + 24, 24, 24, 24, 8215, 24, 8215, 24, 8215, 14,
> + 24, 19, 8215, 24,16407, 24, 24, 24, 24, 24,
> + 24, 24, 24, 8208, 8215, 24,16400,16407, 22, 8215,
> + 24,16407, 24, 8207, 8215, 24,16399,16407, 24, 24,
> + 8210, 8215, 24,16402,16407, 24, 24, 24, 24, 19,
> + 8215, 24, 19, 8215, 24, 19, 24, 19, 8215, 24,
> + 3, 24, 24, 24, 21, 8215, 24,16407, 24, 24,
> +
> + 8208, 8215, 24, 8208, 8215, 24, 8208, 24, 8208, 8215,
> + 22, 8215, 24, 22, 8215, 24, 22, 24, 22, 8215,
> + 8207, 8215, 24, 8207, 8215, 24, 8207, 24, 8207, 8215,
> + 24, 8210, 8215, 24, 8210, 8215, 24, 8210, 24, 8210,
> + 8215, 24, 24, 10, 24, 19, 8215, 24, 19, 8215,
> + 24, 19, 8215, 19, 24, 19, 24, 3, 24, 24,
> + 24, 21, 8215, 24, 21, 8215, 24, 21, 24, 21,
> + 8215, 24, 20, 8215, 24,16407, 8208, 8215, 24, 8208,
> + 8215, 24, 8208, 8215, 8208, 24, 8208, 22, 8215, 24,
> + 22, 8215, 24, 22, 8215, 22, 24, 22, 8207, 8215,
> +
> + 24, 8207, 8215, 24, 8207, 8215, 8207, 24, 8207, 24,
> + 8210, 8215, 24, 8210, 8215, 24, 8210, 8215, 8210, 24,
> + 8210, 24, 24, 10, 14, 10, 7, 24, 24, 24,
> + 21, 8215, 24, 21, 8215, 24, 21, 8215, 21, 24,
> + 21, 2, 20, 8215, 24, 20, 8215, 24, 20, 24,
> + 20, 8215, 11, 24, 13, 10, 10, 14, 7, 14,
> + 7, 8, 24, 6, 24, 2, 14, 2, 20, 8215,
> + 24, 20, 8215, 24, 20, 8215, 20, 24, 20, 11,
> + 14, 11, 17, 8215, 24,16407, 13, 14, 13, 7,
> + 7, 14, 8, 14, 8, 24, 6, 14, 6, 6,
> +
> + 14, 6, 14, 24, 2, 2, 14, 11, 11, 14,
> + 17, 8215, 24, 17, 8215, 24, 17, 24, 17, 8215,
> + 13, 14, 8, 8, 14, 24, 6, 6, 14, 6,
> + 6, 24, 17, 8215, 24, 17, 8215, 24, 17, 8215,
> + 17, 24, 17, 24, 6, 6, 24, 9, 6, 5,
> + 6, 24, 9, 14, 9, 4, 6, 5, 6, 24,
> + 9, 9, 14, 4, 6, 12, 24, 12, 24
> } ;
>
> -static yyconst flex_int16_t yy_accept[257] =
> +static yyconst flex_int16_t yy_accept[271] =
> { 0,
> 1, 1, 1, 2, 3, 4, 7, 12, 16, 19,
> 21, 24, 27, 30, 33, 36, 39, 42, 45, 48,
> 51, 54, 57, 60, 63, 66, 68, 69, 70, 71,
> 73, 76, 78, 79, 80, 81, 84, 84, 85, 86,
> 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
> - 97, 98, 99, 100, 101, 102, 103, 104, 106, 108,
> - 109, 111, 113, 114, 115, 116, 117, 118, 119, 120,
> + 97, 98, 99, 100, 101, 102, 103, 104, 105, 107,
> + 109, 110, 112, 114, 115, 116, 117, 118, 119, 120,
> 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
> - 131, 132, 133, 135, 137, 138, 139, 140, 144, 145,
> - 146, 147, 148, 149, 150, 151, 156, 160, 161, 166,
> -
> - 167, 168, 173, 174, 175, 176, 177, 180, 183, 185,
> - 187, 188, 190, 191, 195, 196, 197, 200, 203, 205,
> - 207, 210, 213, 215, 217, 220, 223, 225, 227, 228,
> - 231, 234, 236, 238, 239, 240, 241, 242, 245, 248,
> - 250, 252, 253, 254, 256, 257, 260, 263, 265, 267,
> - 268, 272, 275, 278, 280, 282, 283, 286, 289, 291,
> - 293, 294, 297, 300, 302, 304, 305, 306, 309, 312,
> - 314, 316, 317, 318, 319, 321, 322, 323, 324, 325,
> - 328, 331, 333, 335, 336, 337, 340, 343, 345, 347,
> - 348, 349, 350, 351, 353, 355, 356, 357, 358, 359,
> -
> - 361, 362, 365, 368, 370, 372, 373, 375, 376, 380,
> - 382, 383, 384, 386, 388, 389, 390, 392, 393, 395,
> - 397, 398, 400, 401, 403, 406, 409, 411, 413, 415,
> - 416, 418, 419, 420, 422, 423, 424, 427, 430, 432,
> - 434, 435, 436, 437, 438, 439, 440, 442, 444, 445,
> - 447, 449, 450, 452, 454, 454
> + 131, 132, 133, 134, 135, 137, 139, 140, 141, 142,
> + 146, 147, 148, 149, 150, 151, 152, 153, 154, 159,
> +
> + 163, 164, 169, 170, 171, 176, 177, 178, 179, 180,
> + 183, 186, 188, 190, 191, 193, 194, 195, 199, 200,
> + 201, 204, 207, 209, 211, 214, 217, 219, 221, 224,
> + 227, 229, 231, 232, 235, 238, 240, 242, 243, 244,
> + 245, 246, 249, 252, 254, 256, 257, 258, 260, 261,
> + 262, 265, 268, 270, 272, 273, 277, 280, 283, 285,
> + 287, 288, 291, 294, 296, 298, 299, 302, 305, 307,
> + 309, 310, 311, 314, 317, 319, 321, 322, 323, 324,
> + 326, 327, 328, 329, 330, 331, 334, 337, 339, 341,
> + 342, 343, 346, 349, 351, 353, 354, 355, 356, 357,
> +
> + 359, 361, 362, 363, 364, 365, 366, 368, 369, 372,
> + 375, 377, 379, 380, 382, 383, 387, 389, 390, 391,
> + 393, 395, 396, 397, 399, 400, 402, 404, 405, 406,
> + 408, 409, 411, 414, 417, 419, 421, 423, 424, 426,
> + 427, 428, 430, 431, 432, 433, 436, 439, 441, 443,
> + 444, 445, 446, 447, 448, 449, 450, 452, 453, 455,
> + 456, 458, 460, 461, 462, 464, 466, 468, 470, 470
> } ;
>
> static yyconst flex_int32_t yy_ec[256] =
> @@ -496,244 +498,252 @@ static yyconst flex_int32_t yy_meta[34] =
> 1, 1, 1
> } ;
>
> -static yyconst flex_int16_t yy_base[315] =
> +static yyconst flex_int16_t yy_base[329] =
> { 0,
> - 0, 0, 563, 559, 558, 546, 32, 35, 665, 665,
> - 44, 62, 30, 41, 50, 51, 532, 64, 47, 66,
> - 67, 524, 68, 516, 72, 0, 665, 514, 665, 87,
> - 91, 0, 0, 100, 500, 109, 0, 74, 95, 87,
> - 32, 96, 105, 110, 77, 97, 40, 113, 116, 112,
> - 118, 120, 121, 122, 123, 125, 0, 137, 0, 0,
> - 147, 0, 0, 494, 129, 126, 134, 143, 145, 147,
> - 148, 149, 151, 153, 156, 160, 155, 167, 162, 175,
> - 168, 159, 188, 0, 0, 665, 166, 197, 179, 185,
> - 176, 200, 460, 186, 193, 216, 225, 205, 234, 221,
> -
> - 237, 247, 204, 230, 244, 213, 254, 0, 256, 0,
> - 251, 258, 254, 279, 256, 259, 267, 0, 269, 0,
> - 286, 0, 288, 0, 290, 0, 297, 0, 267, 299,
> - 0, 301, 0, 288, 297, 459, 302, 310, 0, 0,
> - 0, 0, 305, 665, 307, 319, 0, 321, 0, 322,
> - 332, 335, 0, 0, 0, 0, 339, 0, 0, 0,
> - 0, 342, 0, 0, 0, 0, 340, 349, 0, 0,
> - 0, 0, 337, 345, 450, 665, 442, 350, 352, 360,
> - 0, 0, 0, 0, 424, 362, 0, 364, 0, 420,
> - 319, 371, 419, 665, 418, 665, 417, 276, 368, 416,
> -
> - 665, 373, 0, 0, 0, 0, 415, 665, 382, 414,
> - 0, 413, 665, 412, 665, 368, 411, 665, 384, 352,
> - 410, 665, 409, 665, 391, 0, 395, 0, 0, 405,
> - 665, 382, 316, 665, 385, 397, 399, 0, 0, 0,
> - 0, 396, 403, 406, 271, 407, 228, 200, 665, 175,
> - 665, 77, 665, 665, 665, 429, 433, 436, 440, 444,
> - 448, 452, 456, 460, 464, 468, 472, 476, 480, 484,
> - 488, 492, 496, 500, 504, 508, 512, 516, 520, 524,
> - 528, 532, 536, 540, 544, 548, 552, 556, 560, 564,
> - 568, 572, 576, 580, 584, 588, 592, 596, 600, 604,
> -
> - 608, 612, 616, 620, 624, 628, 632, 636, 640, 644,
> - 648, 652, 656, 660
> + 0, 0, 673, 657, 648, 616, 32, 35, 691, 691,
> + 44, 62, 30, 41, 50, 51, 598, 64, 47, 66,
> + 67, 586, 68, 582, 72, 0, 691, 584, 691, 87,
> + 91, 0, 0, 100, 574, 109, 0, 74, 95, 87,
> + 71, 96, 97, 105, 110, 112, 113, 40, 116, 119,
> + 115, 120, 121, 124, 125, 127, 126, 0, 151, 0,
> + 0, 153, 0, 0, 572, 128, 135, 139, 137, 136,
> + 153, 156, 154, 148, 161, 162, 165, 166, 167, 170,
> + 169, 178, 179, 171, 189, 0, 0, 691, 172, 202,
> + 187, 174, 184, 202, 205, 558, 198, 206, 228, 237,
> +
> + 211, 246, 210, 215, 255, 216, 251, 234, 199, 263,
> + 0, 265, 0, 252, 266, 261, 263, 292, 269, 270,
> + 278, 0, 280, 0, 299, 0, 301, 0, 303, 0,
> + 310, 0, 280, 312, 0, 314, 0, 301, 310, 556,
> + 243, 321, 0, 0, 0, 0, 275, 691, 312, 322,
> + 331, 0, 333, 0, 334, 344, 347, 0, 0, 0,
> + 0, 351, 0, 0, 0, 0, 354, 0, 0, 0,
> + 0, 352, 361, 0, 0, 0, 0, 318, 357, 548,
> + 691, 540, 359, 362, 388, 370, 0, 0, 0, 0,
> + 532, 372, 0, 374, 0, 520, 323, 381, 492, 691,
> +
> + 485, 691, 476, 349, 382, 369, 468, 691, 395, 0,
> + 0, 0, 0, 449, 691, 406, 448, 0, 447, 691,
> + 446, 691, 391, 444, 691, 399, 273, 395, 442, 691,
> + 438, 691, 414, 0, 416, 0, 0, 398, 691, 412,
> + 376, 691, 401, 417, 406, 426, 0, 0, 0, 0,
> + 422, 423, 429, 426, 337, 433, 295, 423, 218, 691,
> + 83, 691, 425, 38, 691, 691, 436, 691, 691, 455,
> + 459, 462, 466, 470, 474, 478, 482, 486, 490, 494,
> + 498, 502, 506, 510, 514, 518, 522, 526, 530, 534,
> + 538, 542, 546, 550, 554, 558, 562, 566, 570, 574,
> +
> + 578, 582, 586, 590, 594, 598, 602, 606, 610, 614,
> + 618, 622, 626, 630, 634, 638, 642, 646, 650, 654,
> + 658, 662, 666, 670, 674, 678, 682, 686
> } ;
>
> -static yyconst flex_int16_t yy_def[315] =
> +static yyconst flex_int16_t yy_def[329] =
> { 0,
> - 255, 1, 256, 256, 255, 257, 258, 258, 255, 255,
> - 259, 259, 12, 12, 12, 12, 12, 12, 12, 12,
> - 12, 12, 12, 12, 12, 260, 255, 257, 255, 261,
> - 258, 262, 262, 263, 12, 257, 264, 12, 12, 12,
> + 269, 1, 270, 270, 269, 271, 272, 272, 269, 269,
> + 273, 273, 12, 12, 12, 12, 12, 12, 12, 12,
> + 12, 12, 12, 12, 12, 274, 269, 271, 269, 275,
> + 272, 276, 276, 277, 12, 271, 278, 12, 12, 12,
> 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
> - 12, 12, 12, 12, 12, 12, 260, 261, 262, 262,
> - 265, 266, 266, 255, 12, 12, 12, 12, 12, 12,
> + 12, 12, 12, 12, 12, 12, 12, 274, 275, 276,
> + 276, 279, 280, 280, 269, 12, 12, 12, 12, 12,
> 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
> - 12, 12, 265, 266, 266, 255, 12, 267, 12, 12,
> - 12, 12, 12, 12, 12, 268, 269, 12, 270, 12,
> -
> - 12, 271, 12, 12, 12, 12, 272, 273, 267, 273,
> - 12, 12, 12, 274, 12, 12, 275, 276, 268, 276,
> - 277, 278, 269, 278, 279, 280, 270, 280, 12, 281,
> - 282, 271, 282, 12, 12, 283, 12, 272, 273, 273,
> - 284, 284, 12, 255, 12, 285, 286, 274, 286, 12,
> - 287, 275, 276, 276, 288, 288, 277, 278, 278, 289,
> - 289, 279, 280, 280, 290, 290, 12, 281, 282, 282,
> - 291, 291, 12, 12, 292, 255, 293, 12, 12, 285,
> - 286, 286, 294, 294, 295, 296, 297, 287, 297, 298,
> - 12, 299, 292, 255, 300, 255, 301, 12, 302, 303,
> -
> - 255, 296, 297, 297, 304, 304, 305, 255, 306, 307,
> - 307, 300, 255, 308, 255, 12, 309, 255, 309, 309,
> - 303, 255, 305, 255, 310, 311, 306, 311, 307, 308,
> - 255, 12, 309, 255, 309, 309, 310, 311, 311, 312,
> - 312, 12, 309, 309, 313, 309, 309, 314, 255, 309,
> - 255, 314, 255, 255, 0, 255, 255, 255, 255, 255,
> - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
> - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
> - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
> - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
> -
> - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
> - 255, 255, 255, 255
> + 12, 12, 12, 12, 279, 280, 280, 269, 12, 281,
> + 12, 12, 12, 12, 12, 12, 12, 12, 282, 283,
> +
> + 12, 284, 12, 12, 285, 12, 12, 12, 12, 286,
> + 287, 281, 287, 12, 12, 12, 12, 288, 12, 12,
> + 289, 290, 282, 290, 291, 292, 283, 292, 293, 294,
> + 284, 294, 12, 295, 296, 285, 296, 12, 12, 297,
> + 12, 286, 287, 287, 298, 298, 12, 269, 12, 12,
> + 299, 300, 288, 300, 12, 301, 289, 290, 290, 302,
> + 302, 291, 292, 292, 303, 303, 293, 294, 294, 304,
> + 304, 12, 295, 296, 296, 305, 305, 12, 12, 306,
> + 269, 307, 12, 12, 277, 299, 300, 300, 308, 308,
> + 309, 310, 311, 301, 311, 312, 12, 313, 306, 269,
> +
> + 314, 269, 315, 12, 316, 185, 317, 269, 310, 311,
> + 311, 318, 318, 319, 269, 320, 321, 321, 314, 269,
> + 322, 269, 12, 323, 269, 323, 323, 185, 317, 269,
> + 319, 269, 324, 325, 320, 325, 321, 322, 269, 12,
> + 323, 269, 323, 323, 185, 324, 325, 325, 326, 326,
> + 12, 323, 323, 185, 327, 323, 323, 185, 328, 269,
> + 323, 269, 185, 328, 269, 269, 185, 269, 0, 269,
> + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
> + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
> + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
> +
> + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
> + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
> + 269, 269, 269, 269, 269, 269, 269, 269
> } ;
>
> -static yyconst flex_int16_t yy_nxt[699] =
> +static yyconst flex_int16_t yy_nxt[725] =
> { 0,
> 6, 7, 8, 9, 6, 6, 6, 6, 10, 11,
> 12, 13, 14, 15, 16, 17, 17, 18, 17, 17,
> 17, 17, 19, 17, 20, 21, 22, 23, 24, 17,
> 25, 17, 17, 31, 31, 32, 31, 31, 32, 35,
> - 33, 35, 41, 33, 28, 28, 28, 29, 34, 35,
> - 35, 36, 37, 73, 42, 38, 35, 49, 68, 35,
> - 35, 39, 28, 28, 28, 29, 34, 43, 45, 36,
> - 37, 40, 44, 35, 46, 35, 35, 35, 51, 53,
> - 249, 35, 50, 35, 55, 65, 35, 47, 56, 28,
> - 59, 48, 31, 31, 32, 60, 35, 71, 67, 33,
> -
> - 28, 28, 28, 29, 35, 35, 35, 28, 37, 61,
> - 61, 61, 62, 61, 35, 70, 61, 63, 66, 35,
> - 49, 35, 35, 72, 74, 35, 69, 35, 75, 35,
> - 35, 35, 35, 88, 35, 35, 82, 78, 35, 28,
> - 59, 77, 87, 35, 76, 60, 80, 79, 81, 28,
> - 84, 78, 35, 89, 35, 85, 35, 35, 35, 75,
> - 35, 92, 35, 96, 35, 35, 90, 97, 35, 35,
> - 93, 35, 94, 91, 99, 35, 35, 35, 254, 100,
> - 95, 101, 102, 104, 35, 35, 98, 103, 35, 105,
> - 28, 84, 111, 106, 35, 35, 85, 107, 107, 61,
> -
> - 108, 107, 35, 253, 107, 110, 112, 114, 113, 35,
> - 75, 78, 99, 35, 35, 116, 117, 117, 61, 118,
> - 117, 134, 35, 117, 120, 121, 121, 61, 122, 121,
> - 35, 251, 121, 124, 125, 125, 61, 126, 125, 35,
> - 137, 125, 128, 135, 102, 129, 35, 130, 130, 61,
> - 131, 130, 136, 35, 130, 133, 28, 139, 28, 141,
> - 35, 144, 140, 35, 142, 35, 151, 35, 35, 28,
> - 153, 28, 155, 143, 249, 154, 35, 156, 145, 146,
> - 146, 61, 147, 146, 150, 35, 146, 149, 28, 158,
> - 28, 160, 28, 163, 159, 167, 161, 35, 164, 28,
> -
> - 165, 28, 169, 28, 171, 166, 35, 170, 216, 172,
> - 177, 35, 28, 139, 35, 173, 35, 178, 140, 218,
> - 179, 28, 181, 28, 183, 174, 209, 182, 35, 184,
> - 185, 35, 186, 186, 61, 187, 186, 28, 153, 186,
> - 189, 28, 158, 154, 28, 163, 35, 159, 190, 35,
> - 164, 28, 169, 192, 35, 234, 191, 170, 197, 35,
> - 199, 35, 28, 181, 28, 203, 28, 205, 182, 236,
> - 204, 218, 206, 64, 211, 28, 203, 35, 198, 219,
> - 220, 204, 225, 225, 61, 226, 225, 234, 218, 225,
> - 228, 35, 232, 28, 238, 242, 235, 28, 240, 239,
> -
> - 218, 28, 238, 241, 245, 35, 218, 239, 215, 218,
> - 218, 243, 208, 201, 234, 231, 196, 229, 224, 222,
> - 215, 213, 176, 208, 244, 247, 246, 201, 250, 26,
> - 26, 26, 26, 28, 28, 28, 30, 30, 30, 30,
> - 35, 35, 35, 35, 57, 196, 57, 57, 58, 58,
> - 58, 58, 60, 194, 60, 60, 34, 34, 34, 34,
> - 64, 64, 176, 64, 83, 83, 83, 83, 85, 115,
> - 85, 85, 109, 109, 109, 109, 119, 119, 119, 119,
> - 123, 123, 123, 123, 127, 127, 127, 127, 132, 132,
> - 132, 132, 138, 138, 138, 138, 140, 86, 140, 140,
> -
> - 148, 148, 148, 148, 152, 152, 152, 152, 154, 35,
> - 154, 154, 157, 157, 157, 157, 159, 29, 159, 159,
> - 162, 162, 162, 162, 164, 54, 164, 164, 168, 168,
> - 168, 168, 170, 52, 170, 170, 175, 175, 175, 175,
> - 142, 35, 142, 142, 180, 180, 180, 180, 182, 29,
> - 182, 182, 188, 188, 188, 188, 156, 255, 156, 156,
> - 161, 27, 161, 161, 166, 27, 166, 166, 172, 255,
> - 172, 172, 193, 193, 193, 193, 195, 195, 195, 195,
> - 184, 255, 184, 184, 200, 200, 200, 200, 202, 202,
> - 202, 202, 204, 255, 204, 204, 207, 207, 207, 207,
> -
> - 210, 210, 210, 210, 212, 212, 212, 212, 214, 214,
> - 214, 214, 217, 217, 217, 217, 221, 221, 221, 221,
> - 206, 255, 206, 206, 223, 223, 223, 223, 227, 227,
> - 227, 227, 211, 255, 211, 211, 230, 230, 230, 230,
> - 233, 233, 233, 233, 237, 237, 237, 237, 239, 255,
> - 239, 239, 241, 255, 241, 241, 248, 248, 248, 248,
> - 252, 252, 252, 252, 5, 255, 255, 255, 255, 255,
> - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
> - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
> - 255, 255, 255, 255, 255, 255, 255, 255
> -
> + 33, 260, 41, 33, 28, 28, 28, 29, 34, 35,
> + 35, 36, 37, 75, 42, 38, 35, 50, 43, 35,
> + 35, 39, 28, 28, 28, 29, 34, 44, 46, 36,
> + 37, 40, 45, 35, 47, 35, 35, 35, 52, 54,
> + 35, 35, 51, 35, 56, 66, 266, 48, 57, 28,
> + 60, 49, 31, 31, 32, 61, 35, 69, 68, 33,
> +
> + 28, 28, 28, 29, 35, 35, 35, 28, 37, 62,
> + 62, 62, 63, 62, 35, 72, 62, 64, 67, 35,
> + 50, 35, 35, 71, 35, 35, 70, 76, 35, 35,
> + 35, 77, 73, 35, 35, 35, 35, 35, 80, 74,
> + 84, 89, 90, 79, 35, 35, 35, 78, 35, 82,
> + 81, 83, 80, 28, 60, 28, 86, 35, 91, 61,
> + 92, 87, 35, 35, 93, 35, 94, 95, 77, 96,
> + 35, 35, 99, 100, 35, 35, 35, 102, 35, 35,
> + 35, 35, 97, 35, 104, 105, 103, 35, 35, 98,
> + 106, 28, 86, 35, 107, 115, 35, 87, 101, 109,
> +
> + 114, 108, 110, 110, 62, 111, 110, 35, 35, 110,
> + 113, 35, 118, 117, 35, 35, 116, 80, 102, 35,
> + 35, 265, 105, 77, 35, 35, 141, 120, 121, 121,
> + 62, 122, 121, 138, 133, 121, 124, 125, 125, 62,
> + 126, 125, 140, 35, 125, 128, 129, 129, 62, 130,
> + 129, 182, 35, 129, 132, 134, 134, 62, 135, 134,
> + 35, 35, 134, 137, 139, 28, 143, 28, 145, 148,
> + 35, 144, 35, 146, 147, 35, 242, 156, 35, 35,
> + 28, 158, 28, 160, 35, 149, 159, 183, 161, 35,
> + 244, 150, 151, 151, 62, 152, 151, 155, 262, 151,
> +
> + 154, 28, 163, 28, 165, 28, 168, 164, 172, 166,
> + 35, 169, 28, 170, 28, 174, 28, 176, 171, 35,
> + 175, 35, 177, 28, 143, 184, 185, 35, 178, 144,
> + 216, 35, 35, 28, 187, 28, 189, 197, 179, 188,
> + 260, 190, 191, 35, 192, 192, 62, 193, 192, 28,
> + 158, 192, 195, 28, 163, 159, 28, 168, 35, 164,
> + 196, 35, 169, 28, 174, 198, 35, 203, 35, 175,
> + 205, 35, 28, 187, 28, 210, 28, 212, 188, 225,
> + 211, 223, 213, 65, 218, 225, 34, 204, 28, 28,
> + 28, 29, 228, 226, 227, 28, 37, 28, 210, 245,
> +
> + 35, 222, 242, 211, 225, 206, 233, 233, 62, 234,
> + 233, 243, 34, 233, 236, 240, 28, 247, 28, 249,
> + 225, 35, 248, 34, 250, 251, 225, 252, 28, 247,
> + 255, 35, 225, 254, 248, 258, 225, 263, 267, 268,
> + 34, 215, 34, 34, 253, 208, 256, 242, 257, 239,
> + 202, 237, 232, 34, 261, 26, 26, 26, 26, 28,
> + 28, 28, 30, 30, 30, 30, 35, 35, 35, 35,
> + 58, 230, 58, 58, 59, 59, 59, 59, 61, 222,
> + 61, 61, 34, 34, 34, 34, 65, 65, 220, 65,
> + 85, 85, 85, 85, 87, 181, 87, 87, 112, 112,
> +
> + 112, 112, 123, 123, 123, 123, 127, 127, 127, 127,
> + 131, 131, 131, 131, 136, 136, 136, 136, 142, 142,
> + 142, 142, 144, 215, 144, 144, 153, 153, 153, 153,
> + 157, 157, 157, 157, 159, 208, 159, 159, 162, 162,
> + 162, 162, 164, 202, 164, 164, 167, 167, 167, 167,
> + 169, 200, 169, 169, 173, 173, 173, 173, 175, 181,
> + 175, 175, 180, 180, 180, 180, 146, 119, 146, 146,
> + 186, 186, 186, 186, 188, 88, 188, 188, 194, 194,
> + 194, 194, 161, 35, 161, 161, 166, 29, 166, 166,
> + 171, 55, 171, 171, 177, 53, 177, 177, 199, 199,
> +
> + 199, 199, 201, 201, 201, 201, 190, 35, 190, 190,
> + 207, 207, 207, 207, 209, 209, 209, 209, 211, 29,
> + 211, 211, 214, 214, 214, 214, 217, 217, 217, 217,
> + 219, 219, 219, 219, 221, 221, 221, 221, 224, 224,
> + 224, 224, 229, 229, 229, 229, 213, 269, 213, 213,
> + 231, 231, 231, 231, 235, 235, 235, 235, 218, 27,
> + 218, 218, 238, 238, 238, 238, 241, 241, 241, 241,
> + 246, 246, 246, 246, 248, 27, 248, 248, 250, 269,
> + 250, 250, 259, 259, 259, 259, 264, 264, 264, 264,
> + 5, 269, 269, 269, 269, 269, 269, 269, 269, 269,
> +
> + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
> + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
> + 269, 269, 269, 269
> } ;
>
> -static yyconst flex_int16_t yy_chk[699] =
> +static yyconst flex_int16_t yy_chk[725] =
> { 0,
> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> 1, 1, 1, 7, 7, 7, 8, 8, 8, 13,
> - 7, 41, 13, 8, 11, 11, 11, 11, 11, 47,
> - 14, 11, 11, 47, 14, 11, 19, 19, 41, 15,
> + 7, 264, 13, 8, 11, 11, 11, 11, 11, 48,
> + 14, 11, 11, 48, 14, 11, 19, 19, 14, 15,
> 16, 11, 12, 12, 12, 12, 12, 14, 16, 12,
> 12, 12, 15, 18, 16, 20, 21, 23, 21, 23,
> - 252, 25, 20, 38, 25, 38, 45, 18, 25, 30,
> - 30, 18, 31, 31, 31, 30, 40, 45, 40, 31,
> -
> - 34, 34, 34, 34, 39, 42, 46, 34, 34, 36,
> - 36, 36, 36, 36, 43, 43, 36, 36, 39, 44,
> - 44, 50, 48, 46, 48, 49, 42, 51, 49, 52,
> - 53, 54, 55, 66, 56, 66, 55, 56, 65, 58,
> - 58, 51, 65, 67, 50, 58, 54, 53, 54, 61,
> - 61, 52, 68, 67, 69, 61, 70, 71, 72, 70,
> - 73, 71, 74, 75, 77, 75, 68, 76, 82, 76,
> - 72, 79, 73, 69, 78, 87, 78, 81, 250, 79,
> - 74, 80, 80, 81, 80, 91, 77, 80, 89, 82,
> - 83, 83, 89, 87, 90, 94, 83, 88, 88, 88,
> -
> - 88, 88, 95, 248, 88, 88, 90, 92, 91, 92,
> - 95, 98, 98, 103, 98, 94, 96, 96, 96, 96,
> - 96, 103, 106, 96, 96, 97, 97, 97, 97, 97,
> - 100, 247, 97, 97, 99, 99, 99, 99, 99, 104,
> - 106, 99, 99, 104, 101, 100, 101, 102, 102, 102,
> - 102, 102, 105, 105, 102, 102, 107, 107, 109, 109,
> - 111, 112, 107, 113, 109, 115, 116, 112, 116, 117,
> - 117, 119, 119, 111, 245, 117, 129, 119, 113, 114,
> - 114, 114, 114, 114, 115, 198, 114, 114, 121, 121,
> - 123, 123, 125, 125, 121, 129, 123, 134, 125, 127,
> -
> - 127, 130, 130, 132, 132, 127, 135, 130, 198, 132,
> - 137, 137, 138, 138, 143, 134, 145, 143, 138, 233,
> - 145, 146, 146, 148, 148, 135, 191, 146, 191, 148,
> - 150, 150, 151, 151, 151, 151, 151, 152, 152, 151,
> - 151, 157, 157, 152, 162, 162, 173, 157, 167, 167,
> - 162, 168, 168, 174, 174, 220, 173, 168, 178, 178,
> - 179, 179, 180, 180, 186, 186, 188, 188, 180, 220,
> - 186, 199, 188, 192, 192, 202, 202, 216, 178, 199,
> - 199, 202, 209, 209, 209, 209, 209, 219, 235, 209,
> - 209, 232, 216, 225, 225, 232, 219, 227, 227, 225,
> -
> - 236, 237, 237, 227, 242, 242, 243, 237, 230, 244,
> - 246, 235, 223, 221, 217, 214, 212, 210, 207, 200,
> - 197, 195, 193, 190, 236, 244, 243, 185, 246, 256,
> - 256, 256, 256, 257, 257, 257, 258, 258, 258, 258,
> - 259, 259, 259, 259, 260, 177, 260, 260, 261, 261,
> - 261, 261, 262, 175, 262, 262, 263, 263, 263, 263,
> - 264, 264, 136, 264, 265, 265, 265, 265, 266, 93,
> - 266, 266, 267, 267, 267, 267, 268, 268, 268, 268,
> - 269, 269, 269, 269, 270, 270, 270, 270, 271, 271,
> - 271, 271, 272, 272, 272, 272, 273, 64, 273, 273,
> -
> - 274, 274, 274, 274, 275, 275, 275, 275, 276, 35,
> - 276, 276, 277, 277, 277, 277, 278, 28, 278, 278,
> - 279, 279, 279, 279, 280, 24, 280, 280, 281, 281,
> - 281, 281, 282, 22, 282, 282, 283, 283, 283, 283,
> - 284, 17, 284, 284, 285, 285, 285, 285, 286, 6,
> - 286, 286, 287, 287, 287, 287, 288, 5, 288, 288,
> - 289, 4, 289, 289, 290, 3, 290, 290, 291, 0,
> - 291, 291, 292, 292, 292, 292, 293, 293, 293, 293,
> - 294, 0, 294, 294, 295, 295, 295, 295, 296, 296,
> - 296, 296, 297, 0, 297, 297, 298, 298, 298, 298,
> -
> - 299, 299, 299, 299, 300, 300, 300, 300, 301, 301,
> - 301, 301, 302, 302, 302, 302, 303, 303, 303, 303,
> - 304, 0, 304, 304, 305, 305, 305, 305, 306, 306,
> - 306, 306, 307, 0, 307, 307, 308, 308, 308, 308,
> - 309, 309, 309, 309, 310, 310, 310, 310, 311, 0,
> - 311, 311, 312, 0, 312, 312, 313, 313, 313, 313,
> - 314, 314, 314, 314, 255, 255, 255, 255, 255, 255,
> - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
> - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
> - 255, 255, 255, 255, 255, 255, 255, 255
> -
> + 41, 25, 20, 38, 25, 38, 261, 18, 25, 30,
> + 30, 18, 31, 31, 31, 30, 40, 41, 40, 31,
> +
> + 34, 34, 34, 34, 39, 42, 43, 34, 34, 36,
> + 36, 36, 36, 36, 44, 44, 36, 36, 39, 45,
> + 45, 46, 47, 43, 51, 49, 42, 49, 50, 52,
> + 53, 50, 46, 54, 55, 57, 56, 66, 57, 47,
> + 56, 66, 67, 52, 67, 70, 69, 51, 68, 55,
> + 54, 55, 53, 59, 59, 62, 62, 74, 68, 59,
> + 69, 62, 71, 73, 70, 72, 71, 73, 72, 74,
> + 75, 76, 77, 78, 77, 78, 79, 80, 81, 80,
> + 84, 89, 75, 92, 82, 82, 81, 82, 83, 76,
> + 82, 85, 85, 93, 83, 92, 91, 85, 79, 89,
> +
> + 91, 84, 90, 90, 90, 90, 90, 97, 109, 90,
> + 90, 94, 95, 94, 95, 98, 93, 101, 101, 103,
> + 101, 259, 104, 98, 104, 106, 109, 97, 99, 99,
> + 99, 99, 99, 106, 103, 99, 99, 100, 100, 100,
> + 100, 100, 108, 108, 100, 100, 102, 102, 102, 102,
> + 102, 141, 141, 102, 102, 105, 105, 105, 105, 105,
> + 107, 114, 105, 105, 107, 110, 110, 112, 112, 115,
> + 116, 110, 117, 112, 114, 115, 227, 120, 119, 120,
> + 121, 121, 123, 123, 147, 116, 121, 147, 123, 133,
> + 227, 117, 118, 118, 118, 118, 118, 119, 257, 118,
> +
> + 118, 125, 125, 127, 127, 129, 129, 125, 133, 127,
> + 138, 129, 131, 131, 134, 134, 136, 136, 131, 139,
> + 134, 149, 136, 142, 142, 149, 150, 178, 138, 142,
> + 197, 150, 197, 151, 151, 153, 153, 178, 139, 151,
> + 255, 153, 155, 155, 156, 156, 156, 156, 156, 157,
> + 157, 156, 156, 162, 162, 157, 167, 167, 204, 162,
> + 172, 172, 167, 173, 173, 179, 179, 183, 183, 173,
> + 184, 184, 186, 186, 192, 192, 194, 194, 186, 241,
> + 192, 204, 194, 198, 198, 205, 206, 183, 185, 185,
> + 185, 185, 206, 205, 205, 185, 185, 209, 209, 228,
> +
> + 223, 238, 226, 209, 243, 185, 216, 216, 216, 216,
> + 216, 226, 228, 216, 216, 223, 233, 233, 235, 235,
> + 244, 240, 233, 245, 235, 240, 252, 243, 246, 246,
> + 251, 251, 253, 245, 246, 254, 256, 258, 263, 267,
> + 258, 231, 263, 254, 244, 229, 252, 224, 253, 221,
> + 219, 217, 214, 267, 256, 270, 270, 270, 270, 271,
> + 271, 271, 272, 272, 272, 272, 273, 273, 273, 273,
> + 274, 207, 274, 274, 275, 275, 275, 275, 276, 203,
> + 276, 276, 277, 277, 277, 277, 278, 278, 201, 278,
> + 279, 279, 279, 279, 280, 199, 280, 280, 281, 281,
> +
> + 281, 281, 282, 282, 282, 282, 283, 283, 283, 283,
> + 284, 284, 284, 284, 285, 285, 285, 285, 286, 286,
> + 286, 286, 287, 196, 287, 287, 288, 288, 288, 288,
> + 289, 289, 289, 289, 290, 191, 290, 290, 291, 291,
> + 291, 291, 292, 182, 292, 292, 293, 293, 293, 293,
> + 294, 180, 294, 294, 295, 295, 295, 295, 296, 140,
> + 296, 296, 297, 297, 297, 297, 298, 96, 298, 298,
> + 299, 299, 299, 299, 300, 65, 300, 300, 301, 301,
> + 301, 301, 302, 35, 302, 302, 303, 28, 303, 303,
> + 304, 24, 304, 304, 305, 22, 305, 305, 306, 306,
> +
> + 306, 306, 307, 307, 307, 307, 308, 17, 308, 308,
> + 309, 309, 309, 309, 310, 310, 310, 310, 311, 6,
> + 311, 311, 312, 312, 312, 312, 313, 313, 313, 313,
> + 314, 314, 314, 314, 315, 315, 315, 315, 316, 316,
> + 316, 316, 317, 317, 317, 317, 318, 5, 318, 318,
> + 319, 319, 319, 319, 320, 320, 320, 320, 321, 4,
> + 321, 321, 322, 322, 322, 322, 323, 323, 323, 323,
> + 324, 324, 324, 324, 325, 3, 325, 325, 326, 0,
> + 326, 326, 327, 327, 327, 327, 328, 328, 328, 328,
> + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
> +
> + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
> + 269, 269, 269, 269, 269, 269, 269, 269, 269, 269,
> + 269, 269, 269, 269
> } ;
>
> #define YY_TRAILING_MASK 0x2000
> @@ -890,7 +900,7 @@ static int vdev_and_devtype(DiskParseContext *dpc, char *str) {
> #define DPC ((DiskParseContext*)yyextra)
>
>
> -#line 894 "libxlu_disk_l.c"
> +#line 904 "libxlu_disk_l.c"
>
> #define INITIAL 0
> #define LEXERR 1
> @@ -1131,7 +1141,7 @@ YY_DECL
>
> /*----- the scanner rules which do the parsing -----*/
>
> -#line 1135 "libxlu_disk_l.c"
> +#line 1145 "libxlu_disk_l.c"
>
> if ( !yyg->yy_init )
> {
> @@ -1195,14 +1205,14 @@ yy_match:
> while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
> {
> yy_current_state = (int) yy_def[yy_current_state];
> - if ( yy_current_state >= 256 )
> + if ( yy_current_state >= 270 )
> yy_c = yy_meta[(unsigned int) yy_c];
> }
> yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
> *yyg->yy_state_ptr++ = yy_current_state;
> ++yy_cp;
> }
> - while ( yy_current_state != 255 );
> + while ( yy_current_state != 269 );
>
> yy_find_action:
> yy_current_state = *--yyg->yy_state_ptr;
> @@ -1313,34 +1323,39 @@ YY_RULE_SETUP
> #line 175 "libxlu_disk_l.l"
> { STRIP(','); SAVESTRING("script", script, FROMEQUALS); }
> YY_BREAK
> -/* the target magic parameter, eats the rest of the string */
> case 12:
> YY_RULE_SETUP
> -#line 179 "libxlu_disk_l.l"
> +#line 176 "libxlu_disk_l.l"
> +{ DPC->disk->direct_io_safe = 1; }
> + YY_BREAK
> +/* the target magic parameter, eats the rest of the string */
> +case 13:
> +YY_RULE_SETUP
> +#line 180 "libxlu_disk_l.l"
> { STRIP(','); SAVESTRING("target", pdev_path, FROMEQUALS); }
> YY_BREAK
> /* unknown parameters */
> -case 13:
> -/* rule 13 can match eol */
> +case 14:
> +/* rule 14 can match eol */
> YY_RULE_SETUP
> -#line 183 "libxlu_disk_l.l"
> +#line 184 "libxlu_disk_l.l"
> { xlu__disk_err(DPC,yytext,"unknown parameter"); }
> YY_BREAK
> /* deprecated prefixes */
> /* the "/.*" in these patterns ensures that they count as if they
> * matched the whole string, so these patterns take precedence */
> -case 14:
> +case 15:
> YY_RULE_SETUP
> -#line 190 "libxlu_disk_l.l"
> +#line 191 "libxlu_disk_l.l"
> {
> STRIP(':');
> DPC->had_depr_prefix=1; DEPRECATE("use `[format=]...,'");
> setformat(DPC, yytext);
> }
> YY_BREAK
> -case 15:
> +case 16:
> YY_RULE_SETUP
> -#line 196 "libxlu_disk_l.l"
> +#line 197 "libxlu_disk_l.l"
> {
> char *newscript;
> STRIP(':');
> @@ -1354,30 +1369,22 @@ YY_RULE_SETUP
> free(newscript);
> }
> YY_BREAK
> -case 16:
> +case 17:
> *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
> yyg->yy_c_buf_p = yy_cp = yy_bp + 8;
> YY_DO_BEFORE_ACTION; /* set up yytext again */
> YY_RULE_SETUP
> -#line 209 "libxlu_disk_l.l"
> -{ DPC->had_depr_prefix=1; DEPRECATE(0); }
> - YY_BREAK
> -case 17:
> -YY_RULE_SETUP
> #line 210 "libxlu_disk_l.l"
> { DPC->had_depr_prefix=1; DEPRECATE(0); }
> YY_BREAK
> case 18:
> -*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
> -yyg->yy_c_buf_p = yy_cp = yy_bp + 4;
> -YY_DO_BEFORE_ACTION; /* set up yytext again */
> YY_RULE_SETUP
> #line 211 "libxlu_disk_l.l"
> { DPC->had_depr_prefix=1; DEPRECATE(0); }
> YY_BREAK
> case 19:
> *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
> -yyg->yy_c_buf_p = yy_cp = yy_bp + 6;
> +yyg->yy_c_buf_p = yy_cp = yy_bp + 4;
> YY_DO_BEFORE_ACTION; /* set up yytext again */
> YY_RULE_SETUP
> #line 212 "libxlu_disk_l.l"
> @@ -1385,7 +1392,7 @@ YY_RULE_SETUP
> YY_BREAK
> case 20:
> *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
> -yyg->yy_c_buf_p = yy_cp = yy_bp + 5;
> +yyg->yy_c_buf_p = yy_cp = yy_bp + 6;
> YY_DO_BEFORE_ACTION; /* set up yytext again */
> YY_RULE_SETUP
> #line 213 "libxlu_disk_l.l"
> @@ -1393,26 +1400,34 @@ YY_RULE_SETUP
> YY_BREAK
> case 21:
> *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
> -yyg->yy_c_buf_p = yy_cp = yy_bp + 4;
> +yyg->yy_c_buf_p = yy_cp = yy_bp + 5;
> YY_DO_BEFORE_ACTION; /* set up yytext again */
> YY_RULE_SETUP
> #line 214 "libxlu_disk_l.l"
> { DPC->had_depr_prefix=1; DEPRECATE(0); }
> YY_BREAK
> case 22:
> -/* rule 22 can match eol */
> +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
> +yyg->yy_c_buf_p = yy_cp = yy_bp + 4;
> +YY_DO_BEFORE_ACTION; /* set up yytext again */
> +YY_RULE_SETUP
> +#line 215 "libxlu_disk_l.l"
> +{ DPC->had_depr_prefix=1; DEPRECATE(0); }
> + YY_BREAK
> +case 23:
> +/* rule 23 can match eol */
> YY_RULE_SETUP
> -#line 216 "libxlu_disk_l.l"
> +#line 217 "libxlu_disk_l.l"
> {
> xlu__disk_err(DPC,yytext,"unknown deprecated disk prefix");
> return 0;
> }
> YY_BREAK
> /* positional parameters */
> -case 23:
> -/* rule 23 can match eol */
> +case 24:
> +/* rule 24 can match eol */
> YY_RULE_SETUP
> -#line 223 "libxlu_disk_l.l"
> +#line 224 "libxlu_disk_l.l"
> {
> STRIP(',');
>
> @@ -1439,27 +1454,27 @@ YY_RULE_SETUP
> }
> }
> YY_BREAK
> -case 24:
> +case 25:
> YY_RULE_SETUP
> -#line 249 "libxlu_disk_l.l"
> +#line 250 "libxlu_disk_l.l"
> {
> BEGIN(LEXERR);
> yymore();
> }
> YY_BREAK
> -case 25:
> +case 26:
> YY_RULE_SETUP
> -#line 253 "libxlu_disk_l.l"
> +#line 254 "libxlu_disk_l.l"
> {
> xlu__disk_err(DPC,yytext,"bad disk syntax"); return 0;
> }
> YY_BREAK
> -case 26:
> +case 27:
> YY_RULE_SETUP
> -#line 256 "libxlu_disk_l.l"
> +#line 257 "libxlu_disk_l.l"
> YY_FATAL_ERROR( "flex scanner jammed" );
> YY_BREAK
> -#line 1463 "libxlu_disk_l.c"
> +#line 1478 "libxlu_disk_l.c"
> case YY_STATE_EOF(INITIAL):
> case YY_STATE_EOF(LEXERR):
> yyterminate();
> @@ -1723,7 +1738,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
> while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
> {
> yy_current_state = (int) yy_def[yy_current_state];
> - if ( yy_current_state >= 256 )
> + if ( yy_current_state >= 270 )
> yy_c = yy_meta[(unsigned int) yy_c];
> }
> yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
> @@ -1747,11 +1762,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
> while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
> {
> yy_current_state = (int) yy_def[yy_current_state];
> - if ( yy_current_state >= 256 )
> + if ( yy_current_state >= 270 )
> yy_c = yy_meta[(unsigned int) yy_c];
> }
> yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
> - yy_is_jam = (yy_current_state == 255);
> + yy_is_jam = (yy_current_state == 269);
> if ( ! yy_is_jam )
> *yyg->yy_state_ptr++ = yy_current_state;
>
> @@ -2551,4 +2566,4 @@ void xlu__disk_yyfree (void * ptr , yyscan_t yyscanner)
>
> #define YYTABLES_NAME "yytables"
>
> -#line 256 "libxlu_disk_l.l"
> +#line 257 "libxlu_disk_l.l"
> diff --git a/tools/libxl/libxlu_disk_l.h b/tools/libxl/libxlu_disk_l.h
> index 0176249..59ce7cf 100644
> --- a/tools/libxl/libxlu_disk_l.h
> +++ b/tools/libxl/libxlu_disk_l.h
> @@ -344,7 +344,7 @@ extern int xlu__disk_yylex (yyscan_t yyscanner);
> #undef YY_DECL
> #endif
>
> -#line 256 "libxlu_disk_l.l"
> +#line 257 "libxlu_disk_l.l"
>
> #line 350 "libxlu_disk_l.h"
> #undef xlu__disk_yyIN_HEADER
> diff --git a/tools/libxl/libxlu_disk_l.l b/tools/libxl/libxlu_disk_l.l
> index 7c4e7f1..ba8577c 100644
> --- a/tools/libxl/libxlu_disk_l.l
> +++ b/tools/libxl/libxlu_disk_l.l
> @@ -173,6 +173,7 @@ backendtype=[^,]*,? { STRIP(','); setbackendtype(DPC,FROMEQUALS); }
>
> vdev=[^,]*,? { STRIP(','); SAVESTRING("vdev", vdev, FROMEQUALS); }
> script=[^,]*,? { STRIP(','); SAVESTRING("script", script, FROMEQUALS); }
> +direct-io-safe,? { DPC->disk->direct_io_safe = 1; }
>
> /* the target magic parameter, eats the rest of the string */
>
> diff --git a/xen/include/public/io/blkif.h b/xen/include/public/io/blkif.h
> index b9b9d98..2dbb12f 100644
> --- a/xen/include/public/io/blkif.h
> +++ b/xen/include/public/io/blkif.h
> @@ -97,6 +97,28 @@
> *
> * The type of the backing device/object.
> *
> + *
> + * direct-io-safe
> + * Values: 0/1 (boolean)
> + * Default Value: 0
> + *
> + * The underlying storage is not affected by the direct IO memory
> + * lifetime bug. See:
> + * http://lists.xen.org/archives/html/xen-devel/2012-12/msg01154.html
> + *
> + * Therefore this option gives the backend permission to use
> + * O_DIRECT, notwithstanding that bug.
> + *
> + * That is, if this option is enabled, use of O_DIRECT is safe,
> + * in circumstances where we would normally have avoided it as a
> + * workaround for that bug. This option is not relevant for all
> + * backends, and even not necessarily supported for those for
> + * which it is relevant. A backend which knows that it is not
> + * affected by the bug can ignore this option.
> + *
> + * This option doesn't require a backend to use O_DIRECT, so it
> + * should not be used to try to control the caching behaviour.
> + *
> *--------------------------------- Features ---------------------------------
> *
> * feature-barrier
> --
> 1.7.10.4
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround
2013-11-26 17:46 ` Konrad Rzeszutek Wilk
@ 2013-11-26 17:56 ` George Dunlap
2013-11-26 18:18 ` Konrad Rzeszutek Wilk
0 siblings, 1 reply; 13+ messages in thread
From: George Dunlap @ 2013-11-26 17:56 UTC (permalink / raw)
To: Konrad Rzeszutek Wilk, Ian Jackson
Cc: xen-devel, Ian Campbell, Stefano Stabellini
On 11/26/2013 05:46 PM, Konrad Rzeszutek Wilk wrote:
> On Tue, Nov 26, 2013 at 11:42:31AM +0000, Ian Jackson wrote:
>> From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
>>
>> Document and implement a new option that permits disk backends which
>> would otherwise have to avoid O_DIRECT (because of the network memory
>> lifetime bug) to use it anyway. This is:
>
> I thought this was fixed in the Linux kernel with:
>
> commit cd9151e26d31048b2b5e00fd02e110e07d2200c9
> Author: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> Date: Sun Aug 4 15:39:40 2013 +0100
>
> xen/balloon: set a mapping for ballooned out pages
>
> Currently ballooned out pages are mapped to 0 and have INVALID_P2M_ENTRY
> in the p2m. These ballooned out pages are used to map foreign grants
> by gntdev and blkback (see alloc_xenballooned_pages).
>
> Allocate a page per cpu and map all the ballooned out pages to the
> corresponding mfn. Set the p2m accordingly. This way reading from a
> ballooned out page won't cause a kernel crash (see
> http://lists.xen.org/archives/html/xen-devel/2012-12/msg01154.html).
>
>
> ?
Not everyone builds her own kernel from the latest release; until we can
be relatively sure that this fix has hit distros (including older
LTS-style ones), we have to deal with the fact that the O_DIRECT bug may
be present. The purpose of this flag is to enable you to turn it on
when you know it's safe -- for instance, if you're running a kernel with
this changeset.
It is worth asking the question now though: Given that this has been
checked in, would it make sense to switch the polarity of this --
default to O_DIRECT on and have a flag to allow people to switch it off?
If not now, maybe for 4.5? And in that case, maybe we should change
the argument to be tristate: default, true, or false (i.e., true means I
know it's safe, false means I know it's unsafe, default means I haven't
specified either way)?
-George
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround
2013-11-26 17:56 ` George Dunlap
@ 2013-11-26 18:18 ` Konrad Rzeszutek Wilk
2013-11-28 11:38 ` [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround [and 1 more messages] Ian Jackson
0 siblings, 1 reply; 13+ messages in thread
From: Konrad Rzeszutek Wilk @ 2013-11-26 18:18 UTC (permalink / raw)
To: George Dunlap, alex
Cc: xen-devel, Ian Jackson, Ian Campbell, Stefano Stabellini
On Tue, Nov 26, 2013 at 05:56:54PM +0000, George Dunlap wrote:
> On 11/26/2013 05:46 PM, Konrad Rzeszutek Wilk wrote:
> >On Tue, Nov 26, 2013 at 11:42:31AM +0000, Ian Jackson wrote:
> >>From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> >>
> >>Document and implement a new option that permits disk backends which
> >>would otherwise have to avoid O_DIRECT (because of the network memory
> >>lifetime bug) to use it anyway. This is:
> >
> >I thought this was fixed in the Linux kernel with:
> >
> >commit cd9151e26d31048b2b5e00fd02e110e07d2200c9
> >Author: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> >Date: Sun Aug 4 15:39:40 2013 +0100
> >
> > xen/balloon: set a mapping for ballooned out pages
> >
> > Currently ballooned out pages are mapped to 0 and have INVALID_P2M_ENTRY
> > in the p2m. These ballooned out pages are used to map foreign grants
> > by gntdev and blkback (see alloc_xenballooned_pages).
> >
> > Allocate a page per cpu and map all the ballooned out pages to the
> > corresponding mfn. Set the p2m accordingly. This way reading from a
> > ballooned out page won't cause a kernel crash (see
> > http://lists.xen.org/archives/html/xen-devel/2012-12/msg01154.html).
> >
> >
> >?
>
> Not everyone builds her own kernel from the latest release; until we
> can be relatively sure that this fix has hit distros (including
> older LTS-style ones), we have to deal with the fact that the
> O_DIRECT bug may be present. The purpose of this flag is to enable
> you to turn it on when you know it's safe -- for instance, if you're
> running a kernel with this changeset.
Of course. I think it might be worth referecing this commit in this
patchset.
>
> It is worth asking the question now though: Given that this has been
> checked in, would it make sense to switch the polarity of this --
> default to O_DIRECT on and have a flag to allow people to switch it
> off? If not now, maybe for 4.5? And in that case, maybe we should
> change the argument to be tristate: default, true, or false (i.e.,
> true means I know it's safe, false means I know it's unsafe, default
> means I haven't specified either way)?
Perhaps the bug reporter (CC-ed here) could chime in with which
he/she feels is better?
>
> -George
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround [and 1 more messages]
2013-11-26 18:18 ` Konrad Rzeszutek Wilk
@ 2013-11-28 11:38 ` Ian Jackson
2013-11-28 11:46 ` George Dunlap
2013-11-28 17:32 ` Ian Jackson
0 siblings, 2 replies; 13+ messages in thread
From: Ian Jackson @ 2013-11-28 11:38 UTC (permalink / raw)
To: Konrad Rzeszutek Wilk, George Dunlap, xen-devel, Ian Campbell,
Stefano Stabellini, alex
George Dunlap writes ("Re: [Xen-devel] [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround"):
> Not everyone builds her own kernel from the latest release; until we can
> be relatively sure that this fix has hit distros (including older
> LTS-style ones), we have to deal with the fact that the O_DIRECT bug may
> be present. The purpose of this flag is to enable you to turn it on
> when you know it's safe -- for instance, if you're running a kernel with
> this changeset.
>
> It is worth asking the question now though: Given that this has been
> checked in, would it make sense to switch the polarity of this --
> default to O_DIRECT on and have a flag to allow people to switch it off?
Surely if the kernel has been fixed, libxl should detect this and turn
off the workaround automatically. The kernel should expose something
that lets us tell. (If nothing else, we can use the version number,
although that's really not ideal.)
I don't think it's a good idea to change the default, at least for
now.
But maybe the tristate is a reasonable suggestion.
Ian.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround [and 1 more messages]
2013-11-28 11:38 ` [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround [and 1 more messages] Ian Jackson
@ 2013-11-28 11:46 ` George Dunlap
2013-11-28 17:32 ` Ian Jackson
1 sibling, 0 replies; 13+ messages in thread
From: George Dunlap @ 2013-11-28 11:46 UTC (permalink / raw)
To: Ian Jackson, Konrad Rzeszutek Wilk, xen-devel, Ian Campbell,
Stefano Stabellini, alex
On 11/28/2013 11:38 AM, Ian Jackson wrote:
> George Dunlap writes ("Re: [Xen-devel] [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround"):
>> Not everyone builds her own kernel from the latest release; until we can
>> be relatively sure that this fix has hit distros (including older
>> LTS-style ones), we have to deal with the fact that the O_DIRECT bug may
>> be present. The purpose of this flag is to enable you to turn it on
>> when you know it's safe -- for instance, if you're running a kernel with
>> this changeset.
>>
>> It is worth asking the question now though: Given that this has been
>> checked in, would it make sense to switch the polarity of this --
>> default to O_DIRECT on and have a flag to allow people to switch it off?
> Surely if the kernel has been fixed, libxl should detect this and turn
> off the workaround automatically. The kernel should expose something
> that lets us tell. (If nothing else, we can use the version number,
> although that's really not ideal.)
Given how many bugs there are in the Linux kernel, it would seem rather
unweildy to have a robust way of specifying if any individual one had
been fixed for any given bug...
-George
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround [and 1 more messages]
2013-11-28 11:38 ` [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround [and 1 more messages] Ian Jackson
2013-11-28 11:46 ` George Dunlap
@ 2013-11-28 17:32 ` Ian Jackson
2014-04-02 12:26 ` Felipe Franciosi
1 sibling, 1 reply; 13+ messages in thread
From: Ian Jackson @ 2013-11-28 17:32 UTC (permalink / raw)
To: Konrad Rzeszutek Wilk, George Dunlap, xen-devel, Ian Campbell,
Stefano Stabellini, alex
Ian Jackson writes ("Re: [Xen-devel] [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround [and 1 more messages]"):
> But maybe the tristate is a reasonable suggestion.
I remember why we didn't do this. We could implement
no-direct-io-safe
or something, but it wouldn't be always effective. It would only
work for the bits of the system that we can prevent from doing
O_DIRECT.
Ian.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround [and 1 more messages]
2013-11-28 17:32 ` Ian Jackson
@ 2014-04-02 12:26 ` Felipe Franciosi
2014-04-03 10:12 ` Stefano Stabellini
0 siblings, 1 reply; 13+ messages in thread
From: Felipe Franciosi @ 2014-04-02 12:26 UTC (permalink / raw)
To: Ian Jackson, Konrad Rzeszutek Wilk, George Dunlap,
xen-devel@lists.xenproject.org, Ian Campbell, Stefano Stabellini,
alex@alex.org.uk
A little bump on this:
Yesterday I ran into a situation where I couldn't possibly get qemu to use O_DIRECT when starting a VM through xl. Using O_DIRECT is obviously desirable when comparing storage solutions (from disk configurations to virtualisation data paths) as it allows control over the workload that is being sent to disk (and other cases).
I can see this thread got abandoned when you reached the conclusion that you couldn't have a flag/option that would ensure O_DIRECT is used (or not) in view of some backends not supporting this configuration.
But does it really have to be a flag that ensures O_DIRECT is used?
I imagine we can have a "hint" flag instead. Something that hints the backend to use O_DIRECT. If configurable, the backend will follow this setting. If not, it will ignore it. For example, blkback (as it is) cannot cache anything, so it always submits requests straight to the block layer as they come. On the other hand, tapdisk could use O_DIRECT or not (it currently always use it). Qemu already supports it (through the xenstore key "direct-io-safe" in the Xen case).
Thoughts on this?
Cheers,
Felipe
> -----Original Message-----
> From: xen-devel-bounces@lists.xen.org [mailto:xen-devel-
> bounces@lists.xen.org] On Behalf Of Ian Jackson
> Sent: 28 November 2013 17:33
> To: Konrad Rzeszutek Wilk; George Dunlap; xen-devel@lists.xenproject.org;
> Ian Campbell; Stefano Stabellini; alex@alex.org.uk
> Subject: Re: [Xen-devel] [PATCH] libxl: introduce an option for disabling the
> non-O_DIRECT workaround [and 1 more messages]
>
> Ian Jackson writes ("Re: [Xen-devel] [PATCH] libxl: introduce an option for
> disabling the non-O_DIRECT workaround [and 1 more messages]"):
> > But maybe the tristate is a reasonable suggestion.
>
> I remember why we didn't do this. We could implement
> no-direct-io-safe
> or something, but it wouldn't be always effective. It would only work for the
> bits of the system that we can prevent from doing O_DIRECT.
>
> Ian.
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround [and 1 more messages]
2014-04-02 12:26 ` Felipe Franciosi
@ 2014-04-03 10:12 ` Stefano Stabellini
2014-04-03 10:51 ` Felipe Franciosi
0 siblings, 1 reply; 13+ messages in thread
From: Stefano Stabellini @ 2014-04-03 10:12 UTC (permalink / raw)
To: Felipe Franciosi
Cc: Ian Campbell, George Dunlap, Stefano Stabellini, alex@alex.org.uk,
xen-devel@lists.xenproject.org, Ian Jackson
Ian Jackson,
reading the thread again, it looks like the original patch is correct as
it is. Few minor modifications were suggested but they are not really
required.
I think we should check it in as is now. Maybe even consider it for a
backport.
Are you going to take care of it?
Thanks,
Stefano
On Wed, 2 Apr 2014, Felipe Franciosi wrote:
> A little bump on this:
>
> Yesterday I ran into a situation where I couldn't possibly get qemu to use O_DIRECT when starting a VM through xl. Using O_DIRECT is obviously desirable when comparing storage solutions (from disk configurations to virtualisation data paths) as it allows control over the workload that is being sent to disk (and other cases).
>
> I can see this thread got abandoned when you reached the conclusion that you couldn't have a flag/option that would ensure O_DIRECT is used (or not) in view of some backends not supporting this configuration.
>
> But does it really have to be a flag that ensures O_DIRECT is used?
>
> I imagine we can have a "hint" flag instead. Something that hints the backend to use O_DIRECT. If configurable, the backend will follow this setting. If not, it will ignore it. For example, blkback (as it is) cannot cache anything, so it always submits requests straight to the block layer as they come. On the other hand, tapdisk could use O_DIRECT or not (it currently always use it). Qemu already supports it (through the xenstore key "direct-io-safe" in the Xen case).
>
> Thoughts on this?
>
> Cheers,
> Felipe
>
> > -----Original Message-----
> > From: xen-devel-bounces@lists.xen.org [mailto:xen-devel-
> > bounces@lists.xen.org] On Behalf Of Ian Jackson
> > Sent: 28 November 2013 17:33
> > To: Konrad Rzeszutek Wilk; George Dunlap; xen-devel@lists.xenproject.org;
> > Ian Campbell; Stefano Stabellini; alex@alex.org.uk
> > Subject: Re: [Xen-devel] [PATCH] libxl: introduce an option for disabling the
> > non-O_DIRECT workaround [and 1 more messages]
> >
> > Ian Jackson writes ("Re: [Xen-devel] [PATCH] libxl: introduce an option for
> > disabling the non-O_DIRECT workaround [and 1 more messages]"):
> > > But maybe the tristate is a reasonable suggestion.
> >
> > I remember why we didn't do this. We could implement
> > no-direct-io-safe
> > or something, but it wouldn't be always effective. It would only work for the
> > bits of the system that we can prevent from doing O_DIRECT.
> >
> > Ian.
> >
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@lists.xen.org
> > http://lists.xen.org/xen-devel
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround [and 1 more messages]
2014-04-03 10:12 ` Stefano Stabellini
@ 2014-04-03 10:51 ` Felipe Franciosi
2014-04-03 11:41 ` Ian Campbell
0 siblings, 1 reply; 13+ messages in thread
From: Felipe Franciosi @ 2014-04-03 10:51 UTC (permalink / raw)
To: Ian Jackson
Cc: Ian Campbell, George Dunlap, Stefano Stabellini, alex@alex.org.uk,
xen-devel@lists.xenproject.org
I would personally prefer to call the flag something else. But if this would delay checking in the patch, then never mind.
Using (or not using) O_DIRECT is not only about safety. So I'd recommend it being called "directio" instead of "direct-io-safe".
Cheers,
Felipe
> -----Original Message-----
> From: Stefano Stabellini [mailto:stefano.stabellini@eu.citrix.com]
> Sent: 03 April 2014 11:12
> To: Felipe Franciosi
> Cc: Ian Jackson; Konrad Rzeszutek Wilk; George Dunlap; xen-
> devel@lists.xenproject.org; Ian Campbell; Stefano Stabellini;
> alex@alex.org.uk
> Subject: RE: [Xen-devel] [PATCH] libxl: introduce an option for disabling the
> non-O_DIRECT workaround [and 1 more messages]
>
> Ian Jackson,
> reading the thread again, it looks like the original patch is correct as it is. Few
> minor modifications were suggested but they are not really required.
>
> I think we should check it in as is now. Maybe even consider it for a backport.
>
> Are you going to take care of it?
>
> Thanks,
>
> Stefano
>
> On Wed, 2 Apr 2014, Felipe Franciosi wrote:
> > A little bump on this:
> >
> > Yesterday I ran into a situation where I couldn't possibly get qemu to use
> O_DIRECT when starting a VM through xl. Using O_DIRECT is obviously
> desirable when comparing storage solutions (from disk configurations to
> virtualisation data paths) as it allows control over the workload that is being
> sent to disk (and other cases).
> >
> > I can see this thread got abandoned when you reached the conclusion that
> you couldn't have a flag/option that would ensure O_DIRECT is used (or not)
> in view of some backends not supporting this configuration.
> >
> > But does it really have to be a flag that ensures O_DIRECT is used?
> >
> > I imagine we can have a "hint" flag instead. Something that hints the
> backend to use O_DIRECT. If configurable, the backend will follow this setting.
> If not, it will ignore it. For example, blkback (as it is) cannot cache anything, so
> it always submits requests straight to the block layer as they come. On the
> other hand, tapdisk could use O_DIRECT or not (it currently always use it).
> Qemu already supports it (through the xenstore key "direct-io-safe" in the
> Xen case).
> >
> > Thoughts on this?
> >
> > Cheers,
> > Felipe
> >
> > > -----Original Message-----
> > > From: xen-devel-bounces@lists.xen.org [mailto:xen-devel-
> > > bounces@lists.xen.org] On Behalf Of Ian Jackson
> > > Sent: 28 November 2013 17:33
> > > To: Konrad Rzeszutek Wilk; George Dunlap;
> > > xen-devel@lists.xenproject.org; Ian Campbell; Stefano Stabellini;
> > > alex@alex.org.uk
> > > Subject: Re: [Xen-devel] [PATCH] libxl: introduce an option for
> > > disabling the non-O_DIRECT workaround [and 1 more messages]
> > >
> > > Ian Jackson writes ("Re: [Xen-devel] [PATCH] libxl: introduce an
> > > option for disabling the non-O_DIRECT workaround [and 1 more
> messages]"):
> > > > But maybe the tristate is a reasonable suggestion.
> > >
> > > I remember why we didn't do this. We could implement
> > > no-direct-io-safe
> > > or something, but it wouldn't be always effective. It would only
> > > work for the bits of the system that we can prevent from doing O_DIRECT.
> > >
> > > Ian.
> > >
> > > _______________________________________________
> > > Xen-devel mailing list
> > > Xen-devel@lists.xen.org
> > > http://lists.xen.org/xen-devel
> >
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround [and 1 more messages]
2014-04-03 10:51 ` Felipe Franciosi
@ 2014-04-03 11:41 ` Ian Campbell
2014-04-03 12:53 ` Stefano Stabellini
0 siblings, 1 reply; 13+ messages in thread
From: Ian Campbell @ 2014-04-03 11:41 UTC (permalink / raw)
To: Felipe Franciosi
Cc: George Dunlap, Stefano Stabellini, alex@alex.org.uk,
xen-devel@lists.xenproject.org, Ian Jackson
(can you not top post please)
On Thu, 2014-04-03 at 11:51 +0100, Felipe Franciosi wrote:
> I would personally prefer to call the flag something else. But if this
> would delay checking in the patch, then never mind.
I think it most likely needs rebasing and reposting anyway, so we may as
well get this right at the same time.
> Using (or not using) O_DIRECT is not only about safety. So I'd
> recommend it being called "directio" instead of "direct-io-safe".
The use of "direct-io-safe" is already deployed and understood by
released qemus so I'm not sure we can simply change it (although we
could add a more descriptive synonym I suppose).
For the libxl layer we might want to include some sort of indication
that this is best effort in the field name e.g. "request_directio",
"prefer_directio" etc.
Thoughts?
Ian.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround [and 1 more messages]
2014-04-03 11:41 ` Ian Campbell
@ 2014-04-03 12:53 ` Stefano Stabellini
0 siblings, 0 replies; 13+ messages in thread
From: Stefano Stabellini @ 2014-04-03 12:53 UTC (permalink / raw)
To: Ian Campbell
Cc: Felipe Franciosi, George Dunlap, Stefano Stabellini,
alex@alex.org.uk, Ian Jackson, xen-devel@lists.xenproject.org
On Thu, 3 Apr 2014, Ian Campbell wrote:
> (can you not top post please)
>
> On Thu, 2014-04-03 at 11:51 +0100, Felipe Franciosi wrote:
> > I would personally prefer to call the flag something else. But if this
> > would delay checking in the patch, then never mind.
>
> I think it most likely needs rebasing and reposting anyway, so we may as
> well get this right at the same time.
>
> > Using (or not using) O_DIRECT is not only about safety. So I'd
> > recommend it being called "directio" instead of "direct-io-safe".
>
> The use of "direct-io-safe" is already deployed and understood by
> released qemus so I'm not sure we can simply change it (although we
> could add a more descriptive synonym I suppose).
Right. The important part is not to change the xenstore interface, that
currently already uses direct-io-safe.
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2014-04-03 12:54 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-26 11:42 [PATCH RESEND 0/1] libxl: introduce an option for disabling the non-O_DIRECT Ian Jackson
2013-11-26 11:42 ` [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround Ian Jackson
2013-11-26 17:46 ` Konrad Rzeszutek Wilk
2013-11-26 17:56 ` George Dunlap
2013-11-26 18:18 ` Konrad Rzeszutek Wilk
2013-11-28 11:38 ` [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround [and 1 more messages] Ian Jackson
2013-11-28 11:46 ` George Dunlap
2013-11-28 17:32 ` Ian Jackson
2014-04-02 12:26 ` Felipe Franciosi
2014-04-03 10:12 ` Stefano Stabellini
2014-04-03 10:51 ` Felipe Franciosi
2014-04-03 11:41 ` Ian Campbell
2014-04-03 12:53 ` Stefano Stabellini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).