From: Laszlo Ersek <lersek@redhat.com>
To: lcapitulino@redhat.com, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH v2 0/8] OptsVisitor: support / flatten integer ranges for repeating options
Date: Tue, 20 Aug 2013 00:35:32 +0200 [thread overview]
Message-ID: <1376951740-23559-1-git-send-email-lersek@redhat.com> (raw)
v1->v2:
- rebased to current master (patch #8 only applied with "git am -3"),
- now patch #7 adds "test-bitops" too to .gitignore,
- patch #8 updates "qapi-schema-test.out" to keep it in synch with the
test schema changes warranted by the opts-visitor unit tests.
rfc->v1:
- addressed Paolo's comments for patches 1 and 2,
- patches 7 and 8 are new (unit tests),
- updated the cover letter to take native lists into account, plus
cleaned it up.
Consider the following QAPI schema fragment, for the purpose of command
line parsing with OptsVisitor:
{ 'union': 'NumaOptions',
'data': {
'node': 'NumaNodeOptions',
'mem' : 'NumaMemOptions' }}
{ 'type': 'NumaNodeOptions',
'data': {
'*nodeid': 'int',
'*cpus' : ['uint16'] }}
{ 'type': 'NumaMemOptions',
'data': {
'*nodeid': 'int',
'*size' : 'size' }}
(Commit eb7ee2cb ("qapi: introduce OptsVisitor") had originally
documented OptsVisitor's general schema requirements for parsing
repeated options such that the list element type had to be a struct with
one mandatory scalar field. Accordingly, the RFC version of this series
required for interval flattening that this underlying scalar type be an
integer type. However, since commit a678e26c ("qapi: pad GenericList
value fields to 64 bits") we've had reliable native lists; OptsVisitor
turns out to support them automatically.)
OptsVisitor already accepts the following command line with the above
schema:
-numa node,nodeid=3,cpus=0,cpus=1,cpus=2,cpus=6,cpus=7,cpus=8
Paolo suggested in
<http://thread.gmane.org/gmane.comp.emulators.qemu/222589/focus=222732>
that OptsVisitor should allow the following shortcut:
-numa node,nodeid=3,cpus=0-2,cpus=6-8
and that the code processing the "cpus" list should encounter all six
elements (0, 1, 2, 6, 7, 8) individually.
The series implements this feature. Both signed and unsigned values and
intervals are supported in general:
* 0 (zero)
* 1-5 (one to five)
* 4-4 (four to four, range with one element)
* -2 (minus two)
* -5-8 (minus five to plus eight)
* -9--6 (minus nine to minus six)
The restrictions imposed by the native list element's signedness and
size (in the above schema example, 'uint16') are enforced element-wise
as usual. That is, for 'uint16', the command line option
-numa node,nodeid=3,cpus=65534-65537
is equivalent to
-numa node,nodeid=3,cpus=65534,cpus=65535,cpus=65536,cpus=65537
and visit_type_uint16() [qapi/qapi-visit-core.c] will catch the first
element (= 65536) that has been parsed by opts_type_int() but cannot be
represented as 'uint16'.
Laszlo Ersek (8):
OptsVisitor: introduce basic list modes
OptsVisitor: introduce list modes for interval flattening
OptsVisitor: opts_type_int(): recognize intervals when LM_IN_PROGRESS
OptsVisitor: rebase opts_type_uint64() to parse_uint_full()
OptsVisitor: opts_type_uint64(): recognize intervals when
LM_IN_PROGRESS
OptsVisitor: don't try to flatten overlong integer ranges
add "test-int128" and "test-bitops" to .gitignore
OptsVisitor: introduce unit tests, with test cases for range
flattening
tests/Makefile | 6 +-
tests/qapi-schema/qapi-schema-test.json | 15 ++
include/qapi/opts-visitor.h | 6 +
qapi/opts-visitor.c | 184 +++++++++++++++++----
tests/test-opts-visitor.c | 275 +++++++++++++++++++++++++++++++
.gitignore | 3 +
tests/qapi-schema/qapi-schema-test.out | 6 +-
7 files changed, 461 insertions(+), 34 deletions(-)
create mode 100644 tests/test-opts-visitor.c
next reply other threads:[~2013-08-19 22:33 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-19 22:35 Laszlo Ersek [this message]
2013-08-19 22:35 ` [Qemu-devel] [PATCH v2 1/8] OptsVisitor: introduce basic list modes Laszlo Ersek
2013-08-19 22:35 ` [Qemu-devel] [PATCH v2 2/8] OptsVisitor: introduce list modes for interval flattening Laszlo Ersek
2013-08-19 22:35 ` [Qemu-devel] [PATCH v2 3/8] OptsVisitor: opts_type_int(): recognize intervals when LM_IN_PROGRESS Laszlo Ersek
2013-08-19 22:35 ` [Qemu-devel] [PATCH v2 4/8] OptsVisitor: rebase opts_type_uint64() to parse_uint_full() Laszlo Ersek
2013-08-19 22:35 ` [Qemu-devel] [PATCH v2 5/8] OptsVisitor: opts_type_uint64(): recognize intervals when LM_IN_PROGRESS Laszlo Ersek
2013-08-19 22:35 ` [Qemu-devel] [PATCH v2 6/8] OptsVisitor: don't try to flatten overlong integer ranges Laszlo Ersek
2013-08-19 22:35 ` [Qemu-devel] [PATCH v2 7/8] add "test-int128" and "test-bitops" to .gitignore Laszlo Ersek
2013-08-19 22:35 ` [Qemu-devel] [PATCH v2 8/8] OptsVisitor: introduce unit tests, with test cases for range flattening Laszlo Ersek
2013-08-20 1:09 ` [Qemu-devel] [PATCH v2 0/8] OptsVisitor: support / flatten integer ranges for repeating options Wanlong Gao
2013-08-21 7:31 ` Laszlo Ersek
2013-08-20 14:12 ` Luiz Capitulino
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=1376951740-23559-1-git-send-email-lersek@redhat.com \
--to=lersek@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=qemu-devel@nongnu.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).