From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59982) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VBaSc-0000HV-6Q for qemu-devel@nongnu.org; Mon, 19 Aug 2013 21:10:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VBaSW-0000HU-Sz for qemu-devel@nongnu.org; Mon, 19 Aug 2013 21:10:14 -0400 Received: from [222.73.24.84] (port=28385 helo=song.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VBaSW-0000GE-HR for qemu-devel@nongnu.org; Mon, 19 Aug 2013 21:10:08 -0400 Message-ID: <5212C1CF.5020409@cn.fujitsu.com> Date: Tue, 20 Aug 2013 09:09:35 +0800 From: Wanlong Gao MIME-Version: 1.0 References: <1376951740-23559-1-git-send-email-lersek@redhat.com> In-Reply-To: <1376951740-23559-1-git-send-email-lersek@redhat.com> Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=ISO-8859-1 Subject: Re: [Qemu-devel] [PATCH v2 0/8] OptsVisitor: support / flatten integer ranges for repeating options Reply-To: gaowanlong@cn.fujitsu.com List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Laszlo Ersek Cc: qemu-devel@nongnu.org, lcapitulino@redhat.com On 08/20/2013 06:35 AM, Laszlo Ersek wrote: > v1->v2: Tested-by: Wanlong Gao > - 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 > > 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 > > >