The existing capabilities were generated against a build made quite early in the QEMU 8.1.0 development cycle. Update them to match the final release. A notable effect of this is that the recently introduced s390-usb-model test now passes instead of failing: QEMU 8.1.0 enables several new devices on s390x, including the qemu-xhci USB controller. There's a small amount of additional churn caused by the fact that the machine on which I have generated these capabilities is apparently slightly less fancy than the one used originally. Signed-off-by: Andrea Bolognani <abologna@xxxxxxxxxx> --- tests/domaincapsdata/qemu_8.1.0.s390x.xml | 80 +- .../caps_8.1.0_s390x.replies | 5000 ++++++++++------- .../qemucapabilitiesdata/caps_8.1.0_s390x.xml | 732 ++- ...default-video-type-s390x.s390x-latest.args | 2 +- ...vfio-zpci-ccw-memballoon.s390x-latest.args | 2 +- .../launch-security-s390-pv.s390x-latest.args | 2 +- ...t-cpu-kvm-ccw-virtio-4.2.s390x-latest.args | 2 +- .../s390-defaultconsole.s390x-latest.args | 2 +- .../s390-panic.s390x-latest.args | 2 +- ....args => s390-usb-model.s390x-latest.args} | 14 +- .../s390-usb-model.s390x-latest.err | 1 - tests/qemuxmlconftest.c | 2 +- 12 files changed, 3345 insertions(+), 2496 deletions(-) copy tests/qemuxmlconfdata/{s390-defaultconsole.s390x-latest.args => s390-usb-model.s390x-latest.args} (61%) delete mode 100644 tests/qemuxmlconfdata/s390-usb-model.s390x-latest.err diff --git a/tests/domaincapsdata/qemu_8.1.0.s390x.xml b/tests/domaincapsdata/qemu_8.1.0.s390x.xml index 37c7c3b8bf..3f4299237e 100644 --- a/tests/domaincapsdata/qemu_8.1.0.s390x.xml +++ b/tests/domaincapsdata/qemu_8.1.0.s390x.xml @@ -190,6 +176,7 @@ <value>fdc</value> <value>scsi</value> <value>virtio</value> + <value>usb</value> </enum> <enum name='model'> <value>virtio</value> @@ -222,6 +209,7 @@ <value>optional</value> </enum> <enum name='subsysType'> + <value>usb</value> <value>pci</value> <value>scsi</value> </enum> diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_s390x.replies b/tests/qemucapabilitiesdata/caps_8.1.0_s390x.replies index 2ee9655774..77014169cb 100644 --- a/tests/qemucapabilitiesdata/caps_8.1.0_s390x.replies +++ b/tests/qemucapabilitiesdata/caps_8.1.0_s390x.replies @@ -16,11 +16,11 @@ { "return": { "qemu": { - "micro": 50, - "minor": 0, + "micro": 0, + "minor": 1, "major": 8 }, - "package": "v8.0.0-1270-g1c12355b" + "package": "v8.1.0" }, "id": "libvirt-2" } @@ -22574,6 +22930,14 @@ "name": "z14ZR1-s390x-cpu", "parent": "s390x-cpu" }, + { + "name": "usb-mtp", + "parent": "usb-device" + }, + { + "name": "qemu-xhci", + "parent": "pci-xhci" + }, { "name": "virtserialport", "parent": "virtio-serial-port" diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml b/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml index 19422f08fa..ea5eec0435 100644 --- a/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml @@ -5,6 +5,7 @@ <selfvers>0</selfvers> <flag name='kvm'/> <flag name='sdl'/> + <flag name='usb-hub'/> <flag name='virtio-blk-pci.scsi'/> <flag name='scsi-disk.channel'/> <flag name='scsi-block'/> @@ -12,12 +13,16 @@ <flag name='seccomp-sandbox'/> <flag name='vnc'/> <flag name='s390-sclp'/> + <flag name='usb-serial'/> <flag name='virtio-rng'/> <flag name='rng-random'/> <flag name='rng-egd'/> <flag name='virtio-ccw'/> <flag name='pci-bridge'/> <flag name='vfio-pci'/> + <flag name='usb-storage'/> + <flag name='usb-kbd'/> + <flag name='usb-audio'/> <flag name='migrate-rdma'/> <flag name='virtio-net'/> <flag name='virtio-gpu'/> @@ -29,6 +34,7 @@ <flag name='vhost-scsi'/> <flag name='query-cpu-model-expansion'/> <flag name='query-cpu-definitions'/> + <flag name='qemu-xhci'/> <flag name='chardev-reconnect'/> <flag name='sclplmconsole'/> <flag name='virtio-gpu-ccw'/> @@ -80,7 +86,6 @@ <flag name='compat-deprecated'/> <flag name='acpi-index'/> <flag name='input-linux'/> - <flag name='virtio-gpu-gl-pci'/> <flag name='confidential-guest-support'/> <flag name='s390-pv-guest'/> <flag name='set-action'/> @@ -111,21 +116,19 @@ <flag name='virtio-gpu.blob'/> <flag name='rbd-encryption-layering'/> <flag name='rbd-encryption-luks-any'/> + <flag name='qcow2-discard-no-unref'/> <flag name='run-with.async-teardown'/> <flag name='smp-clusters'/> - <version>8000050</version> + <version>8001000</version> <microcodeVersion>39100245</microcodeVersion> - <package>v8.0.0-1270-g1c12355b</package> + <package>v8.1.0</package> <arch>s390x</arch> diff --git a/tests/qemuxmlconfdata/default-video-type-s390x.s390x-latest.args b/tests/qemuxmlconfdata/default-video-type-s390x.s390x-latest.args index e6438482a3..b3f55e8a21 100644 --- a/tests/qemuxmlconfdata/default-video-type-s390x.s390x-latest.args +++ b/tests/qemuxmlconfdata/default-video-type-s390x.s390x-latest.args @@ -12,7 +12,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-default-video-type-s/.config \ -object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-default-video-type-s/master-key.aes"}' \ -machine s390-ccw-virtio,usb=off,dump-guest-core=off,memory-backend=s390.ram \ -accel kvm \ --cpu gen16a-base,nnpa=on,aen=on,cmmnt=on,vxpdeh=on,aefsi=on,diag318=on,csske=on,mepoch=on,msa9=on,msa8=on,msa7=on,msa6=on,msa5=on,msa4=on,msa3=on,msa2=on,msa1=on,sthyi=on,edat=on,ri=on,deflate=on,edat2=on,etoken=on,vx=on,ipter=on,pai=on,paie=on,mepochptff=on,ap=on,vxeh=on,vxpd=on,esop=on,msa9_pckmo=on,vxeh2=on,esort=on,apqi=on,apft=on,els=on,iep=on,apqci=on,cte=on,ais=on,bpb=on,gs=on,ppa15=on,zpci=on,rdp=on,sea_esop2=on,beareh=on,te=on,cmm=on,vxpdeh2=on \ +-cpu gen15a-base,aen=on,vxpdeh=on,aefsi=on,diag318=on,csske=on,msa9=on,msa8=on,msa7=on,msa6=on,msa5=on,msa4=on,msa3=on,msa2=on,msa1=on,sthyi=on,edat=on,deflate=on,etoken=on,vx=on,ap=on,vxeh=on,vxpd=on,esop=on,msa9_pckmo=on,vxeh2=on,esort=on,apft=on,els=on,iep=on,apqci=on,cte=on,ais=on,bpb=on,gs=on,ppa15=on,zpci=on,sea_esop2=on,te=on \ -m size=1048576k \ -object '{"qom-type":"memory-backend-ram","id":"s390.ram","size":1073741824}' \ -overcommit mem-lock=off \ diff --git a/tests/qemuxmlconfdata/hostdev-vfio-zpci-ccw-memballoon.s390x-latest.args b/tests/qemuxmlconfdata/hostdev-vfio-zpci-ccw-memballoon.s390x-latest.args index 58e8ae95f5..69f2679f6f 100644 --- a/tests/qemuxmlconfdata/hostdev-vfio-zpci-ccw-memballoon.s390x-latest.args +++ b/tests/qemuxmlconfdata/hostdev-vfio-zpci-ccw-memballoon.s390x-latest.args @@ -12,7 +12,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-KVMGuest1/.config \ -object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-KVMGuest1/master-key.aes"}' \ -machine s390-ccw-virtio,usb=off,dump-guest-core=off,memory-backend=s390.ram \ -accel kvm \ --cpu gen16a-base,nnpa=on,aen=on,cmmnt=on,vxpdeh=on,aefsi=on,diag318=on,csske=on,mepoch=on,msa9=on,msa8=on,msa7=on,msa6=on,msa5=on,msa4=on,msa3=on,msa2=on,msa1=on,sthyi=on,edat=on,ri=on,deflate=on,edat2=on,etoken=on,vx=on,ipter=on,pai=on,paie=on,mepochptff=on,ap=on,vxeh=on,vxpd=on,esop=on,msa9_pckmo=on,vxeh2=on,esort=on,apqi=on,apft=on,els=on,iep=on,apqci=on,cte=on,ais=on,bpb=on,gs=on,ppa15=on,zpci=on,rdp=on,sea_esop2=on,beareh=on,te=on,cmm=on,vxpdeh2=on \ +-cpu gen15a-base,aen=on,vxpdeh=on,aefsi=on,diag318=on,csske=on,msa9=on,msa8=on,msa7=on,msa6=on,msa5=on,msa4=on,msa3=on,msa2=on,msa1=on,sthyi=on,edat=on,deflate=on,etoken=on,vx=on,ap=on,vxeh=on,vxpd=on,esop=on,msa9_pckmo=on,vxeh2=on,esort=on,apft=on,els=on,iep=on,apqci=on,cte=on,ais=on,bpb=on,gs=on,ppa15=on,zpci=on,sea_esop2=on,te=on \ -m size=219136k \ -object '{"qom-type":"memory-backend-ram","id":"s390.ram","size":224395264}' \ -overcommit mem-lock=off \ diff --git a/tests/qemuxmlconfdata/launch-security-s390-pv.s390x-latest.args b/tests/qemuxmlconfdata/launch-security-s390-pv.s390x-latest.args index 5c8cf9eeec..5c042913a1 100644 --- a/tests/qemuxmlconfdata/launch-security-s390-pv.s390x-latest.args +++ b/tests/qemuxmlconfdata/launch-security-s390-pv.s390x-latest.args @@ -12,7 +12,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \ -object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \ -machine s390-ccw-virtio,usb=off,dump-guest-core=off,memory-backend=s390.ram,confidential-guest-support=lsec0 \ -accel kvm \ --cpu gen16a-base,nnpa=on,aen=on,cmmnt=on,vxpdeh=on,aefsi=on,diag318=on,csske=on,mepoch=on,msa9=on,msa8=on,msa7=on,msa6=on,msa5=on,msa4=on,msa3=on,msa2=on,msa1=on,sthyi=on,edat=on,ri=on,deflate=on,edat2=on,etoken=on,vx=on,ipter=on,pai=on,paie=on,mepochptff=on,ap=on,vxeh=on,vxpd=on,esop=on,msa9_pckmo=on,vxeh2=on,esort=on,apqi=on,apft=on,els=on,iep=on,apqci=on,cte=on,ais=on,bpb=on,gs=on,ppa15=on,zpci=on,rdp=on,sea_esop2=on,beareh=on,te=on,cmm=on,vxpdeh2=on \ +-cpu gen15a-base,aen=on,vxpdeh=on,aefsi=on,diag318=on,csske=on,msa9=on,msa8=on,msa7=on,msa6=on,msa5=on,msa4=on,msa3=on,msa2=on,msa1=on,sthyi=on,edat=on,deflate=on,etoken=on,vx=on,ap=on,vxeh=on,vxpd=on,esop=on,msa9_pckmo=on,vxeh2=on,esort=on,apft=on,els=on,iep=on,apqci=on,cte=on,ais=on,bpb=on,gs=on,ppa15=on,zpci=on,sea_esop2=on,te=on \ -m size=219136k \ -object '{"qom-type":"memory-backend-ram","id":"s390.ram","size":224395264}' \ -overcommit mem-lock=off \ diff --git a/tests/qemuxmlconfdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.args b/tests/qemuxmlconfdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.args index 7f70323720..14954d02a2 100644 --- a/tests/qemuxmlconfdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.args +++ b/tests/qemuxmlconfdata/s390-default-cpu-kvm-ccw-virtio-4.2.s390x-latest.args @@ -12,7 +12,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-test/.config \ -object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-test/master-key.aes"}' \ -machine s390-ccw-virtio-4.2,usb=off,dump-guest-core=off,memory-backend=s390.ram \ -accel kvm \ --cpu gen16a-base,nnpa=on,aen=on,cmmnt=on,vxpdeh=on,aefsi=on,diag318=on,csske=on,mepoch=on,msa9=on,msa8=on,msa7=on,msa6=on,msa5=on,msa4=on,msa3=on,msa2=on,msa1=on,sthyi=on,edat=on,ri=on,deflate=on,edat2=on,etoken=on,vx=on,ipter=on,pai=on,paie=on,mepochptff=on,ap=on,vxeh=on,vxpd=on,esop=on,msa9_pckmo=on,vxeh2=on,esort=on,apqi=on,apft=on,els=on,iep=on,apqci=on,cte=on,ais=on,bpb=on,gs=on,ppa15=on,zpci=on,rdp=on,sea_esop2=on,beareh=on,te=on,cmm=on,vxpdeh2=on \ +-cpu gen15a-base,aen=on,vxpdeh=on,aefsi=on,diag318=on,csske=on,msa9=on,msa8=on,msa7=on,msa6=on,msa5=on,msa4=on,msa3=on,msa2=on,msa1=on,sthyi=on,edat=on,deflate=on,etoken=on,vx=on,ap=on,vxeh=on,vxpd=on,esop=on,msa9_pckmo=on,vxeh2=on,esort=on,apft=on,els=on,iep=on,apqci=on,cte=on,ais=on,bpb=on,gs=on,ppa15=on,zpci=on,sea_esop2=on,te=on \ -m size=262144k \ -object '{"qom-type":"memory-backend-ram","id":"s390.ram","size":268435456}' \ -overcommit mem-lock=off \ diff --git a/tests/qemuxmlconfdata/s390-defaultconsole.s390x-latest.args b/tests/qemuxmlconfdata/s390-defaultconsole.s390x-latest.args index dde5b6ad13..09eff14e46 100644 --- a/tests/qemuxmlconfdata/s390-defaultconsole.s390x-latest.args +++ b/tests/qemuxmlconfdata/s390-defaultconsole.s390x-latest.args @@ -12,7 +12,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-test/.config \ -object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-test/master-key.aes"}' \ -machine s390-ccw-virtio,usb=off,dump-guest-core=off,memory-backend=s390.ram \ -accel kvm \ --cpu gen16a-base,nnpa=on,aen=on,cmmnt=on,vxpdeh=on,aefsi=on,diag318=on,csske=on,mepoch=on,msa9=on,msa8=on,msa7=on,msa6=on,msa5=on,msa4=on,msa3=on,msa2=on,msa1=on,sthyi=on,edat=on,ri=on,deflate=on,edat2=on,etoken=on,vx=on,ipter=on,pai=on,paie=on,mepochptff=on,ap=on,vxeh=on,vxpd=on,esop=on,msa9_pckmo=on,vxeh2=on,esort=on,apqi=on,apft=on,els=on,iep=on,apqci=on,cte=on,ais=on,bpb=on,gs=on,ppa15=on,zpci=on,rdp=on,sea_esop2=on,beareh=on,te=on,cmm=on,vxpdeh2=on \ +-cpu gen15a-base,aen=on,vxpdeh=on,aefsi=on,diag318=on,csske=on,msa9=on,msa8=on,msa7=on,msa6=on,msa5=on,msa4=on,msa3=on,msa2=on,msa1=on,sthyi=on,edat=on,deflate=on,etoken=on,vx=on,ap=on,vxeh=on,vxpd=on,esop=on,msa9_pckmo=on,vxeh2=on,esort=on,apft=on,els=on,iep=on,apqci=on,cte=on,ais=on,bpb=on,gs=on,ppa15=on,zpci=on,sea_esop2=on,te=on \ -m size=262144k \ -object '{"qom-type":"memory-backend-ram","id":"s390.ram","size":268435456}' \ -overcommit mem-lock=off \ diff --git a/tests/qemuxmlconfdata/s390-panic.s390x-latest.args b/tests/qemuxmlconfdata/s390-panic.s390x-latest.args index b4b8c9e63e..e020a9f467 100644 --- a/tests/qemuxmlconfdata/s390-panic.s390x-latest.args +++ b/tests/qemuxmlconfdata/s390-panic.s390x-latest.args @@ -12,7 +12,7 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-test/.config \ -object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-test/master-key.aes"}' \ -machine s390-ccw-virtio,usb=off,dump-guest-core=off,memory-backend=s390.ram \ -accel kvm \ --cpu gen16a-base,nnpa=on,aen=on,cmmnt=on,vxpdeh=on,aefsi=on,diag318=on,csske=on,mepoch=on,msa9=on,msa8=on,msa7=on,msa6=on,msa5=on,msa4=on,msa3=on,msa2=on,msa1=on,sthyi=on,edat=on,ri=on,deflate=on,edat2=on,etoken=on,vx=on,ipter=on,pai=on,paie=on,mepochptff=on,ap=on,vxeh=on,vxpd=on,esop=on,msa9_pckmo=on,vxeh2=on,esort=on,apqi=on,apft=on,els=on,iep=on,apqci=on,cte=on,ais=on,bpb=on,gs=on,ppa15=on,zpci=on,rdp=on,sea_esop2=on,beareh=on,te=on,cmm=on,vxpdeh2=on \ +-cpu gen15a-base,aen=on,vxpdeh=on,aefsi=on,diag318=on,csske=on,msa9=on,msa8=on,msa7=on,msa6=on,msa5=on,msa4=on,msa3=on,msa2=on,msa1=on,sthyi=on,edat=on,deflate=on,etoken=on,vx=on,ap=on,vxeh=on,vxpd=on,esop=on,msa9_pckmo=on,vxeh2=on,esort=on,apft=on,els=on,iep=on,apqci=on,cte=on,ais=on,bpb=on,gs=on,ppa15=on,zpci=on,sea_esop2=on,te=on \ -m size=262144k \ -object '{"qom-type":"memory-backend-ram","id":"s390.ram","size":268435456}' \ -overcommit mem-lock=off \ diff --git a/tests/qemuxmlconfdata/s390-defaultconsole.s390x-latest.args b/tests/qemuxmlconfdata/s390-usb-model.s390x-latest.args similarity index 61% copy from tests/qemuxmlconfdata/s390-defaultconsole.s390x-latest.args copy to tests/qemuxmlconfdata/s390-usb-model.s390x-latest.args index dde5b6ad13..85a3e5a53c 100644 --- a/tests/qemuxmlconfdata/s390-defaultconsole.s390x-latest.args +++ b/tests/qemuxmlconfdata/s390-usb-model.s390x-latest.args @@ -11,13 +11,13 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-test/.config \ -S \ -object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-test/master-key.aes"}' \ -machine s390-ccw-virtio,usb=off,dump-guest-core=off,memory-backend=s390.ram \ --accel kvm \ --cpu gen16a-base,nnpa=on,aen=on,cmmnt=on,vxpdeh=on,aefsi=on,diag318=on,csske=on,mepoch=on,msa9=on,msa8=on,msa7=on,msa6=on,msa5=on,msa4=on,msa3=on,msa2=on,msa1=on,sthyi=on,edat=on,ri=on,deflate=on,edat2=on,etoken=on,vx=on,ipter=on,pai=on,paie=on,mepochptff=on,ap=on,vxeh=on,vxpd=on,esop=on,msa9_pckmo=on,vxeh2=on,esort=on,apqi=on,apft=on,els=on,iep=on,apqci=on,cte=on,ais=on,bpb=on,gs=on,ppa15=on,zpci=on,rdp=on,sea_esop2=on,beareh=on,te=on,cmm=on,vxpdeh2=on \ --m size=262144k \ --object '{"qom-type":"memory-backend-ram","id":"s390.ram","size":268435456}' \ +-accel tcg \ +-cpu qemu \ +-m size=219136k \ +-object '{"qom-type":"memory-backend-ram","id":"s390.ram","size":224395264}' \ -overcommit mem-lock=off \ -smp 1,sockets=1,cores=1,threads=1 \ --uuid 9aa4b45c-b9dd-45ef-91fe-862b27b4231f \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ -display none \ -no-user-config \ -nodefaults \ @@ -26,8 +26,8 @@ XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-test/.config \ -rtc base=utc \ -no-shutdown \ -boot strict=on \ --chardev pty,id=charserial0 \ --device '{"driver":"sclpconsole","chardev":"charserial0","id":"serial0"}' \ +-device '{"driver":"zpci","uid":1,"fid":0,"target":"usb","id":"zpci1"}' \ +-device '{"driver":"qemu-xhci","id":"usb","bus":"pci.0","addr":"0x1"}' \ -audiodev '{"id":"audio1","driver":"none"}' \ -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ -msg timestamp=on diff --git a/tests/qemuxmlconfdata/s390-usb-model.s390x-latest.err b/tests/qemuxmlconfdata/s390-usb-model.s390x-latest.err deleted file mode 100644 index aec91f7559..0000000000 --- a/tests/qemuxmlconfdata/s390-usb-model.s390x-latest.err +++ /dev/null @@ -1 +0,0 @@ -unsupported configuration: USB controller model 'qemu-xhci' not supported in this QEMU binary diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index cdb0d2d701..e1ee1fbce3 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -2321,7 +2321,7 @@ mymain(void) DO_TEST_CAPS_ARCH_LATEST("s390-usb-none", "s390x"); DO_TEST_CAPS_ARCH_LATEST("s390-usb-address", "s390x"); - DO_TEST_CAPS_ARCH_LATEST_FAILURE("s390-usb-model", "s390x"); + DO_TEST_CAPS_ARCH_LATEST("s390-usb-model", "s390x"); DO_TEST_CAPS_ARCH_LATEST("s390-panic-no-address", "s390x"); DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR("s390-panic-address", "s390x"); -- 2.43.0 _______________________________________________ Devel mailing list -- devel@xxxxxxxxxxxxxxxxx To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx