diff mbox series

[v4,10/23] json: Define new QMP message for pvrdma

Message ID 20181118122843.10892-11-yuval.shaia@oracle.com
State New
Headers show
Series Add support for RDMA MAD | expand

Commit Message

Yuval Shaia Nov. 18, 2018, 12:28 p.m. UTC
pvrdma requires that the same GID attached to it will be attached to the
backend device in the host.

A new QMP messages is defined so pvrdma device can broadcast any change
made to its GID table. This event is captured by libvirt which in turn
will update the GID table in the backend device.

Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com>
Reviewed-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
---
 MAINTAINERS           |  1 +
 Makefile              |  3 ++-
 Makefile.objs         |  4 ++++
 qapi/qapi-schema.json |  1 +
 qapi/rdma.json        | 38 ++++++++++++++++++++++++++++++++++++++
 5 files changed, 46 insertions(+), 1 deletion(-)
 create mode 100644 qapi/rdma.json

Comments

Markus Armbruster Nov. 19, 2018, 7:16 a.m. UTC | #1
The subsystem tag in the commit message's title should be "qapi: " not
"json: ".

Yuval Shaia <yuval.shaia@oracle.com> writes:

> pvrdma requires that the same GID attached to it will be attached to the
> backend device in the host.
>
> A new QMP messages is defined so pvrdma device can broadcast any change
> made to its GID table. This event is captured by libvirt which in turn
> will update the GID table in the backend device.
>
> Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com>
> Reviewed-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
> ---
>  MAINTAINERS           |  1 +
>  Makefile              |  3 ++-
>  Makefile.objs         |  4 ++++
>  qapi/qapi-schema.json |  1 +
>  qapi/rdma.json        | 38 ++++++++++++++++++++++++++++++++++++++
>  5 files changed, 46 insertions(+), 1 deletion(-)
>  create mode 100644 qapi/rdma.json
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index e087d58ac6..a149f68a8f 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -2232,6 +2232,7 @@ F: hw/rdma/*
>  F: hw/rdma/vmw/*
>  F: docs/pvrdma.txt
>  F: contrib/rdmacm-mux/*
> +F: qapi/rdma.json
>  
>  Build and test automation
>  -------------------------
> diff --git a/Makefile b/Makefile
> index 94072776ff..db4ce60ee5 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -599,7 +599,8 @@ qapi-modules = $(SRC_PATH)/qapi/qapi-schema.json $(SRC_PATH)/qapi/common.json \
>                 $(SRC_PATH)/qapi/tpm.json \
>                 $(SRC_PATH)/qapi/trace.json \
>                 $(SRC_PATH)/qapi/transaction.json \
> -               $(SRC_PATH)/qapi/ui.json
> +               $(SRC_PATH)/qapi/ui.json \
> +               $(SRC_PATH)/qapi/rdma.json

Please insert between net.json and rocker.json to maintain alphabetical
order.

>  qapi/qapi-builtin-types.c qapi/qapi-builtin-types.h \
>  qapi/qapi-types.c qapi/qapi-types.h \
> diff --git a/Makefile.objs b/Makefile.objs
> index cc7df3ad80..76d8028f2f 100644
> --- a/Makefile.objs
> +++ b/Makefile.objs
> @@ -21,6 +21,7 @@ util-obj-y += qapi/qapi-types-tpm.o
>  util-obj-y += qapi/qapi-types-trace.o
>  util-obj-y += qapi/qapi-types-transaction.o
>  util-obj-y += qapi/qapi-types-ui.o
> +util-obj-y += qapi/qapi-types-rdma.o
>  util-obj-y += qapi/qapi-builtin-visit.o
>  util-obj-y += qapi/qapi-visit.o
>  util-obj-y += qapi/qapi-visit-block-core.o
> @@ -40,6 +41,7 @@ util-obj-y += qapi/qapi-visit-tpm.o
>  util-obj-y += qapi/qapi-visit-trace.o
>  util-obj-y += qapi/qapi-visit-transaction.o
>  util-obj-y += qapi/qapi-visit-ui.o
> +util-obj-y += qapi/qapi-visit-rdma.o
>  util-obj-y += qapi/qapi-events.o
>  util-obj-y += qapi/qapi-events-block-core.o
>  util-obj-y += qapi/qapi-events-block.o
> @@ -58,6 +60,7 @@ util-obj-y += qapi/qapi-events-tpm.o
>  util-obj-y += qapi/qapi-events-trace.o
>  util-obj-y += qapi/qapi-events-transaction.o
>  util-obj-y += qapi/qapi-events-ui.o
> +util-obj-y += qapi/qapi-events-rdma.o
>  util-obj-y += qapi/qapi-introspect.o
>  
>  chardev-obj-y = chardev/
> @@ -155,6 +158,7 @@ common-obj-y += qapi/qapi-commands-tpm.o
>  common-obj-y += qapi/qapi-commands-trace.o
>  common-obj-y += qapi/qapi-commands-transaction.o
>  common-obj-y += qapi/qapi-commands-ui.o
> +common-obj-y += qapi/qapi-commands-rdma.o
>  common-obj-y += qapi/qapi-introspect.o
>  common-obj-y += qmp.o hmp.o
>  endif

This is incomplete, and it conflicts with Eric Blake's "[PATCH v3] qapi:
Reduce Makefile boilerplate".  I recommend to base on Eric's patch,
because that'll let you add the new rdma.json much more easily.

> diff --git a/qapi/qapi-schema.json b/qapi/qapi-schema.json
> index 65b6dc2f6f..a650d80f83 100644
> --- a/qapi/qapi-schema.json
> +++ b/qapi/qapi-schema.json
> @@ -94,3 +94,4 @@
>  { 'include': 'trace.json' }
>  { 'include': 'introspect.json' }
>  { 'include': 'misc.json' }
> +{ 'include': 'rdma.json' }

This makes the "RDMA device" section appear last in the QEMU QMP
reference manual, since they appear in include order there.

    $ grep -h @section bld-x86/qapi/qapi-doc.texi 
    @section Introduction
    @section Stability Considerations
    @section Common data types
    @section Socket data types
    @section VM run state
    @section Cryptography
    @section Block devices
    @section Character devices
    @section Net devices
    @section Rocker switch device
    @section TPM (trusted platform module) devices
    @section Remote desktop
    @section Input
    @section Migration
    @section Transactions
    @section Tracing
    @section QMP introspection
    @section Miscellanea
    @section RDMA device

It should go next to the other "device" sections, shouldn't it?

> diff --git a/qapi/rdma.json b/qapi/rdma.json
> new file mode 100644
> index 0000000000..804c68ab36
> --- /dev/null
> +++ b/qapi/rdma.json
> @@ -0,0 +1,38 @@
> +# -*- Mode: Python -*-
> +#
> +
> +##
> +# = RDMA device
> +##
> +
> +##
> +# @RDMA_GID_STATUS_CHANGED:
> +#
> +# Emitted when guest driver adds/deletes GID to/from device
> +#
> +# @netdev: RoCE Network Device name - char *
> +#
> +# @gid-status: Add or delete indication - bool
> +#
> +# @subnet-prefix: Subnet Prefix - uint64
> +#
> +# @interface-id : Interface ID - uint64
> +#
> +# Since: 3.2
> +#
> +# Example:
> +#
> +# <- {"timestamp": {"seconds": 1541579657, "microseconds": 986760},
> +#     "event": "RDMA_GID_STATUS_CHANGED",
> +#     "data":
> +#         {"netdev": "bridge0",
> +#         "interface-id": 15880512517475447892,
> +#         "gid-status": true,
> +#         "subnet-prefix": 33022}}
> +#
> +##
> +{ 'event': 'RDMA_GID_STATUS_CHANGED',
> +  'data': { 'netdev'        : 'str',
> +            'gid-status'    : 'bool',
> +            'subnet-prefix' : 'uint64',
> +            'interface-id'  : 'uint64' } }

Schema looks okay from a QAPI perspective (I know next to nothing about
RDMA).
Yuval Shaia Nov. 22, 2018, 11:21 a.m. UTC | #2
On Mon, Nov 19, 2018 at 08:16:08AM +0100, Markus Armbruster wrote:
> The subsystem tag in the commit message's title should be "qapi: " not
> "json: ".

Done.

> 
> Yuval Shaia <yuval.shaia@oracle.com> writes:
> 
> > pvrdma requires that the same GID attached to it will be attached to the
> > backend device in the host.
> >
> > A new QMP messages is defined so pvrdma device can broadcast any change
> > made to its GID table. This event is captured by libvirt which in turn
> > will update the GID table in the backend device.
> >
> > Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com>
> > Reviewed-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
> > ---
> >  MAINTAINERS           |  1 +
> >  Makefile              |  3 ++-
> >  Makefile.objs         |  4 ++++
> >  qapi/qapi-schema.json |  1 +
> >  qapi/rdma.json        | 38 ++++++++++++++++++++++++++++++++++++++
> >  5 files changed, 46 insertions(+), 1 deletion(-)
> >  create mode 100644 qapi/rdma.json
> >
> > diff --git a/MAINTAINERS b/MAINTAINERS
> > index e087d58ac6..a149f68a8f 100644
> > --- a/MAINTAINERS
> > +++ b/MAINTAINERS
> > @@ -2232,6 +2232,7 @@ F: hw/rdma/*
> >  F: hw/rdma/vmw/*
> >  F: docs/pvrdma.txt
> >  F: contrib/rdmacm-mux/*
> > +F: qapi/rdma.json
> >  
> >  Build and test automation
> >  -------------------------
> > diff --git a/Makefile b/Makefile
> > index 94072776ff..db4ce60ee5 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -599,7 +599,8 @@ qapi-modules = $(SRC_PATH)/qapi/qapi-schema.json $(SRC_PATH)/qapi/common.json \
> >                 $(SRC_PATH)/qapi/tpm.json \
> >                 $(SRC_PATH)/qapi/trace.json \
> >                 $(SRC_PATH)/qapi/transaction.json \
> > -               $(SRC_PATH)/qapi/ui.json
> > +               $(SRC_PATH)/qapi/ui.json \
> > +               $(SRC_PATH)/qapi/rdma.json
> 
> Please insert between net.json and rocker.json to maintain alphabetical
> order.

Removed after using Eric Blake's framework.

> 
> >  qapi/qapi-builtin-types.c qapi/qapi-builtin-types.h \
> >  qapi/qapi-types.c qapi/qapi-types.h \
> > diff --git a/Makefile.objs b/Makefile.objs
> > index cc7df3ad80..76d8028f2f 100644
> > --- a/Makefile.objs
> > +++ b/Makefile.objs
> > @@ -21,6 +21,7 @@ util-obj-y += qapi/qapi-types-tpm.o
> >  util-obj-y += qapi/qapi-types-trace.o
> >  util-obj-y += qapi/qapi-types-transaction.o
> >  util-obj-y += qapi/qapi-types-ui.o
> > +util-obj-y += qapi/qapi-types-rdma.o
> >  util-obj-y += qapi/qapi-builtin-visit.o
> >  util-obj-y += qapi/qapi-visit.o
> >  util-obj-y += qapi/qapi-visit-block-core.o
> > @@ -40,6 +41,7 @@ util-obj-y += qapi/qapi-visit-tpm.o
> >  util-obj-y += qapi/qapi-visit-trace.o
> >  util-obj-y += qapi/qapi-visit-transaction.o
> >  util-obj-y += qapi/qapi-visit-ui.o
> > +util-obj-y += qapi/qapi-visit-rdma.o
> >  util-obj-y += qapi/qapi-events.o
> >  util-obj-y += qapi/qapi-events-block-core.o
> >  util-obj-y += qapi/qapi-events-block.o
> > @@ -58,6 +60,7 @@ util-obj-y += qapi/qapi-events-tpm.o
> >  util-obj-y += qapi/qapi-events-trace.o
> >  util-obj-y += qapi/qapi-events-transaction.o
> >  util-obj-y += qapi/qapi-events-ui.o
> > +util-obj-y += qapi/qapi-events-rdma.o
> >  util-obj-y += qapi/qapi-introspect.o
> >  
> >  chardev-obj-y = chardev/
> > @@ -155,6 +158,7 @@ common-obj-y += qapi/qapi-commands-tpm.o
> >  common-obj-y += qapi/qapi-commands-trace.o
> >  common-obj-y += qapi/qapi-commands-transaction.o
> >  common-obj-y += qapi/qapi-commands-ui.o
> > +common-obj-y += qapi/qapi-commands-rdma.o
> >  common-obj-y += qapi/qapi-introspect.o
> >  common-obj-y += qmp.o hmp.o
> >  endif
> 
> This is incomplete, and it conflicts with Eric Blake's "[PATCH v3] qapi:
> Reduce Makefile boilerplate".  I recommend to base on Eric's patch,
> because that'll let you add the new rdma.json much more easily.

Sure, will do that but let's ignore build error reports generated by build
robot for my v5 :)

Framework looks great!

> 
> > diff --git a/qapi/qapi-schema.json b/qapi/qapi-schema.json
> > index 65b6dc2f6f..a650d80f83 100644
> > --- a/qapi/qapi-schema.json
> > +++ b/qapi/qapi-schema.json
> > @@ -94,3 +94,4 @@
> >  { 'include': 'trace.json' }
> >  { 'include': 'introspect.json' }
> >  { 'include': 'misc.json' }
> > +{ 'include': 'rdma.json' }

Done.

> 
> This makes the "RDMA device" section appear last in the QEMU QMP
> reference manual, since they appear in include order there.
> 
>     $ grep -h @section bld-x86/qapi/qapi-doc.texi 
>     @section Introduction
>     @section Stability Considerations
>     @section Common data types
>     @section Socket data types
>     @section VM run state
>     @section Cryptography
>     @section Block devices
>     @section Character devices
>     @section Net devices
>     @section Rocker switch device
>     @section TPM (trusted platform module) devices
>     @section Remote desktop
>     @section Input
>     @section Migration
>     @section Transactions
>     @section Tracing
>     @section QMP introspection
>     @section Miscellanea
>     @section RDMA device
> 
> It should go next to the other "device" sections, shouldn't it?

Removed after using Eric Blake's framework.

> 
> > diff --git a/qapi/rdma.json b/qapi/rdma.json
> > new file mode 100644
> > index 0000000000..804c68ab36
> > --- /dev/null
> > +++ b/qapi/rdma.json
> > @@ -0,0 +1,38 @@
> > +# -*- Mode: Python -*-
> > +#
> > +
> > +##
> > +# = RDMA device
> > +##
> > +
> > +##
> > +# @RDMA_GID_STATUS_CHANGED:
> > +#
> > +# Emitted when guest driver adds/deletes GID to/from device
> > +#
> > +# @netdev: RoCE Network Device name - char *
> > +#
> > +# @gid-status: Add or delete indication - bool
> > +#
> > +# @subnet-prefix: Subnet Prefix - uint64
> > +#
> > +# @interface-id : Interface ID - uint64
> > +#
> > +# Since: 3.2
> > +#
> > +# Example:
> > +#
> > +# <- {"timestamp": {"seconds": 1541579657, "microseconds": 986760},
> > +#     "event": "RDMA_GID_STATUS_CHANGED",
> > +#     "data":
> > +#         {"netdev": "bridge0",
> > +#         "interface-id": 15880512517475447892,
> > +#         "gid-status": true,
> > +#         "subnet-prefix": 33022}}
> > +#
> > +##
> > +{ 'event': 'RDMA_GID_STATUS_CHANGED',
> > +  'data': { 'netdev'        : 'str',
> > +            'gid-status'    : 'bool',
> > +            'subnet-prefix' : 'uint64',
> > +            'interface-id'  : 'uint64' } }
> 
> Schema looks okay from a QAPI perspective (I know next to nothing about
> RDMA).

Thanks
diff mbox series

Patch

diff --git a/MAINTAINERS b/MAINTAINERS
index e087d58ac6..a149f68a8f 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2232,6 +2232,7 @@  F: hw/rdma/*
 F: hw/rdma/vmw/*
 F: docs/pvrdma.txt
 F: contrib/rdmacm-mux/*
+F: qapi/rdma.json
 
 Build and test automation
 -------------------------
diff --git a/Makefile b/Makefile
index 94072776ff..db4ce60ee5 100644
--- a/Makefile
+++ b/Makefile
@@ -599,7 +599,8 @@  qapi-modules = $(SRC_PATH)/qapi/qapi-schema.json $(SRC_PATH)/qapi/common.json \
                $(SRC_PATH)/qapi/tpm.json \
                $(SRC_PATH)/qapi/trace.json \
                $(SRC_PATH)/qapi/transaction.json \
-               $(SRC_PATH)/qapi/ui.json
+               $(SRC_PATH)/qapi/ui.json \
+               $(SRC_PATH)/qapi/rdma.json
 
 qapi/qapi-builtin-types.c qapi/qapi-builtin-types.h \
 qapi/qapi-types.c qapi/qapi-types.h \
diff --git a/Makefile.objs b/Makefile.objs
index cc7df3ad80..76d8028f2f 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -21,6 +21,7 @@  util-obj-y += qapi/qapi-types-tpm.o
 util-obj-y += qapi/qapi-types-trace.o
 util-obj-y += qapi/qapi-types-transaction.o
 util-obj-y += qapi/qapi-types-ui.o
+util-obj-y += qapi/qapi-types-rdma.o
 util-obj-y += qapi/qapi-builtin-visit.o
 util-obj-y += qapi/qapi-visit.o
 util-obj-y += qapi/qapi-visit-block-core.o
@@ -40,6 +41,7 @@  util-obj-y += qapi/qapi-visit-tpm.o
 util-obj-y += qapi/qapi-visit-trace.o
 util-obj-y += qapi/qapi-visit-transaction.o
 util-obj-y += qapi/qapi-visit-ui.o
+util-obj-y += qapi/qapi-visit-rdma.o
 util-obj-y += qapi/qapi-events.o
 util-obj-y += qapi/qapi-events-block-core.o
 util-obj-y += qapi/qapi-events-block.o
@@ -58,6 +60,7 @@  util-obj-y += qapi/qapi-events-tpm.o
 util-obj-y += qapi/qapi-events-trace.o
 util-obj-y += qapi/qapi-events-transaction.o
 util-obj-y += qapi/qapi-events-ui.o
+util-obj-y += qapi/qapi-events-rdma.o
 util-obj-y += qapi/qapi-introspect.o
 
 chardev-obj-y = chardev/
@@ -155,6 +158,7 @@  common-obj-y += qapi/qapi-commands-tpm.o
 common-obj-y += qapi/qapi-commands-trace.o
 common-obj-y += qapi/qapi-commands-transaction.o
 common-obj-y += qapi/qapi-commands-ui.o
+common-obj-y += qapi/qapi-commands-rdma.o
 common-obj-y += qapi/qapi-introspect.o
 common-obj-y += qmp.o hmp.o
 endif
diff --git a/qapi/qapi-schema.json b/qapi/qapi-schema.json
index 65b6dc2f6f..a650d80f83 100644
--- a/qapi/qapi-schema.json
+++ b/qapi/qapi-schema.json
@@ -94,3 +94,4 @@ 
 { 'include': 'trace.json' }
 { 'include': 'introspect.json' }
 { 'include': 'misc.json' }
+{ 'include': 'rdma.json' }
diff --git a/qapi/rdma.json b/qapi/rdma.json
new file mode 100644
index 0000000000..804c68ab36
--- /dev/null
+++ b/qapi/rdma.json
@@ -0,0 +1,38 @@ 
+# -*- Mode: Python -*-
+#
+
+##
+# = RDMA device
+##
+
+##
+# @RDMA_GID_STATUS_CHANGED:
+#
+# Emitted when guest driver adds/deletes GID to/from device
+#
+# @netdev: RoCE Network Device name - char *
+#
+# @gid-status: Add or delete indication - bool
+#
+# @subnet-prefix: Subnet Prefix - uint64
+#
+# @interface-id : Interface ID - uint64
+#
+# Since: 3.2
+#
+# Example:
+#
+# <- {"timestamp": {"seconds": 1541579657, "microseconds": 986760},
+#     "event": "RDMA_GID_STATUS_CHANGED",
+#     "data":
+#         {"netdev": "bridge0",
+#         "interface-id": 15880512517475447892,
+#         "gid-status": true,
+#         "subnet-prefix": 33022}}
+#
+##
+{ 'event': 'RDMA_GID_STATUS_CHANGED',
+  'data': { 'netdev'        : 'str',
+            'gid-status'    : 'bool',
+            'subnet-prefix' : 'uint64',
+            'interface-id'  : 'uint64' } }