[linux-linus test] 186608: tolerable FAIL - PUSHED

2024-06-30 Thread osstest service owner
flight 186608 linux-linus real [real]
flight 186614 linux-linus real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/186608/
http://logs.test-lab.xenproject.org/osstest/logs/186614/

Failures :-/ but no regressions.

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-xl-arndale   8 xen-bootfail pass in 186614-retest
 test-armhf-armhf-xl-raw  10 host-ping-check-xen fail pass in 186614-retest
 test-armhf-armhf-xl-qcow2 8 xen-bootfail pass in 186614-retest

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-libvirt   16 saverestore-support-check fail blocked in 186562
 test-armhf-armhf-xl-arndale 15 migrate-support-check fail in 186614 never pass
 test-armhf-armhf-xl-arndale 16 saverestore-support-check fail in 186614 never 
pass
 test-armhf-armhf-xl-raw 14 migrate-support-check fail in 186614 never pass
 test-armhf-armhf-xl-raw 15 saverestore-support-check fail in 186614 never pass
 test-armhf-armhf-xl-qcow2   14 migrate-support-check fail in 186614 never pass
 test-armhf-armhf-xl-qcow2 15 saverestore-support-check fail in 186614 never 
pass
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stopfail like 186562
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stopfail like 186562
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stopfail like 186562
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stopfail like 186562
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 186562
 test-amd64-amd64-libvirt 15 migrate-support-checkfail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  16 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl  16 saverestore-support-checkfail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check 
fail never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-checkfail   never pass
 test-amd64-amd64-libvirt-qcow2 14 migrate-support-checkfail never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-checkfail   never pass
 test-amd64-amd64-libvirt-raw 14 migrate-support-checkfail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-checkfail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl  15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl  16 saverestore-support-checkfail   never pass
 test-armhf-armhf-libvirt 15 migrate-support-checkfail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-checkfail   never pass
 test-arm64-arm64-libvirt-raw 14 migrate-support-checkfail   never pass
 test-arm64-arm64-libvirt-raw 15 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl-vhd  14 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-vhd  15 saverestore-support-checkfail   never pass
 test-armhf-armhf-libvirt-vhd 14 migrate-support-checkfail   never pass
 test-armhf-armhf-libvirt-vhd 15 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-rtds 15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-rtds 16 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-checkfail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-checkfail  never pass

version targeted for testing:
 linuxe0b668b070348c36e0ab83af12987b6390f9ec26
baseline version:
 linuxde0a9f4486337d0eabacc23bd67ff73146eacdc0

Last test of basis   186562  2024-06-29 00:44:01 Z2 days
Failing since186578  2024-06-29 16:40:32 Z1 days5 attempts
Testing same since   186608  2024-06-30 21:10:06 Z0 days1 attempts


People who touched revisions under test:
  Adrian Hunter 
  Agathe Boutmy 
  Alexander Sverdlin 
  Andi Shyti 
  Anna-Maria Behnsen 
  Armin Wolf 
  Arnd Bergmann 
  Bernhard Rosenkränzer 

Re: [RFC 1/1] swiotlb: Reduce calls to swiotlb_find_pool()

2024-06-30 Thread Petr Tesařík
On Mon, 1 Jul 2024 06:36:15 +0200
"h...@lst.de"  wrote:

> On Sun, Jun 30, 2024 at 02:02:52PM +, Michael Kelley wrote:
> > 1) Rename is_swiotlb_buffer() to swiotlb_find_pool(), since it
> > now returns a pool.  A NULL return value indicates that the
> > paddr is not an swiotlb buffer.
> > 
> > 2) Similarly, rename is_xen_swiotlb_buffer() to
> > xen_swiotlb_find_pool()
> > 
> > 3) The existing swiotlb_find_pool() has the same function signature,
> > but it is used only where the paddr is known to be an swiotlb buffer
> > and hence always succeeds. Rename it to __swiotlb_find_pool() as
> > the "internal" version of swiotlb_find_pool().  
> 
> Sounds good.

Agreed. Most importantly, the "nice" name swiotlb_find_pool() is used
for external users. The difference between swiotlb_find_pool() and
__swiotlb_find_pool() is that the former can be used with any device,
and the latter (internal) only with devices that make some use of
swiotlb. The main reason to keep them separate is that the internal
function should not be inlined if CONFIG_SWIOTLB_DYNAMIC=y.

I hope somebody finds my explanation useful when they touch the code
again in a few years from now. ;-)

> > 4) Do you still want is_swiotlb_buffer() as a trivial wrapper around
> > the new swiotlb_find_pool(), for use solely in dma_direct_need_sync()
> > where only a Boolean is needed and not the pool?  
> 
> If there is really just a single caller left we can skip the wrapper,
> otherwise it might be handy.

AFAICS dma_direct_need_sync() is the only such place.

Petr T



Re: [RFC 1/1] swiotlb: Reduce calls to swiotlb_find_pool()

2024-06-30 Thread h...@lst.de
On Sun, Jun 30, 2024 at 02:02:52PM +, Michael Kelley wrote:
> 1) Rename is_swiotlb_buffer() to swiotlb_find_pool(), since it
> now returns a pool.  A NULL return value indicates that the
> paddr is not an swiotlb buffer.
> 
> 2) Similarly, rename is_xen_swiotlb_buffer() to
> xen_swiotlb_find_pool()
> 
> 3) The existing swiotlb_find_pool() has the same function signature,
> but it is used only where the paddr is known to be an swiotlb buffer
> and hence always succeeds. Rename it to __swiotlb_find_pool() as
> the "internal" version of swiotlb_find_pool().

Sounds good.

> 4) Do you still want is_swiotlb_buffer() as a trivial wrapper around
> the new swiotlb_find_pool(), for use solely in dma_direct_need_sync()
> where only a Boolean is needed and not the pool?

If there is really just a single caller left we can skip the wrapper,
otherwise it might be handy.




[ovmf test] 186612: all pass - PUSHED

2024-06-30 Thread osstest service owner
flight 186612 ovmf real [real]
http://logs.test-lab.xenproject.org/osstest/logs/186612/

Perfect :-)
All tests in this flight passed as required
version targeted for testing:
 ovmf 8c09d862bfb034e00b6b3bc37fe37243c866dd3a
baseline version:
 ovmf 3b2025969e6e8a2f6542996182cd4132868641c6

Last test of basis   186553  2024-06-28 15:11:18 Z2 days
Testing same since   186612  2024-07-01 00:11:24 Z0 days1 attempts


People who touched revisions under test:
  Joey Vagedes 

jobs:
 build-amd64-xsm  pass
 build-i386-xsm   pass
 build-amd64  pass
 build-i386   pass
 build-amd64-libvirt  pass
 build-i386-libvirt   pass
 build-amd64-pvopspass
 build-i386-pvops pass
 test-amd64-amd64-xl-qemuu-ovmf-amd64 pass



sg-report-flight on osstest.test-lab.xenproject.org
logs: /home/logs/logs
images: /home/logs/images

Logs, config files, etc. are available at
http://logs.test-lab.xenproject.org/osstest/logs

Explanation of these reports, and of osstest in general, is at
http://xenbits.xen.org/gitweb/?p=osstest.git;a=blob;f=README.email;hb=master
http://xenbits.xen.org/gitweb/?p=osstest.git;a=blob;f=README;hb=master

Test harness code can be found at
http://xenbits.xen.org/gitweb?p=osstest.git;a=summary


Pushing revision :

To xenbits.xen.org:/home/xen/git/osstest/ovmf.git
   3b2025969e..8c09d862bf  8c09d862bfb034e00b6b3bc37fe37243c866dd3a -> 
xen-tested-master



[linux-linus test] 186600: regressions - FAIL

2024-06-30 Thread osstest service owner
flight 186600 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/186600/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-armhf-armhf-xl-multivcpu  8 xen-bootfail REGR. vs. 186562

