From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: George Dunlap <george.dunlap@eu.citrix.com>,
xen-devel@lists.xenproject.org,
Ian Campbell <Ian.Campbell@citrix.com>,
Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Subject: Re: [PATCH] libxl: introduce an option for disabling the non-O_DIRECT workaround
Date: Tue, 26 Nov 2013 12:46:17 -0500 [thread overview]
Message-ID: <20131126174617.GM2959@phenom.dumpdata.com> (raw)
In-Reply-To: <1385466151-21481-2-git-send-email-ian.jackson@eu.citrix.com>
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
next prev parent reply other threads:[~2013-11-26 17:47 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
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 [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131126174617.GM2959@phenom.dumpdata.com \
--to=konrad.wilk@oracle.com \
--cc=Ian.Campbell@citrix.com \
--cc=george.dunlap@eu.citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=stefano.stabellini@eu.citrix.com \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is 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).