[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 0/8] OptsVisitor: support / flatten integer r
From: |
Wanlong Gao |
Subject: |
Re: [Qemu-devel] [PATCH v2 0/8] OptsVisitor: support / flatten integer ranges for repeating options |
Date: |
Tue, 20 Aug 2013 09:09:35 +0800 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130805 Thunderbird/17.0.8 |
On 08/20/2013 06:35 AM, Laszlo Ersek wrote:
> v1->v2:
Tested-by: Wanlong Gao <address@hidden>
> - 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
>
>
>
- [Qemu-devel] [PATCH v2 0/8] OptsVisitor: support / flatten integer ranges for repeating options, Laszlo Ersek, 2013/08/19
- [Qemu-devel] [PATCH v2 3/8] OptsVisitor: opts_type_int(): recognize intervals when LM_IN_PROGRESS, Laszlo Ersek, 2013/08/19
- [Qemu-devel] [PATCH v2 4/8] OptsVisitor: rebase opts_type_uint64() to parse_uint_full(), Laszlo Ersek, 2013/08/19
- [Qemu-devel] [PATCH v2 1/8] OptsVisitor: introduce basic list modes, Laszlo Ersek, 2013/08/19
- [Qemu-devel] [PATCH v2 5/8] OptsVisitor: opts_type_uint64(): recognize intervals when LM_IN_PROGRESS, Laszlo Ersek, 2013/08/19
- [Qemu-devel] [PATCH v2 6/8] OptsVisitor: don't try to flatten overlong integer ranges, Laszlo Ersek, 2013/08/19
- [Qemu-devel] [PATCH v2 2/8] OptsVisitor: introduce list modes for interval flattening, Laszlo Ersek, 2013/08/19
- [Qemu-devel] [PATCH v2 8/8] OptsVisitor: introduce unit tests, with test cases for range flattening, Laszlo Ersek, 2013/08/19
- [Qemu-devel] [PATCH v2 7/8] add "test-int128" and "test-bitops" to .gitignore, Laszlo Ersek, 2013/08/19
- Re: [Qemu-devel] [PATCH v2 0/8] OptsVisitor: support / flatten integer ranges for repeating options,
Wanlong Gao <=
- Re: [Qemu-devel] [PATCH v2 0/8] OptsVisitor: support / flatten integer ranges for repeating options, Luiz Capitulino, 2013/08/20