Tests which are failing intermittently (not blocking):
 test-armhf-armhf-xl   8 xen-boot fail in 186594 pass in 186600
 test-armhf-armhf-xl-qcow2 8 xen-boot   fail pass in 186594
 test-armhf-armhf-libvirt-vhd  8 xen-boot   fail pass in 186594

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-libvirt   16 saverestore-support-check fail blocked in 186562
 test-armhf-armhf-libvirt  8 xen-bootfail in 186594 like 186562
 test-armhf-armhf-xl-credit2 15 migrate-support-check fail in 186594 never pass
 test-armhf-armhf-xl-credit2 16 saverestore-support-check fail in 186594 never 
pass
 test-armhf-armhf-libvirt-vhd 14 migrate-support-check fail in 186594 never pass
 test-armhf-armhf-libvirt-vhd 15 saverestore-support-check fail in 186594 never 
pass
 test-armhf-armhf-xl-qcow2   14 migrate-support-check fail in 186594 never pass
 test-armhf-armhf-xl-qcow2 15 saverestore-support-check fail in 186594 never 
pass
 test-armhf-armhf-xl-credit2   8 xen-boot fail  like 186562
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stopfail like 186562
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stopfail like 186562
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stopfail like 186562
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stopfail like 186562
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 186562
 test-amd64-amd64-libvirt 15 migrate-support-checkfail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  16 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl  16 saverestore-support-checkfail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check 
fail never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-checkfail   never pass
 test-amd64-amd64-libvirt-qcow2 14 migrate-support-checkfail never pass
 test-amd64-amd64-libvirt-raw 14 migrate-support-checkfail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-checkfail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl  15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl  16 saverestore-support-checkfail   never pass
 test-armhf-armhf-libvirt 15 migrate-support-checkfail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-checkfail   never pass
 test-arm64-arm64-libvirt-raw 14 migrate-support-checkfail   never pass
 test-arm64-arm64-libvirt-raw 15 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl-vhd  14 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-vhd  15 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-raw  14 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-raw  15 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-rtds 15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-rtds 16 saverestore-support-checkfail   never pass

version targeted for testing:
 linux8282d5af7be82100c5460d093e9774140a26b96a
baseline version:
 linuxde0a9f4486337d0eabacc23bd67ff73146eacdc0

Last test of basis   186562  2024-06-29 00:44:01 Z1 days
Failing since186578  2024-06-29 16:40:32 Z1 days4 attempts
Testing same since   186586  2024-06-30 00:11:59 Z0 days3 attempts


People who touched revisions under test:
  Adrian Hunter 
  Agathe Boutmy 
  Andi Shyti 
  Armin Wolf 
  Arnd Bergmann 
  Chandan Babu

[linux-linus test] 186594: regressions - FAIL

2024-06-30 Thread osstest service owner
flight 186594 linux-linus real [real]
http://logs.test-lab.xenproject.org/osstest/logs/186594/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-armhf-armhf-xl-multivcpu  8 xen-bootfail REGR. vs. 186562

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail in 
186586 pass in 186594
 test-armhf-armhf-examine  8 reboot   fail in 186586 pass in 186594
 test-armhf-armhf-xl-rtds  8 xen-boot fail in 186586 pass in 186594
 test-armhf-armhf-xl   8 xen-boot   fail pass in 186586

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-libvirt 16 saverestore-support-check fail in 186586 blocked 
in 186562
 test-armhf-armhf-xl 15 migrate-support-check fail in 186586 never pass
 test-armhf-armhf-xl 16 saverestore-support-check fail in 186586 never pass
 test-armhf-armhf-libvirt15 migrate-support-check fail in 186586 never pass
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stopfail like 186562
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stopfail like 186562
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stopfail like 186562
 test-armhf-armhf-libvirt  8 xen-boot fail  like 186562
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stopfail like 186562
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 186562
 test-amd64-amd64-libvirt 15 migrate-support-checkfail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  16 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl  16 saverestore-support-checkfail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check 
fail never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-checkfail   never pass
 test-amd64-amd64-libvirt-qcow2 14 migrate-support-checkfail never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-checkfail   never pass
 test-amd64-amd64-libvirt-raw 14 migrate-support-checkfail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-checkfail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-checkfail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-checkfail   never pass
 test-arm64-arm64-libvirt-raw 14 migrate-support-checkfail   never pass
 test-arm64-arm64-libvirt-raw 15 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl-vhd  14 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-vhd  15 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-raw  14 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-raw  15 saverestore-support-checkfail   never pass
 test-armhf-armhf-libvirt-vhd 14 migrate-support-checkfail   never pass
 test-armhf-armhf-libvirt-vhd 15 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-rtds 15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-rtds 16 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-qcow214 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-qcow215 saverestore-support-checkfail   never pass

version targeted for testing:
 linux8282d5af7be82100c5460d093e9774140a26b96a
baseline version:
 linuxde0a9f4486337d0eabacc23bd67ff73146eacdc0

Last test of basis   186562  2024-06-29 00:44:01 Z1 days
Failing since186578  2024-06-29 16:40:32 Z0 days3 attempts
Testing same since   186586  2024-06-30 00:11:59 Z0 days2 attempts


People who touched revisions under test:
  Adrian Hunter 
  Agathe Boutmy 
  Andi Shyti 
  Armin Wolf 
  Arnd Bergmann 
 

RE: [RFC 1/1] swiotlb: Reduce calls to swiotlb_find_pool()

2024-06-30 Thread Michael Kelley
From: h...@lst.de  Sent: Saturday, June 29, 2024 10:56 PM
> 
> On Sat, Jun 29, 2024 at 03:55:58PM +, Michael Kelley wrote:
> > Unless there is further discussion on this point, I'll just keep the 
> > original
> > "is_swiotlb_buffer()" in v2.
> 
> That is the wrong name for something that returns the pool as pointed
> out before.

OK. Since any new name could cause confusion with the existing
swiotlb_find_pool(), here's my proposal:

1) Rename is_swiotlb_buffer() to swiotlb_find_pool(), since it
now returns a pool.  A NULL return value indicates that the
paddr is not an swiotlb buffer.

2) Similarly, rename is_xen_swiotlb_buffer() to
xen_swiotlb_find_pool()

3) The existing swiotlb_find_pool() has the same function signature,
but it is used only where the paddr is known to be an swiotlb buffer
and hence always succeeds. Rename it to __swiotlb_find_pool() as
the "internal" version of swiotlb_find_pool().

4) Do you still want is_swiotlb_buffer() as a trivial wrapper around
the new swiotlb_find_pool(), for use solely in dma_direct_need_sync()
where only a Boolean is needed and not the pool?

Thanks,

Michael



Question: xen + vhost user

2024-06-30 Thread Peng Fan
Hi All,

I am trying to enable vhost user input with xen hypervisor on i.MX95, using qemu
vhost-user-input. But meet " Invalid vring_addr message ". My xen domu cfg:

'-chardev', 'socket,path=/tmp/input.sock,id=mouse0',
'-device', 'vhost-user-input-pci,chardev=mouse0',

Anyone knows what missing?

Partial error log:
 Vhost user message 
Request: VHOST_USER_SET_VRING_ADDR (9)
Flags:   0x1
Size:40
vhost_vring_addr:
index:  0
flags:  0
desc_user_addr:   0x889b
used_user_addr:   0x889b04c0
avail_user_addr:  0x889b0400
log_guest_addr:   0x444714c0
Setting virtq addresses:
vring_desc  at (nil)
vring_used  at (nil)
vring_avail at (nil)

** (vhost-user-input:1816): CRITICAL **: 07:20:46.077: Invalid vring_addr 
message

Thanks,
Peng.

The full vhost user debug log:
./vhost-user-input --socket-path=/tmp/input.sock --evdev-path=/d
-path=/dev/input/event1 ./vhost-user-input --socket-path=/tmp/input.sock 
--evdev-
 Vhost user message 
Request: VHOST_USER_GET_FEATURES (1)
Flags:   0x1
Size:0
Sending back to guest u64: 0x00017500
 Vhost user message 
Request: VHOST_USER_GET_PROTOCOL_FEATURES (15)
Flags:   0x1
Size:0
 Vhost user message 
Request: VHOST_USER_SET_PROTOCOL_FEATURES (16)
Flags:   0x1
Size:8
u64: 0x8e2b
 Vhost user message 
Request: VHOST_USER_GET_QUEUE_NUM (17)
Flags:   0x1
Size:0
 Vhost user message 
Request: VHOST_USER_GET_MAX_MEM_SLOTS (36)
Flags:   0x1
Size:0
u64: 0x0020
 Vhost user message 
Request: VHOST_USER_SET_BACKEND_REQ_FD (21)
Flags:   0x9
Size:0
Fds: 6
Got backend_fd: 6
 Vhost user message 
Request: VHOST_USER_SET_OWNER (3)
Flags:   0x1
Size:0
 Vhost user message 
Request: VHOST_USER_GET_FEATURES (1)
Flags:   0x1
Size:0
Sending back to guest u64: 0x00017500
 Vhost user message 
Request: VHOST_USER_SET_VRING_CALL (13)
Flags:   0x1
Size:8
Fds: 7
u64: 0x
Got call_fd: 7 for vq: 0
 Vhost user message 
Request: VHOST_USER_SET_VRING_ERR (14)
Flags:   0x1
Size:8
Fds: 8
u64: 0x
 Vhost user message 
Request: VHOST_USER_SET_VRING_CALL (13)
Flags:   0x1
Size:8
Fds: 9
u64: 0x0001
Got call_fd: 9 for vq: 1
 Vhost user message 
Request: VHOST_USER_SET_VRING_ERR (14)
Flags:   0x1
Size:8
Fds: 10
u64: 0x0001
(XEN) d2v0 Unhandled SMC/HVC: 0x8450
(XEN) d2v0 Unhandled SMC/HVC: 0x8600ff01
(XEN) d2v0: vGICD: RAZ on reserved register offset 0x0c
(XEN) d2v0: vGICD: unhandled word write 0x00 to ICACTIVER4
(XEN) d2v0: vGICR: SGI: unhandled word write 0x00 to ICACTIVER0
 Vhost user message 
Request: VHOST_USER_SET_CONFIG (25)
Flags:   0x9
Size:148
 Vhost user message 
Request: VHOST_USER_SET_CONFIG (25)
Flags:   0x9
Size:148
 Vhost user message 
Request: VHOST_USER_GET_CONFIG (24)
Flags:   0x1
Size:148
 Vhost user message 
Request: VHOST_USER_GET_CONFIG (24)
Flags:   0x1
Size:148
 Vhost user message 
Request: VHOST_USER_GET_CONFIG (24)
Flags:   0x1
Size:148
 Vhost user message 
Request: VHOST_USER_GET_CONFIG (24)
Flags:   0x1
Size:148
 Vhost user message 
Request: VHOST_USER_GET_CONFIG (24)
Flags:   0x1
Size:148
 Vhost user message 
Request: VHOST_USER_GET_CONFIG (24)
Flags:   0x1
Size:148
 Vhost user message 
Request: VHOST_USER_GET_CONFIG (24)
Flags:   0x1
Size:148
 Vhost user message 
Request: VHOST_USER_GET_CONFIG (24)
Flags:   0x1
Size:148
 Vhost user message 
Request: VHOST_USER_GET_CONFIG (24)
Flags:   0x1
Size:148
 Vhost user message 
Request: VHOST_USER_GET_CONFIG (24)
Flags:   0x1
Size:148
 Vhost user message 
Request: VHOST_USER_GET_CONFIG (24)
Flags:   0x1
Size:148
 Vhost user message 
Request: VHOST_USER_GET_CONFIG (24)
Flags:   0x1
Size:148
 Vhost user message 
Request: VHOST_USER_GET_CONFIG (24)
Flags:   0x1
Size:148
 Vhost user message 
Request: VHOST_USER_GET_CONFIG (24)
Flags:   0x1
Size:148
 Vhost user message 
Request: VHOST_USER_GET_CONFIG (24)
Flags: 

[XEN PATCH v11 6/8] tools/libxc: Allow gsi be mapped into a free pirq

2024-06-30 Thread Jiqian Chen
Hypercall PHYSDEVOP_map_pirq support to map a gsi into a specific
pirq or a free pirq, it depends on the parameter pirq(>0 or <0).
But in current xc_physdev_map_pirq, it set *pirq=index when
parameter pirq is <0, it causes to force all cases to be mapped
to a specific pirq. That has some problems, one is caller can't
get a free pirq value, another is that once the pecific pirq was
already mapped to other gsi, then it will fail.

So, change xc_physdev_map_pirq to allow to pass negative parameter
in and then get a free pirq.

Signed-off-by: Jiqian Chen 
Signed-off-by: Huang Rui 
Signed-off-by: Jiqian Chen 
---
 tools/libs/ctrl/xc_physdev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/libs/ctrl/xc_physdev.c b/tools/libs/ctrl/xc_physdev.c
index 460a8e779ce8..e9fcd755fa62 100644
--- a/tools/libs/ctrl/xc_physdev.c
+++ b/tools/libs/ctrl/xc_physdev.c
@@ -50,7 +50,7 @@ int xc_physdev_map_pirq(xc_interface *xch,
 map.domid = domid;
 map.type = MAP_PIRQ_TYPE_GSI;
 map.index = index;
-map.pirq = *pirq < 0 ? index : *pirq;
+map.pirq = *pirq;
 
 rc = do_physdev_op(xch, PHYSDEVOP_map_pirq, &map, sizeof(map));
 
-- 
2.34.1




[RFC XEN PATCH v11 8/8] tools: Add new function to do PIRQ (un)map on PVH dom0

2024-06-30 Thread Jiqian Chen
When dom0 is PVH, and passthrough a device to dumU, xl will
use the gsi number of device to do a pirq mapping, see
pci_add_dm_done->xc_physdev_map_pirq, but the gsi number is
got from file /sys/bus/pci/devices//irq, that confuses
irq and gsi, they are in different space and are not equal,
so it will fail when mapping.
To solve this issue, use xc_physdev_gsi_from_dev to get the
real gsi and then to map pirq.

Besides, PVH dom doesn't have PIRQ flag, it doesn't do
PHYSDEVOP_map_pirq for each gsi. So grant function callstack
pci_add_dm_done->XEN_DOMCTL_irq_permission will fail at function
domain_pirq_to_irq. And old hypercall XEN_DOMCTL_irq_permission
requires passing in pirq, it is not suitable for dom0 that
doesn't have PIRQs to grant irq permission.
To solve this issue, use the new hypercall
XEN_DOMCTL_gsi_permission to grant the permission of irq(
translate from gsi) to dumU when dom0 has no PIRQs.

Signed-off-by: Jiqian Chen 
Signed-off-by: Huang Rui 
Signed-off-by: Chen Jiqian 
---
RFC: it needs to wait for the corresponding third patch on linux kernel side to 
be merged.
https://lore.kernel.org/xen-devel/20240607075109.126277-4-jiqian.c...@amd.com/
This patch must be merged after the patch on linux kernel side
---
 tools/include/xenctrl.h   |   5 ++
 tools/libs/ctrl/xc_domain.c   |  15 +
 tools/libs/light/libxl_arch.h |   4 ++
 tools/libs/light/libxl_arm.c  |  10 +++
 tools/libs/light/libxl_pci.c  |  17 ++
 tools/libs/light/libxl_x86.c  | 111 ++
 6 files changed, 162 insertions(+)

diff --git a/tools/include/xenctrl.h b/tools/include/xenctrl.h
index 3720e22b399a..33810385535e 100644
--- a/tools/include/xenctrl.h
+++ b/tools/include/xenctrl.h
@@ -1382,6 +1382,11 @@ int xc_domain_irq_permission(xc_interface *xch,
  uint32_t pirq,
  bool allow_access);
 
+int xc_domain_gsi_permission(xc_interface *xch,
+ uint32_t domid,
+ uint32_t gsi,
+ bool allow_access);
+
 int xc_domain_iomem_permission(xc_interface *xch,
uint32_t domid,
unsigned long first_mfn,
diff --git a/tools/libs/ctrl/xc_domain.c b/tools/libs/ctrl/xc_domain.c
index f2d9d14b4d9f..8540e84fda93 100644
--- a/tools/libs/ctrl/xc_domain.c
+++ b/tools/libs/ctrl/xc_domain.c
@@ -1394,6 +1394,21 @@ int xc_domain_irq_permission(xc_interface *xch,
 return do_domctl(xch, &domctl);
 }
 
+int xc_domain_gsi_permission(xc_interface *xch,
+ uint32_t domid,
+ uint32_t gsi,
+ bool allow_access)
+{
+struct xen_domctl domctl = {
+.cmd = XEN_DOMCTL_gsi_permission,
+.domain = domid,
+.u.gsi_permission.gsi = gsi,
+.u.gsi_permission.allow_access = allow_access,
+};
+
+return do_domctl(xch, &domctl);
+}
+
 int xc_domain_iomem_permission(xc_interface *xch,
uint32_t domid,
unsigned long first_mfn,
diff --git a/tools/libs/light/libxl_arch.h b/tools/libs/light/libxl_arch.h
index f88f11d6de1d..11b736067951 100644
--- a/tools/libs/light/libxl_arch.h
+++ b/tools/libs/light/libxl_arch.h
@@ -91,6 +91,10 @@ void libxl__arch_update_domain_config(libxl__gc *gc,
   libxl_domain_config *dst,
   const libxl_domain_config *src);
 
+_hidden
+int libxl__arch_hvm_map_gsi(libxl__gc *gc, uint32_t sbdf, uint32_t domid);
+_hidden
+int libxl__arch_hvm_unmap_gsi(libxl__gc *gc, uint32_t sbdf, uint32_t domid);
 #if defined(__i386__) || defined(__x86_64__)
 
 #define LAPIC_BASE_ADDRESS  0xfee0
diff --git a/tools/libs/light/libxl_arm.c b/tools/libs/light/libxl_arm.c
index a4029e3ac810..d869bbec769e 100644
--- a/tools/libs/light/libxl_arm.c
+++ b/tools/libs/light/libxl_arm.c
@@ -1774,6 +1774,16 @@ void libxl__arch_update_domain_config(libxl__gc *gc,
 {
 }
 
+int libxl__arch_hvm_map_gsi(libxl__gc *gc, uint32_t sbdf, uint32_t domid)
+{
+return -1;
+}
+
+int libxl__arch_hvm_unmap_gsi(libxl__gc *gc, uint32_t sbdf, uint32_t domid)
+{
+return -1;
+}
+
 /*
  * Local variables:
  * mode: C
diff --git a/tools/libs/light/libxl_pci.c b/tools/libs/light/libxl_pci.c
index 96cb4da0794e..3d25997921cc 100644
--- a/tools/libs/light/libxl_pci.c
+++ b/tools/libs/light/libxl_pci.c
@@ -17,6 +17,7 @@
 #include "libxl_osdeps.h" /* must come before any other headers */
 
 #include "libxl_internal.h"
+#include "libxl_arch.h"
 
 #define PCI_BDF"%04x:%02x:%02x.%01x"
 #define PCI_BDF_SHORT  "%02x:%02x.%01x"
@@ -1478,6 +1479,16 @@ static void pci_add_dm_done(libxl__egc *egc,
 fclose(f);
 if (!pci_supp_legacy_irq())
 goto out_no_irq;
+
+/*
+ * When dom0 is PVH and mapping a x86 gsi to pirq for domU,
+ * should use gsi to grant irq permission.
+ */
+if (!l

[XEN PATCH v11 0/8] Support device passthrough when dom0 is PVH on Xen

2024-06-30 Thread Jiqian Chen
Hi All,
This is v11 series to support passthrough when dom0 is PVH
v10->v11 changes:
* patch#1: Move the curly braces of "case PHYSDEVOP_pci_device_state_reset" to 
the next line.
   Delete unnecessary local variables "struct physdev_pci_device *dev".
   Downgrade printk to dprintk.
   Moved struct pci_device_state_reset to the public header file.
   Delete enum pci_device_state_reset_type, and use macro definitions 
to represent different
   reset types.
   Delete pci_device_state_reset_method, and add switch cases in 
PHYSDEVOP_pci_device_state_reset
   to handle different reset functions.
   Add reset type as a function parameter for vpci_reset_device_state 
for possible future use
* patch#2: Delete the judgment of "d==currd", so that we can prevent 
physdev_(un)map_pirq from being
   executed when domU has no pirq, instead of just preventing 
self-mapping; and modify the
   description of the commit message accordingly.
* patch#3: Modify the commit message to explain why the gsi of normal devices 
can work in PVH dom0 and why
   the passthrough device does not work in PVH dom0.
* patch#4: New patch, modification of allocate_pirq function, return the 
allocated pirq when there is
   already an allocated pirq and the caller has no specific 
requirements for pirq, and make it
   successful.
* patch#5: Modification on the hypervisor side proposed from patch#5 of v10.
   Add non-zero judgment for other bits of allow_access.
   Delete unnecessary judgment "if ( is_pv_domain(currd) || 
has_pirq(currd) )".
   Change the error exit path identifier "out" to "gsi_permission_out".
   Use ARRAY_SIZE() instead of open coed.
* patch#6: New patch, modification of xc_physdev_map_pirq to support mapping 
gsi to an idle pirq.
* patch#7: Patch#4 of v10, directly open "/dev/xen/privcmd" in the function 
xc_physdev_gsi_from_dev
   instead of adding unnecessary functions to libxencall.
   Change the type of gsi in the structure privcmd_gsi_from_dev from 
int to u32.
* patch#8: Modification of the tools part of patches#4 and #5 of v10, use 
privcmd_gsi_from_dev to get
   gsi, and use XEN_DOMCTL_gsi_permission to grant gsi.
   Change the hard-coded 0 to use LIBXL_TOOLSTACK_DOMID.
   Add libxl__arch_hvm_map_gsi to distinguish x86 related 
implementations.
   Add a list pcidev_pirq_list to record the relationship between sbdf 
and pirq, which can be
   used to obtain the corresponding pirq when unmap PIRQ.


Best regards,
Jiqian Chen



v9->v10 changes:
* patch#2: Indent the comments above PHYSDEVOP_map_pirq according to the code 
style.
* patch#3: Modified the description in the commit message, changing "it calls" 
to "it will need to call",
   indicating that there will be new codes on the kernel side that will 
call PHYSDEVOP_setup_gsi.
   Also added an explanation of why the interrupt of passthrough device 
does not work if gsi is not
   registered.
* patch#4: Added define for CONFIG_X86 in tools/libs/light/Makefile to isolate 
x86 code in libxl_pci.c.
* patch#5: Modified the commit message to further describe the purpose of 
adding XEN_DOMCTL_gsi_permission.
   Deleted pci_device_set_gsi and called XEN_DOMCTL_gsi_permission 
directly in pci_add_dm_done.
   Added a check for all zeros in the padding field in 
XEN_DOMCTL_gsi_permission, and used currd
   instead of current->domain.
   In the function gsi_2_irq, apic_pin_2_gsi_irq was used instead of 
the original new code, and
   error handling for irq0 was added.
   Deleted the extra spaces in the upper and lower lines of the struct 
xen_domctl_gsi_permission
   definition.
All patches have modified signatures as follows:
Signed-off-by: Jiqian Chen  means I am the author.
Signed-off-by: Huang Rui  means Rui sent them to upstream 
firstly.
Signed-off-by: Jiqian Chen  means I take continue to 
upstream.


v8->v9 changes:
* patch#1: Move pcidevs_unlock below write_lock, and remove 
"ASSERT(pcidevs_locked());"
   from vpci_reset_device_state;
   Add pci_device_state_reset_type to distinguish the reset types.
* patch#2: Add a comment above PHYSDEVOP_map_pirq to describe why need this 
hypercall.
   Change "!is_pv_domain(d)" to "is_hvm_domain(d)", and "map.domid == 
DOMID_SELF" to
   "d == current->domian".
* patch#3: Remove the check of PHYSDEVOP_setup_gsi, since there is same checke 
in below.Although their return
   values are different, this difference is acceptable for the sake of 
code consistency
   if ( !is_hardware_domain(currd) )
   return -ENOSYS;
   break;
* patch#5: Change the commit message to describe more why we need this new 
hypercall.
   Add comment above "if ( is_pv_domain(current->domain) || 
has_pirq(current->

[XEN PATCH v11 3/8] x86/pvh: Add PHYSDEVOP_setup_gsi for PVH dom0

2024-06-30 Thread Jiqian Chen
The gsi of a passthrough device must be configured for it to be
able to be mapped into a hvm domU.
But When dom0 is PVH, the gsis don't get registered, it causes
the info of apic, pin and irq not be added into irq_2_pin list,
and the handler of irq_desc is not set, then when passthrough a
device, setting ioapic affinity and vector will fail.

To fix above problem, on Linux kernel side, a new code will
need to call PHYSDEVOP_setup_gsi for passthrough devices to
register gsi when dom0 is PVH.

So, add PHYSDEVOP_setup_gsi into hvm_physdev_op for above
purpose.

Clarify two questions:
First, why the gsi of devices belong to PVH dom0 can work?
Because when probe a driver to a normal device, it calls(on linux
kernel side) pci_device_probe-> request_threaded_irq->
irq_startup-> __unmask_ioapic-> io_apic_write, then trap into xen
side hvmemul_do_io-> hvm_io_intercept-> hvm_process_io_intercept->
vioapic_write_indirect-> vioapic_hwdom_map_gsi-> mp_register_gsi.
So that the gsi can be registered.

Second, why the gsi of passthrough device can't work when dom0
is PVH?
Because when assign a device to passthrough, it uses pciback to
probe the device, and it calls pcistub_probe->pcistub_seize->
pcistub_init_device-> xen_pcibk_reset_device->
xen_pcibk_control_isr->isr_on, but isr_on is not set, so that the
fake IRQ handler is not installed, then the gsi isn't unmasked.
What's more, we can see on Xen side, the function
vioapic_hwdom_map_gsi-> mp_register_gsi will be called only when
the gsi is unmasked, so that the gsi can't work for passthrough
device.

Signed-off-by: Jiqian Chen 
Signed-off-by: Huang Rui 
Signed-off-by: Jiqian Chen 
---
 xen/arch/x86/hvm/hypercall.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/xen/arch/x86/hvm/hypercall.c b/xen/arch/x86/hvm/hypercall.c
index 03ada3c880bd..cfe82d0f96ed 100644
--- a/xen/arch/x86/hvm/hypercall.c
+++ b/xen/arch/x86/hvm/hypercall.c
@@ -86,6 +86,7 @@ long hvm_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
 return -ENOSYS;
 break;
 
+case PHYSDEVOP_setup_gsi:
 case PHYSDEVOP_pci_mmcfg_reserved:
 case PHYSDEVOP_pci_device_add:
 case PHYSDEVOP_pci_device_remove:
-- 
2.34.1




[XEN PATCH v11 2/8] x86/pvh: Allow (un)map_pirq when dom0 is PVH

2024-06-30 Thread Jiqian Chen
If run Xen with PVH dom0 and hvm domU, hvm will map a pirq for
a passthrough device by using gsi, see qemu code
xen_pt_realize->xc_physdev_map_pirq and libxl code
pci_add_dm_done->xc_physdev_map_pirq. Then xc_physdev_map_pirq
will call into Xen, but in hvm_physdev_op, PHYSDEVOP_map_pirq
is not allowed because currd is PVH dom0 and PVH has no
X86_EMU_USE_PIRQ flag, it will fail at has_pirq check.

So, allow PHYSDEVOP_map_pirq when dom0 is PVH and also allow
PHYSDEVOP_unmap_pirq for the removal device path to unmap pirq.
And add a new check to prevent (un)map when the subject domain
has no X86_EMU_USE_PIRQ flag.

So that the interrupt of a passthrough device can be
successfully mapped to pirq for domU with X86_EMU_USE_PIRQ flag
when dom0 is PVH

Signed-off-by: Jiqian Chen 
Signed-off-by: Huang Rui 
Signed-off-by: Jiqian Chen 
Reviewed-by: Stefano Stabellini 
---
 xen/arch/x86/hvm/hypercall.c |  6 ++
 xen/arch/x86/physdev.c   | 14 ++
 2 files changed, 20 insertions(+)

diff --git a/xen/arch/x86/hvm/hypercall.c b/xen/arch/x86/hvm/hypercall.c
index 0fab670a4871..03ada3c880bd 100644
--- a/xen/arch/x86/hvm/hypercall.c
+++ b/xen/arch/x86/hvm/hypercall.c
@@ -71,8 +71,14 @@ long hvm_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) 
arg)
 
 switch ( cmd )
 {
+/*
+* Only being permitted for management of other domains.
+* Further restrictions are enforced in do_physdev_op.
+*/
 case PHYSDEVOP_map_pirq:
 case PHYSDEVOP_unmap_pirq:
+break;
+
 case PHYSDEVOP_eoi:
 case PHYSDEVOP_irq_status_query:
 case PHYSDEVOP_get_free_pirq:
diff --git a/xen/arch/x86/physdev.c b/xen/arch/x86/physdev.c
index d6dd622952a9..a165f68225c1 100644
--- a/xen/arch/x86/physdev.c
+++ b/xen/arch/x86/physdev.c
@@ -323,6 +323,13 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) 
arg)
 if ( !d )
 break;
 
+/* Prevent mapping when the subject domain has no X86_EMU_USE_PIRQ */
+if ( is_hvm_domain(d) && !has_pirq(d) )
+{
+rcu_unlock_domain(d);
+return -EOPNOTSUPP;
+}
+
 ret = physdev_map_pirq(d, map.type, &map.index, &map.pirq, &msi);
 
 rcu_unlock_domain(d);
@@ -346,6 +353,13 @@ ret_t do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) 
arg)
 if ( !d )
 break;
 
+/* Prevent unmapping when the subject domain has no X86_EMU_USE_PIRQ */
+if ( is_hvm_domain(d) && !has_pirq(d) )
+{
+rcu_unlock_domain(d);
+return -EOPNOTSUPP;
+}
+
 ret = physdev_unmap_pirq(d, unmap.pirq);
 
 rcu_unlock_domain(d);
-- 
2.34.1




[RFC XEN PATCH v11 7/8] tools: Add new function to get gsi from dev

2024-06-30 Thread Jiqian Chen
When passthrough a device to domU, QEMU and xl tools use its gsi
number to do pirq mapping, see QEMU code
xen_pt_realize->xc_physdev_map_pirq, and xl code
pci_add_dm_done->xc_physdev_map_pirq, but the gsi number is got
from file /sys/bus/pci/devices//irq, that is wrong, because
irq is not equal with gsi, they are in different spaces, so pirq
mapping fails.

And in current codes, there is no method to get gsi for userspace.
For above purpose, add new function to get gsi, and the
corresponding ioctl is implemented on linux kernel side.

Signed-off-by: Jiqian Chen 
Signed-off-by: Huang Rui 
Signed-off-by: Chen Jiqian 
---
RFC: it needs to wait for the corresponding third patch on linux kernel side to 
be merged.
https://lore.kernel.org/xen-devel/20240607075109.126277-4-jiqian.c...@amd.com/
This patch must be merged after the patch on linux kernel side
---
 tools/include/xen-sys/Linux/privcmd.h |  7 ++
 tools/include/xenctrl.h   |  2 ++
 tools/libs/ctrl/xc_physdev.c  | 35 +++
 3 files changed, 44 insertions(+)

diff --git a/tools/include/xen-sys/Linux/privcmd.h 
b/tools/include/xen-sys/Linux/privcmd.h
index bc60e8fd55eb..4cf719102116 100644
--- a/tools/include/xen-sys/Linux/privcmd.h
+++ b/tools/include/xen-sys/Linux/privcmd.h
@@ -95,6 +95,11 @@ typedef struct privcmd_mmap_resource {
__u64 addr;
 } privcmd_mmap_resource_t;
 
+typedef struct privcmd_gsi_from_pcidev {
+   __u32 sbdf;
+   __u32 gsi;
+} privcmd_gsi_from_pcidev_t;
+
 /*
  * @cmd: IOCTL_PRIVCMD_HYPERCALL
  * @arg: &privcmd_hypercall_t
@@ -114,6 +119,8 @@ typedef struct privcmd_mmap_resource {
_IOC(_IOC_NONE, 'P', 6, sizeof(domid_t))
 #define IOCTL_PRIVCMD_MMAP_RESOURCE\
_IOC(_IOC_NONE, 'P', 7, sizeof(privcmd_mmap_resource_t))
+#define IOCTL_PRIVCMD_GSI_FROM_PCIDEV  \
+   _IOC(_IOC_NONE, 'P', 10, sizeof(privcmd_gsi_from_pcidev_t))
 #define IOCTL_PRIVCMD_UNIMPLEMENTED\
_IOC(_IOC_NONE, 'P', 0xFF, 0)
 
diff --git a/tools/include/xenctrl.h b/tools/include/xenctrl.h
index 9ceca0cffc2f..3720e22b399a 100644
--- a/tools/include/xenctrl.h
+++ b/tools/include/xenctrl.h
@@ -1641,6 +1641,8 @@ int xc_physdev_unmap_pirq(xc_interface *xch,
   uint32_t domid,
   int pirq);
 
+int xc_physdev_gsi_from_pcidev(xc_interface *xch, uint32_t sbdf);
+
 /*
  *  LOGGING AND ERROR REPORTING
  */
diff --git a/tools/libs/ctrl/xc_physdev.c b/tools/libs/ctrl/xc_physdev.c
index e9fcd755fa62..54edb0f3c0dc 100644
--- a/tools/libs/ctrl/xc_physdev.c
+++ b/tools/libs/ctrl/xc_physdev.c
@@ -111,3 +111,38 @@ int xc_physdev_unmap_pirq(xc_interface *xch,
 return rc;
 }
 
+int xc_physdev_gsi_from_pcidev(xc_interface *xch, uint32_t sbdf)
+{
+int rc = -1;
+
+#if defined(__linux__)
+int fd;
+privcmd_gsi_from_pcidev_t dev_gsi = {
+.sbdf = sbdf,
+.gsi = 0,
+};
+
+fd = open("/dev/xen/privcmd", O_RDWR);
+
+if (fd < 0 && (errno == ENOENT || errno == ENXIO || errno == ENODEV)) {
+/* Fallback to /proc/xen/privcmd */
+fd = open("/proc/xen/privcmd", O_RDWR);
+}
+
+if (fd < 0) {
+PERROR("Could not obtain handle on privileged command interface");
+return rc;
+}
+
+rc = ioctl(fd, IOCTL_PRIVCMD_GSI_FROM_PCIDEV, &dev_gsi);
+close(fd);
+
+if (rc) {
+PERROR("Failed to get gsi from dev");
+} else {
+rc = dev_gsi.gsi;
+}
+#endif
+
+return rc;
+}
-- 
2.34.1




[XEN PATCH v11 5/8] x86/domctl: Add XEN_DOMCTL_gsi_permission to grant gsi

2024-06-30 Thread Jiqian Chen
Some type of domain don't have PIRQs, like PVH, it doesn't do
PHYSDEVOP_map_pirq for each gsi. When passthrough a device
to guest base on PVH dom0, callstack
pci_add_dm_done->XEN_DOMCTL_irq_permission will fail at function
domain_pirq_to_irq, because PVH has no mapping of gsi, pirq and
irq on Xen side.
What's more, current hypercall XEN_DOMCTL_irq_permission requires
passing in pirq, it is not suitable for dom0 that doesn't have
PIRQs.

So, add a new hypercall XEN_DOMCTL_gsi_permission to grant the
permission of irq(translate from gsi) to dumU when dom0 has no
PIRQs.

Signed-off-by: Jiqian Chen 
Signed-off-by: Huang Rui 
Signed-off-by: Jiqian Chen 
---
 xen/arch/x86/domctl.c  | 33 ++
 xen/arch/x86/include/asm/io_apic.h |  2 ++
 xen/arch/x86/io_apic.c | 17 +++
 xen/arch/x86/mpparse.c |  3 +--
 xen/include/public/domctl.h|  8 
 xen/xsm/flask/hooks.c  |  1 +
 6 files changed, 62 insertions(+), 2 deletions(-)

diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
index 9190e11faaa3..5f20febabbf2 100644
--- a/xen/arch/x86/domctl.c
+++ b/xen/arch/x86/domctl.c
@@ -36,6 +36,7 @@
 #include 
 #include 
 #include 
+#include 
 
 static int update_domain_cpu_policy(struct domain *d,
 xen_domctl_cpu_policy_t *xdpc)
@@ -237,6 +238,38 @@ long arch_do_domctl(
 break;
 }
 
+case XEN_DOMCTL_gsi_permission:
+{
+int irq;
+uint8_t mask = 1;
+unsigned int gsi = domctl->u.gsi_permission.gsi;
+bool allow = domctl->u.gsi_permission.allow_access;
+
+/* Check all bits and pads are zero except lowest bit */
+ret = -EINVAL;
+if ( domctl->u.gsi_permission.allow_access & ( !mask ) )
+goto gsi_permission_out;
+for ( i = 0; i < ARRAY_SIZE(domctl->u.gsi_permission.pad); ++i )
+if ( domctl->u.gsi_permission.pad[i] )
+goto gsi_permission_out;
+
+if ( gsi >= nr_irqs_gsi || ( irq = gsi_2_irq(gsi) ) < 0 )
+goto gsi_permission_out;
+
+ret = -EPERM;
+if ( !irq_access_permitted(currd, irq) ||
+ xsm_irq_permission(XSM_HOOK, d, irq, allow) )
+goto gsi_permission_out;
+
+if ( allow )
+ret = irq_permit_access(d, irq);
+else
+ret = irq_deny_access(d, irq);
+
+gsi_permission_out:
+break;
+}
+
 case XEN_DOMCTL_getpageframeinfo3:
 {
 unsigned int num = domctl->u.getpageframeinfo3.num;
diff --git a/xen/arch/x86/include/asm/io_apic.h 
b/xen/arch/x86/include/asm/io_apic.h
index 78268ea8f666..7e86d8337758 100644
--- a/xen/arch/x86/include/asm/io_apic.h
+++ b/xen/arch/x86/include/asm/io_apic.h
@@ -213,5 +213,7 @@ unsigned highest_gsi(void);
 
 int ioapic_guest_read( unsigned long physbase, unsigned int reg, u32 *pval);
 int ioapic_guest_write(unsigned long physbase, unsigned int reg, u32 val);
+int mp_find_ioapic(int gsi);
+int gsi_2_irq(int gsi);
 
 #endif
diff --git a/xen/arch/x86/io_apic.c b/xen/arch/x86/io_apic.c
index d73108558e09..d54283955a60 100644
--- a/xen/arch/x86/io_apic.c
+++ b/xen/arch/x86/io_apic.c
@@ -955,6 +955,23 @@ static int pin_2_irq(int idx, int apic, int pin)
 return irq;
 }
 
+int gsi_2_irq(int gsi)
+{
+int ioapic, pin, irq;
+
+ioapic = mp_find_ioapic(gsi);
+if ( ioapic < 0 )
+return -EINVAL;
+
+pin = gsi - io_apic_gsi_base(ioapic);
+
+irq = apic_pin_2_gsi_irq(ioapic, pin);
+if ( irq <= 0 )
+return -EINVAL;
+
+return irq;
+}
+
 static inline int IO_APIC_irq_trigger(int irq)
 {
 int apic, idx, pin;
diff --git a/xen/arch/x86/mpparse.c b/xen/arch/x86/mpparse.c
index d8ccab2449c6..c95da0de5770 100644
--- a/xen/arch/x86/mpparse.c
+++ b/xen/arch/x86/mpparse.c
@@ -841,8 +841,7 @@ static struct mp_ioapic_routing {
 } mp_ioapic_routing[MAX_IO_APICS];
 
 
-static int mp_find_ioapic (
-   int gsi)
+int mp_find_ioapic(int gsi)
 {
unsigned inti;
 
diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h
index 2a49fe46ce25..f7ae8b19d27d 100644
--- a/xen/include/public/domctl.h
+++ b/xen/include/public/domctl.h
@@ -464,6 +464,12 @@ struct xen_domctl_irq_permission {
 uint8_t pad[3];
 };
 
+/* XEN_DOMCTL_gsi_permission */
+struct xen_domctl_gsi_permission {
+uint32_t gsi;
+uint8_t allow_access;/* flag to specify enable/disable of x86 gsi 
access */
+uint8_t pad[3];
+};
 
 /* XEN_DOMCTL_iomem_permission */
 struct xen_domctl_iomem_permission {
@@ -1306,6 +1312,7 @@ struct xen_domctl {
 #define XEN_DOMCTL_get_paging_mempool_size   85
 #define XEN_DOMCTL_set_paging_mempool_size   86
 #define XEN_DOMCTL_dt_overlay87
+#define XEN_DOMCTL_gsi_permission88
 #define XEN_DOMCTL_gdbsx_guestmemio1000
 #define XEN_DOMCTL_gdbsx_pausevcpu 1001
 #define XEN_DOMCTL_gdbsx_unpausevcpu

[XEN PATCH v11 4/8] x86/physdev: Return pirq that irq was already mapped to

2024-06-30 Thread Jiqian Chen
allocate_pirq is to allocate a pirq for a irq, and it supports to
allocate a free pirq(pirq parameter is <0) or a specific pirq (pirq
parameter is > 0).

For current code, it has four usecases.

First, pirq>0 and current_pirq>0, (current_pirq means if irq already
has a mapped pirq), if pirq==current_pirq means the irq already has
mapped to the pirq expected by the caller, it successes, if
pirq!=current_pirq means the pirq expected by the caller has been
mapped into other irq, it fails.

Second, pirq>0 and current_pirq<0, it means pirq expected by the
caller has not been allocated to any irqs, so it can be allocated to
caller, it successes.

Third, pirq<0 and current_pirq<0, it means caller want to allocate a
free pirq for irq and irq has no mapped pirq, it successes.

Fourth, pirq<0 and current_pirq>0, it means caller want to allocate
a free pirq for irq but irq has a mapped pirq, then it returns the
negative pirq, so it fails.

The problem is in Fourth, since the irq has a mapped pirq(current_pirq),
and the caller doesn't want to allocate a specified pirq to the irq, so
the current_pirq should be returned directly in this case, indicating
that the allocation is successful. That can help caller to success when
caller just want to allocate a free pirq but doesn't know if the irq
already has a mapped pirq or not.

Signed-off-by: Jiqian Chen 
Signed-off-by: Huang Rui 
Signed-off-by: Jiqian Chen 
---
 xen/arch/x86/irq.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c
index 9a611c79e024..5ccca1646eb1 100644
--- a/xen/arch/x86/irq.c
+++ b/xen/arch/x86/irq.c
@@ -2897,6 +2897,8 @@ static int allocate_pirq(struct domain *d, int index, int 
pirq, int irq,
 d->domain_id, index, pirq, current_pirq);
 if ( current_pirq < 0 )
 return -EBUSY;
+else
+return current_pirq;
 }
 else if ( type == MAP_PIRQ_TYPE_MULTI_MSI )
 {
-- 
2.34.1




[XEN PATCH v11 1/8] xen/vpci: Clear all vpci status of device

2024-06-30 Thread Jiqian Chen
When a device has been reset on dom0 side, the vpci on Xen
side won't get notification, so the cached state in vpci is
all out of date compare with the real device state.
To solve that problem, add a new hypercall to clear all vpci
device state. When the state of device is reset on dom0 side,
dom0 can call this hypercall to notify vpci.

Signed-off-by: Jiqian Chen 
Signed-off-by: Huang Rui 
Signed-off-by: Jiqian Chen 
Reviewed-by: Stewart Hildebrand 
Reviewed-by: Stefano Stabellini 
---
 xen/arch/x86/hvm/hypercall.c |  1 +
 xen/drivers/pci/physdev.c| 58 
 xen/drivers/vpci/vpci.c  | 10 +++
 xen/include/public/physdev.h | 20 +
 xen/include/xen/vpci.h   |  8 +
 5 files changed, 97 insertions(+)

diff --git a/xen/arch/x86/hvm/hypercall.c b/xen/arch/x86/hvm/hypercall.c
index 7fb3136f0c7c..0fab670a4871 100644
--- a/xen/arch/x86/hvm/hypercall.c
+++ b/xen/arch/x86/hvm/hypercall.c
@@ -83,6 +83,7 @@ long hvm_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg)
 case PHYSDEVOP_pci_mmcfg_reserved:
 case PHYSDEVOP_pci_device_add:
 case PHYSDEVOP_pci_device_remove:
+case PHYSDEVOP_pci_device_state_reset:
 case PHYSDEVOP_dbgp_op:
 if ( !is_hardware_domain(currd) )
 return -ENOSYS;
diff --git a/xen/drivers/pci/physdev.c b/xen/drivers/pci/physdev.c
index 42db3e6d133c..19a755d1c127 100644
--- a/xen/drivers/pci/physdev.c
+++ b/xen/drivers/pci/physdev.c
@@ -2,6 +2,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #ifndef COMPAT
 typedef long ret_t;
@@ -67,6 +68,63 @@ ret_t pci_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) 
arg)
 break;
 }
 
+case PHYSDEVOP_pci_device_state_reset:
+{
+struct pci_device_state_reset dev_reset;
+struct pci_dev *pdev;
+pci_sbdf_t sbdf;
+
+ret = -EOPNOTSUPP;
+if ( !is_pci_passthrough_enabled() )
+break;
+
+ret = -EFAULT;
+if ( copy_from_guest(&dev_reset, arg, 1) != 0 )
+break;
+
+sbdf = PCI_SBDF(dev_reset.dev.seg,
+dev_reset.dev.bus,
+dev_reset.dev.devfn);
+
+ret = xsm_resource_setup_pci(XSM_PRIV, sbdf.sbdf);
+if ( ret )
+break;
+
+pcidevs_lock();
+pdev = pci_get_pdev(NULL, sbdf);
+if ( !pdev )
+{
+pcidevs_unlock();
+ret = -ENODEV;
+break;
+}
+
+write_lock(&pdev->domain->pci_lock);
+pcidevs_unlock();
+/* Implement FLR, other reset types may be implemented in future */
+switch ( dev_reset.reset_type )
+{
+case PCI_DEVICE_STATE_RESET_COLD:
+case PCI_DEVICE_STATE_RESET_WARM:
+case PCI_DEVICE_STATE_RESET_HOT:
+case PCI_DEVICE_STATE_RESET_FLR:
+{
+ret = vpci_reset_device_state(pdev, dev_reset.reset_type);
+if ( ret )
+dprintk(XENLOG_ERR,
+"%pp: failed to reset vPCI device state\n", &sbdf);
+break;
+}
+
+default:
+ret = -EOPNOTSUPP;
+break;
+}
+write_unlock(&pdev->domain->pci_lock);
+
+break;
+}
+
 default:
 ret = -ENOSYS;
 break;
diff --git a/xen/drivers/vpci/vpci.c b/xen/drivers/vpci/vpci.c
index 1e6aa5d799b9..7e914d1eff9f 100644
--- a/xen/drivers/vpci/vpci.c
+++ b/xen/drivers/vpci/vpci.c
@@ -172,6 +172,16 @@ int vpci_assign_device(struct pci_dev *pdev)
 
 return rc;
 }
+
+int vpci_reset_device_state(struct pci_dev *pdev,
+uint32_t reset_type)
+{
+ASSERT(rw_is_write_locked(&pdev->domain->pci_lock));
+
+vpci_deassign_device(pdev);
+return vpci_assign_device(pdev);
+}
+
 #endif /* __XEN__ */
 
 static int vpci_register_cmp(const struct vpci_register *r1,
diff --git a/xen/include/public/physdev.h b/xen/include/public/physdev.h
index f0c0d4727c0b..ddbcdfb05248 100644
--- a/xen/include/public/physdev.h
+++ b/xen/include/public/physdev.h
@@ -296,6 +296,13 @@ DEFINE_XEN_GUEST_HANDLE(physdev_pci_device_add_t);
  */
 #define PHYSDEVOP_prepare_msix  30
 #define PHYSDEVOP_release_msix  31
+/*
+ * Notify the hypervisor that a PCI device has been reset, so that any
+ * internally cached state is regenerated.  Should be called after any
+ * device reset performed by the hardware domain.
+ */
+#define PHYSDEVOP_pci_device_state_reset 32
+
 struct physdev_pci_device {
 /* IN */
 uint16_t seg;
@@ -305,6 +312,19 @@ struct physdev_pci_device {
 typedef struct physdev_pci_device physdev_pci_device_t;
 DEFINE_XEN_GUEST_HANDLE(physdev_pci_device_t);
 
+struct pci_device_state_reset {
+physdev_pci_device_t dev;
+#define _PCI_DEVICE_STATE_RESET_COLD 0
+#define PCI_DEVICE_STATE_RESET_COLD  (1U<<_PCI_DEVICE_STATE_RESET_COLD)
+#define _PCI_DEVICE_STATE_RESET_WARM 1
+#define PCI_DEVICE_STATE_RESET_WARM  (1U<<_PCI_DEVICE_STATE_RESET_WARM)
+#define _PCI_D

[xen-unstable test] 186588: tolerable FAIL

2024-06-30 Thread osstest service owner
flight 186588 xen-unstable real [real]
http://logs.test-lab.xenproject.org/osstest/logs/186588/

Failures :-/ but no regressions.

Tests which did not succeed, but are not blocking:
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stopfail like 186568
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stopfail like 186568
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stopfail like 186568
 test-armhf-armhf-libvirt 16 saverestore-support-checkfail  like 186568
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stopfail like 186568
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 186568
 test-amd64-amd64-libvirt-xsm 15 migrate-support-checkfail   never pass
 test-amd64-amd64-libvirt 15 migrate-support-checkfail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check 
fail never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-checkfail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl  16 saverestore-support-checkfail   never pass
 test-amd64-amd64-libvirt-qcow2 14 migrate-support-checkfail never pass
 test-amd64-amd64-libvirt-raw 14 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  16 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-multivcpu 15 migrate-support-checkfail  never pass
 test-armhf-armhf-xl-multivcpu 16 saverestore-support-checkfail  never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-checkfail   never pass
 test-arm64-arm64-libvirt-raw 14 migrate-support-checkfail   never pass
 test-arm64-arm64-libvirt-raw 15 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl-vhd  14 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-vhd  15 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-checkfail   never pass
 test-armhf-armhf-libvirt 15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl  15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl  16 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-rtds 15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-rtds 16 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-qcow214 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-qcow215 saverestore-support-checkfail   never pass
 test-armhf-armhf-libvirt-vhd 14 migrate-support-checkfail   never pass
 test-armhf-armhf-libvirt-vhd 15 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-raw  14 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-raw  15 saverestore-support-checkfail   never pass

version targeted for testing:
 xen  08f9b1dd9c9435d4cca006e43917245710b39be3
baseline version:
 xen  08f9b1dd9c9435d4cca006e43917245710b39be3

Last test of basis   186588  2024-06-30 01:52:09 Z0 days
Testing same since  (not found) 0 attempts

jobs:
 build-amd64-xsm  pass
 build-arm64-xsm  pass
 build-i386-xsm   pass
 build-amd64-xtf  pass
 build-amd64  pass
 build-arm64  pass
 build-armhf  pass
 build-i386   pass
 build-amd64-libvirt  pass
 build-arm64-libvirt  pass
 build-armhf-l

[linux-linus test] 186586: regressions - FAIL

2024-06-30 Thread osstest service owner
flight 186586 linux-linus real [real]
flight 186592 linux-linus real-retest [real]
http://logs.test-lab.xenproject.org/osstest/logs/186586/
http://logs.test-lab.xenproject.org/osstest/logs/186592/

Regressions :-(

Tests which did not succeed and are blocking,
including tests which could not be run:
 test-armhf-armhf-xl-multivcpu  8 xen-bootfail REGR. vs. 186562

Tests which are failing intermittently (not blocking):
 test-amd64-amd64-xl-qemut-debianhvm-i386-xsm 12 debian-hvm-install fail pass 
in 186592-retest
 test-armhf-armhf-examine  8 reboot  fail pass in 186592-retest

Regressions which are regarded as allowable (not blocking):
 test-armhf-armhf-xl-rtds  8 xen-boot fail REGR. vs. 186562

Tests which did not succeed, but are not blocking:
 test-armhf-armhf-libvirt   16 saverestore-support-check fail blocked in 186562
 test-amd64-amd64-xl-qemut-win7-amd64 19 guest-stopfail like 186562
 test-amd64-amd64-xl-qemuu-win7-amd64 19 guest-stopfail like 186562
 test-amd64-amd64-xl-qemuu-ws16-amd64 19 guest-stopfail like 186562
 test-amd64-amd64-xl-qemut-ws16-amd64 19 guest-stopfail like 186562
 test-amd64-amd64-qemuu-nested-amd 20 debian-hvm-install/l1/l2 fail like 186562
 test-amd64-amd64-libvirt 15 migrate-support-checkfail   never pass
 test-amd64-amd64-libvirt-xsm 15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-xsm  16 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl-thunderx 15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-thunderx 16 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl  16 saverestore-support-checkfail   never pass
 test-amd64-amd64-libvirt-qemuu-debianhvm-amd64-xsm 13 migrate-support-check 
fail never pass
 test-arm64-arm64-xl-credit1  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-credit1  16 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl-credit2  15 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-credit2  16 saverestore-support-checkfail   never pass
 test-amd64-amd64-libvirt-qcow2 14 migrate-support-checkfail never pass
 test-armhf-armhf-xl-credit2  15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-credit2  16 saverestore-support-checkfail   never pass
 test-amd64-amd64-libvirt-raw 14 migrate-support-checkfail   never pass
 test-arm64-arm64-libvirt-xsm 15 migrate-support-checkfail   never pass
 test-arm64-arm64-libvirt-xsm 16 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-arndale  15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-arndale  16 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl  15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl  16 saverestore-support-checkfail   never pass
 test-armhf-armhf-libvirt 15 migrate-support-checkfail   never pass
 test-amd64-amd64-libvirt-vhd 14 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-credit1  15 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-credit1  16 saverestore-support-checkfail   never pass
 test-arm64-arm64-libvirt-raw 14 migrate-support-checkfail   never pass
 test-arm64-arm64-libvirt-raw 15 saverestore-support-checkfail   never pass
 test-arm64-arm64-xl-vhd  14 migrate-support-checkfail   never pass
 test-arm64-arm64-xl-vhd  15 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-raw  14 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-raw  15 saverestore-support-checkfail   never pass
 test-armhf-armhf-libvirt-vhd 14 migrate-support-checkfail   never pass
 test-armhf-armhf-libvirt-vhd 15 saverestore-support-checkfail   never pass
 test-armhf-armhf-xl-qcow214 migrate-support-checkfail   never pass
 test-armhf-armhf-xl-qcow215 saverestore-support-checkfail   never pass

version targeted for testing:
 linux8282d5af7be82100c5460d093e9774140a26b96a
baseline version:
 linuxde0a9f4486337d0eabacc23bd67ff73146eacdc0

Last test of basis   186562  2024-06-29 00:44:01 Z1 days
Failing since186578  2024-06-29 16:40:32 Z0 days2 attempts
Testing same since   186586  2024-06-30 00:11:59 Z0 days1 attempts


People who touched revisions under test:
  Adrian Hunter 
  Agathe Boutmy 
  Andi Shyti 
  Armin Wolf 
  Arnd Bergmann 
  Chandan Babu R 
  Chen Ni 
  Christoph Hellwig 
  Chuck Lever 
  Darrick J. Wong 
  Hans de Goede 
  Hans Hu 
  Ilpo Järvinen 
  Jeff Johnson 
  Kamal Dasu 
  Linus Tor